mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
alice just fetched bob's hidden webpage.
yay. svn:r1512
This commit is contained in:
parent
d473cf7ee9
commit
95f0e36f08
@ -737,17 +737,23 @@ relay_lookup_conn(circuit_t *circ, cell_t *cell, int cell_direction)
|
|||||||
if(!rh.stream_id)
|
if(!rh.stream_id)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if(cell_direction == CELL_DIRECTION_OUT)
|
/* IN or OUT cells could have come from either direction, now
|
||||||
tmpconn = circ->n_streams;
|
* that we allow rendezvous *to* an OP.
|
||||||
else
|
*/
|
||||||
tmpconn = circ->p_streams;
|
|
||||||
|
|
||||||
for( ; tmpconn; tmpconn=tmpconn->next_stream) {
|
for(tmpconn = circ->n_streams; tmpconn; tmpconn=tmpconn->next_stream) {
|
||||||
|
if(rh.stream_id == tmpconn->stream_id) {
|
||||||
|
log_fn(LOG_DEBUG,"found conn for stream %d.", rh.stream_id);
|
||||||
|
if(cell_direction == CELL_DIRECTION_OUT ||
|
||||||
|
connection_edge_is_rendezvous_stream(tmpconn))
|
||||||
|
return tmpconn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(tmpconn = circ->p_streams; tmpconn; tmpconn=tmpconn->next_stream) {
|
||||||
if(rh.stream_id == tmpconn->stream_id) {
|
if(rh.stream_id == tmpconn->stream_id) {
|
||||||
log_fn(LOG_DEBUG,"found conn for stream %d.", rh.stream_id);
|
log_fn(LOG_DEBUG,"found conn for stream %d.", rh.stream_id);
|
||||||
return tmpconn;
|
return tmpconn;
|
||||||
}
|
}
|
||||||
// log_fn(LOG_DEBUG,"considered stream %d, not it.",tmpconn->stream_id);
|
|
||||||
}
|
}
|
||||||
return NULL; /* probably a begin relay cell */
|
return NULL; /* probably a begin relay cell */
|
||||||
}
|
}
|
||||||
|
@ -482,7 +482,7 @@ int connection_edge_finished_flushing(connection_t *conn) {
|
|||||||
if(connection_wants_to_flush(conn)) /* in case there are any queued relay cells */
|
if(connection_wants_to_flush(conn)) /* in case there are any queued relay cells */
|
||||||
connection_start_writing(conn);
|
connection_start_writing(conn);
|
||||||
/* deliver a 'connected' relay cell back through the circuit. */
|
/* deliver a 'connected' relay cell back through the circuit. */
|
||||||
if(*conn->rend_query) { /* rendezvous stream */
|
if(connection_edge_is_rendezvous_stream(conn)) {
|
||||||
if(connection_edge_send_command(conn, circuit_get_by_conn(conn),
|
if(connection_edge_send_command(conn, circuit_get_by_conn(conn),
|
||||||
RELAY_COMMAND_CONNECTED, NULL, 0, conn->cpath_layer) < 0)
|
RELAY_COMMAND_CONNECTED, NULL, 0, conn->cpath_layer) < 0)
|
||||||
return 0; /* circuit is closed, don't continue */
|
return 0; /* circuit is closed, don't continue */
|
||||||
@ -775,7 +775,7 @@ circuit_get_open_circ_or_launch(connection_t *conn,
|
|||||||
return 1; /* we're happy */
|
return 1; /* we're happy */
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!*conn->rend_query) { /* general purpose circ */
|
if(!connection_edge_is_rendezvous_stream(conn)) { /* general purpose circ */
|
||||||
addr = client_dns_lookup_entry(conn->socks_request->address);
|
addr = client_dns_lookup_entry(conn->socks_request->address);
|
||||||
if(router_exit_policy_all_routers_reject(addr, conn->socks_request->port)) {
|
if(router_exit_policy_all_routers_reject(addr, conn->socks_request->port)) {
|
||||||
log_fn(LOG_WARN,"No Tor server exists that allows exit to %s:%d. Rejecting.",
|
log_fn(LOG_WARN,"No Tor server exists that allows exit to %s:%d. Rejecting.",
|
||||||
@ -853,7 +853,7 @@ int connection_ap_handshake_attach_circuit(connection_t *conn) {
|
|||||||
assert(conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
|
assert(conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
|
||||||
assert(conn->socks_request);
|
assert(conn->socks_request);
|
||||||
|
|
||||||
if(!*conn->rend_query) { /* we're a general conn */
|
if(!connection_edge_is_rendezvous_stream(conn)) { /* we're a general conn */
|
||||||
circuit_t *circ=NULL;
|
circuit_t *circ=NULL;
|
||||||
|
|
||||||
/* find the circuit that we should use, if there is one. */
|
/* find the circuit that we should use, if there is one. */
|
||||||
@ -1168,7 +1168,7 @@ static int connection_exit_begin_conn(cell_t *cell, circuit_t *circ) {
|
|||||||
void connection_exit_connect(connection_t *conn) {
|
void connection_exit_connect(connection_t *conn) {
|
||||||
unsigned char connected_payload[4];
|
unsigned char connected_payload[4];
|
||||||
|
|
||||||
if (!*conn->rend_query &&
|
if (!connection_edge_is_rendezvous_stream(conn) &&
|
||||||
router_compare_to_my_exit_policy(conn) == ADDR_POLICY_REJECTED) {
|
router_compare_to_my_exit_policy(conn) == ADDR_POLICY_REJECTED) {
|
||||||
log_fn(LOG_INFO,"%s:%d failed exit policy. Closing.", conn->address, conn->port);
|
log_fn(LOG_INFO,"%s:%d failed exit policy. Closing.", conn->address, conn->port);
|
||||||
connection_mark_for_close(conn, END_STREAM_REASON_EXITPOLICY);
|
connection_mark_for_close(conn, END_STREAM_REASON_EXITPOLICY);
|
||||||
@ -1200,7 +1200,7 @@ void connection_exit_connect(connection_t *conn) {
|
|||||||
connection_watch_events(conn, POLLIN);
|
connection_watch_events(conn, POLLIN);
|
||||||
|
|
||||||
/* also, deliver a 'connected' cell back through the circuit. */
|
/* also, deliver a 'connected' cell back through the circuit. */
|
||||||
if(*conn->rend_query) { /* rendezvous stream */
|
if(connection_edge_is_rendezvous_stream(conn)) { /* rendezvous stream */
|
||||||
/* don't send an address back! */
|
/* don't send an address back! */
|
||||||
connection_edge_send_command(conn, circuit_get_by_conn(conn), RELAY_COMMAND_CONNECTED,
|
connection_edge_send_command(conn, circuit_get_by_conn(conn), RELAY_COMMAND_CONNECTED,
|
||||||
NULL, 0, conn->cpath_layer);
|
NULL, 0, conn->cpath_layer);
|
||||||
@ -1225,6 +1225,13 @@ connection_exit_set_rendezvous_addr_port(connection_t *conn) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int connection_edge_is_rendezvous_stream(connection_t *conn) {
|
||||||
|
assert(conn);
|
||||||
|
if(*conn->rend_query) /* XXX */
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int connection_ap_can_use_exit(connection_t *conn, routerinfo_t *exit)
|
int connection_ap_can_use_exit(connection_t *conn, routerinfo_t *exit)
|
||||||
{
|
{
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
|
@ -858,6 +858,7 @@ void connection_ap_handshake_socks_reply(connection_t *conn, char *reply,
|
|||||||
int replylen, char success);
|
int replylen, char success);
|
||||||
|
|
||||||
void connection_exit_connect(connection_t *conn);
|
void connection_exit_connect(connection_t *conn);
|
||||||
|
int connection_edge_is_rendezvous_stream(connection_t *conn);
|
||||||
int connection_ap_can_use_exit(connection_t *conn, routerinfo_t *exit);
|
int connection_ap_can_use_exit(connection_t *conn, routerinfo_t *exit);
|
||||||
void connection_ap_expire_beginning(void);
|
void connection_ap_expire_beginning(void);
|
||||||
void connection_ap_attach_pending(void);
|
void connection_ap_attach_pending(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user