From c3072d4ed0aefb5882cbc4698047bc1ee473051e Mon Sep 17 00:00:00 2001 From: "rui.zheng" Date: Sat, 8 Oct 2016 17:31:35 +0800 Subject: [PATCH] the additional HTTP2 proxies are considered as HTTPS proxies --- README.md | 2 +- chain.go | 3 +++ conn.go | 4 ++-- node.go | 5 +++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 571cf29..84d253f 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,7 @@ gost的HTTP2支持两种模式并自适应: * 作为标准的HTTP2代理,并向下兼容HTTPS代理。 * 作为transport(类似于wss),传输其他协议。 -**注:gost的代理链仅支持一个HTTP2代理节点,采用就近原则,会将第一个遇到的HTTP2代理节点视为HTTP2代理,其他HTTP2代理节点则被视为HTTP代理。** +**注:gost的代理链仅支持一个HTTP2代理节点,采用就近原则,会将第一个遇到的HTTP2代理节点视为HTTP2代理,其他HTTP2代理节点则被视为HTTPS代理。** 加密机制 ------ diff --git a/chain.go b/chain.go index c4f4f8d..f591b05 100644 --- a/chain.go +++ b/chain.go @@ -140,6 +140,9 @@ func (c *ProxyChain) GetConn() (net.Conn, error) { return nil, err } http2Node := c.nodes[c.http2NodeIndex] + if http2Node.Transport == "http2" { + http2Node.Transport = "h2" + } if http2Node.Protocol == "http2" { http2Node.Protocol = "socks5" // assume it as socks5 protocol, so we can do much more things. } diff --git a/conn.go b/conn.go index db4755f..053c672 100644 --- a/conn.go +++ b/conn.go @@ -73,14 +73,14 @@ func (c *ProxyConn) handshake() error { return err } c.conn = conn - case "tls": // tls connection + case "tls", "http2": // tls connection tlsUsed = true cfg := &tls.Config{ InsecureSkipVerify: c.Node.insecureSkipVerify(), ServerName: c.Node.serverName, } c.conn = tls.Client(c.conn, cfg) - case "http2": + case "h2": // same as http2, but just set a flag for later using. tlsUsed = true default: } diff --git a/node.go b/node.go index d618d53..79be88c 100644 --- a/node.go +++ b/node.go @@ -1,6 +1,7 @@ package gost import ( + "fmt" "net" "net/url" "strconv" @@ -112,3 +113,7 @@ func (node *ProxyNode) keyFile() string { } return DefaultKeyFile } + +func (node ProxyNode) String() string { + return fmt.Sprintf("transport: %s, protocol: %s, addr: %s", node.Transport, node.Protocol, node.Addr) +}