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

Method UDPHandle

quicclient.go:144–184  ·  view source on GitHub ↗
(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram)

Source from the content-addressed store, hash-verified

142}
143
144func (x *QUICClient) UDPHandle(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram) error {
145 if 12+4+1+len(d.DstAddr)+2+len(d.Data)+16 > 1197 {
146 return errors.New("quic max datagram size is 1197")
147 }
148 dstb := append(append([]byte{d.Atyp}, d.DstAddr...), d.DstPort...)
149 conn, err := x.PacketConnFactory.Handle(addr, dstb, d.Data, func(b []byte) (int, error) {
150 d.Data = b
151 return s.UDPConn.WriteToUDP(d.Bytes(), addr)
152 }, x.UDPTimeout)
153 if err != nil {
154 return err
155 }
156 if conn == nil {
157 return nil
158 }
159 defer conn.Close()
160 sa := x.ServerAddress
161 if sa == "" {
162 sa = x.ServerHost
163 }
164 rc, err := QUICDialUDP(addr.String(), d.Address(), sa, x.TLSConfig, x.UDPTimeout)
165 if err != nil {
166 return err
167 }
168 defer rc.Close()
169 var sc Exchanger
170 if !x.WithoutBrook {
171 sc, err = NewPacketClient(x.Password, addr.String(), rc, x.UDPTimeout, dstb)
172 }
173 if x.WithoutBrook {
174 sc, err = NewSimplePacketClient(x.Password, addr.String(), rc, x.UDPTimeout, dstb)
175 }
176 if err != nil {
177 return err
178 }
179 defer sc.Clean()
180 if err := sc.Exchange(conn); err != nil {
181 return nil
182 }
183 return nil
184}
185
186func (x *QUICClient) Shutdown() error {
187 return x.Server.Shutdown()

Callers

nothing calls this directly

Calls 7

CleanMethod · 0.95
ExchangeMethod · 0.95
QUICDialUDPFunction · 0.85
NewPacketClientFunction · 0.85
NewSimplePacketClientFunction · 0.85
HandleMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected