From 380f8983c7e32dd26e8746f6cf75d12d08f962f7 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 15 Jan 2007 21:21:05 +0000 Subject: r11966@Kushana: nickm | 2007-01-15 16:12:17 -0500 Tidy up ORCONN reason patch from Mike Perry. Changes: make some of the handling of TLS error codes less error prone. Enforce house style wrt spaces. Make it compile with --enable-gcc-warnings. Only set or_conn->tls_error in the case of an actual error. Add a changelog entry. svn:r9355 --- src/common/tortls.c | 15 +++++++++------ src/common/tortls.h | 13 +++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'src/common') diff --git a/src/common/tortls.c b/src/common/tortls.c index f7e48b22f5..b93d761b0c 100644 --- a/src/common/tortls.c +++ b/src/common/tortls.c @@ -73,8 +73,8 @@ static tor_tls_context_t *global_tls_context = NULL; static int tls_library_is_initialized = 0; /* Module-internal error codes. */ -#define _TOR_TLS_SYSCALL -10 -#define _TOR_TLS_ZERORETURN -9 +#define _TOR_TLS_SYSCALL (_MIN_TOR_TLS_ERROR_VAL - 2) +#define _TOR_TLS_ZERORETURN (_MIN_TOR_TLS_ERROR_VAL - 1) /* These functions are declared in crypto.c but not exported. */ EVP_PKEY *_crypto_pk_env_get_evp_pkey(crypto_pk_env_t *env, int private); @@ -104,9 +104,10 @@ tls_log_errors(int severity, const char *doing) } static int -tor_errno_to_tls_error(int e) { +tor_errno_to_tls_error(int e) +{ #if defined(MS_WINDOWS) && !defined(USE_BSOCKETS) - switch(e) { + switch (e) { case WSAECONNRESET: // most common return TOR_TLS_ERROR_CONNRESET; case WSAETIMEDOUT: @@ -119,8 +120,8 @@ tor_errno_to_tls_error(int e) { default: return TOR_TLS_ERROR_MISC; } -#else - switch(e) { +#else + switch (e) { case ECONNRESET: // most common return TOR_TLS_ERROR_CONNRESET; case ETIMEDOUT: @@ -182,6 +183,8 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra, return _TOR_TLS_ZERORETURN; log(severity, LD_NET, "TLS error: Zero return"); tls_log_errors(severity, doing); + /* XXXX Actually, a 'zero return' error has a pretty specific meaning: + * the connection has been closed cleanly. */ return TOR_TLS_ERROR_MISC; default: tls_log_errors(severity, doing); diff --git a/src/common/tortls.h b/src/common/tortls.h index 5a6631dd5d..e2b738da4b 100644 --- a/src/common/tortls.h +++ b/src/common/tortls.h @@ -19,6 +19,7 @@ typedef struct tor_tls_t tor_tls_t; /* Possible return values for most tor_tls_* functions. */ +#define _MIN_TOR_TLS_ERROR_VAL -9 #define TOR_TLS_ERROR_MISC -9 #define TOR_TLS_ERROR_IO -8 #define TOR_TLS_ERROR_CONNREFUSED -7 @@ -30,6 +31,18 @@ typedef struct tor_tls_t tor_tls_t; #define TOR_TLS_WANTWRITE -1 #define TOR_TLS_DONE 0 +/* Use this macro in a switch statement to catch _any_ TLS error. That way, + * if more errors are added, your switches will still work. */ +#define CASE_TOR_TLS_ERROR_ANY \ + case TOR_TLS_ERROR_MISC: \ + case TOR_TLS_ERROR_IO: \ + case TOR_TLS_ERROR_CONNREFUSED: \ + case TOR_TLS_ERROR_CONNRESET: \ + case TOR_TLS_ERROR_NO_ROUTE: \ + case TOR_TLS_ERROR_TIMEOUT + +#define TOR_TLS_IS_ERROR(rv) ((rv) < TOR_TLS_CLOSE) + void tor_tls_free_all(void); int tor_tls_context_new(crypto_pk_env_t *rsa, const char *nickname, unsigned int key_lifetime); -- cgit v1.2.3-54-g00ecf