[fix](server): improve session handling, timeouts, and proxy logic

- Fixed session retrieval to use lowercased host for consistency.
- Ensured context cancellation is properly handled in HTTP forwarding.
- Refined proxy timeout configuration with better error logging and validation.
This commit is contained in:
dalbodeule
2025-12-03 01:07:32 +09:00
parent 7c751c7492
commit 499c346e79

View File

@@ -504,7 +504,7 @@ func newHTTPHandler(logger logging.Logger, proxyTimeout time.Duration) http.Hand
return return
} }
sessWrapper := getSessionForHost(r.Host) sessWrapper := getSessionForHost(hostLower)
if sessWrapper == nil { if sessWrapper == nil {
log.Warn("no dtls session for host", logging.Fields{ log.Warn("no dtls session for host", logging.Fields{
"host": r.Host, "host": r.Host,
@@ -562,8 +562,14 @@ func newHTTPHandler(logger logging.Logger, proxyTimeout time.Duration) http.Hand
resultCh := make(chan forwardResult, 1) resultCh := make(chan forwardResult, 1)
go func() { go func() {
select {
case <-ctx.Done():
// Context cancelled, do not proceed.
return
default:
resp, err := sessWrapper.ForwardHTTP(ctx, logger, r, serviceName) resp, err := sessWrapper.ForwardHTTP(ctx, logger, r, serviceName)
resultCh <- forwardResult{resp: resp, err: err} resultCh <- forwardResult{resp: resp, err: err}
}
}() }()
var protoResp *protocol.Response var protoResp *protocol.Response
@@ -810,13 +816,15 @@ func main() {
// (in seconds); the default is 15 seconds. (en) // (in seconds); the default is 15 seconds. (en)
proxyTimeout := 15 * time.Second proxyTimeout := 15 * time.Second
if v := strings.TrimSpace(os.Getenv("HOP_SERVER_PROXY_TIMEOUT_SECONDS")); v != "" { if v := strings.TrimSpace(os.Getenv("HOP_SERVER_PROXY_TIMEOUT_SECONDS")); v != "" {
if secs, err := strconv.Atoi(v); err != nil || secs <= 0 { if secs, err := strconv.Atoi(v); err != nil {
logger.Warn("invalid HOP_SERVER_PROXY_TIMEOUT_SECONDS, using default", logging.Fields{ logger.Warn("invalid HOP_SERVER_PROXY_TIMEOUT_SECONDS format, using default", logging.Fields{
"value": v, "value": v,
"error": err, "error": err,
}) })
} else { } else if secs <= 0 {
proxyTimeout = time.Duration(secs) * time.Second logger.Warn("HOP_SERVER_PROXY_TIMEOUT_SECONDS must be positive, using default", logging.Fields{
"value": v,
})
} }
} }
logger.Info("http proxy timeout configured", logging.Fields{ logger.Info("http proxy timeout configured", logging.Fields{