refactor message boundary constrains

This commit is contained in:
Shelikhoo 2025-01-30 13:35:36 +00:00
parent 33b3891648
commit 1ba58c864d
No known key found for this signature in database
GPG key ID: 4C9764E9FE80A3DC
6 changed files with 10 additions and 27 deletions

View file

@ -12,16 +12,6 @@ type ReadWriteCloserPreservesBoundary interface {
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 ReadWriteCloserPreservesBoundary) net.PacketConn {

View file

@ -344,8 +344,7 @@ func newSession(snowflakes SnowflakeCollector) (net.PacketConn, *smux.Session, e
log.Println("---- Handler: snowflake assigned ----")
packetConnWrapper := newPacketConnWrapper(dummyAddr{}, dummyAddr{},
packetpadding.NewPaddableConnection(
ConfirmsReadWriteCloserPreservesMessageBoundary(conn),
packetpadding.NewPaddableConnection(conn,
packetpadding.New()))
return packetConnWrapper, nil

View file

@ -412,3 +412,5 @@ func (c *WebRTCPeer) cleanup() {
}
}
}
func (c *WebRTCPeer) MessageBoundaryPreserved() {}

View file

@ -1,23 +1,14 @@
package packetpadding
import "io"
import (
"io"
)
type ReadWriteCloserPreservesBoundary interface {
io.ReadWriteCloser
MessageBoundaryPreserved()
}
type messageBoundaryPreservedReadWriteCloser struct {
io.ReadWriteCloser
}
func (m *messageBoundaryPreservedReadWriteCloser) MessageBoundaryPreserved() {
}
func ConfirmsReadWriteCloserPreservesMessageBoundary(rwc io.ReadWriteCloser) ReadWriteCloserPreservesBoundary {
return &messageBoundaryPreservedReadWriteCloser{rwc}
}
type PaddableConnection interface {
ReadWriteCloserPreservesBoundary
}

View file

@ -41,6 +41,8 @@ func (conn *Conn) SetDeadline(t time.Time) error {
return err
}
func (conn *Conn) MessageBoundaryPreserved() {}
func readLoop(w io.Writer, ws *websocket.Conn) error {
var buf [2048]byte
for {

View file

@ -115,7 +115,7 @@ func (handler *httpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
func (handler *httpHandler) turboTunnelUDPLikeMode(conn net.Conn, addr net.Addr, protocol string) error {
func (handler *httpHandler) turboTunnelUDPLikeMode(conn *websocketconn.Conn, addr net.Addr, protocol string) error {
// Read the ClientID from the WebRTC data channel protocol string. Every
// packet received on this WebSocket connection pertains to the same
// ClientID.
@ -143,8 +143,7 @@ func (handler *httpHandler) turboTunnelUDPLikeMode(conn net.Conn, addr net.Addr,
wg.Add(2)
done := make(chan struct{})
connPaddable := packetpadding.NewPaddableConnection(
packetpadding.ConfirmsReadWriteCloserPreservesMessageBoundary(conn), packetpadding.New())
connPaddable := packetpadding.NewPaddableConnection(conn, packetpadding.New())
// The remainder of the WebSocket stream consists of packets, one packet
// per WebSocket message. We read them one by one and feed them into the