func (v *Assert) Destination(value v2net.Destination) *DestinationSubject { return &DestinationSubject{ Subject: Subject{ disp: value.String(), a: v, }, value: value, } }
func (this *Router) TakeDetour(dest v2net.Destination) (string, error) { destStr := dest.String() found, tag, err := this.cache.Get(destStr) if !found { tag, err := this.takeDetourWithoutCache(dest) this.cache.Set(destStr, tag, err) return tag, err } return tag, err }
func (v *Dispatcher) getInboundRay(ctx context.Context, dest v2net.Destination) (ray.InboundRay, bool) { destString := dest.String() v.Lock() defer v.Unlock() if entry, found := v.conns[destString]; found { return entry, true } log.Info("UDP|Server: establishing new connection for ", dest) ctx = proxy.ContextWithDestination(ctx, dest) return v.packetDispatcher.DispatchToOutbound(ctx), false }
func (v *Dispatcher) Dispatch(ctx context.Context, destination v2net.Destination, payload *buf.Buffer, callback ResponseCallback) { // TODO: Add user to destString destString := destination.String() log.Debug("UDP|Server: Dispatch request: ", destString) inboundRay, existing := v.getInboundRay(ctx, destination) outputStream := inboundRay.InboundInput() if outputStream != nil { if err := outputStream.Write(payload); err != nil { v.RemoveRay(destString) } } if !existing { go func() { handleInput(inboundRay.InboundOutput(), callback) v.RemoveRay(destString) }() } }