MCPcopy
hub / github.com/MetaCubeX/mihomo / TestMultiplex_TCP_Echo

Function TestMultiplex_TCP_Echo

transport/sudoku/multiplex_test.go:108–239  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

106}
107
108func TestMultiplex_TCP_Echo(t *testing.T) {
109 table := sudokuobfs.NewTable("seed", "prefer_ascii")
110 key := "test-key-mux"
111 target := "example.com:80"
112
113 serverCfg := DefaultConfig()
114 serverCfg.Key = key
115 serverCfg.AEADMethod = "chacha20-poly1305"
116 serverCfg.Table = table
117 serverCfg.PaddingMin = 0
118 serverCfg.PaddingMax = 0
119 serverCfg.EnablePureDownlink = true
120 serverCfg.HandshakeTimeoutSeconds = 5
121 serverCfg.DisableHTTPMask = true
122
123 ln, err := net.Listen("tcp", "127.0.0.1:0")
124 if err != nil {
125 t.Fatalf("listen: %v", err)
126 }
127 t.Cleanup(func() { _ = ln.Close() })
128
129 var handshakes int64
130 var streams int64
131 done := make(chan struct{})
132
133 go func() {
134 defer close(done)
135 raw, err := ln.Accept()
136 if err != nil {
137 return
138 }
139 defer raw.Close()
140
141 c, meta, err := ServerHandshake(raw, serverCfg)
142 if err != nil {
143 return
144 }
145 atomic.AddInt64(&handshakes, 1)
146
147 session, err := ReadServerSession(c, meta)
148 if err != nil {
149 return
150 }
151 if session.Type != SessionTypeMultiplex {
152 _ = c.Close()
153 return
154 }
155
156 mux, err := AcceptMultiplexServer(c)
157 if err != nil {
158 return
159 }
160 defer mux.Close()
161
162 for {
163 stream, dst, err := mux.AcceptTCP()
164 if err != nil {
165 return

Callers

nothing calls this directly

Calls 15

DefaultConfigFunction · 0.85
ReadServerSessionFunction · 0.85
AcceptMultiplexServerFunction · 0.85
StartMultiplexClientFunction · 0.85
AcceptTCPMethod · 0.80
ServerHandshakeFunction · 0.70
ClientHandshakeFunction · 0.70
ListenMethod · 0.65
CloseMethod · 0.65
StringMethod · 0.65
AddrMethod · 0.65
DialContextMethod · 0.65

Tested by

no test coverage detected