Просмотр исходного кода

Update common/xudp/xudp.go and common/mux/server.go

RPRX 2 лет назад
Родитель
Сommit
76b27a37cb
2 измененных файлов с 12 добавлено и 9 удалено
  1. 3 0
      common/mux/server.go
  2. 9 9
      common/xudp/xudp.go

+ 3 - 0
common/mux/server.go

@@ -177,6 +177,9 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata,
 			// Actually, it won't return an error in Xray-core's implementations.
 			link, err := w.dispatcher.Dispatch(ctx, meta.Target)
 			if err != nil {
+				XUDPManager.Lock()
+				delete(XUDPManager.Map, x.GlobalID)
+				XUDPManager.Unlock()
 				err = newError("failed to dispatch request to ", meta.Target).Base(err)
 				if xudp.Show {
 					fmt.Printf("XUDP new: %v err: %v\n", meta.GlobalID, err)

+ 9 - 9
common/xudp/xudp.go

@@ -25,7 +25,7 @@ var AddrParser = protocol.NewAddressParser(
 
 var (
 	Show    bool
-	BaseKey [32]byte
+	BaseKey []byte
 )
 
 const (
@@ -37,24 +37,24 @@ func init() {
 	if strings.ToLower(os.Getenv(EnvShow)) == "true" {
 		Show = true
 	}
-	if raw := os.Getenv(EnvBaseKey); raw != "" {
-		if key, _ := base64.RawURLEncoding.DecodeString(raw); len(key) == len(BaseKey) {
-			copy(BaseKey[:], key)
+	if raw, found := os.LookupEnv(EnvBaseKey); found {
+		if BaseKey, _ = base64.RawURLEncoding.DecodeString(raw); len(BaseKey) == 32 {
 			return
-		} else {
-			panic(EnvBaseKey + ": invalid value: " + raw)
 		}
+		panic(EnvBaseKey + ": invalid value: " + raw)
 	}
-	rand.Read(BaseKey[:])
+	rand.Read(BaseKey)
 }
 
 func GetGlobalID(ctx context.Context) (globalID [8]byte) {
 	if inbound := session.InboundFromContext(ctx); inbound != nil && inbound.Source.Network == net.Network_UDP &&
 		(inbound.Name == "dokodemo-door" || inbound.Name == "socks" || inbound.Name == "shadowsocks") {
-		h := blake3.New(8, BaseKey[:])
+		h := blake3.New(8, BaseKey)
 		h.Write([]byte(inbound.Source.String()))
 		copy(globalID[:], h.Sum(nil))
-		fmt.Printf("XUDP inbound.Source.String(): %v\tglobalID: %v\n", inbound.Source.String(), globalID)
+		if Show {
+			fmt.Printf("XUDP inbound.Source.String(): %v\tglobalID: %v\n", inbound.Source.String(), globalID)
+		}
 	}
 	return
 }