mirror of
https://github.com/MatsuriDayo/nekoray.git
synced 2025-12-17 20:44:38 +03:00
optimize full test
This commit is contained in:
@@ -3,7 +3,6 @@ package grpc_server
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"grpc_server/gen"
|
"grpc_server/gen"
|
||||||
"io"
|
"io"
|
||||||
@@ -16,6 +15,20 @@ import (
|
|||||||
"github.com/matsuridayo/libneko/speedtest"
|
"github.com/matsuridayo/libneko/speedtest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func getBetweenStr(str, start, end string) string {
|
||||||
|
n := strings.Index(str, start)
|
||||||
|
if n == -1 {
|
||||||
|
n = 0
|
||||||
|
}
|
||||||
|
str = string([]byte(str)[n:])
|
||||||
|
m := strings.Index(str, end)
|
||||||
|
if m == -1 {
|
||||||
|
m = len(str)
|
||||||
|
}
|
||||||
|
str = string([]byte(str)[:m])
|
||||||
|
return str[len(start):]
|
||||||
|
}
|
||||||
|
|
||||||
func DoFullTest(ctx context.Context, in *gen.TestReq, instance interface{}) (out *gen.TestResp, _ error) {
|
func DoFullTest(ctx context.Context, in *gen.TestReq, instance interface{}) (out *gen.TestResp, _ error) {
|
||||||
out = &gen.TestResp{}
|
out = &gen.TestResp{}
|
||||||
httpClient := neko_common.CreateProxyHttpClient(instance)
|
httpClient := neko_common.CreateProxyHttpClient(instance)
|
||||||
@@ -83,15 +96,10 @@ func DoFullTest(ctx context.Context, in *gen.TestReq, instance interface{}) (out
|
|||||||
// 出口 IP
|
// 出口 IP
|
||||||
var out_ip string
|
var out_ip string
|
||||||
if in.FullInOut {
|
if in.FullInOut {
|
||||||
resp, err := httpClient.Get("https://httpbin.org/get")
|
resp, err := httpClient.Get("https://www.cloudflare.com/cdn-cgi/trace")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
v := make(map[string]interface{})
|
b, _ := io.ReadAll(resp.Body)
|
||||||
json.NewDecoder(resp.Body).Decode(&v)
|
out_ip = getBetweenStr(string(b), "ip=", "\n")
|
||||||
if a, ok := v["origin"]; ok {
|
|
||||||
if s, ok := a.(string); ok {
|
|
||||||
out_ip = s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
resp.Body.Close()
|
resp.Body.Close()
|
||||||
} else {
|
} else {
|
||||||
out_ip = "Error"
|
out_ip = "Error"
|
||||||
@@ -101,7 +109,7 @@ func DoFullTest(ctx context.Context, in *gen.TestReq, instance interface{}) (out
|
|||||||
// 下载
|
// 下载
|
||||||
var speed string
|
var speed string
|
||||||
if in.FullSpeed {
|
if in.FullSpeed {
|
||||||
resp, err := httpClient.Get("http://cachefly.cachefly.net/10mb.test")
|
resp, err := httpClient.Get(in.FullSpeedUrl)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
time_start := time.Now()
|
time_start := time.Now()
|
||||||
n, _ := io.Copy(io.Discard, resp.Body)
|
n, _ := io.Copy(io.Discard, resp.Body)
|
||||||
|
|||||||
@@ -318,6 +318,7 @@ type TestReq struct {
|
|||||||
InAddress string `protobuf:"bytes,7,opt,name=in_address,json=inAddress,proto3" json:"in_address,omitempty"`
|
InAddress string `protobuf:"bytes,7,opt,name=in_address,json=inAddress,proto3" json:"in_address,omitempty"`
|
||||||
FullLatency bool `protobuf:"varint,8,opt,name=full_latency,json=fullLatency,proto3" json:"full_latency,omitempty"`
|
FullLatency bool `protobuf:"varint,8,opt,name=full_latency,json=fullLatency,proto3" json:"full_latency,omitempty"`
|
||||||
FullSpeed bool `protobuf:"varint,9,opt,name=full_speed,json=fullSpeed,proto3" json:"full_speed,omitempty"`
|
FullSpeed bool `protobuf:"varint,9,opt,name=full_speed,json=fullSpeed,proto3" json:"full_speed,omitempty"`
|
||||||
|
FullSpeedUrl string `protobuf:"bytes,13,opt,name=full_speed_url,json=fullSpeedUrl,proto3" json:"full_speed_url,omitempty"`
|
||||||
FullInOut bool `protobuf:"varint,10,opt,name=full_in_out,json=fullInOut,proto3" json:"full_in_out,omitempty"`
|
FullInOut bool `protobuf:"varint,10,opt,name=full_in_out,json=fullInOut,proto3" json:"full_in_out,omitempty"`
|
||||||
FullUdpLatency bool `protobuf:"varint,12,opt,name=full_udp_latency,json=fullUdpLatency,proto3" json:"full_udp_latency,omitempty"`
|
FullUdpLatency bool `protobuf:"varint,12,opt,name=full_udp_latency,json=fullUdpLatency,proto3" json:"full_udp_latency,omitempty"`
|
||||||
// Deprecated: Do not use.
|
// Deprecated: Do not use.
|
||||||
@@ -419,6 +420,13 @@ func (x *TestReq) GetFullSpeed() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *TestReq) GetFullSpeedUrl() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.FullSpeedUrl
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func (x *TestReq) GetFullInOut() bool {
|
func (x *TestReq) GetFullInOut() bool {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.FullInOut
|
return x.FullInOut
|
||||||
@@ -812,7 +820,7 @@ var file_libcore_proto_rawDesc = []byte{
|
|||||||
0x62, 0x6c, 0x65, 0x4e, 0x65, 0x6b, 0x6f, 0x72, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
0x62, 0x6c, 0x65, 0x4e, 0x65, 0x6b, 0x6f, 0x72, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6f,
|
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6f,
|
||||||
0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e,
|
0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e,
|
||||||
0x73, 0x74, 0x61, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x22, 0x8a,
|
0x73, 0x74, 0x61, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x22, 0xb0,
|
||||||
0x03, 0x0a, 0x07, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x25, 0x0a, 0x04, 0x6d, 0x6f,
|
0x03, 0x0a, 0x07, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x25, 0x0a, 0x04, 0x6d, 0x6f,
|
||||||
0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f,
|
0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f,
|
||||||
0x72, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64,
|
0x72, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64,
|
||||||
@@ -831,82 +839,85 @@ var file_libcore_proto_rawDesc = []byte{
|
|||||||
0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x4c, 0x61, 0x74, 0x65,
|
0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x4c, 0x61, 0x74, 0x65,
|
||||||
0x6e, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x65,
|
0x6e, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x65,
|
||||||
0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x70, 0x65,
|
0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x70, 0x65,
|
||||||
0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x5f, 0x6f, 0x75,
|
0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64,
|
||||||
0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x49, 0x6e, 0x4f,
|
0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x75, 0x6c, 0x6c,
|
||||||
0x75, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x75, 0x64, 0x70, 0x5f, 0x6c,
|
0x53, 0x70, 0x65, 0x65, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0b, 0x66, 0x75, 0x6c, 0x6c,
|
||||||
0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x75,
|
0x5f, 0x69, 0x6e, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66,
|
||||||
0x6c, 0x6c, 0x55, 0x64, 0x70, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x08,
|
0x75, 0x6c, 0x6c, 0x49, 0x6e, 0x4f, 0x75, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c,
|
||||||
0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02,
|
0x5f, 0x75, 0x64, 0x70, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0c, 0x20, 0x01,
|
||||||
0x18, 0x01, 0x52, 0x07, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x74, 0x22, 0x51, 0x0a, 0x08, 0x54,
|
0x28, 0x08, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x55, 0x64, 0x70, 0x4c, 0x61, 0x74, 0x65, 0x6e,
|
||||||
0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
0x63, 0x79, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x74, 0x18, 0x0b,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x0e, 0x0a,
|
0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61,
|
||||||
0x02, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x6d, 0x73, 0x12, 0x1f, 0x0a,
|
0x74, 0x22, 0x51, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a,
|
||||||
0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01,
|
0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72,
|
||||||
0x28, 0x09, 0x52, 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x39,
|
0x72, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
|
||||||
0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12,
|
0x02, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x70, 0x6f,
|
||||||
0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61,
|
0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x52, 0x65,
|
||||||
0x67, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
|
0x70, 0x6f, 0x72, 0x74, 0x22, 0x39, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61,
|
||||||
0x09, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x22, 0x2a, 0x0a, 0x0e, 0x51, 0x75, 0x65,
|
0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x74,
|
0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63,
|
||||||
0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x72,
|
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x22,
|
||||||
0x61, 0x66, 0x66, 0x69, 0x63, 0x22, 0x66, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
|
0x2a, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73,
|
||||||
0x65, 0x71, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
|
0x70, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64,
|
0x28, 0x03, 0x52, 0x07, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x22, 0x66, 0x0a, 0x09, 0x55,
|
||||||
0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f,
|
0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x2d, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69,
|
||||||
0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x72,
|
0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f,
|
||||||
0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x68,
|
0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
|
||||||
0x65, 0x63, 0x6b, 0x50, 0x72, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0xd0, 0x01,
|
0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b,
|
||||||
0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05,
|
0x5f, 0x70, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||||
0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72,
|
0x28, 0x08, 0x52, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x72, 0x65, 0x52, 0x65, 0x6c, 0x65,
|
||||||
0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x5f, 0x6e, 0x61, 0x6d,
|
0x61, 0x73, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
|
||||||
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x4e,
|
0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
|
0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x73, 0x73, 0x65,
|
||||||
0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c,
|
0x74, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61,
|
||||||
0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73,
|
0x73, 0x73, 0x65, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x77,
|
||||||
0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6c,
|
0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x65, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61,
|
0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b,
|
||||||
0x73, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72,
|
0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||||
0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73,
|
0x09, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x21, 0x0a,
|
||||||
0x5f, 0x70, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01,
|
0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x05, 0x20,
|
||||||
0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x50, 0x72, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65,
|
0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x6f, 0x74, 0x65,
|
||||||
0x22, 0x4f, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
|
0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61,
|
||||||
0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x18, 0x6e, 0x65, 0x6b, 0x6f, 0x72,
|
0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x50, 0x72, 0x65, 0x52,
|
||||||
0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x6a,
|
0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x4f, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f,
|
||||||
0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x6e, 0x65, 0x6b, 0x6f, 0x72,
|
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a,
|
||||||
0x61, 0x79, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4a, 0x73, 0x6f,
|
0x18, 0x6e, 0x65, 0x6b, 0x6f, 0x72, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
|
||||||
0x6e, 0x2a, 0x32, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a,
|
0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x07, 0x54, 0x63, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x72,
|
0x16, 0x6e, 0x65, 0x6b, 0x6f, 0x72, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
|
||||||
0x6c, 0x54, 0x65, 0x73, 0x74, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x75, 0x6c, 0x6c, 0x54,
|
0x6f, 0x6e, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x2a, 0x32, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x4d,
|
||||||
0x65, 0x73, 0x74, 0x10, 0x02, 0x2a, 0x27, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
|
0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x63, 0x70, 0x50, 0x69, 0x6e, 0x67, 0x10, 0x00,
|
||||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x10, 0x00,
|
0x12, 0x0b, 0x0a, 0x07, 0x55, 0x72, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x10, 0x01, 0x12, 0x0c, 0x0a,
|
||||||
0x12, 0x0c, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x10, 0x01, 0x32, 0x94,
|
0x08, 0x46, 0x75, 0x6c, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x10, 0x02, 0x2a, 0x27, 0x0a, 0x0c, 0x55,
|
||||||
0x03, 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x43,
|
||||||
0x65, 0x12, 0x2f, 0x0a, 0x04, 0x45, 0x78, 0x69, 0x74, 0x12, 0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63,
|
0x68, 0x65, 0x63, 0x6b, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f,
|
||||||
0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x6c,
|
0x61, 0x64, 0x10, 0x01, 0x32, 0x94, 0x03, 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65,
|
||||||
0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70,
|
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x45, 0x78, 0x69, 0x74, 0x12,
|
||||||
0x22, 0x00, 0x12, 0x33, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x2e, 0x6c,
|
0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52,
|
||||||
0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
|
0x65, 0x71, 0x1a, 0x12, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70,
|
||||||
0x1a, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
|
0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61,
|
||||||
0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74,
|
0x74, 0x65, 0x12, 0x12, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x70, 0x64,
|
||||||
0x12, 0x16, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x43,
|
0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65,
|
||||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f,
|
0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x35, 0x0a,
|
||||||
0x72, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f,
|
0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65,
|
||||||
0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65,
|
0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x12,
|
||||||
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x6c, 0x69, 0x62, 0x63,
|
0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65,
|
||||||
0x6f, 0x72, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12,
|
0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x11, 0x2e, 0x6c,
|
||||||
0x2d, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x12, 0x10, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72,
|
0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a,
|
||||||
0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63,
|
0x12, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52,
|
||||||
0x6f, 0x72, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3f,
|
0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x12, 0x10, 0x2e,
|
||||||
0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x6c,
|
0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a,
|
||||||
0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74,
|
0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65,
|
||||||
0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x51,
|
0x73, 0x70, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61,
|
||||||
0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12,
|
0x74, 0x73, 0x12, 0x16, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x51, 0x75, 0x65,
|
||||||
0x44, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x6c, 0x69, 0x62,
|
||||||
0x6e, 0x73, 0x12, 0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70,
|
0x63, 0x6f, 0x72, 0x65, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
|
||||||
0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e,
|
0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e,
|
||||||
0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
|
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x11, 0x2e, 0x6c, 0x69, 0x62, 0x63, 0x6f,
|
||||||
0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x11, 0x5a, 0x0f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, 0x65,
|
0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x6c, 0x69,
|
||||||
0x72, 0x76, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x62, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
|
||||||
|
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x11, 0x5a, 0x0f, 0x67,
|
||||||
|
0x72, 0x70, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x62, 0x06,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ message TestReq {
|
|||||||
string in_address = 7;
|
string in_address = 7;
|
||||||
bool full_latency = 8;
|
bool full_latency = 8;
|
||||||
bool full_speed = 9;
|
bool full_speed = 9;
|
||||||
|
string full_speed_url = 13;
|
||||||
bool full_in_out = 10;
|
bool full_in_out = 10;
|
||||||
bool full_udp_latency = 12;
|
bool full_udp_latency = 12;
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -226,7 +226,8 @@ namespace NekoGui {
|
|||||||
_add(new configItem("inbound_auth", dynamic_cast<JsonStore *>(inbound_auth), itemType::jsonStore));
|
_add(new configItem("inbound_auth", dynamic_cast<JsonStore *>(inbound_auth), itemType::jsonStore));
|
||||||
|
|
||||||
_add(new configItem("user_agent", &user_agent, itemType::string));
|
_add(new configItem("user_agent", &user_agent, itemType::string));
|
||||||
_add(new configItem("test_url", &test_url, itemType::string));
|
_add(new configItem("test_url", &test_latency_url, itemType::string));
|
||||||
|
_add(new configItem("test_url_dl", &test_download_url, itemType::string));
|
||||||
_add(new configItem("current_group", ¤t_group, itemType::integer));
|
_add(new configItem("current_group", ¤t_group, itemType::integer));
|
||||||
_add(new configItem("inbound_address", &inbound_address, itemType::string));
|
_add(new configItem("inbound_address", &inbound_address, itemType::string));
|
||||||
_add(new configItem("inbound_socks_port", &inbound_socks_port, itemType::integer));
|
_add(new configItem("inbound_socks_port", &inbound_socks_port, itemType::integer));
|
||||||
|
|||||||
@@ -92,7 +92,8 @@ namespace NekoGui {
|
|||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
QString log_level = "warning";
|
QString log_level = "warning";
|
||||||
QString test_url = "http://cp.cloudflare.com/";
|
QString test_latency_url = "http://cp.cloudflare.com/";
|
||||||
|
QString test_download_url = "http://cachefly.cachefly.net/10mb.test";
|
||||||
int test_concurrent = 5;
|
int test_concurrent = 5;
|
||||||
int traffic_loop_interval = 1000;
|
int traffic_loop_interval = 1000;
|
||||||
bool connection_statistics = false;
|
bool connection_statistics = false;
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Test URL</source>
|
<source>Test URL</source>
|
||||||
<translation>url تست</translation>
|
<translation type="vanished">url تست</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use proxy when updating subscription</source>
|
<source>Use proxy when updating subscription</source>
|
||||||
@@ -235,6 +235,14 @@ For NekoBox, this rewrites the underlying(localhost) DNS in VPN mode, normal mod
|
|||||||
<source>Multiplex (mux)</source>
|
<source>Multiplex (mux)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Latency Test URL</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Download Test URL</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DialogEditGroup</name>
|
<name>DialogEditGroup</name>
|
||||||
@@ -1412,7 +1420,7 @@ End: %2</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Input</source>
|
<source>Input</source>
|
||||||
<translation>ورودی</translation>
|
<translation type="vanished">ورودی</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>[%1] test error: %2</source>
|
<source>[%1] test error: %2</source>
|
||||||
@@ -1438,14 +1446,6 @@ End: %2</source>
|
|||||||
<source>Current Select</source>
|
<source>Current Select</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Please enter the items to be tested, separated by commas
|
|
||||||
1. Latency
|
|
||||||
2. Download speed
|
|
||||||
3. In and Out IP
|
|
||||||
4. UDP Latency</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Show Window</source>
|
<source>Show Window</source>
|
||||||
<translation>نمایش پنجره برنامه</translation>
|
<translation>نمایش پنجره برنامه</translation>
|
||||||
@@ -1482,6 +1482,26 @@ End: %2</source>
|
|||||||
<source>Select mode, double-click or press Enter to select a profile, press ESC to exit.</source>
|
<source>Select mode, double-click or press Enter to select a profile, press ESC to exit.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Latency</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>UDP latency</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Download speed</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>In and Out IP</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Test Options</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ProxyItem</name>
|
<name>ProxyItem</name>
|
||||||
|
|||||||
@@ -83,10 +83,6 @@
|
|||||||
<source>Concurrent</source>
|
<source>Concurrent</source>
|
||||||
<translation>并发</translation>
|
<translation>并发</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Test URL</source>
|
|
||||||
<translation>测试 URL</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Use proxy when updating subscription</source>
|
<source>Use proxy when updating subscription</source>
|
||||||
<translation>更新订阅时使用代理</translation>
|
<translation>更新订阅时使用代理</translation>
|
||||||
@@ -235,6 +231,14 @@ For NekoBox, this rewrites the underlying(localhost) DNS in VPN mode, normal mod
|
|||||||
<source>Multiplex (mux)</source>
|
<source>Multiplex (mux)</source>
|
||||||
<translation>多路复用 Mux</translation>
|
<translation>多路复用 Mux</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Latency Test URL</source>
|
||||||
|
<translation>延迟测试 URL</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Download Test URL</source>
|
||||||
|
<translation>下载测试 URL</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DialogEditGroup</name>
|
<name>DialogEditGroup</name>
|
||||||
@@ -1271,10 +1275,6 @@ End: %2</source>
|
|||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>设置</translation>
|
<translation>设置</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Input</source>
|
|
||||||
<translation>输入</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>New profile</source>
|
<source>New profile</source>
|
||||||
<translation>手动输入配置</translation>
|
<translation>手动输入配置</translation>
|
||||||
@@ -1441,18 +1441,6 @@ Split by line.</source>
|
|||||||
<source>Current Select</source>
|
<source>Current Select</source>
|
||||||
<translation>当前选中</translation>
|
<translation>当前选中</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Please enter the items to be tested, separated by commas
|
|
||||||
1. Latency
|
|
||||||
2. Download speed
|
|
||||||
3. In and Out IP
|
|
||||||
4. UDP Latency</source>
|
|
||||||
<translation>请输入要测试的项目,用逗号分隔
|
|
||||||
1. TCP 延迟
|
|
||||||
2. 下载速度
|
|
||||||
3. 入口出口 IP
|
|
||||||
4. UDP DNS 延迟</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Show Window</source>
|
<source>Show Window</source>
|
||||||
<translation>显示主窗口</translation>
|
<translation>显示主窗口</translation>
|
||||||
@@ -1489,6 +1477,26 @@ Split by line.</source>
|
|||||||
<source>Select mode, double-click or press Enter to select a profile, press ESC to exit.</source>
|
<source>Select mode, double-click or press Enter to select a profile, press ESC to exit.</source>
|
||||||
<translation>选择模式,双击或按回车键选择一个配置文件,按ESC键退出。</translation>
|
<translation>选择模式,双击或按回车键选择一个配置文件,按ESC键退出。</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Latency</source>
|
||||||
|
<translation>延迟</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>UDP latency</source>
|
||||||
|
<translation>UDP 延迟</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Download speed</source>
|
||||||
|
<translation>下载速度</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>In and Out IP</source>
|
||||||
|
<translation>入口出口IP</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Test Options</source>
|
||||||
|
<translation>测试选项</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ProxyItem</name>
|
<name>ProxyItem</name>
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
|||||||
D_LOAD_INT(inbound_socks_port)
|
D_LOAD_INT(inbound_socks_port)
|
||||||
D_LOAD_INT_ENABLE(inbound_http_port, http_enable)
|
D_LOAD_INT_ENABLE(inbound_http_port, http_enable)
|
||||||
D_LOAD_INT(test_concurrent)
|
D_LOAD_INT(test_concurrent)
|
||||||
D_LOAD_STRING(test_url)
|
D_LOAD_STRING(test_latency_url)
|
||||||
|
D_LOAD_STRING(test_download_url)
|
||||||
|
|
||||||
connect(ui->custom_inbound_edit, &QPushButton::clicked, this, [=] {
|
connect(ui->custom_inbound_edit, &QPushButton::clicked, this, [=] {
|
||||||
C_EDIT_JSON_ALLOW_EMPTY(custom_inbound)
|
C_EDIT_JSON_ALLOW_EMPTY(custom_inbound)
|
||||||
@@ -262,7 +263,8 @@ void DialogBasicSettings::accept() {
|
|||||||
D_SAVE_INT(inbound_socks_port)
|
D_SAVE_INT(inbound_socks_port)
|
||||||
D_SAVE_INT_ENABLE(inbound_http_port, http_enable)
|
D_SAVE_INT_ENABLE(inbound_http_port, http_enable)
|
||||||
D_SAVE_INT(test_concurrent)
|
D_SAVE_INT(test_concurrent)
|
||||||
D_SAVE_STRING(test_url)
|
D_SAVE_STRING(test_latency_url)
|
||||||
|
D_SAVE_STRING(test_download_url)
|
||||||
|
|
||||||
// Style
|
// Style
|
||||||
|
|
||||||
|
|||||||
@@ -144,38 +144,18 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="hlayout_l4">
|
|
||||||
<item>
|
|
||||||
<widget class="QGroupBox" name="groupBox_log">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">Loglevel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QComboBox" name="log_level"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox1">
|
<widget class="QGroupBox" name="groupBox1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_9" stretch="0,8,1,1">
|
<layout class="QHBoxLayout" name="horizontalLayout_9" stretch="0,8,1,1">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_13">
|
<widget class="QLabel" name="label_13">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Test URL</string>
|
<string>Latency Test URL</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLineEdit" name="test_url"/>
|
<widget class="QLineEdit" name="test_latency_url"/>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_14">
|
<widget class="QLabel" name="label_14">
|
||||||
@@ -190,6 +170,22 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="horizontalGroupBox">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_19">
|
||||||
|
<property name="text">
|
||||||
|
<string>Download Test URL</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="MyLineEdit" name="test_download_url"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="horizontalGroupBox1">
|
<widget class="QGroupBox" name="horizontalGroupBox1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_18">
|
<layout class="QHBoxLayout" name="horizontalLayout_18">
|
||||||
@@ -578,6 +574,28 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_log">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">Loglevel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="log_level"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_mux">
|
<widget class="QGroupBox" name="groupBox_mux">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@@ -644,8 +662,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>198</width>
|
<width>568</width>
|
||||||
<height>58</height>
|
<height>297</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
|
||||||
// ext core
|
// ext core
|
||||||
|
|
||||||
@@ -63,19 +64,45 @@ void MainWindow::speedtest_current_group(int mode) {
|
|||||||
if (group->archive) return;
|
if (group->archive) return;
|
||||||
|
|
||||||
#ifndef NKR_NO_GRPC
|
#ifndef NKR_NO_GRPC
|
||||||
if (speedtesting) return;
|
if (speedtesting) {
|
||||||
|
MessageBoxWarning(software_name, "The last speed test did not exit completely, please wait. If it persists, please restart the program.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QStringList full_test_flags;
|
QStringList full_test_flags;
|
||||||
if (mode == libcore::FullTest) {
|
if (mode == libcore::FullTest) {
|
||||||
bool ok;
|
auto w = new QDialog(this);
|
||||||
auto s = QInputDialog::getText(nullptr, tr("Input"),
|
auto layout = new QVBoxLayout(w);
|
||||||
tr("Please enter the items to be tested, separated by commas\n"
|
w->setWindowTitle(tr("Test Options"));
|
||||||
"1. Latency\n"
|
//
|
||||||
"2. Download speed\n"
|
auto l1 = new QCheckBox(tr("Latency"));
|
||||||
"3. In and Out IP\n"
|
auto l2 = new QCheckBox(tr("UDP latency"));
|
||||||
"4. UDP Latency"),
|
auto l3 = new QCheckBox(tr("Download speed"));
|
||||||
QLineEdit::Normal, "1,4", &ok);
|
auto l4 = new QCheckBox(tr("In and Out IP"));
|
||||||
full_test_flags = s.trimmed().split(",");
|
//
|
||||||
if (!ok) return;
|
auto box = new QDialogButtonBox;
|
||||||
|
box->setOrientation(Qt::Horizontal);
|
||||||
|
box->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
|
||||||
|
connect(box, &QDialogButtonBox::accepted, w, &QDialog::accept);
|
||||||
|
connect(box, &QDialogButtonBox::rejected, w, &QDialog::reject);
|
||||||
|
//
|
||||||
|
layout->addWidget(l1);
|
||||||
|
layout->addWidget(l2);
|
||||||
|
layout->addWidget(l3);
|
||||||
|
layout->addWidget(l4);
|
||||||
|
layout->addWidget(box);
|
||||||
|
if (w->exec() != QDialog::Accepted) {
|
||||||
|
w->deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if (l1->isChecked()) full_test_flags << "1";
|
||||||
|
if (l2->isChecked()) full_test_flags << "2";
|
||||||
|
if (l3->isChecked()) full_test_flags << "3";
|
||||||
|
if (l4->isChecked()) full_test_flags << "4";
|
||||||
|
//
|
||||||
|
w->deleteLater();
|
||||||
|
if (full_test_flags.isEmpty()) return;
|
||||||
}
|
}
|
||||||
speedtesting = true;
|
speedtesting = true;
|
||||||
|
|
||||||
@@ -106,17 +133,33 @@ void MainWindow::speedtest_current_group(int mode) {
|
|||||||
libcore::TestReq req;
|
libcore::TestReq req;
|
||||||
req.set_mode((libcore::TestMode) mode);
|
req.set_mode((libcore::TestMode) mode);
|
||||||
req.set_timeout(3000);
|
req.set_timeout(3000);
|
||||||
req.set_url(NekoGui::dataStore->test_url.toStdString());
|
req.set_url(NekoGui::dataStore->test_latency_url.toStdString());
|
||||||
|
|
||||||
//
|
//
|
||||||
std::list<std::shared_ptr<NekoGui_sys::ExternalProcess>> extCs;
|
std::list<std::shared_ptr<NekoGui_sys::ExternalProcess>> extCs;
|
||||||
|
QSemaphore extSem;
|
||||||
|
|
||||||
if (mode == libcore::TestMode::UrlTest || mode == libcore::FullTest) {
|
if (mode == libcore::TestMode::UrlTest || mode == libcore::FullTest) {
|
||||||
auto c = BuildConfig(profile, true, false);
|
auto c = BuildConfig(profile, true, false);
|
||||||
// TODO refactor external test
|
if (!c->error.isEmpty()) {
|
||||||
|
profile->full_test_report = c->error;
|
||||||
|
profile->Save();
|
||||||
|
auto profileId = profile->id;
|
||||||
|
runOnUiThread([this, profileId] {
|
||||||
|
refresh_proxy_list(profileId);
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//
|
||||||
if (!c->extRs.empty()) {
|
if (!c->extRs.empty()) {
|
||||||
extCs = CreateExtCFromExtR(c->extRs, true);
|
runOnUiThread(
|
||||||
QThread::msleep(500);
|
[&] {
|
||||||
|
extCs = CreateExtCFromExtR(c->extRs, true);
|
||||||
|
QThread::msleep(500);
|
||||||
|
extSem.release();
|
||||||
|
},
|
||||||
|
DS_cores);
|
||||||
|
extSem.acquire();
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
auto config = new libcore::LoadConfigReq;
|
auto config = new libcore::LoadConfigReq;
|
||||||
@@ -125,18 +168,30 @@ void MainWindow::speedtest_current_group(int mode) {
|
|||||||
req.set_in_address(profile->bean->serverAddress.toStdString());
|
req.set_in_address(profile->bean->serverAddress.toStdString());
|
||||||
|
|
||||||
req.set_full_latency(full_test_flags.contains("1"));
|
req.set_full_latency(full_test_flags.contains("1"));
|
||||||
req.set_full_speed(full_test_flags.contains("2"));
|
req.set_full_udp_latency(full_test_flags.contains("2"));
|
||||||
req.set_full_in_out(full_test_flags.contains("3"));
|
req.set_full_speed(full_test_flags.contains("3"));
|
||||||
req.set_full_udp_latency(full_test_flags.contains("4"));
|
req.set_full_in_out(full_test_flags.contains("4"));
|
||||||
|
|
||||||
|
req.set_full_speed_url(NekoGui::dataStore->test_download_url.toStdString());
|
||||||
} else if (mode == libcore::TcpPing) {
|
} else if (mode == libcore::TcpPing) {
|
||||||
req.set_address(profile->bean->DisplayAddress().toStdString());
|
req.set_address(profile->bean->DisplayAddress().toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rpcOK;
|
bool rpcOK;
|
||||||
auto result = defaultClient->Test(&rpcOK, req);
|
auto result = defaultClient->Test(&rpcOK, req);
|
||||||
for (const auto &extC: extCs) {
|
//
|
||||||
extC->Kill();
|
if (!extCs.empty()) {
|
||||||
|
runOnUiThread(
|
||||||
|
[&] {
|
||||||
|
for (const auto &extC: extCs) {
|
||||||
|
extC->Kill();
|
||||||
|
}
|
||||||
|
extSem.release();
|
||||||
|
},
|
||||||
|
DS_cores);
|
||||||
|
extSem.acquire();
|
||||||
}
|
}
|
||||||
|
//
|
||||||
if (!rpcOK) return;
|
if (!rpcOK) return;
|
||||||
|
|
||||||
if (result.error().empty()) {
|
if (result.error().empty()) {
|
||||||
@@ -177,7 +232,7 @@ void MainWindow::speedtest_current() {
|
|||||||
libcore::TestReq req;
|
libcore::TestReq req;
|
||||||
req.set_mode(libcore::UrlTest);
|
req.set_mode(libcore::UrlTest);
|
||||||
req.set_timeout(3000);
|
req.set_timeout(3000);
|
||||||
req.set_url(NekoGui::dataStore->test_url.toStdString());
|
req.set_url(NekoGui::dataStore->test_latency_url.toStdString());
|
||||||
|
|
||||||
bool rpcOK;
|
bool rpcOK;
|
||||||
auto result = defaultClient->Test(&rpcOK, req);
|
auto result = defaultClient->Test(&rpcOK, req);
|
||||||
|
|||||||
Reference in New Issue
Block a user