10 type handshake struct {
11 Protocol [4]byte // Must be 0x54525450 TRTP
13 Version [2]byte // Always 1
17 var trtp = [4]byte{0x54, 0x52, 0x54, 0x50}
20 // After establishing TCP connection, both client and server start the handshake process
21 // in order to confirm that each of them comply with requirements of the other.
22 // The information provided in this initial data exchange identifies protocols,
23 // and their versions, used in the communication. In the case where, after inspection,
24 // the capabilities of one of the subjects do not comply with the requirements of the other,
25 // the connection is dropped.
27 // The following information is sent to the server:
28 // Description Size Data Note
29 // Protocol ID 4 TRTP 0x54525450
30 // Sub-protocol ID 4 HOTL User defined
31 // VERSION 2 1 Currently 1
32 // Sub-version 2 2 User defined
34 // The server replies with the following:
35 // Description Size Data Note
37 // Error code 4 Error code returned by the server (0 = no error)
38 func Handshake(rw io.ReadWriter) error {
39 handshakeBuf := make([]byte, 12)
40 if _, err := io.ReadFull(rw, handshakeBuf); err != nil {
45 r := bytes.NewReader(handshakeBuf)
46 if err := binary.Read(r, binary.BigEndian, &h); err != nil {
50 if h.Protocol != trtp {
51 return errors.New("invalid handshake")
54 _, err := rw.Write([]byte{84, 82, 84, 80, 0, 0, 0, 0})