diff --git a/proxy/hysteria/server.go b/proxy/hysteria/server.go index 6b800f1d..3509a44c 100644 --- a/proxy/hysteria/server.go +++ b/proxy/hysteria/server.go @@ -82,24 +82,13 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con inbound := session.InboundFromContext(ctx) inbound.Name = "hysteria" inbound.CanSpliceCopy = 3 + inbound.User = &protocol.MemoryUser{} iConn := stat.TryUnwrapStatsConn(conn) - var useremail string - var userlevel uint32 type User interface{ User() *protocol.MemoryUser } - if v, ok := iConn.(User); ok { + if v, ok := iConn.(User); ok && v.User() != nil { inbound.User = v.User() - if inbound.User != nil { - useremail = inbound.User.Email - userlevel = inbound.User.Level - } - } else { - // get a dummy user - inbound.User = &protocol.MemoryUser{ - Email: "", - Level: 0, - } } if _, ok := iConn.(*hysteria.InterUdpConn); ok { @@ -154,7 +143,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con Writer: writer, }) } else { - sessionPolicy := s.policyManager.ForLevel(userlevel) + sessionPolicy := s.policyManager.ForLevel(inbound.User.Level) common.Must(conn.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake))) addr, err := ReadTCPRequest(conn) @@ -178,7 +167,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con To: dest, Status: log.AccessAccepted, Reason: "", - Email: useremail, + Email: inbound.User.Email, }) errors.LogInfo(ctx, "tunnelling request to ", dest) diff --git a/transport/internet/hysteria/dialer.go b/transport/internet/hysteria/dialer.go index 34771ba1..1b2b5876 100644 --- a/transport/internet/hysteria/dialer.go +++ b/transport/internet/hysteria/dialer.go @@ -450,6 +450,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me } requireDatagram := hyCtx.RequireDatagramFromContext(ctx) + dest.Network = net.Network_UDP config := streamSettings.ProtocolSettings.(*Config) initmanager.Do(func() { @@ -464,8 +465,8 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me }, }).Start() }) + manager.mutex.Lock() - dest.Network = net.Network_UDP c, ok := manager.m[dialerConf{Destination: dest, MemoryStreamConfig: streamSettings}] if !ok { c = &client{ diff --git a/transport/internet/hysteria/hub.go b/transport/internet/hysteria/hub.go index c7a685a1..89e18dac 100644 --- a/transport/internet/hysteria/hub.go +++ b/transport/internet/hysteria/hub.go @@ -175,10 +175,10 @@ func (h *httpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var user *protocol.MemoryUser var ok bool - if h.validator != nil { + if h.validator != nil && h.validator.GetCount() > 0 { user = h.validator.Get(auth) - } else if auth == h.config.Auth { - ok = true + } else if h.config.Auth != "" { + ok = auth == h.config.Auth } if user != nil || ok {