aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/connection_or.c
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2019-03-27 09:36:55 +1000
committerteor <teor@torproject.org>2019-03-27 09:36:55 +1000
commitc72526f16870226379c64fbed9e7b25351723c53 (patch)
tree1d19ba3a14daf6aaa72c027541fcc17f1e5966da /src/core/or/connection_or.c
parent7502e5467b5b22bee118616d393ace5d67b3607f (diff)
parent9ae8d663ea9006c9e20f48868d96877984652e16 (diff)
downloadtor-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.c16
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);