Fix bind_address

This commit is contained in:
世界 2022-08-25 14:49:49 +08:00
parent e859c0a6ef
commit d481bd7993
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
3 changed files with 17 additions and 10 deletions

View file

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

View file

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

View file

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