mirror of
https://github.com/MatsuriDayo/nekoray.git
synced 2025-12-18 13:04:37 +03:00
refactor core
This commit is contained in:
@@ -2,21 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"github.com/matsuridayo/libneko/neko_common"
|
||||
"github.com/matsuridayo/libneko/neko_log"
|
||||
"github.com/matsuridayo/sing-box-extra/boxapi"
|
||||
|
||||
box "github.com/sagernet/sing-box"
|
||||
"github.com/sagernet/sing-box/adapter"
|
||||
"github.com/sagernet/sing-box/common/dialer"
|
||||
"github.com/sagernet/sing/common/metadata"
|
||||
"github.com/sagernet/sing/common/network"
|
||||
)
|
||||
|
||||
var instance *box.Box
|
||||
@@ -28,54 +20,6 @@ func setupCore() {
|
||||
neko_log.SetupLog(50*1024, "./neko.log")
|
||||
//
|
||||
neko_common.GetProxyHttpClient = func() *http.Client {
|
||||
return getProxyHttpClient(instance)
|
||||
return boxapi.GetProxyHttpClient(instance)
|
||||
}
|
||||
}
|
||||
|
||||
func getProxyHttpClient(box *box.Box) *http.Client {
|
||||
var d network.Dialer
|
||||
|
||||
if box != nil {
|
||||
router_ := reflect.Indirect(reflect.ValueOf(box)).FieldByName("router")
|
||||
router_ = reflect.NewAt(router_.Type(), unsafe.Pointer(router_.UnsafeAddr())).Elem()
|
||||
if router, ok := router_.Interface().(adapter.Router); ok {
|
||||
d = dialer.NewRouter(router)
|
||||
}
|
||||
}
|
||||
|
||||
dialContext := func(ctx context.Context, network, addr string) (net.Conn, error) {
|
||||
return d.DialContext(ctx, network, metadata.ParseSocksaddr(addr))
|
||||
}
|
||||
|
||||
transport := &http.Transport{
|
||||
TLSHandshakeTimeout: time.Second * 3,
|
||||
ResponseHeaderTimeout: time.Second * 3,
|
||||
}
|
||||
|
||||
if d != nil {
|
||||
transport.DialContext = dialContext
|
||||
}
|
||||
|
||||
client := &http.Client{
|
||||
Transport: transport,
|
||||
}
|
||||
|
||||
return client
|
||||
}
|
||||
|
||||
type logWriter struct {
|
||||
files []io.Writer
|
||||
}
|
||||
|
||||
func (w *logWriter) Write(p []byte) (n int, err error) {
|
||||
for _, file := range w.files {
|
||||
if file == nil {
|
||||
continue
|
||||
}
|
||||
n, err = file.Write(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -3,9 +3,8 @@ module nekobox_core
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
github.com/matsuridayo/libneko v0.0.0-20230304130313-5ea96b79b3c3
|
||||
github.com/matsuridayo/sing-box-extra v0.0.0-20230304131029-37eeda33b862
|
||||
github.com/sagernet/sing v0.1.8-0.20230301160041-9fab0a9f4304
|
||||
github.com/matsuridayo/libneko v0.0.0-20230305030237-4aefab71d5b4
|
||||
github.com/matsuridayo/sing-box-extra v0.0.0-20230305030339-e94f0e97ef0c
|
||||
github.com/sagernet/sing-box v1.1.6-0.20230301163156-e8802357e1e7
|
||||
grpc_server v1.0.0
|
||||
)
|
||||
@@ -55,6 +54,7 @@ require (
|
||||
github.com/sagernet/netlink v0.0.0-20220905062125-8043b4a9aa97 // indirect
|
||||
github.com/sagernet/quic-go v0.0.0-20230202071646-a8c8afb18b32 // indirect
|
||||
github.com/sagernet/reality v0.0.0-20230228045158-d3e085a8e5d1 // indirect
|
||||
github.com/sagernet/sing v0.1.8-0.20230301160041-9fab0a9f4304 // indirect
|
||||
github.com/sagernet/sing-dns v0.1.4 // indirect
|
||||
github.com/sagernet/sing-shadowsocks v0.1.2-0.20230221080503-769c01d6bba9 // indirect
|
||||
github.com/sagernet/sing-shadowtls v0.0.0-20230221123345-78e50cd7b587 // indirect
|
||||
|
||||
@@ -105,10 +105,10 @@ github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis=
|
||||
github.com/libdns/libdns v0.2.1/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40=
|
||||
github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8=
|
||||
github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
|
||||
github.com/matsuridayo/libneko v0.0.0-20230304130313-5ea96b79b3c3 h1:emqnGHIlezKjm24Lz5aos9Lc1bhxFL8Ynp20EprSNJc=
|
||||
github.com/matsuridayo/libneko v0.0.0-20230304130313-5ea96b79b3c3/go.mod h1:IRO07Queptz/rGFvEW+3Hmwpx7MCup6WiDs4p5jMt4g=
|
||||
github.com/matsuridayo/sing-box-extra v0.0.0-20230304131029-37eeda33b862 h1:z8qC1cSVDZrhJbZPgsp1oM8rxnzMb+aU3FxAYG27S+k=
|
||||
github.com/matsuridayo/sing-box-extra v0.0.0-20230304131029-37eeda33b862/go.mod h1:5YMikmz+Vpr5P7/rSigF92Yf5pBsCzDq9IpQRjoLb3E=
|
||||
github.com/matsuridayo/libneko v0.0.0-20230305030237-4aefab71d5b4 h1:+QFcvCMntMTIG1NQABy7P4Pw7mPqdbPcYnIBswRik1s=
|
||||
github.com/matsuridayo/libneko v0.0.0-20230305030237-4aefab71d5b4/go.mod h1:IRO07Queptz/rGFvEW+3Hmwpx7MCup6WiDs4p5jMt4g=
|
||||
github.com/matsuridayo/sing-box-extra v0.0.0-20230305030339-e94f0e97ef0c h1:cPzKBlzhtwQkW9Vtb4MVCXpAO/UDQGyx+cjatJlXLuc=
|
||||
github.com/matsuridayo/sing-box-extra v0.0.0-20230305030339-e94f0e97ef0c/go.mod h1:xZckt28e8/yrsXbh9UXS+QBn3qe6DSXwmzm+0LwzLz4=
|
||||
github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7/go.mod h1:U6ZQobyTjI/tJyq2HG+i/dfSoFUt8/aZCM+GKtmFk/Y=
|
||||
github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA=
|
||||
github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M=
|
||||
|
||||
@@ -130,7 +130,7 @@ func (s *server) Test(ctx context.Context, in *gen.TestReq) (out *gen.TestResp,
|
||||
}
|
||||
}
|
||||
// Latency
|
||||
out.Ms, err = speedtest.UrlTest(getProxyHttpClient(i), in.Url, in.Timeout)
|
||||
out.Ms, err = speedtest.UrlTest(boxapi.GetProxyHttpClient(i), in.Url, in.Timeout)
|
||||
} else if in.Mode == gen.TestMode_TcpPing {
|
||||
out.Ms, err = speedtest.TcpPing(in.Address, in.Timeout)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user