mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
jabber: rewrite error handling
This commit is contained in:
parent
1aff8a2144
commit
46b8a21cfb
78
src/jabber.c
78
src/jabber.c
@ -42,18 +42,6 @@ static struct _jabber_conn_t {
|
|||||||
int tls_disabled;
|
int tls_disabled;
|
||||||
} jabber_conn;
|
} jabber_conn;
|
||||||
|
|
||||||
typedef struct _err_code_tbl_t {
|
|
||||||
int code;
|
|
||||||
char *condition;
|
|
||||||
} err_code_tbl_t;
|
|
||||||
|
|
||||||
static err_code_tbl_t err_code_tbl[] = {
|
|
||||||
{404, "recipient-unavailable"},
|
|
||||||
{503, "service-unavailable"},
|
|
||||||
{0, NULL}, // termination line
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *_get_xmpp_err_by_code(const char * const err_code);
|
|
||||||
static log_level_t _get_log_level(xmpp_log_level_t xmpp_level);
|
static log_level_t _get_log_level(xmpp_log_level_t xmpp_level);
|
||||||
static xmpp_log_level_t _get_xmpp_log_level();
|
static xmpp_log_level_t _get_xmpp_log_level();
|
||||||
static void _xmpp_file_logger(void * const userdata,
|
static void _xmpp_file_logger(void * const userdata,
|
||||||
@ -267,6 +255,32 @@ static int
|
|||||||
_message_handler(xmpp_conn_t * const conn,
|
_message_handler(xmpp_conn_t * const conn,
|
||||||
xmpp_stanza_t * const stanza, void * const userdata)
|
xmpp_stanza_t * const stanza, void * const userdata)
|
||||||
{
|
{
|
||||||
|
char *type;
|
||||||
|
char *from;
|
||||||
|
|
||||||
|
type = xmpp_stanza_get_attribute(stanza, "type");
|
||||||
|
from = xmpp_stanza_get_attribute(stanza, "from");
|
||||||
|
|
||||||
|
if (strcmp(type, "error") == 0) {
|
||||||
|
char *err_msg = NULL;
|
||||||
|
xmpp_stanza_t *error = xmpp_stanza_get_child_by_name(stanza, "error");
|
||||||
|
if (error == NULL) {
|
||||||
|
log_debug("error message without <error/> received");
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
xmpp_stanza_t *err_cond = xmpp_stanza_get_children(error);
|
||||||
|
if (err_cond == NULL) {
|
||||||
|
log_debug("error message without <defined-condition/> received");
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
err_msg = xmpp_stanza_get_name(err_cond);
|
||||||
|
}
|
||||||
|
// TODO: process 'type' attribute from <error/> [RFC6120, 8.3.2]
|
||||||
|
}
|
||||||
|
prof_handle_error_message(from, err_msg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, "body");
|
xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, "body");
|
||||||
|
|
||||||
// if no message, check for chatstates
|
// if no message, check for chatstates
|
||||||
@ -277,7 +291,6 @@ _message_handler(xmpp_conn_t * const conn,
|
|||||||
// active
|
// active
|
||||||
} else if (xmpp_stanza_get_child_by_name(stanza, "composing") != NULL) {
|
} else if (xmpp_stanza_get_child_by_name(stanza, "composing") != NULL) {
|
||||||
// composing
|
// composing
|
||||||
char *from = xmpp_stanza_get_attribute(stanza, "from");
|
|
||||||
prof_handle_typing(from);
|
prof_handle_typing(from);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,27 +299,7 @@ _message_handler(xmpp_conn_t * const conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// message body recieved
|
// message body recieved
|
||||||
char *type = xmpp_stanza_get_attribute(stanza, "type");
|
|
||||||
if(strcmp(type, "error") == 0) {
|
|
||||||
// error message received
|
|
||||||
char *from = xmpp_stanza_get_attribute(stanza, "from");
|
|
||||||
char *err_msg = NULL;
|
|
||||||
xmpp_stanza_t *error = xmpp_stanza_get_child_by_name(stanza, "error");
|
|
||||||
if (error) {
|
|
||||||
xmpp_stanza_t *err_cond = xmpp_stanza_get_children(error);
|
|
||||||
if (err_cond) {
|
|
||||||
err_msg = xmpp_stanza_get_name(err_cond);
|
|
||||||
} else {
|
|
||||||
char *err_code = xmpp_stanza_get_attribute(error, "code");
|
|
||||||
err_msg = _get_xmpp_err_by_code(err_code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
prof_handle_error_message(from, err_msg);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *message = xmpp_stanza_get_text(body);
|
char *message = xmpp_stanza_get_text(body);
|
||||||
char *from = xmpp_stanza_get_attribute(stanza, "from");
|
|
||||||
prof_handle_incoming_message(from, message);
|
prof_handle_incoming_message(from, message);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -463,25 +456,6 @@ _presence_handler(xmpp_conn_t * const conn,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
|
||||||
_get_xmpp_err_by_code(const char * const err_code)
|
|
||||||
{
|
|
||||||
int code;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
if (err_code == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
code = atoi(err_code);
|
|
||||||
while (err_code_tbl[i].code != 0) {
|
|
||||||
if (err_code_tbl[i].code == code) {
|
|
||||||
return err_code_tbl[i].condition;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static log_level_t
|
static log_level_t
|
||||||
_get_log_level(xmpp_log_level_t xmpp_level)
|
_get_log_level(xmpp_log_level_t xmpp_level)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user