apconn->cpath_layer = circ->cpath->prev;
}
+ circ->isolation_any_streams_attached = 1;
+ connection_edge_update_circuit_isolation(apconn, circ, 0);
++
+ /* See if we can use optimistic data on this circuit */
+ if (apconn->cpath_layer->extend_info &&
+ (exitnode = node_get_by_id(
+ apconn->cpath_layer->extend_info->identity_digest)) &&
+ exitnode->rs) {
+ /* Okay; we know what exit node this is. */
+ if (circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
+ exitnode->rs->version_supports_optimistic_data)
+ apconn->exit_allows_optimistic_data = 1;
+ else
+ apconn->exit_allows_optimistic_data = 0;
+ log_info(LD_APP, "Looks like completed circuit to %s %s allow "
+ "optimistic data for connection to %s",
+ safe_str_client(node_describe(exitnode)),
+ apconn->exit_allows_optimistic_data ? "does" : "doesn't",
+ safe_str_client(apconn->socks_request->address));
+ }
}
/** Return true iff <b>address</b> is matched by one of the entries in
if (CONN_IS_EDGE(conn)) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
tor_free(edge_conn->chosen_exit_name);
+ tor_free(edge_conn->original_dest_address);
if (edge_conn->socks_request)
socks_request_free(edge_conn->socks_request);
+ if (edge_conn->pending_optimistic_data) {
+ generic_buffer_free(edge_conn->pending_optimistic_data);
+ }
+ if (edge_conn->sending_optimistic_data) {
+ generic_buffer_free(edge_conn->sending_optimistic_data);
+ }
rend_data_free(edge_conn->rend_data);
}
if (conn->type == CONN_TYPE_CONTROL) {