From d0c8ed462ddd32ca23a8162a0e5c21f1f25c887b Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 22 Sep 2013 00:12:20 +0100 Subject: [PATCH 1/2] Add error handler only once fixes #240 --- src/xmpp/connection.c | 1 + src/xmpp/message.c | 1 - src/xmpp/presence.c | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c index 5040aa91..40a1ea05 100644 --- a/src/xmpp/connection.c +++ b/src/xmpp/connection.c @@ -484,6 +484,7 @@ _connection_handler(xmpp_conn_t * const conn, chat_sessions_init(); + xmpp_handler_add(conn, connection_error_handler, NULL, NULL, STANZA_TYPE_ERROR, ctx); roster_add_handlers(); message_add_handlers(); presence_add_handlers(); diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 19b4df49..8a977490 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -51,7 +51,6 @@ message_add_handlers(void) xmpp_conn_t * const conn = connection_get_conn(); xmpp_ctx_t * const ctx = connection_get_ctx(); - HANDLE(NULL, STANZA_TYPE_ERROR, connection_error_handler); HANDLE(NULL, STANZA_TYPE_GROUPCHAT, _groupchat_message_handler); HANDLE(NULL, STANZA_TYPE_CHAT, _chat_message_handler); HANDLE(NULL, NULL, _conference_message_handler); diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index 607bb02b..809ddf6f 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -72,7 +72,6 @@ presence_add_handlers(void) xmpp_conn_t * const conn = connection_get_conn(); xmpp_ctx_t * const ctx = connection_get_ctx(); - HANDLE(NULL, STANZA_TYPE_ERROR, connection_error_handler); HANDLE(STANZA_NS_MUC_USER, NULL, _room_presence_handler); HANDLE(NULL, STANZA_TYPE_UNAVAILABLE, _unavailable_handler); HANDLE(NULL, STANZA_TYPE_SUBSCRIBE, _subscribe_handler); From d70245c8870426382959d9d23199a34e72fc7aa5 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 22 Sep 2013 01:26:40 +0100 Subject: [PATCH 2/2] Fixe rejoining room after nickname conflict fixes #241 --- src/muc.c | 4 +++- src/profanity.c | 5 +++++ src/xmpp/presence.c | 10 ++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/muc.c b/src/muc.c index 93202a54..1dcc457f 100644 --- a/src/muc.c +++ b/src/muc.c @@ -145,7 +145,9 @@ muc_join_room(const char * const room, const char * const nick) void muc_leave_room(const char * const room) { - g_hash_table_remove(rooms, room); + if (rooms != NULL) { + g_hash_table_remove(rooms, room); + } } /* diff --git a/src/profanity.c b/src/profanity.c index b18cbe91..bcb59395 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -196,6 +196,11 @@ prof_handle_error_message(const char *from, const char *err_msg) } else { cons_show_error("Error received from server: %s", err_msg); } + // remove the room from muc + Jid *room_jid = jid_create(from); + muc_leave_room(room_jid->barejid); + jid_destroy(room_jid); + } else { cons_show_error("Error received from server: %s", err_msg); } diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index 809ddf6f..ba9c6c02 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -320,10 +320,12 @@ presence_leave_chat_room(const char * const room_jid) xmpp_conn_t *conn = connection_get_conn(); char *nick = muc_get_room_nick(room_jid); - xmpp_stanza_t *presence = stanza_create_room_leave_presence(ctx, room_jid, - nick); - xmpp_send(conn, presence); - xmpp_stanza_release(presence); + if (nick != NULL) { + xmpp_stanza_t *presence = stanza_create_room_leave_presence(ctx, room_jid, + nick); + xmpp_send(conn, presence); + xmpp_stanza_release(presence); + } } static int