(s *socks5.Server, addr *net.UDPAddr, d *socks5.Datagram)
| 142 | } |
| 143 | |
| 144 | func (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 | |
| 186 | func (x *QUICClient) Shutdown() error { |
| 187 | return x.Server.Shutdown() |
nothing calls this directly
no test coverage detected