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

This commit is contained in:
RPRX 2023-04-07 19:13:20 +08:00 committed by GitHub
parent 15cf31f30a
commit 76b27a37cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 9 deletions

View file

@ -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. // Actually, it won't return an error in Xray-core's implementations.
link, err := w.dispatcher.Dispatch(ctx, meta.Target) link, err := w.dispatcher.Dispatch(ctx, meta.Target)
if err != nil { if err != nil {
XUDPManager.Lock()
delete(XUDPManager.Map, x.GlobalID)
XUDPManager.Unlock()
err = newError("failed to dispatch request to ", meta.Target).Base(err) err = newError("failed to dispatch request to ", meta.Target).Base(err)
if xudp.Show { if xudp.Show {
fmt.Printf("XUDP new: %v err: %v\n", meta.GlobalID, err) fmt.Printf("XUDP new: %v err: %v\n", meta.GlobalID, err)

View file

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