]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/handshake.go
Handler tracker list errors
[rbdr/mobius] / hotline / handshake.go
index 66bf643dfbb921104a7e83afa1d13dff77ab2c9e..9ccdc624001975de75aca11971d36c660cfde830 100644 (file)
@@ -4,7 +4,7 @@ import (
        "bytes"
        "encoding/binary"
        "errors"
-       "net"
+       "io"
 )
 
 type handshake struct {
@@ -14,6 +14,8 @@ type handshake struct {
        SubVersion  [2]byte
 }
 
+var trtp = [4]byte{0x54, 0x52, 0x54, 0x50}
+
 // Handshake
 // After establishing TCP connection, both client and server start the handshake process
 // in order to confirm that each of them comply with requirements of the other.
@@ -33,17 +35,22 @@ type handshake struct {
 // Description         Size    Data    Note
 // Protocol ID         4               TRTP
 // Error code          4                               Error code returned by the server (0 = no error)
-func Handshake(conn net.Conn, buf []byte) error {
+func Handshake(rw io.ReadWriter) error {
+       handshakeBuf := make([]byte, 12)
+       if _, err := io.ReadFull(rw, handshakeBuf); err != nil {
+               return err
+       }
+
        var h handshake
-       r := bytes.NewReader(buf)
+       r := bytes.NewReader(handshakeBuf)
        if err := binary.Read(r, binary.BigEndian, &h); err != nil {
                return err
        }
 
-       if h.Protocol != [4]byte{0x54, 0x52, 0x54, 0x50} {
+       if h.Protocol != trtp {
                return errors.New("invalid handshake")
        }
 
-       _, err := conn.Write([]byte{84, 82, 84, 80, 0, 0, 0, 0})
+       _, err := rw.Write([]byte{84, 82, 84, 80, 0, 0, 0, 0})
        return err
 }