mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2024-11-16 11:42:43 +08:00
Chore: adjust vmess 0rtt code and split xray test
This commit is contained in:
parent
d867bb3b50
commit
58d66fb4e4
|
@ -348,13 +348,13 @@ func TestClash_VmessGrpc(t *testing.T) {
|
||||||
|
|
||||||
func TestClash_VmessWebsocket0RTT(t *testing.T) {
|
func TestClash_VmessWebsocket0RTT(t *testing.T) {
|
||||||
cfg := &container.Config{
|
cfg := &container.Config{
|
||||||
Image: ImageXray,
|
Image: ImageVmess,
|
||||||
ExposedPorts: defaultExposedPorts,
|
ExposedPorts: defaultExposedPorts,
|
||||||
}
|
}
|
||||||
hostCfg := &container.HostConfig{
|
hostCfg := &container.HostConfig{
|
||||||
PortBindings: defaultPortBindings,
|
PortBindings: defaultPortBindings,
|
||||||
Binds: []string{
|
Binds: []string{
|
||||||
fmt.Sprintf("%s:/etc/xray/config.json", C.Path.Resolve("vmess-ws-0rtt.json")),
|
fmt.Sprintf("%s:/etc/v2ray/config.json", C.Path.Resolve("vmess-ws-0rtt.json")),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,6 +387,46 @@ func TestClash_VmessWebsocket0RTT(t *testing.T) {
|
||||||
testSuit(t, proxy)
|
testSuit(t, proxy)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClash_VmessWebsocketXray0RTT(t *testing.T) {
|
||||||
|
cfg := &container.Config{
|
||||||
|
Image: ImageXray,
|
||||||
|
ExposedPorts: defaultExposedPorts,
|
||||||
|
}
|
||||||
|
hostCfg := &container.HostConfig{
|
||||||
|
PortBindings: defaultPortBindings,
|
||||||
|
Binds: []string{
|
||||||
|
fmt.Sprintf("%s:/etc/xray/config.json", C.Path.Resolve("vmess-ws-0rtt.json")),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
id, err := startContainer(cfg, hostCfg, "vmess-xray-ws-0rtt")
|
||||||
|
if err != nil {
|
||||||
|
assert.FailNow(t, err.Error())
|
||||||
|
}
|
||||||
|
defer cleanContainer(id)
|
||||||
|
|
||||||
|
proxy, err := outbound.NewVmess(outbound.VmessOption{
|
||||||
|
Name: "vmess",
|
||||||
|
Server: localIP.String(),
|
||||||
|
Port: 10002,
|
||||||
|
UUID: "b831381d-6324-4d53-ad4f-8cda48b30811",
|
||||||
|
Cipher: "auto",
|
||||||
|
AlterID: 32,
|
||||||
|
Network: "ws",
|
||||||
|
UDP: true,
|
||||||
|
ServerName: "example.org",
|
||||||
|
WSOpts: outbound.WSOptions{
|
||||||
|
Path: "/?ed=2048",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
assert.FailNow(t, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(waitTime)
|
||||||
|
testSuit(t, proxy)
|
||||||
|
}
|
||||||
|
|
||||||
func Benchmark_Vmess(b *testing.B) {
|
func Benchmark_Vmess(b *testing.B) {
|
||||||
configPath := C.Path.Resolve("vmess-aead.json")
|
configPath := C.Path.Resolve("vmess-aead.json")
|
||||||
|
|
||||||
|
|
|
@ -130,14 +130,12 @@ func (wsc *websocketConn) SetWriteDeadline(t time.Time) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wsedc *websocketWithEarlyDataConn) Dial(earlyData []byte) error {
|
func (wsedc *websocketWithEarlyDataConn) Dial(earlyData []byte) error {
|
||||||
earlyDataBuf := bytes.NewBuffer(nil)
|
base64DataBuf := &bytes.Buffer{}
|
||||||
base64EarlyDataEncoder := base64.NewEncoder(base64.RawURLEncoding, earlyDataBuf)
|
base64EarlyDataEncoder := base64.NewEncoder(base64.RawURLEncoding, base64DataBuf)
|
||||||
|
|
||||||
earlydata := bytes.NewReader(earlyData)
|
earlyDataBuf := bytes.NewBuffer(earlyData)
|
||||||
limitedEarlyDatareader := io.LimitReader(earlydata, int64(wsedc.config.MaxEarlyData))
|
if _, err := base64EarlyDataEncoder.Write(earlyDataBuf.Next(wsedc.config.MaxEarlyData)); err != nil {
|
||||||
n, encerr := io.Copy(base64EarlyDataEncoder, limitedEarlyDatareader)
|
return errors.New("failed to encode early data: " + err.Error())
|
||||||
if encerr != nil {
|
|
||||||
return errors.New("failed to encode early data: " + encerr.Error())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if errc := base64EarlyDataEncoder.Close(); errc != nil {
|
if errc := base64EarlyDataEncoder.Close(); errc != nil {
|
||||||
|
@ -145,15 +143,14 @@ func (wsedc *websocketWithEarlyDataConn) Dial(earlyData []byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
if wsedc.Conn, err = streamWebsocketConn(wsedc.underlay, wsedc.config, earlyDataBuf); err != nil {
|
if wsedc.Conn, err = streamWebsocketConn(wsedc.underlay, wsedc.config, base64DataBuf); err != nil {
|
||||||
wsedc.Close()
|
wsedc.Close()
|
||||||
return errors.New("failed to dial WebSocket: " + err.Error())
|
return errors.New("failed to dial WebSocket: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
wsedc.dialed <- true
|
wsedc.dialed <- true
|
||||||
|
if earlyDataBuf.Len() != 0 {
|
||||||
if n != int64(len(earlyData)) {
|
_, err = wsedc.Conn.Write(earlyDataBuf.Bytes())
|
||||||
_, err = wsedc.Conn.Write(earlyData[n:])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue
Block a user