Loading src/or/buffers.c +4 −3 Original line number Diff line number Diff line Loading @@ -176,7 +176,8 @@ chunk_new_with_alloc_size(size_t alloc) freelist->lowest_length = freelist->cur_length; ++freelist->n_hit; } else { /* XXXX020 take advantage of tor_malloc_roundup. */ /* XXXX020 take advantage of tor_malloc_roundup, once we know how that * affects freelists. */ if (freelist) ++freelist->n_alloc; else Loading Loading @@ -950,8 +951,8 @@ fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out) int move_buf_to_buf(buf_t *buf_out, buf_t *buf_in, size_t *buf_flushlen) { /* XXXX020 we can do way better here. See if this turns up in the */ /* XXXX we can do way better here, but this doesn't turn up in any * profiles. */ char b[4096]; size_t cp, len; len = *buf_flushlen; Loading src/or/command.c +9 −43 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ command_time_process_cell(cell_t *cell, or_connection_t *conn, int *time, void command_process_cell(cell_t *cell, or_connection_t *conn) { int handshaking = (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING); #ifdef KEEP_TIMING_STATS /* how many of each cell have we seen so far this second? needs better * name. */ Loading Loading @@ -117,8 +118,10 @@ command_process_cell(cell_t *cell, or_connection_t *conn) #define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn) #endif /*XXXX020 reject all but VERSIONS, NETINFO, CERT, LINK_AUTH when * handshaking. */ /* Reject all but VERSIONS when handshaking. */ if (handshaking && cell->command != CELL_VERSIONS) return; switch (cell->command) { case CELL_PADDING: ++stats_n_padding_cells_processed; Loading Loading @@ -187,7 +190,10 @@ command_process_var_cell(var_cell_t *cell, or_connection_t *conn) } #endif /*XXXX020 reject all when not handshaking. */ /* reject all when not handshaking. */ if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING) return; switch (cell->command) { case CELL_VERSIONS: ++stats_n_versions_cells_processed; Loading Loading @@ -556,43 +562,3 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn) conn->handshake_state->received_netinfo = 1; } /*XXXX020 move to connection_or.c */ /** DOCDOC Called when we're done authenticating; act on stuff we * learned in netinfo. */ int connection_or_act_on_netinfo(or_connection_t *conn) { long delta; if (!conn->handshake_state) return -1; tor_assert(conn->handshake_state->received_versions != 0); delta = conn->handshake_state->apparent_skew; /*XXXX020 magic number 3600 */ if (abs(delta) > 3600 && router_get_by_digest(conn->identity_digest)) { char dbuf[64]; /*XXXX020 not always warn!*/ format_time_interval(dbuf, sizeof(dbuf), delta); log_fn(LOG_WARN, LD_HTTP, "Received NETINFO cell with skewed time from " "server at %s:%d. It seems that our clock is %s by %s, or " "that theirs is %s. Tor requires an accurate clock to work: " "please check your time and date settings.", conn->_base.address, (int)conn->_base.port, delta>0 ? "ahead" : "behind", dbuf, delta>0 ? "behind" : "ahead"); control_event_general_status(LOG_WARN, "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d", delta, conn->_base.address, conn->_base.port); } /* XXX020 possibly, learn my address from my_apparent_addr */ if (conn->handshake_state->apparently_canonical) { conn->is_canonical = 1; } return 0; } src/or/connection_or.c +40 −0 Original line number Diff line number Diff line Loading @@ -1089,3 +1089,43 @@ connection_or_send_netinfo(or_connection_t *conn) return 0; } /** DOCDOC Called when we're done authenticating; act on stuff we * learned in netinfo. */ int connection_or_act_on_netinfo(or_connection_t *conn) { long delta; if (!conn->handshake_state) return -1; tor_assert(conn->handshake_state->received_versions != 0); delta = conn->handshake_state->apparent_skew; /** Warn when we get a netinfo skew with at least this value. */ #define NETINFO_NOTICE_SKEW 3600 if (abs(delta) > NETINFO_NOTICE_SKEW && router_get_by_digest(conn->identity_digest)) { char dbuf[64]; /*XXXX020 not always warn!*/ format_time_interval(dbuf, sizeof(dbuf), delta); log_fn(LOG_WARN, LD_HTTP, "Received NETINFO cell with skewed time from " "server at %s:%d. It seems that our clock is %s by %s, or " "that theirs is %s. Tor requires an accurate clock to work: " "please check your time and date settings.", conn->_base.address, (int)conn->_base.port, delta>0 ? "ahead" : "behind", dbuf, delta>0 ? "behind" : "ahead"); control_event_general_status(LOG_WARN, "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d", delta, conn->_base.address, conn->_base.port); } /* XXX020 possibly, learn my address from my_apparent_addr */ if (conn->handshake_state->apparently_canonical) { conn->is_canonical = 1; } return 0; } src/or/main.c +19 −16 Original line number Diff line number Diff line Loading @@ -416,8 +416,9 @@ connection_stop_reading_from_linked_conn(connection_t *conn) if (conn->active_on_link) { conn->active_on_link = 0; /* XXXX020 maybe we should keep an index here so we can smartlist_del * cleanly. */ /* FFFF We could keep an index here so we can smartlist_del * cleanly. On the other hand, this doesn't show up on profiles, * so let's leave it alone for now. */ smartlist_remove(active_linked_connection_lst, conn); } else { tor_assert(!smartlist_isin(active_linked_connection_lst, conn)); Loading Loading @@ -552,8 +553,7 @@ conn_close_if_marked(int i) * we're gone. */ connection_start_reading_from_linked_conn(conn->linked_conn); } /* XXXX020 Downgrade to debug. */ log_info(LD_GENERAL, "Flushed last %d bytes from a linked conn; " log_debug(LD_GENERAL, "Flushed last %d bytes from a linked conn; " "%d left; flushlen %d; wants-to-flush==%d", retval, (int)buf_datalen(conn->outbuf), (int)conn->outbuf_flushlen, Loading Loading @@ -795,6 +795,17 @@ run_connection_housekeeping(int i, time_t now) } } /** Honor a NEWNYM request: make future requests unlinkability to past * requests. */ static void signewnym_impl(time_t now) { circuit_expire_all_dirty_circs(); addressmap_clear_transient(); time_of_last_signewnym = now; signewnym_is_pending = 0; } /** Perform regular maintenance tasks. This function gets run once per * second by prepare_for_poll. */ Loading Loading @@ -834,10 +845,7 @@ run_scheduled_events(time_t now) if (signewnym_is_pending && time_of_last_signewnym + MAX_SIGNEWNYM_RATE <= now) { log(LOG_INFO, LD_CONTROL, "Honoring delayed NEWNYM request"); circuit_expire_all_dirty_circs(); addressmap_clear_transient(); time_of_last_signewnym = now; signewnym_is_pending = 0; signewnym_impl(now); } /** 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys, Loading Loading @@ -1471,7 +1479,7 @@ do_main_loop(void) /* refilling buckets and sending cells happens at the beginning of the * next iteration of the loop, inside prepare_for_poll() * XXXX020 No longer so; fix comment. * DOCDOC No longer so; fix comment. */ } } Loading Loading @@ -1574,12 +1582,7 @@ signal_callback(int fd, short events, void *arg) "Rate limiting NEWNYM request: delaying by %d second(s)", (int)(MAX_SIGNEWNYM_RATE+time_of_last_signewnym-now)); } else { /* XXX020 refactor someday: these two calls are in * run_scheduled_events() above too, and they should be in just * one place. */ circuit_expire_all_dirty_circs(); addressmap_clear_transient(); time_of_last_signewnym = now; signewnym_impl(now); } break; } Loading src/or/or.h +1 −1 Original line number Diff line number Diff line Loading @@ -2613,7 +2613,6 @@ int connection_ap_handshake_attach_circuit(edge_connection_t *conn); void command_process_cell(cell_t *cell, or_connection_t *conn); void command_process_var_cell(var_cell_t *cell, or_connection_t *conn); int connection_or_act_on_netinfo(or_connection_t *conn); extern uint64_t stats_n_padding_cells_processed; extern uint64_t stats_n_create_cells_processed; Loading Loading @@ -2864,6 +2863,7 @@ void cell_pack(packed_cell_t *dest, const cell_t *src); void var_cell_pack_header(const var_cell_t *cell, char *hdr_out); var_cell_t *var_cell_new(uint16_t payload_len); void var_cell_free(var_cell_t *cell); int connection_or_act_on_netinfo(or_connection_t *conn); /********************************* control.c ***************************/ Loading Loading
src/or/buffers.c +4 −3 Original line number Diff line number Diff line Loading @@ -176,7 +176,8 @@ chunk_new_with_alloc_size(size_t alloc) freelist->lowest_length = freelist->cur_length; ++freelist->n_hit; } else { /* XXXX020 take advantage of tor_malloc_roundup. */ /* XXXX020 take advantage of tor_malloc_roundup, once we know how that * affects freelists. */ if (freelist) ++freelist->n_alloc; else Loading Loading @@ -950,8 +951,8 @@ fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out) int move_buf_to_buf(buf_t *buf_out, buf_t *buf_in, size_t *buf_flushlen) { /* XXXX020 we can do way better here. See if this turns up in the */ /* XXXX we can do way better here, but this doesn't turn up in any * profiles. */ char b[4096]; size_t cp, len; len = *buf_flushlen; Loading
src/or/command.c +9 −43 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ command_time_process_cell(cell_t *cell, or_connection_t *conn, int *time, void command_process_cell(cell_t *cell, or_connection_t *conn) { int handshaking = (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING); #ifdef KEEP_TIMING_STATS /* how many of each cell have we seen so far this second? needs better * name. */ Loading Loading @@ -117,8 +118,10 @@ command_process_cell(cell_t *cell, or_connection_t *conn) #define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn) #endif /*XXXX020 reject all but VERSIONS, NETINFO, CERT, LINK_AUTH when * handshaking. */ /* Reject all but VERSIONS when handshaking. */ if (handshaking && cell->command != CELL_VERSIONS) return; switch (cell->command) { case CELL_PADDING: ++stats_n_padding_cells_processed; Loading Loading @@ -187,7 +190,10 @@ command_process_var_cell(var_cell_t *cell, or_connection_t *conn) } #endif /*XXXX020 reject all when not handshaking. */ /* reject all when not handshaking. */ if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING) return; switch (cell->command) { case CELL_VERSIONS: ++stats_n_versions_cells_processed; Loading Loading @@ -556,43 +562,3 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn) conn->handshake_state->received_netinfo = 1; } /*XXXX020 move to connection_or.c */ /** DOCDOC Called when we're done authenticating; act on stuff we * learned in netinfo. */ int connection_or_act_on_netinfo(or_connection_t *conn) { long delta; if (!conn->handshake_state) return -1; tor_assert(conn->handshake_state->received_versions != 0); delta = conn->handshake_state->apparent_skew; /*XXXX020 magic number 3600 */ if (abs(delta) > 3600 && router_get_by_digest(conn->identity_digest)) { char dbuf[64]; /*XXXX020 not always warn!*/ format_time_interval(dbuf, sizeof(dbuf), delta); log_fn(LOG_WARN, LD_HTTP, "Received NETINFO cell with skewed time from " "server at %s:%d. It seems that our clock is %s by %s, or " "that theirs is %s. Tor requires an accurate clock to work: " "please check your time and date settings.", conn->_base.address, (int)conn->_base.port, delta>0 ? "ahead" : "behind", dbuf, delta>0 ? "behind" : "ahead"); control_event_general_status(LOG_WARN, "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d", delta, conn->_base.address, conn->_base.port); } /* XXX020 possibly, learn my address from my_apparent_addr */ if (conn->handshake_state->apparently_canonical) { conn->is_canonical = 1; } return 0; }
src/or/connection_or.c +40 −0 Original line number Diff line number Diff line Loading @@ -1089,3 +1089,43 @@ connection_or_send_netinfo(or_connection_t *conn) return 0; } /** DOCDOC Called when we're done authenticating; act on stuff we * learned in netinfo. */ int connection_or_act_on_netinfo(or_connection_t *conn) { long delta; if (!conn->handshake_state) return -1; tor_assert(conn->handshake_state->received_versions != 0); delta = conn->handshake_state->apparent_skew; /** Warn when we get a netinfo skew with at least this value. */ #define NETINFO_NOTICE_SKEW 3600 if (abs(delta) > NETINFO_NOTICE_SKEW && router_get_by_digest(conn->identity_digest)) { char dbuf[64]; /*XXXX020 not always warn!*/ format_time_interval(dbuf, sizeof(dbuf), delta); log_fn(LOG_WARN, LD_HTTP, "Received NETINFO cell with skewed time from " "server at %s:%d. It seems that our clock is %s by %s, or " "that theirs is %s. Tor requires an accurate clock to work: " "please check your time and date settings.", conn->_base.address, (int)conn->_base.port, delta>0 ? "ahead" : "behind", dbuf, delta>0 ? "behind" : "ahead"); control_event_general_status(LOG_WARN, "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d", delta, conn->_base.address, conn->_base.port); } /* XXX020 possibly, learn my address from my_apparent_addr */ if (conn->handshake_state->apparently_canonical) { conn->is_canonical = 1; } return 0; }
src/or/main.c +19 −16 Original line number Diff line number Diff line Loading @@ -416,8 +416,9 @@ connection_stop_reading_from_linked_conn(connection_t *conn) if (conn->active_on_link) { conn->active_on_link = 0; /* XXXX020 maybe we should keep an index here so we can smartlist_del * cleanly. */ /* FFFF We could keep an index here so we can smartlist_del * cleanly. On the other hand, this doesn't show up on profiles, * so let's leave it alone for now. */ smartlist_remove(active_linked_connection_lst, conn); } else { tor_assert(!smartlist_isin(active_linked_connection_lst, conn)); Loading Loading @@ -552,8 +553,7 @@ conn_close_if_marked(int i) * we're gone. */ connection_start_reading_from_linked_conn(conn->linked_conn); } /* XXXX020 Downgrade to debug. */ log_info(LD_GENERAL, "Flushed last %d bytes from a linked conn; " log_debug(LD_GENERAL, "Flushed last %d bytes from a linked conn; " "%d left; flushlen %d; wants-to-flush==%d", retval, (int)buf_datalen(conn->outbuf), (int)conn->outbuf_flushlen, Loading Loading @@ -795,6 +795,17 @@ run_connection_housekeeping(int i, time_t now) } } /** Honor a NEWNYM request: make future requests unlinkability to past * requests. */ static void signewnym_impl(time_t now) { circuit_expire_all_dirty_circs(); addressmap_clear_transient(); time_of_last_signewnym = now; signewnym_is_pending = 0; } /** Perform regular maintenance tasks. This function gets run once per * second by prepare_for_poll. */ Loading Loading @@ -834,10 +845,7 @@ run_scheduled_events(time_t now) if (signewnym_is_pending && time_of_last_signewnym + MAX_SIGNEWNYM_RATE <= now) { log(LOG_INFO, LD_CONTROL, "Honoring delayed NEWNYM request"); circuit_expire_all_dirty_circs(); addressmap_clear_transient(); time_of_last_signewnym = now; signewnym_is_pending = 0; signewnym_impl(now); } /** 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys, Loading Loading @@ -1471,7 +1479,7 @@ do_main_loop(void) /* refilling buckets and sending cells happens at the beginning of the * next iteration of the loop, inside prepare_for_poll() * XXXX020 No longer so; fix comment. * DOCDOC No longer so; fix comment. */ } } Loading Loading @@ -1574,12 +1582,7 @@ signal_callback(int fd, short events, void *arg) "Rate limiting NEWNYM request: delaying by %d second(s)", (int)(MAX_SIGNEWNYM_RATE+time_of_last_signewnym-now)); } else { /* XXX020 refactor someday: these two calls are in * run_scheduled_events() above too, and they should be in just * one place. */ circuit_expire_all_dirty_circs(); addressmap_clear_transient(); time_of_last_signewnym = now; signewnym_impl(now); } break; } Loading
src/or/or.h +1 −1 Original line number Diff line number Diff line Loading @@ -2613,7 +2613,6 @@ int connection_ap_handshake_attach_circuit(edge_connection_t *conn); void command_process_cell(cell_t *cell, or_connection_t *conn); void command_process_var_cell(var_cell_t *cell, or_connection_t *conn); int connection_or_act_on_netinfo(or_connection_t *conn); extern uint64_t stats_n_padding_cells_processed; extern uint64_t stats_n_create_cells_processed; Loading Loading @@ -2864,6 +2863,7 @@ void cell_pack(packed_cell_t *dest, const cell_t *src); void var_cell_pack_header(const var_cell_t *cell, char *hdr_out); var_cell_t *var_cell_new(uint16_t payload_len); void var_cell_free(var_cell_t *cell); int connection_or_act_on_netinfo(or_connection_t *conn); /********************************* control.c ***************************/ Loading