+ _ = binary.Read(bytes.NewBuffer(p), binary.BigEndian, h)
+
+ return len(p), nil
+}
+
+// Valid checks if the handshake contains valid protocol and sub-protocol IDs.
+func (h *handshake) Valid() bool {
+ return h.Protocol == trtp && h.SubProtocol == hotl
+}
+
+var (
+ // trtp represents the Protocol Type "TRTP" in hex
+ trtp = [4]byte{0x54, 0x52, 0x54, 0x50}
+
+ // hotl represents the Sub-protocol Type "HOTL" in hex
+ hotl = [4]byte{0x48, 0x4F, 0x54, 0x4C}
+
+ // handshakeResponse represents the server's response after a successful handshake
+ // Response with "TRTP" and no error code
+ handshakeResponse = [8]byte{0x54, 0x52, 0x54, 0x50, 0x00, 0x00, 0x00, 0x00}
+)
+
+const handshakeSize = 12
+
+// performHandshake performs the handshake process.
+func performHandshake(rw io.ReadWriter) error {