|  | @@ -30,13 +30,29 @@ var (
 | 
	
		
			
				|  |  |  	}, "protocol", "settings")
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +func toProtocolList(s []string) ([]proxyman.KnownProtocols, error) {
 | 
	
		
			
				|  |  | +	kp := make([]proxyman.KnownProtocols, 0, 8)
 | 
	
		
			
				|  |  | +	for _, p := range s {
 | 
	
		
			
				|  |  | +		switch strings.ToLower(p) {
 | 
	
		
			
				|  |  | +		case "http":
 | 
	
		
			
				|  |  | +			kp = append(kp, proxyman.KnownProtocols_HTTP)
 | 
	
		
			
				|  |  | +		case "https", "tls", "ssl":
 | 
	
		
			
				|  |  | +			kp = append(kp, proxyman.KnownProtocols_TLS)
 | 
	
		
			
				|  |  | +		default:
 | 
	
		
			
				|  |  | +			return nil, newError("Unknown protocol: ", p)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return kp, nil
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  type InboundConnectionConfig struct {
 | 
	
		
			
				|  |  | -	Port          uint16          `json:"port"`
 | 
	
		
			
				|  |  | -	Listen        *Address        `json:"listen"`
 | 
	
		
			
				|  |  | -	Protocol      string          `json:"protocol"`
 | 
	
		
			
				|  |  | -	StreamSetting *StreamConfig   `json:"streamSettings"`
 | 
	
		
			
				|  |  | -	Settings      json.RawMessage `json:"settings"`
 | 
	
		
			
				|  |  | -	Tag           string          `json:"tag"`
 | 
	
		
			
				|  |  | +	Port           uint16          `json:"port"`
 | 
	
		
			
				|  |  | +	Listen         *Address        `json:"listen"`
 | 
	
		
			
				|  |  | +	Protocol       string          `json:"protocol"`
 | 
	
		
			
				|  |  | +	StreamSetting  *StreamConfig   `json:"streamSettings"`
 | 
	
		
			
				|  |  | +	Settings       json.RawMessage `json:"settings"`
 | 
	
		
			
				|  |  | +	Tag            string          `json:"tag"`
 | 
	
		
			
				|  |  | +	DomainOverride *StringList     `json:"domainOverride"`
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (v *InboundConnectionConfig) Build() (*proxyman.InboundHandlerConfig, error) {
 | 
	
	
		
			
				|  | @@ -59,6 +75,13 @@ func (v *InboundConnectionConfig) Build() (*proxyman.InboundHandlerConfig, error
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		receiverConfig.StreamSettings = ts
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	if v.DomainOverride != nil {
 | 
	
		
			
				|  |  | +		kp, err := toProtocolList(*v.DomainOverride)
 | 
	
		
			
				|  |  | +		if err != nil {
 | 
	
		
			
				|  |  | +			return nil, newError("failed to parse inbound config").Base(err)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		receiverConfig.DomainOverride = kp
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	jsonConfig, err := inboundConfigLoader.LoadWithID(v.Settings, v.Protocol)
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
	
		
			
				|  | @@ -183,13 +206,14 @@ func (v *InboundDetourAllocationConfig) Build() (*proxyman.AllocationStrategy, e
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type InboundDetourConfig struct {
 | 
	
		
			
				|  |  | -	Protocol      string                         `json:"protocol"`
 | 
	
		
			
				|  |  | -	PortRange     *PortRange                     `json:"port"`
 | 
	
		
			
				|  |  | -	ListenOn      *Address                       `json:"listen"`
 | 
	
		
			
				|  |  | -	Settings      json.RawMessage                `json:"settings"`
 | 
	
		
			
				|  |  | -	Tag           string                         `json:"tag"`
 | 
	
		
			
				|  |  | -	Allocation    *InboundDetourAllocationConfig `json:"allocate"`
 | 
	
		
			
				|  |  | -	StreamSetting *StreamConfig                  `json:"streamSettings"`
 | 
	
		
			
				|  |  | +	Protocol       string                         `json:"protocol"`
 | 
	
		
			
				|  |  | +	PortRange      *PortRange                     `json:"port"`
 | 
	
		
			
				|  |  | +	ListenOn       *Address                       `json:"listen"`
 | 
	
		
			
				|  |  | +	Settings       json.RawMessage                `json:"settings"`
 | 
	
		
			
				|  |  | +	Tag            string                         `json:"tag"`
 | 
	
		
			
				|  |  | +	Allocation     *InboundDetourAllocationConfig `json:"allocate"`
 | 
	
		
			
				|  |  | +	StreamSetting  *StreamConfig                  `json:"streamSettings"`
 | 
	
		
			
				|  |  | +	DomainOverride *StringList                    `json:"domainOverride"`
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (v *InboundDetourConfig) Build() (*proxyman.InboundHandlerConfig, error) {
 | 
	
	
		
			
				|  | @@ -220,6 +244,13 @@ func (v *InboundDetourConfig) Build() (*proxyman.InboundHandlerConfig, error) {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		receiverSettings.StreamSettings = ss
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +	if v.DomainOverride != nil {
 | 
	
		
			
				|  |  | +		kp, err := toProtocolList(*v.DomainOverride)
 | 
	
		
			
				|  |  | +		if err != nil {
 | 
	
		
			
				|  |  | +			return nil, newError("failed to parse inbound detour config").Base(err)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		receiverSettings.DomainOverride = kp
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	rawConfig, err := inboundConfigLoader.LoadWithID(v.Settings, v.Protocol)
 | 
	
		
			
				|  |  |  	if err != nil {
 |