Loading src/or/circuitbuild.c +19 −15 Original line number Diff line number Diff line Loading @@ -4603,8 +4603,7 @@ transport_add_from_config(const tor_addr_t *addr, uint16_t port, tor_addr_copy(&t->addr, addr); t->port = port; /** check strdup return */ t->name = strdup(name); t->name = tor_strdup(name); t->socks_version = socks_ver; if (!transport_list) transport_list = smartlist_create(); Loading Loading @@ -4654,15 +4653,16 @@ match_bridges_with_transports(void) if (!found_match) { log_warn(LD_CONFIG, "Couldn't find transport " "match for %s!\n", b->transport_name_config); /* tor_free(b->transport_name_config); */ return -1; } } SMARTLIST_FOREACH_END(b); /* count number of transports to see if there were transports that didn't get matched to a bridge. */ /* Count number of transports to make sure that all transports got matched to bridges. */ SMARTLIST_FOREACH(transport_list, transport_info_t *, t, n_transports++); if (n_transports != n_matches) { log_warn(LD_CONFIG, "You have %d transports and we only " log_warn(LD_CONFIG, "You have %d transports but we only " "managed to match %d of them!\n", n_transports, n_matches); return -1; } Loading Loading @@ -4748,7 +4748,10 @@ learned_router_identity(const tor_addr_t *addr, uint16_t port, /** Remember a new bridge at <b>addr</b>:<b>port</b>. If <b>digest</b> * is set, it tells us the identity key too. If we already had the * bridge in our list, unmark it, and don't actually add anything new. */ * bridge in our list, unmark it, and don't actually add anything new. * If <b>transport_name</b> is non-NULL - the bridge is associated with a * pluggable transport - we assign the transport to the bridge. */ void bridge_add_from_config(const tor_addr_t *addr, uint16_t port, const char *digest, const char *transport_name) Loading Loading @@ -4805,11 +4808,12 @@ find_bridge_by_digest(const char *digest) } /** If <b>addr</b> and <b>port</b> match one of our known bridges, * returns it's transport protocol if it has one, else returns NULL. * returns its transport protocol if it has one, else returns NULL. */ transport_info_t * find_bridge_transport_by_addrport(const tor_addr_t *addr, uint16_t port) find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port) { assert(bridge_list); SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) { if (tor_addr_eq(&bridge->addr, addr) && Loading src/or/circuitbuild.h +2 −6 Original line number Diff line number Diff line Loading @@ -17,13 +17,10 @@ typedef struct { /* SOCKS version */ int socks_version; /* Name of pluggable transport protocol */ char *name; /* Address of proxy */ tor_addr_t addr; /* Port of proxy */ uint16_t port; } transport_info_t; Loading Loading @@ -143,13 +140,12 @@ void circuit_build_times_network_circ_success(circuit_build_times_t *cbt); int circuit_build_times_get_bw_scale(networkstatus_t *ns); void clear_transport_list(void); int match_bridges_with_transports(void); void transport_add_from_config(const tor_addr_t *addr, uint16_t port, const char *name, int socks_ver); transport_info_t * find_bridge_transport_by_addrport(const tor_addr_t *addr, uint16_t port); find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port); #endif src/or/config.c +27 −17 Original line number Diff line number Diff line Loading @@ -571,7 +571,7 @@ static int check_nickname_list(const char *lst, const char *name, char **msg); static void config_register_addressmaps(or_options_t *options); static int parse_bridge_line(const char *line, int validate_only); static int parse_transport_line(const char *line, int validate_only); static int parse_client_transport_line(const char *line, int validate_only); static int parse_dir_server_line(const char *line, dirinfo_type_t required_type, int validate_only); Loading Loading @@ -1210,7 +1210,7 @@ options_act(or_options_t *old_options) if (options->ClientTransportPlugin) { clear_transport_list(); for (cl = options->ClientTransportPlugin; cl; cl = cl->next) { if (parse_transport_line(cl->value, 0)<0) { if (parse_client_transport_line(cl->value, 0)<0) { log_warn(LD_BUG, "Previously validated ClientTransportPlugin line " "could not be added!"); Loading @@ -1234,6 +1234,7 @@ options_act(or_options_t *old_options) /** Okay, we have Bridges and we have ClientTransportPlugins. Let's match them together. */ if (options->Bridges && options->ClientTransportPlugin) { assert(!server_mode(options)); if (match_bridges_with_transports() < 0) return -1; } Loading Loading @@ -3688,8 +3689,11 @@ options_validate(or_options_t *old_options, or_options_t *options, if (options->ClientTransportPlugin) { if (!options->Bridges) REJECT("ClientTransportPlugin found without any bridges."); if (server_mode(options)) REJECT("ClientTransportPlugin found but we are a server."); for (cl = options->ClientTransportPlugin; cl; cl = cl->next) { if (parse_transport_line(cl->value, 1)<0) if (parse_client_transport_line(cl->value, 1)<0) REJECT("Transport line did not parse. See logs for details."); } } Loading Loading @@ -4633,7 +4637,7 @@ parse_bridge_line(const char *line, int validate_only) } if (!validate_only) { log_warn(LD_DIR, "Bridge at %s:%d with transport %s (%s)", log_debug(LD_DIR, "Bridge at %s:%d with transport %s (%s)", fmt_addr(&addr), (int)port, transport_name, fingerprint ? fingerprint : "no key listed"); bridge_add_from_config(&addr, port, Loading @@ -4655,8 +4659,14 @@ parse_bridge_line(const char *line, int validate_only) return r; } /** Read the contents of a ClientTransportPlugin line from * <b>line</b>. Return 0 if the line is well-formed, and -1 if it * isn't. If <b>validate_only</b> is 0, and the line is well-formed, * then add the transport described in the line to our internal * transport list. */ static int parse_transport_line(const char *line, int validate_only) parse_client_transport_line(const char *line, int validate_only) { smartlist_t *items = NULL; int r; Loading @@ -4672,7 +4682,7 @@ parse_transport_line(const char *line, int validate_only) SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1); if (smartlist_len(items) < 3) { log_warn(LD_CONFIG, "parse_transport_line(): " log_warn(LD_CONFIG, "parse_client_transport_line(): " "Too few arguments on ClientTransportPlugin line."); goto err; } Loading Loading @@ -4708,7 +4718,7 @@ parse_transport_line(const char *line, int validate_only) } if (!validate_only) { log_warn(LD_DIR, "Transport %s at %s:%d", name, log_debug(LD_DIR, "Transport %s found at %s:%d", name, fmt_addr(&addr), (int)port); transport_add_from_config(&addr, port, name, socks_ver); Loading src/or/connection_or.c +5 −6 Original line number Diff line number Diff line Loading @@ -335,11 +335,11 @@ connection_or_finished_connecting(or_connection_t *or_conn) proxy_type = PROXY_SOCKS4; else if (get_options()->Socks5Proxy) proxy_type = PROXY_SOCKS5; else if (get_options()->UseBridges) { else if (get_options()->ClientTransportPlugin) { transport_info_t *transport; transport = find_bridge_transport_by_addrport(&conn->addr,conn->port); transport = find_transport_by_bridge_addrport(&conn->addr,conn->port); if (transport) { /* this bridge supports transports. use proxy. */ log_warn(LD_GENERAL, "Setting up pluggable transport plugin proxy type!\n"); log_debug(LD_GENERAL, "Found transport. Setting proxy type!\n"); proxy_type = transport->socks_version; } } Loading Loading @@ -871,10 +871,9 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port, port = options->Socks5ProxyPort; } else if (options->ClientTransportPlugin) { transport_info_t *transport; transport = find_bridge_transport_by_addrport(&addr, port); transport = find_transport_by_bridge_addrport(&addr, port); if (transport) { log_warn(LD_GENERAL, "Our bridge uses a pluggable transport plugin. " "Setting up proxying!"); log_debug(LD_GENERAL, "Found transport. Setting up proxying!"); using_proxy = 1; tor_addr_copy(&addr, &transport->addr); port = transport->port; Loading src/or/or.h +2 −1 Original line number Diff line number Diff line Loading @@ -2660,7 +2660,8 @@ typedef struct { config_line_t *Bridges; /**< List of bootstrap bridge addresses. */ config_line_t *ClientTransportPlugin; /**< List of client transport plugins. */ config_line_t *ClientTransportPlugin; /**< List of client transport plugins. */ int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make * this explicit so we can change how we behave in the Loading Loading
src/or/circuitbuild.c +19 −15 Original line number Diff line number Diff line Loading @@ -4603,8 +4603,7 @@ transport_add_from_config(const tor_addr_t *addr, uint16_t port, tor_addr_copy(&t->addr, addr); t->port = port; /** check strdup return */ t->name = strdup(name); t->name = tor_strdup(name); t->socks_version = socks_ver; if (!transport_list) transport_list = smartlist_create(); Loading Loading @@ -4654,15 +4653,16 @@ match_bridges_with_transports(void) if (!found_match) { log_warn(LD_CONFIG, "Couldn't find transport " "match for %s!\n", b->transport_name_config); /* tor_free(b->transport_name_config); */ return -1; } } SMARTLIST_FOREACH_END(b); /* count number of transports to see if there were transports that didn't get matched to a bridge. */ /* Count number of transports to make sure that all transports got matched to bridges. */ SMARTLIST_FOREACH(transport_list, transport_info_t *, t, n_transports++); if (n_transports != n_matches) { log_warn(LD_CONFIG, "You have %d transports and we only " log_warn(LD_CONFIG, "You have %d transports but we only " "managed to match %d of them!\n", n_transports, n_matches); return -1; } Loading Loading @@ -4748,7 +4748,10 @@ learned_router_identity(const tor_addr_t *addr, uint16_t port, /** Remember a new bridge at <b>addr</b>:<b>port</b>. If <b>digest</b> * is set, it tells us the identity key too. If we already had the * bridge in our list, unmark it, and don't actually add anything new. */ * bridge in our list, unmark it, and don't actually add anything new. * If <b>transport_name</b> is non-NULL - the bridge is associated with a * pluggable transport - we assign the transport to the bridge. */ void bridge_add_from_config(const tor_addr_t *addr, uint16_t port, const char *digest, const char *transport_name) Loading Loading @@ -4805,11 +4808,12 @@ find_bridge_by_digest(const char *digest) } /** If <b>addr</b> and <b>port</b> match one of our known bridges, * returns it's transport protocol if it has one, else returns NULL. * returns its transport protocol if it has one, else returns NULL. */ transport_info_t * find_bridge_transport_by_addrport(const tor_addr_t *addr, uint16_t port) find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port) { assert(bridge_list); SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) { if (tor_addr_eq(&bridge->addr, addr) && Loading
src/or/circuitbuild.h +2 −6 Original line number Diff line number Diff line Loading @@ -17,13 +17,10 @@ typedef struct { /* SOCKS version */ int socks_version; /* Name of pluggable transport protocol */ char *name; /* Address of proxy */ tor_addr_t addr; /* Port of proxy */ uint16_t port; } transport_info_t; Loading Loading @@ -143,13 +140,12 @@ void circuit_build_times_network_circ_success(circuit_build_times_t *cbt); int circuit_build_times_get_bw_scale(networkstatus_t *ns); void clear_transport_list(void); int match_bridges_with_transports(void); void transport_add_from_config(const tor_addr_t *addr, uint16_t port, const char *name, int socks_ver); transport_info_t * find_bridge_transport_by_addrport(const tor_addr_t *addr, uint16_t port); find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port); #endif
src/or/config.c +27 −17 Original line number Diff line number Diff line Loading @@ -571,7 +571,7 @@ static int check_nickname_list(const char *lst, const char *name, char **msg); static void config_register_addressmaps(or_options_t *options); static int parse_bridge_line(const char *line, int validate_only); static int parse_transport_line(const char *line, int validate_only); static int parse_client_transport_line(const char *line, int validate_only); static int parse_dir_server_line(const char *line, dirinfo_type_t required_type, int validate_only); Loading Loading @@ -1210,7 +1210,7 @@ options_act(or_options_t *old_options) if (options->ClientTransportPlugin) { clear_transport_list(); for (cl = options->ClientTransportPlugin; cl; cl = cl->next) { if (parse_transport_line(cl->value, 0)<0) { if (parse_client_transport_line(cl->value, 0)<0) { log_warn(LD_BUG, "Previously validated ClientTransportPlugin line " "could not be added!"); Loading @@ -1234,6 +1234,7 @@ options_act(or_options_t *old_options) /** Okay, we have Bridges and we have ClientTransportPlugins. Let's match them together. */ if (options->Bridges && options->ClientTransportPlugin) { assert(!server_mode(options)); if (match_bridges_with_transports() < 0) return -1; } Loading Loading @@ -3688,8 +3689,11 @@ options_validate(or_options_t *old_options, or_options_t *options, if (options->ClientTransportPlugin) { if (!options->Bridges) REJECT("ClientTransportPlugin found without any bridges."); if (server_mode(options)) REJECT("ClientTransportPlugin found but we are a server."); for (cl = options->ClientTransportPlugin; cl; cl = cl->next) { if (parse_transport_line(cl->value, 1)<0) if (parse_client_transport_line(cl->value, 1)<0) REJECT("Transport line did not parse. See logs for details."); } } Loading Loading @@ -4633,7 +4637,7 @@ parse_bridge_line(const char *line, int validate_only) } if (!validate_only) { log_warn(LD_DIR, "Bridge at %s:%d with transport %s (%s)", log_debug(LD_DIR, "Bridge at %s:%d with transport %s (%s)", fmt_addr(&addr), (int)port, transport_name, fingerprint ? fingerprint : "no key listed"); bridge_add_from_config(&addr, port, Loading @@ -4655,8 +4659,14 @@ parse_bridge_line(const char *line, int validate_only) return r; } /** Read the contents of a ClientTransportPlugin line from * <b>line</b>. Return 0 if the line is well-formed, and -1 if it * isn't. If <b>validate_only</b> is 0, and the line is well-formed, * then add the transport described in the line to our internal * transport list. */ static int parse_transport_line(const char *line, int validate_only) parse_client_transport_line(const char *line, int validate_only) { smartlist_t *items = NULL; int r; Loading @@ -4672,7 +4682,7 @@ parse_transport_line(const char *line, int validate_only) SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1); if (smartlist_len(items) < 3) { log_warn(LD_CONFIG, "parse_transport_line(): " log_warn(LD_CONFIG, "parse_client_transport_line(): " "Too few arguments on ClientTransportPlugin line."); goto err; } Loading Loading @@ -4708,7 +4718,7 @@ parse_transport_line(const char *line, int validate_only) } if (!validate_only) { log_warn(LD_DIR, "Transport %s at %s:%d", name, log_debug(LD_DIR, "Transport %s found at %s:%d", name, fmt_addr(&addr), (int)port); transport_add_from_config(&addr, port, name, socks_ver); Loading
src/or/connection_or.c +5 −6 Original line number Diff line number Diff line Loading @@ -335,11 +335,11 @@ connection_or_finished_connecting(or_connection_t *or_conn) proxy_type = PROXY_SOCKS4; else if (get_options()->Socks5Proxy) proxy_type = PROXY_SOCKS5; else if (get_options()->UseBridges) { else if (get_options()->ClientTransportPlugin) { transport_info_t *transport; transport = find_bridge_transport_by_addrport(&conn->addr,conn->port); transport = find_transport_by_bridge_addrport(&conn->addr,conn->port); if (transport) { /* this bridge supports transports. use proxy. */ log_warn(LD_GENERAL, "Setting up pluggable transport plugin proxy type!\n"); log_debug(LD_GENERAL, "Found transport. Setting proxy type!\n"); proxy_type = transport->socks_version; } } Loading Loading @@ -871,10 +871,9 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port, port = options->Socks5ProxyPort; } else if (options->ClientTransportPlugin) { transport_info_t *transport; transport = find_bridge_transport_by_addrport(&addr, port); transport = find_transport_by_bridge_addrport(&addr, port); if (transport) { log_warn(LD_GENERAL, "Our bridge uses a pluggable transport plugin. " "Setting up proxying!"); log_debug(LD_GENERAL, "Found transport. Setting up proxying!"); using_proxy = 1; tor_addr_copy(&addr, &transport->addr); port = transport->port; Loading
src/or/or.h +2 −1 Original line number Diff line number Diff line Loading @@ -2660,7 +2660,8 @@ typedef struct { config_line_t *Bridges; /**< List of bootstrap bridge addresses. */ config_line_t *ClientTransportPlugin; /**< List of client transport plugins. */ config_line_t *ClientTransportPlugin; /**< List of client transport plugins. */ int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make * this explicit so we can change how we behave in the Loading