add confirmation to ReadWriteCloser should preserve message boundary

This commit is contained in:
Shelikhoo 2024-09-11 14:24:26 +01:00 committed by WofWca
parent 0d9bef7794
commit 3a2b2fc969
2 changed files with 21 additions and 6 deletions

View file

@ -7,18 +7,33 @@ import (
"time" "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") 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{ return &packetConnWrapper{
ReadWriteCloser: rwc, ReadWriteCloserPreservesBoundary: rwc,
remoteAddr: remoteAddr, remoteAddr: remoteAddr,
localAddr: localAddr, localAddr: localAddr,
} }
} }
type packetConnWrapper struct { type packetConnWrapper struct {
io.ReadWriteCloser ReadWriteCloserPreservesBoundary
remoteAddr net.Addr remoteAddr net.Addr
localAddr net.Addr localAddr net.Addr
} }

View file

@ -345,7 +345,7 @@ func newSession(snowflakes SnowflakeCollector, clientIDCandid turbotunnel.Client
} }
log.Println("---- Handler: snowflake assigned ----") log.Println("---- Handler: snowflake assigned ----")
packetConnWrapper := newPacketConnWrapper(dummyAddr{}, dummyAddr{}, conn) packetConnWrapper := newPacketConnWrapper(dummyAddr{}, dummyAddr{}, ConfirmsReadWriteCloserPreservesMessageBoundary(conn))
return packetConnWrapper, nil return packetConnWrapper, nil
} }
pconn := turbotunnel.NewRedialPacketConn(dummyAddr{}, dummyAddr{}, dialContext) pconn := turbotunnel.NewRedialPacketConn(dummyAddr{}, dummyAddr{}, dialContext)