Browse Source

Apply DomainStrategy to outbound target

Vigilans 2 years ago
parent
commit
ce7dc23446
1 changed files with 12 additions and 0 deletions
  1. 12 0
      app/proxyman/outbound/handler.go

+ 12 - 0
app/proxyman/outbound/handler.go

@@ -151,6 +151,18 @@ func (h *Handler) Tag() string {
 
 
 // Dispatch implements proxy.Outbound.Dispatch.
 // Dispatch implements proxy.Outbound.Dispatch.
 func (h *Handler) Dispatch(ctx context.Context, link *transport.Link) {
 func (h *Handler) Dispatch(ctx context.Context, link *transport.Link) {
+	if h.senderSettings != nil && h.senderSettings.DomainStrategy != proxyman.SenderConfig_AS_IS {
+		outbound := session.OutboundFromContext(ctx)
+		if outbound == nil {
+			outbound = new(session.Outbound)
+			ctx = session.ContextWithOutbound(ctx, outbound)
+		}
+		if outbound.Target.Address != nil && outbound.Target.Address.Family().IsDomain() {
+			if addr := h.resolveIP(ctx, outbound.Target.Address.Domain(), h.Address()); addr != nil {
+				outbound.Target.Address = addr
+			}
+		}
+	}
 	if h.mux != nil && (h.mux.Enabled || session.MuxPreferedFromContext(ctx)) {
 	if h.mux != nil && (h.mux.Enabled || session.MuxPreferedFromContext(ctx)) {
 		if err := h.mux.Dispatch(ctx, link); err != nil {
 		if err := h.mux.Dispatch(ctx, link); err != nil {
 			err := newError("failed to process mux outbound traffic").Base(err)
 			err := newError("failed to process mux outbound traffic").Base(err)