ソースを参照

Guess protocol

Shelikhoo 9 年 前
コミット
de28198234
1 ファイル変更65 行追加53 行削除
  1. 65 53
      transport/internet/ws/dialer.go

+ 65 - 53
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"
+	}
+}