Unify tests for "did I originate this nonopen OR connection?"

svn:r2468
This commit is contained in:
Nick Mathewson 2004-10-13 20:05:57 +00:00
parent 30dd1c87a5
commit e0cce8fba8
3 changed files with 14 additions and 12 deletions

View File

@ -192,13 +192,7 @@ void connection_about_to_close_connection(connection_t *conn)
case CONN_TYPE_OR:
/* Remember why we're closing this connection. */
if (conn->state != OR_CONN_STATE_OPEN) {
/* XXX Nick: this still isn't right, because it might be
* dying even though we didn't initiate the connect. Can
* you look at this more? -RD XXXX008 -NM*/
/* XXX We only set conn->nickname when we initiate the connection, or
* when the handshake is complete; so conn->nickname is a good test
* for "we initiated the connection", right? -NM */
if(conn->nickname)
if(connection_or_nonopen_was_started_here(conn))
rep_hist_note_connect_failed(conn->identity_digest, time(NULL));
} else if (0) { // XXX reason == CLOSE_REASON_UNUSED_OR_CONN) {
rep_hist_note_disconnect(conn->identity_digest, time(NULL));

View File

@ -300,10 +300,17 @@ int connection_tls_continue_handshake(connection_t *conn) {
return 0;
}
static int digest_is_zero(const char *id) {
char ZERO_DIGEST[DIGEST_LEN];
memset(ZERO_DIGEST, 0, DIGEST_LEN);
return !memcmp(ZERO_DIGEST, id, DIGEST_LEN);
static char ZERO_DIGEST[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
int connection_or_nonopen_was_started_here(connection_t *conn)
{
tor_assert(sizeof(ZERO_DIGEST) == DIGEST_LEN);
tor_assert(conn->type == CONN_TYPE_OR);
if (!memcmp(ZERO_DIGEST, conn->identity_digest, DIGEST_LEN))
return 0;
else
return 1;
}
/** The tls handshake is finished.
@ -371,7 +378,7 @@ connection_tls_finish_handshake(connection_t *conn) {
return -1;
}
if (!digest_is_zero(conn->identity_digest)) {
if (connection_or_nonopen_was_started_here(conn)) {
/* I initiated this connection. */
if (strcasecmp(conn->nickname, nickname)) {
log_fn(options.DirPort ? LOG_WARN : LOG_INFO,

View File

@ -1110,6 +1110,7 @@ int connection_state_is_connecting(connection_t *conn);
int connection_send_destroy(uint16_t circ_id, connection_t *conn);
void assert_connection_ok(connection_t *conn, time_t now);
int connection_or_nonopen_was_started_here(connection_t *conn);
/********************************* connection_edge.c ***************************/