diff --git a/SConstruct b/SConstruct index d5bfd81..0e4250b 100644 --- a/SConstruct +++ b/SConstruct @@ -48,7 +48,7 @@ Sources = Split(""" util.c thread.c snprintf.c - tls_gnutls.c + tls_dummy.c oocontext.cpp oostanza.cpp """) @@ -98,7 +98,7 @@ Default(strophe) exenv = env.Clone() exenv.Append(CPPPATH=['.']) -exenv.Append(LIBS=["strophe", "expat", "gnutls"]) +exenv.Append(LIBS=["strophe", "expat"]) exenv.Append(LIBPATH=["."]) if exenv["PLATFORM"] == "win32": exenv.Append(LIBS=["ws2_32", "winmm"]) diff --git a/src/handler.c b/src/handler.c index 4a77f9c..55c7ad4 100644 --- a/src/handler.c +++ b/src/handler.c @@ -89,14 +89,12 @@ void handler_fire_stanza(xmpp_conn_t * const conn, while (item) { /* skip newly added handlers */ if (!item->enabled) { - prev = item; item = item->next; continue; } /* don't call user handlers until authentication succeeds */ if (item->user_handler && !conn->authenticated) { - prev = item; item = item->next; continue; } diff --git a/src/tls_dummy.c b/src/tls_dummy.c index 8376823..13ccd69 100644 --- a/src/tls_dummy.c +++ b/src/tls_dummy.c @@ -78,6 +78,11 @@ int tls_write(tls_t *tls, const void * const buff, const size_t len) return -1; } +int tls_clear_pending_write(tls_t *tls) +{ + return -1; +} + int tls_is_recoverable(int error) { return 0; diff --git a/src/tls_gnutls.c b/src/tls_gnutls.c index 044e34b..7fc13b5 100644 --- a/src/tls_gnutls.c +++ b/src/tls_gnutls.c @@ -24,7 +24,6 @@ struct _tls { xmpp_ctx_t *ctx; /* do we need this? */ - int error; sock_t sock; gnutls_session_t session; gnutls_certificate_credentials_t cred; @@ -54,7 +53,6 @@ tls_t *tls_new(xmpp_ctx_t *ctx, sock_t sock) if (tls) { tls->ctx = ctx; - tls->error = 0; tls->sock = sock; gnutls_init(&tls->session, GNUTLS_CLIENT); @@ -65,7 +63,7 @@ tls_t *tls_new(xmpp_ctx_t *ctx, sock_t sock) /* fixme: this may require setting a callback on win32? */ gnutls_transport_set_ptr(tls->session, - (gnutls_transport_ptr_t)sock); + (gnutls_transport_ptr_t)sock); } return tls; @@ -95,14 +93,7 @@ int tls_set_credentials(tls_t *tls, const char *cafilename) int tls_start(tls_t *tls) { - int ret; - xmpp_debug(tls->ctx, "TLS", "tls starting"); - ret = gnutls_handshake(tls->session); - if (ret < 0) { - tls->error = ret; - return 0; - } - return 1; + return gnutls_handshake(tls->session); } int tls_stop(tls_t *tls) @@ -110,13 +101,17 @@ int tls_stop(tls_t *tls) return gnutls_bye(tls->session, GNUTLS_SHUT_RDWR); } +int tls_error(tls_t *tls) +{ + /* todo: some kind of error polling/dump */ + return 0; +} + int tls_read(tls_t *tls, void * const buff, const size_t len) { int ret; - xmpp_debug(tls->ctx, "TLS", "tls_read called"); ret = gnutls_record_recv(tls->session, buff, len); - xmpp_debug(tls->ctx, "TLS", "tls_read returned %d", ret); return ret; } @@ -130,17 +125,3 @@ int tls_write(tls_t *tls, const void * const buff, const size_t len) return ret; } -int tls_clear_pending_write(tls_t *tls) -{ - return 0; -} - -int tls_error(tls_t *tls) -{ - return tls->error; -} - -int tls_is_recoverable(int error) -{ - return sock_is_recoverable(error); -} diff --git a/src/tls_openssl.c b/src/tls_openssl.c index 3806895..c567fe9 100644 --- a/src/tls_openssl.c +++ b/src/tls_openssl.c @@ -189,6 +189,11 @@ int tls_stop(tls_t *tls) return 1; } +int tls_error(tls_t *tls) +{ + return tls->lasterror; +} + int tls_is_recoverable(int error) { return (error == SSL_ERROR_NONE || error == SSL_ERROR_WANT_READ