[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] alice just fetched bob"s hidden webpage.
Update of /home/or/cvsroot/src/or
In directory moria.mit.edu:/home2/arma/work/onion/cvs/src/or
Modified Files:
circuit.c connection_edge.c or.h
Log Message:
alice just fetched bob's hidden webpage.
yay.
Index: circuit.c
===================================================================
RCS file: /home/or/cvsroot/src/or/circuit.c,v
retrieving revision 1.187
retrieving revision 1.188
diff -u -d -r1.187 -r1.188
--- circuit.c 6 Apr 2004 21:25:11 -0000 1.187
+++ circuit.c 6 Apr 2004 21:52:01 -0000 1.188
@@ -737,17 +737,23 @@
if(!rh.stream_id)
return NULL;
- if(cell_direction == CELL_DIRECTION_OUT)
- tmpconn = circ->n_streams;
- else
- tmpconn = circ->p_streams;
+ /* IN or OUT cells could have come from either direction, now
+ * that we allow rendezvous *to* an OP.
+ */
- 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) {
log_fn(LOG_DEBUG,"found conn for stream %d.", rh.stream_id);
return tmpconn;
}
-// log_fn(LOG_DEBUG,"considered stream %d, not it.",tmpconn->stream_id);
}
return NULL; /* probably a begin relay cell */
}
Index: connection_edge.c
===================================================================
RCS file: /home/or/cvsroot/src/or/connection_edge.c,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -d -r1.143 -r1.144
--- connection_edge.c 6 Apr 2004 20:25:18 -0000 1.143
+++ connection_edge.c 6 Apr 2004 21:52:01 -0000 1.144
@@ -482,7 +482,7 @@
if(connection_wants_to_flush(conn)) /* in case there are any queued relay cells */
connection_start_writing(conn);
/* 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),
RELAY_COMMAND_CONNECTED, NULL, 0, conn->cpath_layer) < 0)
return 0; /* circuit is closed, don't continue */
@@ -775,7 +775,7 @@
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);
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.",
@@ -853,7 +853,7 @@
assert(conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
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;
/* find the circuit that we should use, if there is one. */
@@ -1168,7 +1168,7 @@
void connection_exit_connect(connection_t *conn) {
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) {
log_fn(LOG_INFO,"%s:%d failed exit policy. Closing.", conn->address, conn->port);
connection_mark_for_close(conn, END_STREAM_REASON_EXITPOLICY);
@@ -1200,7 +1200,7 @@
connection_watch_events(conn, POLLIN);
/* 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! */
connection_edge_send_command(conn, circuit_get_by_conn(conn), RELAY_COMMAND_CONNECTED,
NULL, 0, conn->cpath_layer);
@@ -1225,6 +1225,13 @@
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)
{
uint32_t addr;
Index: or.h
===================================================================
RCS file: /home/or/cvsroot/src/or/or.h,v
retrieving revision 1.300
retrieving revision 1.301
diff -u -d -r1.300 -r1.301
--- or.h 5 Apr 2004 22:22:42 -0000 1.300
+++ or.h 6 Apr 2004 21:52:01 -0000 1.301
@@ -858,6 +858,7 @@
int replylen, char success);
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);
void connection_ap_expire_beginning(void);
void connection_ap_attach_pending(void);