diff --git a/client/lib/connwrapper.go b/client/lib/connwrapper.go index 828557c..882dd43 100644 --- a/client/lib/connwrapper.go +++ b/client/lib/connwrapper.go @@ -7,18 +7,33 @@ import ( "time" ) +type ReadWriteCloserPreservesBoundary interface { + io.ReadWriteCloser + MessageBoundaryPreserved() +} + +func ConfirmsReadWriteCloserPreservesMessageBoundary(rwc io.ReadWriteCloser) ReadWriteCloserPreservesBoundary { + return &messageBoundaryPreservedReadWriteCloser{rwc} +} + +type messageBoundaryPreservedReadWriteCloser struct { + io.ReadWriteCloser +} + +func (m *messageBoundaryPreservedReadWriteCloser) MessageBoundaryPreserved() {} + var errENOSYS = errors.New("not implemented") -func newPacketConnWrapper(localAddr, remoteAddr net.Addr, rwc io.ReadWriteCloser) net.PacketConn { +func newPacketConnWrapper(localAddr, remoteAddr net.Addr, rwc ReadWriteCloserPreservesBoundary) net.PacketConn { return &packetConnWrapper{ - ReadWriteCloser: rwc, - remoteAddr: remoteAddr, - localAddr: localAddr, + ReadWriteCloserPreservesBoundary: rwc, + remoteAddr: remoteAddr, + localAddr: localAddr, } } type packetConnWrapper struct { - io.ReadWriteCloser + ReadWriteCloserPreservesBoundary remoteAddr net.Addr localAddr net.Addr } diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go index e31c06c..910e4c7 100644 --- a/client/lib/snowflake.go +++ b/client/lib/snowflake.go @@ -345,7 +345,7 @@ func newSession(snowflakes SnowflakeCollector, clientIDCandid turbotunnel.Client } log.Println("---- Handler: snowflake assigned ----") - packetConnWrapper := newPacketConnWrapper(dummyAddr{}, dummyAddr{}, conn) + packetConnWrapper := newPacketConnWrapper(dummyAddr{}, dummyAddr{}, ConfirmsReadWriteCloserPreservesMessageBoundary(conn)) return packetConnWrapper, nil } pconn := turbotunnel.NewRedialPacketConn(dummyAddr{}, dummyAddr{}, dialContext)