v2ray 9 лет назад
Родитель
Сommit
8a5f37dad7
2 измененных файлов с 12 добавлено и 2 удалено
  1. 3 1
      proxy/dokodemo/config_json.go
  2. 9 1
      proxy/dokodemo/dokodemo.go

+ 3 - 1
proxy/dokodemo/config_json.go

@@ -22,7 +22,9 @@ func (this *Config) UnmarshalJSON(data []byte) error {
 	if err := json.Unmarshal(data, rawConfig); err != nil {
 		return errors.New("Dokodemo: Failed to parse config: " + err.Error())
 	}
-	this.Address = rawConfig.Host.Address
+	if rawConfig.Host != nil {
+		this.Address = rawConfig.Host.Address
+	}
 	this.Port = rawConfig.PortValue
 	this.Network = rawConfig.NetworkList
 	this.Timeout = rawConfig.TimeoutValue

+ 9 - 1
proxy/dokodemo/dokodemo.go

@@ -129,7 +129,7 @@ func (this *DokodemoDoor) ListenTCP() error {
 func (this *DokodemoDoor) HandleTCPConnection(conn *hub.Connection) {
 	defer conn.Close()
 
-	dest := v2net.TCPDestination(this.address, this.port)
+	var dest v2net.Destination
 	if this.config.FollowRedirect {
 		originalDest := GetOriginalDestination(conn)
 		if originalDest != nil {
@@ -137,6 +137,14 @@ func (this *DokodemoDoor) HandleTCPConnection(conn *hub.Connection) {
 			dest = originalDest
 		}
 	}
+	if dest == nil && this.address != nil && this.port > v2net.Port(0) {
+		dest = v2net.TCPDestination(this.address, this.port)
+	}
+
+	if dest == nil {
+		log.Info("Dokodemo: Unknown destination, stop forwarding...")
+		return
+	}
 
 	ray := this.packetDispatcher.DispatchToOutbound(dest)
 	defer ray.InboundOutput().Release()