Merge remote-tracking branch 'gitlab/main'

This commit is contained in:
meskio 2023-04-20 16:37:52 +02:00
commit f723cf52e8
No known key found for this signature in database
GPG key ID: 52B8F5AC97A2DA86
5 changed files with 127 additions and 28 deletions

View file

@ -69,10 +69,10 @@ type httpHandler struct {
// newHTTPHandler creates a new http.Handler that exchanges encapsulated packets
// over incoming WebSocket connections.
func newHTTPHandler(localAddr net.Addr, numInstances int) *httpHandler {
func newHTTPHandler(localAddr net.Addr, numInstances int, mtu int) *httpHandler {
pconns := make([]*turbotunnel.QueuePacketConn, 0, numInstances)
for i := 0; i < numInstances; i++ {
pconns = append(pconns, turbotunnel.NewQueuePacketConn(localAddr, clientMapTimeout))
pconns = append(pconns, turbotunnel.NewQueuePacketConn(localAddr, clientMapTimeout, mtu))
}
clientIDLookupKey := make([]byte, 16)
@ -200,6 +200,7 @@ func (handler *httpHandler) turbotunnelMode(conn net.Conn, addr net.Addr) error
return
}
_, err := encapsulation.WriteData(bw, p)
pconn.Restore(p)
if err == nil {
err = bw.Flush()
}

View file

@ -79,7 +79,11 @@ func (t *Transport) Listen(addr net.Addr, numKCPInstances int) (*SnowflakeListen
ln: make([]*kcp.Listener, 0, numKCPInstances),
}
handler := newHTTPHandler(addr, numKCPInstances)
// kcp-go doesn't provide an accessor for the current MTU setting (and
// anyway we could not create a kcp.Listener without creating a
// net.PacketConn for it first), so assume the default kcp.IKCP_MTU_DEF
// (1400 bytes) and don't increase it elsewhere.
handler := newHTTPHandler(addr, numKCPInstances, kcp.IKCP_MTU_DEF)
server := &http.Server{
Addr: addr.String(),
Handler: handler,
@ -125,13 +129,15 @@ func (t *Transport) Listen(addr net.Addr, numKCPInstances int) (*SnowflakeListen
errChan <- err
}
}()
select {
case err = <-errChan:
break
case <-time.After(listenAndServeErrorTimeout):
break
}
if err != nil {
return nil, err
}
listener.server = server

View file

@ -1,6 +1,6 @@
package main
// This code handled periodic statistics logging.
// This code handles periodic statistics logging.
//
// The only thing it keeps track of is how many connections had the client_ip
// parameter. Write true to statsChannel to record a connection with client_ip;