Lines Matching refs:chan

112 channel_id_hash(const channel_t *chan)  in channel_id_hash()  argument
114 return (unsigned) chan->global_identifier; in channel_id_hash()
168 static void channel_remove_from_digest_map(channel_t *chan);
170 static void channel_force_xfree(channel_t *chan);
386 channel_register(channel_t *chan) in channel_register() argument
388 tor_assert(chan); in channel_register()
389 tor_assert(chan->global_identifier); in channel_register()
392 if (chan->registered) return; in channel_register()
397 chan, (chan->global_identifier), in channel_register()
398 channel_state_to_string(chan->state), chan->state, in channel_register()
399 hex_str(chan->identity_digest, DIGEST_LEN)); in channel_register()
403 smartlist_add(all_channels, chan); in channel_register()
404 channel_t *oldval = HT_REPLACE(channel_gid_map, &channel_gid_map, chan); in channel_register()
408 if (CHANNEL_FINISHED(chan)) { in channel_register()
411 smartlist_add(finished_channels, chan); in channel_register()
416 smartlist_add(active_channels, chan); in channel_register()
418 if (!CHANNEL_IS_CLOSING(chan)) { in channel_register()
420 if (!tor_digest_is_zero(chan->identity_digest)) { in channel_register()
422 channel_add_to_digest_map(chan); in channel_register()
427 chan, (chan->global_identifier), in channel_register()
428 channel_state_to_string(chan->state), chan->state); in channel_register()
434 chan->registered = 1; in channel_register()
444 channel_unregister(channel_t *chan) in channel_unregister() argument
446 tor_assert(chan); in channel_unregister()
449 if (!(chan->registered)) return; in channel_unregister()
452 if (CHANNEL_FINISHED(chan)) { in channel_unregister()
454 if (finished_channels) smartlist_remove(finished_channels, chan); in channel_unregister()
457 if (active_channels) smartlist_remove(active_channels, chan); in channel_unregister()
461 if (all_channels) smartlist_remove(all_channels, chan); in channel_unregister()
462 channel_t *oldval = HT_REMOVE(channel_gid_map, &channel_gid_map, chan); in channel_unregister()
463 tor_assert(oldval == NULL || oldval == chan); in channel_unregister()
466 chan->registered = 0; in channel_unregister()
469 if (!tor_digest_is_zero(chan->identity_digest) && in channel_unregister()
470 !(CHANNEL_CONDEMNED(chan))) { in channel_unregister()
472 channel_remove_from_digest_map(chan); in channel_unregister()
560 channel_add_to_digest_map(channel_t *chan) in channel_add_to_digest_map() argument
564 tor_assert(chan); in channel_add_to_digest_map()
567 tor_assert(!CHANNEL_CONDEMNED(chan)); in channel_add_to_digest_map()
570 tor_assert(!tor_digest_is_zero(chan->identity_digest)); in channel_add_to_digest_map()
572 memcpy(search.digest, chan->identity_digest, DIGEST_LEN); in channel_add_to_digest_map()
576 memcpy(ent->digest, chan->identity_digest, DIGEST_LEN); in channel_add_to_digest_map()
580 TOR_LIST_INSERT_HEAD(&ent->channel_list, chan, next_with_same_id); in channel_add_to_digest_map()
585 chan, (chan->global_identifier), in channel_add_to_digest_map()
586 channel_state_to_string(chan->state), chan->state, in channel_add_to_digest_map()
587 hex_str(chan->identity_digest, DIGEST_LEN)); in channel_add_to_digest_map()
597 channel_remove_from_digest_map(channel_t *chan) in channel_remove_from_digest_map() argument
601 tor_assert(chan); in channel_remove_from_digest_map()
604 tor_assert(!tor_digest_is_zero(chan->identity_digest)); in channel_remove_from_digest_map()
607 TOR_LIST_REMOVE(chan, next_with_same_id); in channel_remove_from_digest_map()
609 memcpy(search.digest, chan->identity_digest, DIGEST_LEN); in channel_remove_from_digest_map()
624 chan, (chan->global_identifier), in channel_remove_from_digest_map()
625 channel_state_to_string(chan->state), chan->state, in channel_remove_from_digest_map()
626 hex_str(chan->identity_digest, DIGEST_LEN)); in channel_remove_from_digest_map()
633 chan, (chan->global_identifier), in channel_remove_from_digest_map()
634 hex_str(chan->identity_digest, DIGEST_LEN)); in channel_remove_from_digest_map()
667 channel_remote_identity_matches(const channel_t *chan, in channel_remote_identity_matches() argument
671 if (BUG(!chan)) in channel_remote_identity_matches()
674 if (tor_memneq(rsa_id_digest, chan->identity_digest, DIGEST_LEN)) in channel_remote_identity_matches()
678 if (tor_memneq(ed_id->pubkey, chan->ed25519_identity.pubkey, in channel_remote_identity_matches()
731 channel_next_with_rsa_identity(channel_t *chan) in channel_next_with_rsa_identity() argument
733 tor_assert(chan); in channel_next_with_rsa_identity()
735 return TOR_LIST_NEXT(chan, next_with_same_id); in channel_next_with_rsa_identity()
751 channel_t *chan; in channel_check_for_duplicates() local
772 for (chan = TOR_LIST_FIRST(&(*iter)->channel_list); chan; in channel_check_for_duplicates()
773 chan = channel_next_with_rsa_identity(chan)) { in channel_check_for_duplicates()
775 if (CHANNEL_CONDEMNED(chan) || !CHANNEL_IS_OPEN(chan)) in channel_check_for_duplicates()
783 if (chan->is_canonical(chan)) total_canonical++; in channel_check_for_duplicates()
785 if (!chan->is_canonical_to_peer && chan->is_canonical(chan)) { in channel_check_for_duplicates()
847 channel_init(channel_t *chan) in channel_init() argument
849 tor_assert(chan); in channel_init()
852 chan->global_identifier = ++n_channels_allocated; in channel_init()
855 chan->timestamp_last_had_circuits = time(NULL); in channel_init()
858 chan->last_warned_circ_ids_exhausted.rate = 3600; in channel_init()
861 memset(&chan->next_with_same_id, 0, sizeof(chan->next_with_same_id)); in channel_init()
864 channel_timestamp_created(chan); in channel_init()
867 chan->has_been_open = 0; in channel_init()
870 chan->scheduler_state = SCHED_CHAN_IDLE; in channel_init()
873 chan->sched_heap_idx = -1; in channel_init()
875 tor_addr_make_unspec(&chan->addr_according_to_peer); in channel_init()
902 channel_free_(channel_t *chan) in channel_free_() argument
904 if (!chan) return; in channel_free_()
907 tor_assert(CHANNEL_FINISHED(chan)); in channel_free_()
910 tor_assert(!(chan->registered)); in channel_free_()
914 (chan->global_identifier), chan); in channel_free_()
917 scheduler_release_channel(chan); in channel_free_()
923 if (chan->cmux) { in channel_free_()
924 circuitmux_set_policy(chan->cmux, NULL); in channel_free_()
928 timer_free(chan->padding_timer); in channel_free_()
929 channel_handle_free(chan->timer_handle); in channel_free_()
930 channel_handles_clear(chan); in channel_free_()
933 if (chan->free_fn) chan->free_fn(chan); in channel_free_()
935 channel_clear_remote_end(chan); in channel_free_()
938 if (chan->cmux) { in channel_free_()
939 circuitmux_detach_all_circuits(chan->cmux, NULL); in channel_free_()
940 circuitmux_mark_destroyed_circids_usable(chan->cmux, chan); in channel_free_()
941 circuitmux_free(chan->cmux); in channel_free_()
942 chan->cmux = NULL; in channel_free_()
945 tor_free(chan); in channel_free_()
981 channel_force_xfree(channel_t *chan) in channel_force_xfree() argument
983 tor_assert(chan); in channel_force_xfree()
987 (chan->global_identifier), chan); in channel_force_xfree()
990 scheduler_release_channel(chan); in channel_force_xfree()
996 if (chan->cmux) { in channel_force_xfree()
997 circuitmux_set_policy(chan->cmux, NULL); in channel_force_xfree()
1001 timer_free(chan->padding_timer); in channel_force_xfree()
1002 channel_handle_free(chan->timer_handle); in channel_force_xfree()
1003 channel_handles_clear(chan); in channel_force_xfree()
1006 if (chan->free_fn) chan->free_fn(chan); in channel_force_xfree()
1008 channel_clear_remote_end(chan); in channel_force_xfree()
1011 if (chan->cmux) { in channel_force_xfree()
1012 circuitmux_free(chan->cmux); in channel_force_xfree()
1013 chan->cmux = NULL; in channel_force_xfree()
1016 tor_free(chan); in channel_force_xfree()
1085 channel_get_cell_handler(channel_t *chan) in channel_get_cell_handler() argument
1087 tor_assert(chan); in channel_get_cell_handler()
1089 if (CHANNEL_CAN_HANDLE_CELLS(chan)) in channel_get_cell_handler()
1090 return chan->cell_handler; in channel_get_cell_handler()
1102 channel_set_cell_handlers(channel_t *chan, in channel_set_cell_handlers() argument
1105 tor_assert(chan); in channel_set_cell_handlers()
1106 tor_assert(CHANNEL_CAN_HANDLE_CELLS(chan)); in channel_set_cell_handlers()
1110 chan, cell_handler); in channel_set_cell_handlers()
1113 chan->cell_handler = cell_handler; in channel_set_cell_handlers()
1137 channel_mark_for_close(channel_t *chan) in channel_mark_for_close() argument
1139 tor_assert(chan != NULL); in channel_mark_for_close()
1140 tor_assert(chan->close != NULL); in channel_mark_for_close()
1143 if (CHANNEL_CONDEMNED(chan)) in channel_mark_for_close()
1149 chan, (chan->global_identifier)); in channel_mark_for_close()
1152 chan->reason_for_closing = CHANNEL_CLOSE_REQUESTED; in channel_mark_for_close()
1155 channel_change_state(chan, CHANNEL_STATE_CLOSING); in channel_mark_for_close()
1158 chan->close(chan); in channel_mark_for_close()
1216 channel_close_from_lower_layer(channel_t *chan) in channel_close_from_lower_layer() argument
1218 tor_assert(chan != NULL); in channel_close_from_lower_layer()
1221 if (CHANNEL_CONDEMNED(chan)) in channel_close_from_lower_layer()
1227 chan, (chan->global_identifier)); in channel_close_from_lower_layer()
1230 chan->reason_for_closing = CHANNEL_CLOSE_FROM_BELOW; in channel_close_from_lower_layer()
1233 channel_change_state(chan, CHANNEL_STATE_CLOSING); in channel_close_from_lower_layer()
1244 channel_close_for_error(channel_t *chan) in channel_close_for_error() argument
1246 tor_assert(chan != NULL); in channel_close_for_error()
1249 if (CHANNEL_CONDEMNED(chan)) in channel_close_for_error()
1254 chan); in channel_close_for_error()
1257 chan->reason_for_closing = CHANNEL_CLOSE_FOR_ERROR; in channel_close_for_error()
1260 channel_change_state(chan, CHANNEL_STATE_CLOSING); in channel_close_for_error()
1271 channel_closed(channel_t *chan) in channel_closed() argument
1273 tor_assert(chan); in channel_closed()
1274 tor_assert(CHANNEL_CONDEMNED(chan)); in channel_closed()
1277 if (CHANNEL_FINISHED(chan)) in channel_closed()
1282 if (! chan->has_been_open) in channel_closed()
1283 circuit_n_chan_done(chan, 0, 0); in channel_closed()
1286 circuit_unlink_all_from_channel(chan, END_CIRC_REASON_CHANNEL_CLOSED); in channel_closed()
1288 if (chan->reason_for_closing != CHANNEL_CLOSE_FOR_ERROR) { in channel_closed()
1289 channel_change_state(chan, CHANNEL_STATE_CLOSED); in channel_closed()
1291 channel_change_state(chan, CHANNEL_STATE_ERROR); in channel_closed()
1302 channel_clear_identity_digest(channel_t *chan) in channel_clear_identity_digest() argument
1306 tor_assert(chan); in channel_clear_identity_digest()
1311 chan, (chan->global_identifier)); in channel_clear_identity_digest()
1313 state_not_in_map = CHANNEL_CONDEMNED(chan); in channel_clear_identity_digest()
1315 if (!state_not_in_map && chan->registered && in channel_clear_identity_digest()
1316 !tor_digest_is_zero(chan->identity_digest)) in channel_clear_identity_digest()
1318 channel_remove_from_digest_map(chan); in channel_clear_identity_digest()
1320 memset(chan->identity_digest, 0, in channel_clear_identity_digest()
1321 sizeof(chan->identity_digest)); in channel_clear_identity_digest()
1331 channel_set_identity_digest(channel_t *chan, in channel_set_identity_digest() argument
1337 tor_assert(chan); in channel_set_identity_digest()
1342 chan, (chan->global_identifier), in channel_set_identity_digest()
1346 state_not_in_map = CHANNEL_CONDEMNED(chan); in channel_set_identity_digest()
1350 chan->registered && in channel_set_identity_digest()
1351 !tor_digest_is_zero(chan->identity_digest); in channel_set_identity_digest()
1354 chan->registered && in channel_set_identity_digest()
1362 channel_remove_from_digest_map(chan); in channel_set_identity_digest()
1365 memcpy(chan->identity_digest, in channel_set_identity_digest()
1367 sizeof(chan->identity_digest)); in channel_set_identity_digest()
1369 memset(chan->identity_digest, 0, in channel_set_identity_digest()
1370 sizeof(chan->identity_digest)); in channel_set_identity_digest()
1373 memcpy(&chan->ed25519_identity, ed_identity, sizeof(*ed_identity)); in channel_set_identity_digest()
1375 memset(&chan->ed25519_identity, 0, sizeof(*ed_identity)); in channel_set_identity_digest()
1380 channel_add_to_digest_map(chan); in channel_set_identity_digest()
1390 channel_clear_remote_end(channel_t *chan) in channel_clear_remote_end() argument
1394 tor_assert(chan); in channel_clear_remote_end()
1399 chan, (chan->global_identifier)); in channel_clear_remote_end()
1401 state_not_in_map = CHANNEL_CONDEMNED(chan); in channel_clear_remote_end()
1403 if (!state_not_in_map && chan->registered && in channel_clear_remote_end()
1404 !tor_digest_is_zero(chan->identity_digest)) in channel_clear_remote_end()
1406 channel_remove_from_digest_map(chan); in channel_clear_remote_end()
1408 memset(chan->identity_digest, 0, in channel_clear_remote_end()
1409 sizeof(chan->identity_digest)); in channel_clear_remote_end()
1420 write_packed_cell(channel_t *chan, packed_cell_t *cell) in write_packed_cell() argument
1424 uint8_t command = packed_cell_get_command(cell, chan->wide_circ_ids); in write_packed_cell()
1426 tor_assert(chan); in write_packed_cell()
1430 tor_assert(CHANNEL_CAN_HANDLE_CELLS(chan)); in write_packed_cell()
1434 if (packed_cell_is_destroy(chan, cell, &circ_id)) { in write_packed_cell()
1435 channel_note_destroy_not_pending(chan, circ_id); in write_packed_cell()
1440 cell_bytes = get_cell_network_size(chan->wide_circ_ids); in write_packed_cell()
1443 if (!CHANNEL_IS_OPEN(chan)) { in write_packed_cell()
1448 if (chan->write_packed_cell(chan, cell) < 0) { in write_packed_cell()
1452 channel_timestamp_xmit(chan); in write_packed_cell()
1454 ++(chan->n_cells_xmitted); in write_packed_cell()
1455 chan->n_bytes_xmitted += cell_bytes; in write_packed_cell()
1463 if (chan->padding_enabled) { in write_packed_cell()
1484 channel_write_packed_cell(channel_t *chan, packed_cell_t *cell) in channel_write_packed_cell() argument
1488 tor_assert(chan); in channel_write_packed_cell()
1491 if (CHANNEL_IS_CLOSING(chan)) { in channel_write_packed_cell()
1493 "global ID %"PRIu64, cell, chan, in channel_write_packed_cell()
1494 (chan->global_identifier)); in channel_write_packed_cell()
1499 "%"PRIu64, cell, chan, (chan->global_identifier)); in channel_write_packed_cell()
1501 ret = write_packed_cell(chan, cell); in channel_write_packed_cell()
1519 channel_change_state_(channel_t *chan, channel_state_t to_state) in channel_change_state_() argument
1525 tor_assert(chan); in channel_change_state_()
1526 from_state = chan->state; in channel_change_state_()
1530 tor_assert(channel_state_can_transition(chan->state, to_state)); in channel_change_state_()
1538 chan, (chan->global_identifier)); in channel_change_state_()
1546 tor_assert(chan->reason_for_closing != CHANNEL_NOT_CLOSING); in channel_change_state_()
1552 chan, in channel_change_state_()
1553 (chan->global_identifier), in channel_change_state_()
1554 channel_state_to_string(chan->state), in channel_change_state_()
1557 chan->state = to_state; in channel_change_state_()
1560 if (chan->registered) { in channel_change_state_()
1568 if (active_channels) smartlist_remove(active_channels, chan); in channel_change_state_()
1570 smartlist_add(finished_channels, chan); in channel_change_state_()
1575 if (finished_channels) smartlist_remove(finished_channels, chan); in channel_change_state_()
1577 smartlist_add(active_channels, chan); in channel_change_state_()
1580 if (!tor_digest_is_zero(chan->identity_digest)) { in channel_change_state_()
1589 if (!was_in_id_map && is_in_id_map) channel_add_to_digest_map(chan); in channel_change_state_()
1591 channel_remove_from_digest_map(chan); in channel_change_state_()
1602 scheduler_release_channel(chan); in channel_change_state_()
1604 scheduler_channel_doesnt_want_writes(chan); in channel_change_state_()
1612 channel_change_state(channel_t *chan, channel_state_t to_state) in channel_change_state() argument
1615 channel_change_state_(chan, to_state); in channel_change_state()
1622 channel_change_state_open(channel_t *chan) in channel_change_state_open() argument
1624 channel_change_state_(chan, CHANNEL_STATE_OPEN); in channel_change_state_open()
1627 channel_do_open_actions(chan); in channel_change_state_open()
1628 chan->has_been_open = 1; in channel_change_state_open()
1730 channel_flush_some_cells, (channel_t *chan, ssize_t num_cells))
1736 tor_assert(chan);
1742 if (CHANNEL_IS_OPEN(chan)) {
1743 if (circuitmux_num_cells(chan->cmux) > 0) {
1758 chan, clamped_num_cells);
1773 channel_more_to_flush, (channel_t *chan))
1775 tor_assert(chan);
1777 if (circuitmux_num_cells(chan->cmux) > 0) return 1;
1790 channel_notify_flushed(channel_t *chan) in channel_notify_flushed() argument
1792 tor_assert(chan); in channel_notify_flushed()
1794 if (chan->dirreq_id != 0) in channel_notify_flushed()
1795 geoip_change_dirreq_state(chan->dirreq_id, in channel_notify_flushed()
1827 channel_t *, chan) { in channel_listener_process_incoming()
1828 tor_assert(chan); in channel_listener_process_incoming()
1833 chan, in channel_listener_process_incoming()
1834 (chan->global_identifier), in channel_listener_process_incoming()
1838 channel_mark_incoming(chan); in channel_listener_process_incoming()
1839 listener->listener(listener, chan); in channel_listener_process_incoming()
1840 } SMARTLIST_FOREACH_END(chan); in channel_listener_process_incoming()
1859 channel_do_open_actions(channel_t *chan) in channel_do_open_actions() argument
1866 tor_assert(chan); in channel_do_open_actions()
1868 started_here = channel_is_outgoing(chan); in channel_do_open_actions()
1872 router_set_status(chan->identity_digest, 1); in channel_do_open_actions()
1875 if (channel_is_client(chan)) { in channel_do_open_actions()
1876 if (channel_get_addr_if_possible(chan, &remote_addr)) { in channel_do_open_actions()
1878 channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan); in channel_do_open_actions()
1879 if (chan->get_transport_name(chan, &transport_name) < 0) in channel_do_open_actions()
1896 if (chan->padding_enabled || get_options()->ConnectionPadding == 1) { in channel_do_open_actions()
1899 channelpadding_disable_padding_on_channel(chan); in channel_do_open_actions()
1906 channelpadding_disable_padding_on_channel(chan); in channel_do_open_actions()
1910 channelpadding_reduce_padding_on_channel(chan); in channel_do_open_actions()
1914 circuit_n_chan_done(chan, 1, close_origin_circuits); in channel_do_open_actions()
1976 channel_process_cell(channel_t *chan, cell_t *cell) in channel_process_cell() argument
1978 tor_assert(chan); in channel_process_cell()
1979 tor_assert(CHANNEL_IS_CLOSING(chan) || CHANNEL_IS_MAINT(chan) || in channel_process_cell()
1980 CHANNEL_IS_OPEN(chan)); in channel_process_cell()
1984 if (!chan->cell_handler) in channel_process_cell()
1988 channel_timestamp_recv(chan); in channel_process_cell()
1990 ++(chan->n_cells_recved); in channel_process_cell()
1991 chan->n_bytes_recved += get_cell_network_size(chan->wide_circ_ids); in channel_process_cell()
1995 "%"PRIu64 ")", cell, chan, in channel_process_cell()
1996 (chan->global_identifier)); in channel_process_cell()
1997 chan->cell_handler(chan, cell); in channel_process_cell()
2005 packed_cell_is_destroy(channel_t *chan, in packed_cell_is_destroy() argument
2009 if (chan->wide_circ_ids) { in packed_cell_is_destroy()
2031 channel_send_destroy(circid_t circ_id, channel_t *chan, int reason) in channel_send_destroy() argument
2033 tor_assert(chan); in channel_send_destroy()
2037 (chan->global_identifier), in channel_send_destroy()
2038 chan, channel_state_to_string(chan->state), in channel_send_destroy()
2039 chan->state); in channel_send_destroy()
2044 if (!CHANNEL_CONDEMNED(chan) && chan->cmux) { in channel_send_destroy()
2045 channel_note_destroy_pending(chan, circ_id); in channel_send_destroy()
2046 circuitmux_append_destroy_cell(chan, chan->cmux, circ_id, reason); in channel_send_destroy()
2050 (unsigned)circ_id, chan, in channel_send_destroy()
2051 (chan->global_identifier)); in channel_send_destroy()
2056 (unsigned)circ_id, (chan->global_identifier), in channel_send_destroy()
2057 chan, channel_state_to_string(chan->state), in channel_send_destroy()
2058 chan->state); in channel_send_destroy()
2084 SMARTLIST_FOREACH(all_channels, channel_t *, chan, in channel_dumpstats()
2085 channel_dump_statistics(chan, severity)); in channel_dumpstats()
2411 channel_t *chan, *best = NULL; variable
2418 chan = channel_find_by_remote_identity(rsa_id_digest, ed_id);
2421 for (; chan; chan = channel_next_with_rsa_identity(chan)) {
2422 tor_assert(tor_memeq(chan->identity_digest,
2425 if (CHANNEL_CONDEMNED(chan))
2430 if (channel_is_client(chan)) {
2435 if (!channel_remote_identity_matches(chan, rsa_id_digest, ed_id)) {
2440 channel_matches_target_addr_for_extend(chan,
2444 if (!CHANNEL_IS_OPEN(chan)) {
2453 channel_mark_as_used_for_origin_circuit(chan);
2460 if (channel_is_bad_for_new_circs(chan)) {
2467 if (!channel_is_canonical(chan) && !matches_target) {
2473 best = chan; /* If we have no 'best' so far, this one is good enough. */
2477 if (channel_is_better(chan, best))
2478 best = chan;
2508 channel_describe_transport(channel_t *chan) in channel_describe_transport() argument
2510 tor_assert(chan); in channel_describe_transport()
2511 tor_assert(chan->describe_transport); in channel_describe_transport()
2513 return chan->describe_transport(chan); in channel_describe_transport()
2537 channel_dump_statistics, (channel_t *chan, int severity))
2545 tor_assert(chan);
2547 age = (double)(now - chan->timestamp_created);
2552 (chan->global_identifier), chan,
2553 channel_describe_transport(chan),
2554 channel_state_to_string(chan->state), chan->state);
2559 (chan->global_identifier),
2560 (uint64_t)(chan->timestamp_created),
2561 (uint64_t)(now - chan->timestamp_created),
2562 (uint64_t)(chan->timestamp_active),
2563 (uint64_t)(now - chan->timestamp_active));
2566 if (!tor_digest_is_zero(chan->identity_digest)) {
2570 (chan->global_identifier),
2571 hex_str(chan->identity_digest, DIGEST_LEN));
2576 (chan->global_identifier));
2580 have_remote_addr = channel_get_addr_if_possible(chan, &remote_addr);
2582 char *actual = tor_strdup(channel_describe_peer(chan));
2588 (chan->global_identifier),
2590 safe_str(channel_describe_peer(chan)),
2595 char *actual = tor_strdup(channel_describe_peer(chan));
2600 (chan->global_identifier),
2601 channel_describe_peer(chan),
2609 (chan->global_identifier),
2610 channel_is_bad_for_new_circs(chan) ?
2612 channel_is_canonical(chan) ?
2614 channel_is_client(chan) ?
2616 channel_is_local(chan) ?
2618 channel_is_incoming(chan) ?
2625 (chan->global_identifier),
2626 (chan->cmux != NULL) ?
2627 circuitmux_num_active_circuits(chan->cmux) : 0,
2628 (chan->cmux != NULL) ?
2629 circuitmux_num_circuits(chan->cmux) : 0);
2632 if (chan->timestamp_client == 0) {
2635 "client", (chan->global_identifier));
2640 (chan->global_identifier),
2641 (uint64_t)(chan->timestamp_client),
2642 (uint64_t)(now - chan->timestamp_client));
2644 if (chan->timestamp_recv == 0) {
2647 (chan->global_identifier));
2652 (chan->global_identifier),
2653 (uint64_t)(chan->timestamp_recv),
2654 (uint64_t)(now - chan->timestamp_recv));
2656 if (chan->timestamp_xmit == 0) {
2659 (chan->global_identifier));
2664 (chan->global_identifier),
2665 (uint64_t)(chan->timestamp_xmit),
2666 (uint64_t)(now - chan->timestamp_xmit));
2674 (chan->global_identifier),
2675 (chan->n_bytes_recved),
2676 (chan->n_cells_recved),
2677 (chan->n_bytes_xmitted),
2678 (chan->n_cells_xmitted));
2679 if (now > chan->timestamp_created &&
2680 chan->timestamp_created > 0) {
2681 if (chan->n_bytes_recved > 0) {
2682 avg = (double)(chan->n_bytes_recved) / age;
2686 (chan->global_identifier), avg);
2688 if (chan->n_cells_recved > 0) {
2689 avg = (double)(chan->n_cells_recved) / age;
2694 (chan->global_identifier), avg);
2700 (chan->global_identifier), interval);
2703 if (chan->n_bytes_xmitted > 0) {
2704 avg = (double)(chan->n_bytes_xmitted) / age;
2708 (chan->global_identifier), avg);
2710 if (chan->n_cells_xmitted > 0) {
2711 avg = (double)(chan->n_cells_xmitted) / age;
2716 (chan->global_identifier), avg);
2722 (chan->global_identifier), interval);
2728 channel_dump_transport_statistics(chan, severity);
2803 channel_dump_transport_statistics(channel_t *chan, int severity) in channel_dump_transport_statistics() argument
2805 tor_assert(chan); in channel_dump_transport_statistics()
2807 if (chan->dumpstats) chan->dumpstats(chan, severity); in channel_dump_transport_statistics()
2833 channel_describe_peer,(channel_t *chan))
2835 tor_assert(chan);
2836 tor_assert(chan->describe_peer);
2838 return chan->describe_peer(chan);
2852 channel_get_addr_if_possible,(const channel_t *chan,
2855 tor_assert(chan);
2857 tor_assert(chan->get_remote_addr);
2859 return chan->get_remote_addr(chan, addr_out);
2867 channel_has_queued_writes(channel_t *chan) in channel_has_queued_writes() argument
2869 tor_assert(chan); in channel_has_queued_writes()
2870 tor_assert(chan->has_queued_writes); in channel_has_queued_writes()
2873 return chan->has_queued_writes(chan); in channel_has_queued_writes()
2883 channel_is_bad_for_new_circs(channel_t *chan) in channel_is_bad_for_new_circs() argument
2885 tor_assert(chan); in channel_is_bad_for_new_circs()
2887 return chan->is_bad_for_new_circs; in channel_is_bad_for_new_circs()
2896 channel_mark_bad_for_new_circs(channel_t *chan) in channel_mark_bad_for_new_circs() argument
2898 tor_assert(chan); in channel_mark_bad_for_new_circs()
2900 chan->is_bad_for_new_circs = 1; in channel_mark_bad_for_new_circs()
2911 channel_is_client(const channel_t *chan) in channel_is_client() argument
2913 tor_assert(chan); in channel_is_client()
2915 return chan->is_client; in channel_is_client()
2924 channel_mark_client(channel_t *chan) in channel_mark_client() argument
2926 tor_assert(chan); in channel_mark_client()
2928 chan->is_client = 1; in channel_mark_client()
2937 channel_clear_client(channel_t *chan) in channel_clear_client() argument
2939 tor_assert(chan); in channel_clear_client()
2941 chan->is_client = 0; in channel_clear_client()
2951 channel_is_canonical(channel_t *chan) in channel_is_canonical() argument
2953 tor_assert(chan); in channel_is_canonical()
2954 tor_assert(chan->is_canonical); in channel_is_canonical()
2956 return chan->is_canonical(chan); in channel_is_canonical()
2966 channel_is_incoming(channel_t *chan) in channel_is_incoming() argument
2968 tor_assert(chan); in channel_is_incoming()
2970 return chan->is_incoming; in channel_is_incoming()
2980 channel_mark_incoming(channel_t *chan) in channel_mark_incoming() argument
2982 tor_assert(chan); in channel_mark_incoming()
2984 chan->is_incoming = 1; in channel_mark_incoming()
2997 channel_is_local(channel_t *chan) in channel_is_local() argument
2999 tor_assert(chan); in channel_is_local()
3001 return chan->is_local; in channel_is_local()
3012 channel_mark_local(channel_t *chan) in channel_mark_local() argument
3014 tor_assert(chan); in channel_mark_local()
3016 chan->is_local = 1; in channel_mark_local()
3028 channel_mark_remote(channel_t *chan) in channel_mark_remote() argument
3030 tor_assert(chan); in channel_mark_remote()
3032 chan->is_local = 0; in channel_mark_remote()
3043 channel_is_outgoing(channel_t *chan) in channel_is_outgoing() argument
3045 tor_assert(chan); in channel_is_outgoing()
3047 return !(chan->is_incoming); in channel_is_outgoing()
3057 channel_mark_outgoing(channel_t *chan) in channel_mark_outgoing() argument
3059 tor_assert(chan); in channel_mark_outgoing()
3061 chan->is_incoming = 0; in channel_mark_outgoing()
3074 channel_num_cells_writeable(channel_t *chan) in channel_num_cells_writeable() argument
3078 tor_assert(chan); in channel_num_cells_writeable()
3079 tor_assert(chan->num_cells_writeable); in channel_num_cells_writeable()
3081 if (chan->state == CHANNEL_STATE_OPEN) { in channel_num_cells_writeable()
3083 result = chan->num_cells_writeable(chan); in channel_num_cells_writeable()
3104 channel_timestamp_created(channel_t *chan) in channel_timestamp_created() argument
3108 tor_assert(chan); in channel_timestamp_created()
3110 chan->timestamp_created = now; in channel_timestamp_created()
3140 channel_timestamp_active(channel_t *chan) in channel_timestamp_active() argument
3144 tor_assert(chan); in channel_timestamp_active()
3145 monotime_coarse_get(&chan->timestamp_xfer); in channel_timestamp_active()
3147 chan->timestamp_active = now; in channel_timestamp_active()
3150 monotime_coarse_zero(&chan->next_padding_time); in channel_timestamp_active()
3191 channel_timestamp_client(channel_t *chan) in channel_timestamp_client() argument
3195 tor_assert(chan); in channel_timestamp_client()
3197 chan->timestamp_client = now; in channel_timestamp_client()
3207 channel_timestamp_recv(channel_t *chan) in channel_timestamp_recv() argument
3210 tor_assert(chan); in channel_timestamp_recv()
3211 monotime_coarse_get(&chan->timestamp_xfer); in channel_timestamp_recv()
3213 chan->timestamp_active = now; in channel_timestamp_recv()
3214 chan->timestamp_recv = now; in channel_timestamp_recv()
3217 monotime_coarse_zero(&chan->next_padding_time); in channel_timestamp_recv()
3227 channel_timestamp_xmit(channel_t *chan) in channel_timestamp_xmit() argument
3230 tor_assert(chan); in channel_timestamp_xmit()
3232 monotime_coarse_get(&chan->timestamp_xfer); in channel_timestamp_xmit()
3234 chan->timestamp_active = now; in channel_timestamp_xmit()
3235 chan->timestamp_xmit = now; in channel_timestamp_xmit()
3238 monotime_coarse_zero(&chan->next_padding_time); in channel_timestamp_xmit()
3249 channel_when_created(channel_t *chan) in channel_when_created() argument
3251 tor_assert(chan); in channel_when_created()
3253 return chan->timestamp_created; in channel_when_created()
3260 channel_when_last_client(channel_t *chan) in channel_when_last_client() argument
3262 tor_assert(chan); in channel_when_last_client()
3264 return chan->timestamp_client; in channel_when_last_client()
3271 channel_when_last_xmit(channel_t *chan) in channel_when_last_xmit() argument
3273 tor_assert(chan); in channel_when_last_xmit()
3275 return chan->timestamp_xmit; in channel_when_last_xmit()
3288 channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info) in channel_matches_extend_info() argument
3290 tor_assert(chan); in channel_matches_extend_info()
3291 tor_assert(chan->matches_extend_info); in channel_matches_extend_info()
3294 return chan->matches_extend_info(chan, extend_info); in channel_matches_extend_info()
3308 channel_matches_target_addr_for_extend(channel_t *chan, in channel_matches_target_addr_for_extend() argument
3312 tor_assert(chan); in channel_matches_target_addr_for_extend()
3313 tor_assert(chan->matches_target); in channel_matches_target_addr_for_extend()
3318 if (target_ipv4_addr && chan->matches_target(chan, target_ipv4_addr)) in channel_matches_target_addr_for_extend()
3321 if (target_ipv6_addr && chan->matches_target(chan, target_ipv6_addr)) in channel_matches_target_addr_for_extend()
3334 channel_num_circuits(channel_t *chan) in channel_num_circuits() argument
3336 tor_assert(chan); in channel_num_circuits()
3338 return chan->num_n_circuits + in channel_num_circuits()
3339 chan->num_p_circuits; in channel_num_circuits()
3349 channel_set_circid_type,(channel_t *chan,
3356 tor_assert(chan);
3358 started_here = channel_is_outgoing(chan);
3362 chan->circ_id_type = CIRC_ID_TYPE_HIGHER;
3364 chan->circ_id_type = CIRC_ID_TYPE_LOWER;
3373 chan->circ_id_type = CIRC_ID_TYPE_LOWER;
3375 chan->circ_id_type = CIRC_ID_TYPE_HIGHER;
3378 chan->circ_id_type = CIRC_ID_TYPE_NEITHER;
3400 channel_t *chan = TOR_LIST_FIRST(lst); in channel_rsa_id_group_set_badness() local
3402 if (!chan) in channel_rsa_id_group_set_badness()
3406 if (PREDICT_LIKELY(!TOR_LIST_NEXT(chan, next_with_same_id))) { in channel_rsa_id_group_set_badness()
3408 time(NULL), BASE_CHAN_TO_TLS(chan)->conn, force); in channel_rsa_id_group_set_badness()
3414 TOR_LIST_FOREACH(chan, lst, next_with_same_id) { in channel_rsa_id_group_set_badness()
3415 if (BASE_CHAN_TO_TLS(chan)->conn) { in channel_rsa_id_group_set_badness()
3416 smartlist_add(channels, chan); in channel_rsa_id_group_set_badness()