世界 3 éve
szülő
commit
d481bd7993
3 módosított fájl, 17 hozzáadás és 10 törlés
  1. 4 1
      common/dialer/default.go
  2. 8 8
      option/outbound.go
  3. 5 1
      option/types.go

+ 4 - 1
common/dialer/default.go

@@ -113,7 +113,10 @@ func NewDefault(router adapter.Router, options option.DialerOptions) *DefaultDia
 	}
 	var bindUDPAddr string
 	udpDialer := dialer
-	bindAddress := netip.Addr(options.BindAddress)
+	var bindAddress netip.Addr
+	if options.BindAddress != nil {
+		bindAddress = options.BindAddress.Build()
+	}
 	if bindAddress.IsValid() {
 		dialer.LocalAddr = &net.TCPAddr{
 			IP: bindAddress.AsSlice(),

+ 8 - 8
option/outbound.go

@@ -100,14 +100,14 @@ func (h *Outbound) UnmarshalJSON(bytes []byte) error {
 }
 
 type DialerOptions struct {
-	Detour         string        `json:"detour,omitempty"`
-	BindInterface  string        `json:"bind_interface,omitempty"`
-	BindAddress    ListenAddress `json:"bind_address,omitempty"`
-	ProtectPath    string        `json:"protect_path,omitempty"`
-	RoutingMark    int           `json:"routing_mark,omitempty"`
-	ReuseAddr      bool          `json:"reuse_addr,omitempty"`
-	ConnectTimeout Duration      `json:"connect_timeout,omitempty"`
-	TCPFastOpen    bool          `json:"tcp_fast_open,omitempty"`
+	Detour         string         `json:"detour,omitempty"`
+	BindInterface  string         `json:"bind_interface,omitempty"`
+	BindAddress    *ListenAddress `json:"bind_address,omitempty"`
+	ProtectPath    string         `json:"protect_path,omitempty"`
+	RoutingMark    int            `json:"routing_mark,omitempty"`
+	ReuseAddr      bool           `json:"reuse_addr,omitempty"`
+	ConnectTimeout Duration       `json:"connect_timeout,omitempty"`
+	TCPFastOpen    bool           `json:"tcp_fast_open,omitempty"`
 }
 
 type OutboundDialerOptions struct {

+ 5 - 1
option/types.go

@@ -16,7 +16,7 @@ type ListenAddress netip.Addr
 func (a ListenAddress) MarshalJSON() ([]byte, error) {
 	addr := netip.Addr(a)
 	if !addr.IsValid() {
-		return json.Marshal("")
+		return nil, nil
 	}
 	return json.Marshal(addr.String())
 }
@@ -35,6 +35,10 @@ func (a *ListenAddress) UnmarshalJSON(content []byte) error {
 	return nil
 }
 
+func (a ListenAddress) Build() netip.Addr {
+	return (netip.Addr)(a)
+}
+
 type NetworkList string
 
 func (v *NetworkList) UnmarshalJSON(content []byte) error {