mirror of
https://github.com/dalbodeule/hop-gate.git
synced 2025-12-08 04:45:43 +09:00
[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:
@@ -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() {
|
||||||
resp, err := sessWrapper.ForwardHTTP(ctx, logger, r, serviceName)
|
select {
|
||||||
resultCh <- forwardResult{resp: resp, err: err}
|
case <-ctx.Done():
|
||||||
|
// Context cancelled, do not proceed.
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
resp, err := sessWrapper.ForwardHTTP(ctx, logger, r, serviceName)
|
||||||
|
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{
|
||||||
|
|||||||
Reference in New Issue
Block a user