http.go 879 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package adapter
  2. import (
  3. "context"
  4. "net/http"
  5. "sync"
  6. "github.com/sagernet/sing-box/option"
  7. "github.com/sagernet/sing/common/logger"
  8. )
  9. type HTTPTransport interface {
  10. http.RoundTripper
  11. CloseIdleConnections()
  12. Reset()
  13. }
  14. type HTTPClientManager interface {
  15. ResolveTransport(ctx context.Context, logger logger.ContextLogger, options option.HTTPClientOptions) (HTTPTransport, error)
  16. DefaultTransport() HTTPTransport
  17. ResetNetwork()
  18. }
  19. type HTTPStartContext struct {
  20. access sync.Mutex
  21. transports []HTTPTransport
  22. }
  23. func NewHTTPStartContext() *HTTPStartContext {
  24. return &HTTPStartContext{}
  25. }
  26. func (c *HTTPStartContext) Register(transport HTTPTransport) {
  27. c.access.Lock()
  28. defer c.access.Unlock()
  29. c.transports = append(c.transports, transport)
  30. }
  31. func (c *HTTPStartContext) Close() {
  32. for _, transport := range c.transports {
  33. transport.CloseIdleConnections()
  34. }
  35. }