Add NewClient()

vmess-time
风扇滑翔翼 2025-09-10 05:12:40 +00:00 committed by GitHub
parent f42a518bf6
commit 8351ccb625
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 15 deletions

View File

@ -0,0 +1,34 @@
package http
import (
"context"
gohttp "net/http"
"github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/transport/internet"
)
// NewClient creates an HTTP client with with internal dialer and using the given sockopt.
// sockopt can only have one or empty.
func NewClient(sockopt ...*internet.SocketConfig) *gohttp.Client {
var Sockopt *internet.SocketConfig
switch len(sockopt) {
case 0:
case 1:
Sockopt = sockopt[0]
default:
panic("sockopt can only be nil or have one")
}
httpClient := &gohttp.Client{
Transport: &gohttp.Transport{
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
dest, err := net.ParseDestination(network + ":" + addr)
if err != nil {
return nil, err
}
return internet.DialSystem(ctx, dest, Sockopt)
},
},
}
return httpClient
}

View File

@ -2,16 +2,14 @@ package vtime
import ( import (
"context" "context"
"net/http" "runtime"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
"runtime"
"github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/common/platform"
"github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/common/protocol/http"
) )
var timeOffset atomic.Pointer[time.Duration] var timeOffset atomic.Pointer[time.Duration]
@ -32,17 +30,7 @@ func updateTimeMonitor(ctx context.Context, domain string) {
} }
func updateTime(domain string) error { func updateTime(domain string) error {
httpClient := &http.Client{ httpClient := http.NewClient()
Transport: &http.Transport{
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
dest, err := net.ParseDestination(network + ":" + addr)
if err != nil {
return nil, err
}
return internet.DialSystem(ctx, dest, nil)
},
},
}
resp, err := httpClient.Get(domain) resp, err := httpClient.Get(domain)
if err != nil { if err != nil {
return errors.New("Failed to access monitor domain").Base(err) return errors.New("Failed to access monitor domain").Base(err)