MCPcopy
hub / github.com/txthinking/brook / UDPHandle

Method UDPHandle

wsclient.go:137–174  ·  view source on GitHub ↗
(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram)

Source from the content-addressed store, hash-verified

135}
136
137func (x *WSClient) UDPHandle(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram) error {
138 dstb := append(append([]byte{d.Atyp}, d.DstAddr...), d.DstPort...)
139 conn, err := x.PacketConnFactory.Handle(addr, dstb, d.Data, func(b []byte) (int, error) {
140 d.Data = b
141 return s.UDPConn.WriteToUDP(d.Bytes(), addr)
142 }, x.UDPTimeout)
143 if err != nil {
144 return err
145 }
146 if conn == nil {
147 return nil
148 }
149 defer conn.Close()
150 sa := x.ServerAddress
151 if sa == "" {
152 sa = x.ServerHost
153 }
154 rc, err := WebSocketDial(addr.String(), d.Address(), sa, x.ServerHost, x.Path, x.TLSConfig, x.TCPTimeout, x.TLSFingerprint, 0, 0, 0, 0)
155 if err != nil {
156 return err
157 }
158 defer rc.Close()
159 var sc Exchanger
160 if !x.WithoutBrook {
161 sc, err = NewStreamClient("udp", x.Password, addr.String(), rc, x.UDPTimeout, dstb)
162 }
163 if x.WithoutBrook {
164 sc, err = NewSimpleStreamClient("udp", x.Password, addr.String(), rc, x.UDPTimeout, dstb)
165 }
166 if err != nil {
167 return err
168 }
169 defer sc.Clean()
170 if err := sc.Exchange(conn); err != nil {
171 return nil
172 }
173 return nil
174}
175
176func (x *WSClient) Shutdown() error {
177 return x.Server.Shutdown()

Callers

nothing calls this directly

Calls 7

CleanMethod · 0.95
ExchangeMethod · 0.95
WebSocketDialFunction · 0.85
NewStreamClientFunction · 0.85
NewSimpleStreamClientFunction · 0.85
HandleMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected