diff options
author | teor <teor@torproject.org> | 2019-03-27 09:36:55 +1000 |
---|---|---|
committer | teor <teor@torproject.org> | 2019-03-27 09:36:55 +1000 |
commit | c72526f16870226379c64fbed9e7b25351723c53 (patch) | |
tree | 1d19ba3a14daf6aaa72c027541fcc17f1e5966da /src/core/or/connection_or.c | |
parent | 7502e5467b5b22bee118616d393ace5d67b3607f (diff) | |
parent | 9ae8d663ea9006c9e20f48868d96877984652e16 (diff) | |
download | tor-c72526f16870226379c64fbed9e7b25351723c53.tar.gz tor-c72526f16870226379c64fbed9e7b25351723c53.zip |
Merge branch 'maint-0.4.0'
Diffstat (limited to 'src/core/or/connection_or.c')
-rw-r--r-- | src/core/or/connection_or.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c index 841ba8fa32..e9b4b21955 100644 --- a/src/core/or/connection_or.c +++ b/src/core/or/connection_or.c @@ -437,7 +437,15 @@ connection_or_state_publish(const or_connection_t *conn, uint8_t state) msg.type = ORCONN_MSGTYPE_STATE; msg.u.state.gid = conn->base_.global_identifier; - msg.u.state.proxy_type = conn->proxy_type; + if (conn->is_pt) { + /* Do extra decoding because conn->proxy_type indicates the proxy + * protocol that tor uses to talk with the transport plugin, + * instead of PROXY_PLUGGABLE. */ + tor_assert_nonfatal(conn->proxy_type != PROXY_NONE); + msg.u.state.proxy_type = PROXY_PLUGGABLE; + } else { + msg.u.state.proxy_type = conn->proxy_type; + } msg.u.state.state = state; if (conn->chan) { msg.u.state.chan = TLS_CHAN_TO_BASE(conn->chan)->global_identifier; @@ -1472,7 +1480,7 @@ connection_or_connect, (const tor_addr_t *_addr, uint16_t port, int r; tor_addr_t proxy_addr; uint16_t proxy_port; - int proxy_type; + int proxy_type, is_pt = 0; tor_assert(_addr); tor_assert(id_digest); @@ -1516,13 +1524,15 @@ connection_or_connect, (const tor_addr_t *_addr, uint16_t port, conn->is_outgoing = 1; /* If we are using a proxy server, find it and use it. */ - r = get_proxy_addrport(&proxy_addr, &proxy_port, &proxy_type, TO_CONN(conn)); + r = get_proxy_addrport(&proxy_addr, &proxy_port, &proxy_type, &is_pt, + TO_CONN(conn)); if (r == 0) { conn->proxy_type = proxy_type; if (proxy_type != PROXY_NONE) { tor_addr_copy(&addr, &proxy_addr); port = proxy_port; conn->base_.proxy_state = PROXY_INFANT; + conn->is_pt = is_pt; } connection_or_change_state(conn, OR_CONN_STATE_CONNECTING); connection_or_event_status(conn, OR_CONN_EVENT_LAUNCHED, 0); |