mirror of https://github.com/XTLS/Xray-core
Add NewClient()
parent
f42a518bf6
commit
8351ccb625
|
@ -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
|
||||||
|
}
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue