mirror of
https://github.com/SagerNet/sing-box.git
synced 2026-05-13 22:09:21 +00:00
43 lines
879 B
Go
43 lines
879 B
Go
package adapter
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"sync"
|
|
|
|
"github.com/sagernet/sing-box/option"
|
|
"github.com/sagernet/sing/common/logger"
|
|
)
|
|
|
|
type HTTPTransport interface {
|
|
http.RoundTripper
|
|
CloseIdleConnections()
|
|
Reset()
|
|
}
|
|
|
|
type HTTPClientManager interface {
|
|
ResolveTransport(ctx context.Context, logger logger.ContextLogger, options option.HTTPClientOptions) (HTTPTransport, error)
|
|
DefaultTransport() HTTPTransport
|
|
ResetNetwork()
|
|
}
|
|
|
|
type HTTPStartContext struct {
|
|
access sync.Mutex
|
|
transports []HTTPTransport
|
|
}
|
|
|
|
func NewHTTPStartContext() *HTTPStartContext {
|
|
return &HTTPStartContext{}
|
|
}
|
|
|
|
func (c *HTTPStartContext) Register(transport HTTPTransport) {
|
|
c.access.Lock()
|
|
defer c.access.Unlock()
|
|
c.transports = append(c.transports, transport)
|
|
}
|
|
|
|
func (c *HTTPStartContext) Close() {
|
|
for _, transport := range c.transports {
|
|
transport.CloseIdleConnections()
|
|
}
|
|
}
|