From de28198234aee60b85ab504ba9cc7b234cbd2013 Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Mon, 15 Aug 2016 17:47:15 +0800 Subject: [PATCH] Guess protocol --- transport/internet/ws/dialer.go | 118 ++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 53 deletions(-) diff --git a/transport/internet/ws/dialer.go b/transport/internet/ws/dialer.go index 383dee67..70e5ab81 100644 --- a/transport/internet/ws/dialer.go +++ b/transport/internet/ws/dialer.go @@ -53,59 +53,7 @@ func wsDial(src v2net.Address, dest v2net.Destination) (*wsconn, error) { dialer := websocket.Dialer{NetDial: commonDial, ReadBufferSize: 65536, WriteBufferSize: 65536, TLSClientConfig: tlsconf} - effpto := func(dst v2net.Destination) string { - - if effectiveConfig.Pto != "" { - return effectiveConfig.Pto - } - - switch dst.Port().Value() { - /* - Since the value is not given explicitly, - We are guessing it now. - - HTTP Port: - 80 - 8080 - 8880 - 2052 - 2082 - 2086 - 2095 - - HTTPS Port: - 443 - 2053 - 2083 - 2087 - 2096 - 8443 - - if the port you are using is not well-known, - specify it to avoid this process. - - We will return "CRASH"turn "unknown" if we can't guess it, cause Dial to fail. - */ - case 80: - case 8080: - case 8880: - case 2052: - case 2082: - case 2086: - case 2095: - return "ws" - case 443: - case 2053: - case 2083: - case 2087: - case 2096: - case 8443: - return "wss" - default: - return "unknown" - } - panic("Runtime unstable. Please report this bug to developers.") - }(dest) + effpto := calcPto(dest) uri := func(dst v2net.Destination, pto string, path string) string { return fmt.Sprintf("%v://%v/%v", pto, dst.NetAddr(), path) @@ -125,3 +73,67 @@ func wsDial(src v2net.Address, dest v2net.Destination) (*wsconn, error) { return connv2ray }().(*wsconn), nil } + +func calcPto(dst v2net.Destination) string { + + if effectiveConfig.Pto != "" { + return effectiveConfig.Pto + } + + switch dst.Port().Value() { + /* + Since the value is not given explicitly, + We are guessing it now. + + HTTP Port: + 80 + 8080 + 8880 + 2052 + 2082 + 2086 + 2095 + + HTTPS Port: + 443 + 2053 + 2083 + 2087 + 2096 + 8443 + + if the port you are using is not well-known, + specify it to avoid this process. + + We will return "CRASH"turn "unknown" if we can't guess it, cause Dial to fail. + */ + case 80: + fallthrough + case 8080: + fallthrough + case 8880: + fallthrough + case 2052: + fallthrough + case 2082: + fallthrough + case 2086: + fallthrough + case 2095: + return "ws" + case 443: + fallthrough + case 2053: + fallthrough + case 2083: + fallthrough + case 2087: + fallthrough + case 2096: + fallthrough + case 8443: + return "wss" + default: + return "unknown" + } +}