diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/tortls.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/common/tortls.c b/src/common/tortls.c index 5d0ead1c4..49cdb6932 100644 --- a/src/common/tortls.c +++ b/src/common/tortls.c @@ -44,6 +44,17 @@ static int tls_library_is_initialized = 0; /* These functions are declared in crypto.c but not exported. */ EVP_PKEY *_crypto_pk_env_get_evp_pkey(crypto_pk_env_t *env); crypto_pk_env_t *_crypto_new_pk_env_rsa(RSA *rsa); +char *crypto_perror(); + +static void +tls_log_error(int severity, char *doing) +{ + if (doing) { + log(severity, "TLS error while %s: %s", doing, crypto_perror()); + } else { + log(severity, "TLS error: %s",crypto_perror()); + } +} static int tor_tls_get_error(tor_tls *tls, int r, int extra) @@ -279,13 +290,15 @@ tor_tls_read(tor_tls *tls, char *cp, int len) if (r > 0) return r; err = tor_tls_get_error(tls, r, 1); - if (err == _TOR_TLS_SYSCALL) + if (err == _TOR_TLS_SYSCALL) { + tls_log_error(LOG_ERR, "reading"); return TOR_TLS_ERROR; - else if (err == _TOR_TLS_ZERORETURN) { + } else if (err == _TOR_TLS_ZERORETURN) { tls->state = TOR_TLS_ST_CLOSED; return TOR_TLS_CLOSE; } else { assert(err != TOR_TLS_DONE); + tls_log_error(LOG_ERR, "reading"); return err; } } @@ -309,6 +322,8 @@ tor_tls_write(tor_tls *tls, char *cp, int n) if (err == TOR_TLS_DONE) { return r; } else { + if (err != TOR_TLS_WANTREAD && err != TOR_TLS_WANTWRITE) + tls_log_error(LOG_ERR, "writing"); return err; } } @@ -331,6 +346,8 @@ tor_tls_handshake(tor_tls *tls) r = tor_tls_get_error(tls,r,0); if (r == TOR_TLS_DONE) { tls->state = TOR_TLS_ST_OPEN; + } else if (r != TOR_TLS_WANTREAD && r != TOR_TLS_WANTWRITE) { + tls_log_error(LOG_ERR, "handshaking"); } return r; } @@ -361,6 +378,8 @@ tor_tls_shutdown(tor_tls *tls) } else { if (err == _TOR_TLS_SYSCALL) err = TOR_TLS_ERROR; + if (err != TOR_TLS_WANTREAD && err != TOR_TLS_WANTWRITE) + tls_log_error(LOG_ERR, "shutting down"); return err; } } @@ -391,6 +410,8 @@ tor_tls_shutdown(tor_tls *tls) tls->state = TOR_TLS_ST_SENTCLOSE; /* fall through ... */ } else { + if (err != TOR_TLS_WANTREAD && err != TOR_TLS_WANTWRITE) + tls_log_error(LOG_ERR, "shutting down"); return err; } } /* end loop */ |