diff --git a/client/lib/packetIDConnClient.go b/client/lib/packetIDConnClient.go deleted file mode 100644 index 15b6c51..0000000 --- a/client/lib/packetIDConnClient.go +++ /dev/null @@ -1,109 +0,0 @@ -package snowflake_client - -import ( - "io" - "log" - "net" - "time" - - "gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/turbotunnel" -) - -const ( - packetClientIDConn_StateNew = iota - packetClientIDConn_StateConnectionIDAcknowledged -) - -type ClientID = turbotunnel.ClientID - -func newPacketClientIDConn(ClientID ClientID, transport io.ReadWriter) *packetClientIDConn { - return &packetClientIDConn{ - state: packetClientIDConn_StateNew, - ConnID: ClientID, - transport: transport, - } -} - -type packetClientIDConn struct { - state int - ConnID ClientID - transport io.ReadWriter -} - -func (c *packetClientIDConn) Write(p []byte) (int, error) { - switch c.state { - case packetClientIDConn_StateConnectionIDAcknowledged: - packet := make([]byte, len(p)+1) - packet[0] = 0xff - copy(packet[1:], p) - _, err := c.transport.Write(packet) - if err != nil { - return 0, err - } - return len(p), nil - case packetClientIDConn_StateNew: - packet := make([]byte, len(p)+1+len(c.ConnID)) - packet[0] = 0xfe - copy(packet[1:], c.ConnID[:]) - copy(packet[1+len(c.ConnID):], p) - _, err := c.transport.Write(packet) - if err != nil { - return 0, err - } - return len(p), nil - default: - panic("invalid state") - } -} - -func (c *packetClientIDConn) Read(p []byte) (int, error) { - n, err := c.transport.Read(p) - if err != nil { - return 0, err - } - if p[0] == 0xff { - c.state = packetClientIDConn_StateConnectionIDAcknowledged - return copy(p, p[1:n]), nil - } else { - log.Println("discarded unknown packet") - } - return 0, nil -} - -type packetConnWrapper struct { - io.ReadWriter - remoteAddr net.Addr - localAddr net.Addr -} - -func (pcw *packetConnWrapper) ReadFrom(p []byte) (n int, addr net.Addr, err error) { - n, err = pcw.Read(p) - if err != nil { - return 0, nil, err - } - return n, pcw.remoteAddr, nil -} - -func (pcw *packetConnWrapper) WriteTo(p []byte, addr net.Addr) (n int, err error) { - return pcw.Write(p) -} - -func (pcw *packetConnWrapper) Close() error { - return nil -} - -func (pcw *packetConnWrapper) LocalAddr() net.Addr { - return pcw.localAddr -} - -func (pcw *packetConnWrapper) SetDeadline(t time.Time) error { - return nil -} - -func (pcw *packetConnWrapper) SetReadDeadline(t time.Time) error { - return nil -} - -func (pcw *packetConnWrapper) SetWriteDeadline(t time.Time) error { - return nil -} diff --git a/server/lib/packetIDConnServer.go b/server/lib/packetIDConnServer.go deleted file mode 100644 index feca1fa..0000000 --- a/server/lib/packetIDConnServer.go +++ /dev/null @@ -1,52 +0,0 @@ -package snowflake_server - -import ( - "errors" - "net" - - "gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/turbotunnel" -) - -type ConnID = turbotunnel.ClientID - -type packetConnIDConnServer struct { - // This net.Conn must preserve message boundaries. - net.Conn - connID ConnID - clientIDReceived bool -} - -var ErrClientIDNotReceived = errors.New("ClientID not received") - -func (p *packetConnIDConnServer) GetClientID() (ConnID, error) { - if !p.clientIDReceived { - return p.connID, ErrClientIDNotReceived - } - return p.connID, nil -} - -func (p *packetConnIDConnServer) Read(buf []byte) (n int, err error) { - n, err = p.Conn.Read(buf) - if err != nil { - return - } - switch buf[0] { - case 0xfe: - p.clientIDReceived = true - copy(p.connID[:], buf[1:9]) - copy(buf[0:], buf[9:]) - return n - 9, nil - case 0xff: - copy(buf[0:], buf[1:]) - return n - 1, nil - } - return 0, nil -} - -func (p *packetConnIDConnServer) Write(buf []byte) (n int, err error) { - n, err = p.Conn.Write(append([]byte{0xff}, buf...)) - if err != nil { - return 0, err - } - return len(buf) - 1, nil -}