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

Method UDPHandle

relayoverbrook.go:158–195  ·  view source on GitHub ↗
(addr *net.UDPAddr, b []byte, l1 *net.UDPConn)

Source from the content-addressed store, hash-verified

156}
157
158func (s *RelayOverBrook) UDPHandle(addr *net.UDPAddr, b []byte, l1 *net.UDPConn) error {
159 if s.IsDNS {
160 m := &dns.Msg{}
161 if err := m.Unpack(b); err != nil {
162 return err
163 }
164 if len(m.Question) == 0 {
165 return errors.New("no question")
166 }
167 done, err := DNSGate(addr, m, l1)
168 if err != nil {
169 return err
170 }
171 if done {
172 return nil
173 }
174 }
175 conn, err := s.pcf.Handle(addr, s.dstb, b, func(b []byte) (int, error) {
176 return l1.WriteToUDP(b, addr)
177 }, s.UDPTimeout)
178 if err != nil {
179 return err
180 }
181 if conn == nil {
182 return nil
183 }
184 defer conn.Close()
185 sc, rc, err := s.blk.CreateExchanger("udp", addr.String(), s.dstb, s.TCPTimeout, s.UDPTimeout)
186 if err != nil {
187 return err
188 }
189 defer rc.Close()
190 defer sc.Clean()
191 if err := sc.Exchange(conn); err != nil {
192 return nil
193 }
194 return nil
195}
196
197func (s *RelayOverBrook) Shutdown() error {
198 return s.RunnerGroup.Done()

Callers 1

ListenAndServeMethod · 0.95

Calls 5

CreateExchangerMethod · 0.80
HandleMethod · 0.65
CleanMethod · 0.65
ExchangeMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected