Mult Protocol
This commit is contained in:
@@ -160,8 +160,10 @@ func handle(
|
||||
tcpBuffer int,
|
||||
slots chan struct{},
|
||||
manager *streamManager,
|
||||
xorManager *chunkManager,
|
||||
chunkMax int,
|
||||
bufferBytes int,
|
||||
chunkBuffered int,
|
||||
chunkPollWait time.Duration,
|
||||
debug *serverDebug,
|
||||
) {
|
||||
@@ -174,6 +176,26 @@ func handle(
|
||||
protocol.TuneTCP(conn)
|
||||
protocol.TuneTCPBuffer(conn, tcpBuffer)
|
||||
|
||||
// One listener serves both wires. The legacy XOR framing starts every
|
||||
// request with the ASCII magic "UP"; the binary framing starts with a mode
|
||||
// byte of 0-4, so the two are never ambiguous.
|
||||
_ = conn.SetDeadline(time.Now().Add(30 * time.Second))
|
||||
conn, isXOR, err := sniffWire(conn)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if isXOR {
|
||||
if debug != nil && debug.enabled {
|
||||
debug.logf("WIRE peer=%v mode=xor", conn.RemoteAddr())
|
||||
}
|
||||
handleXOR(conn, token, allowPrivate, cache, tcpBuffer, xorManager,
|
||||
chunkMax, chunkBuffered, chunkPollWait, debug)
|
||||
return
|
||||
}
|
||||
if debug != nil && debug.enabled {
|
||||
debug.logf("WIRE peer=%v mode=binary", conn.RemoteAddr())
|
||||
}
|
||||
|
||||
for {
|
||||
_ = conn.SetDeadline(time.Now().Add(30 * time.Second))
|
||||
req, err := wire.ReadRequest(conn)
|
||||
@@ -249,6 +271,7 @@ func main() {
|
||||
bufferBytes = 64 * 1024 * 1024
|
||||
}
|
||||
manager := newStreamManager(*sessionTimeout, debug)
|
||||
xorManager := newChunkManager(*sessionTimeout, debug)
|
||||
fmt.Printf("binary_transport=true chunk_max=%d buffer_bytes=%d poll_wait=%s\n", *chunkMax, bufferBytes, chunkPollWait.String())
|
||||
if debug.enabled {
|
||||
fmt.Printf("debug=true debug_chunks=%t stats_interval=%s\n", debug.chunks, debug.statsEvery)
|
||||
@@ -275,8 +298,10 @@ func main() {
|
||||
*tcpBuffer,
|
||||
slots,
|
||||
manager,
|
||||
xorManager,
|
||||
*chunkMax,
|
||||
bufferBytes,
|
||||
*chunkBuffered,
|
||||
*chunkPollWait,
|
||||
debug,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user