aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2003-09-15 18:18:37 +0000
committerNick Mathewson <nickm@torproject.org>2003-09-15 18:18:37 +0000
commit408bff4a239ebd15b46d69a298607ec7cafa54e7 (patch)
tree49d610342a75f16bb9591982207a6085e62fa704 /src
parentebc23f690c38e70bfe1eb6aaa56a5c4eb9e35be4 (diff)
downloadtor-408bff4a239ebd15b46d69a298607ec7cafa54e7.tar
tor-408bff4a239ebd15b46d69a298607ec7cafa54e7.tar.gz
Log protocol errors
svn:r457
Diffstat (limited to 'src')
-rw-r--r--src/common/tortls.c25
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 */