mirror of
https://github.com/profanity-im/profanity.git
synced 2024-11-03 19:37:16 -05:00
Split xmpp message handlers by namespace
This commit is contained in:
parent
78e8232b61
commit
d8a92f933b
@ -40,11 +40,15 @@
|
|||||||
|
|
||||||
#define HANDLE(ns, type, func) xmpp_handler_add(conn, func, ns, STANZA_NAME_MESSAGE, type, ctx)
|
#define HANDLE(ns, type, func) xmpp_handler_add(conn, func, ns, STANZA_NAME_MESSAGE, type, ctx)
|
||||||
|
|
||||||
static int _groupchat_message_handler(xmpp_conn_t * const conn,
|
static int _groupchat_handler(xmpp_conn_t * const conn,
|
||||||
xmpp_stanza_t * const stanza, void * const userdata);
|
xmpp_stanza_t * const stanza, void * const userdata);
|
||||||
static int _chat_message_handler(xmpp_conn_t * const conn,
|
static int _chat_handler(xmpp_conn_t * const conn,
|
||||||
xmpp_stanza_t * const stanza, void * const userdata);
|
xmpp_stanza_t * const stanza, void * const userdata);
|
||||||
static int _conference_message_handler(xmpp_conn_t * const conn,
|
static int _muc_user_handler(xmpp_conn_t * const conn,
|
||||||
|
xmpp_stanza_t * const stanza, void * const userdata);
|
||||||
|
static int _conference_handler(xmpp_conn_t * const conn,
|
||||||
|
xmpp_stanza_t * const stanza, void * const userdata);
|
||||||
|
static int _captcha_handler(xmpp_conn_t * const conn,
|
||||||
xmpp_stanza_t * const stanza, void * const userdata);
|
xmpp_stanza_t * const stanza, void * const userdata);
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -53,9 +57,11 @@ message_add_handlers(void)
|
|||||||
xmpp_conn_t * const conn = connection_get_conn();
|
xmpp_conn_t * const conn = connection_get_conn();
|
||||||
xmpp_ctx_t * const ctx = connection_get_ctx();
|
xmpp_ctx_t * const ctx = connection_get_ctx();
|
||||||
|
|
||||||
HANDLE(NULL, STANZA_TYPE_GROUPCHAT, _groupchat_message_handler);
|
HANDLE(NULL, STANZA_TYPE_GROUPCHAT, _groupchat_handler);
|
||||||
HANDLE(NULL, STANZA_TYPE_CHAT, _chat_message_handler);
|
HANDLE(NULL, STANZA_TYPE_CHAT, _chat_handler);
|
||||||
HANDLE(NULL, NULL, _conference_message_handler);
|
HANDLE(STANZA_NS_MUC_USER, NULL, _muc_user_handler);
|
||||||
|
HANDLE(STANZA_NS_CONFERENCE, NULL, _conference_handler);
|
||||||
|
HANDLE(STANZA_NS_CAPTCHA, NULL, _captcha_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -180,32 +186,23 @@ _message_send_gone(const char * const recipient)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_conference_message_handler(xmpp_conn_t * const conn,
|
_muc_user_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
|
||||||
xmpp_stanza_t * const stanza, void * const userdata)
|
void * const userdata)
|
||||||
{
|
{
|
||||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||||
xmpp_stanza_t *xns_muc_user = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
xmpp_stanza_t *xns_muc_user = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||||
xmpp_stanza_t *xns_conference = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CONFERENCE);
|
char *room = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
|
||||||
xmpp_stanza_t *xns_captcha = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CAPTCHA);
|
|
||||||
char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
|
|
||||||
char *room = NULL;
|
|
||||||
char *invitor = NULL;
|
char *invitor = NULL;
|
||||||
char *reason = NULL;
|
char *reason = NULL;
|
||||||
|
|
||||||
if (from == NULL) {
|
if (room == NULL) {
|
||||||
log_warning("Message received with no from attribute, ignoring");
|
log_warning("Message received with no from attribute, ignoring");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// XEP-0045
|
// XEP-0045
|
||||||
if (xns_muc_user != NULL) {
|
xmpp_stanza_t *invite = xmpp_stanza_get_child_by_name(xns_muc_user, STANZA_NAME_INVITE);
|
||||||
room = from;
|
if (invite != NULL) {
|
||||||
|
|
||||||
xmpp_stanza_t *invite = xmpp_stanza_get_child_by_name(xns_muc_user, STANZA_NAME_INVITE);
|
|
||||||
if (invite == NULL) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *invitor_jid = xmpp_stanza_get_attribute(invite, STANZA_ATTR_FROM);
|
char *invitor_jid = xmpp_stanza_get_attribute(invite, STANZA_ATTR_FROM);
|
||||||
if (invitor_jid == NULL) {
|
if (invitor_jid == NULL) {
|
||||||
log_warning("Chat room invite received with no from attribute");
|
log_warning("Chat room invite received with no from attribute");
|
||||||
@ -228,35 +225,67 @@ _conference_message_handler(xmpp_conn_t * const conn,
|
|||||||
if (reason != NULL) {
|
if (reason != NULL) {
|
||||||
xmpp_free(ctx, reason);
|
xmpp_free(ctx, reason);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_conference_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
|
||||||
|
void * const userdata)
|
||||||
|
{
|
||||||
|
xmpp_stanza_t *xns_conference = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CONFERENCE);
|
||||||
|
char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
|
||||||
|
char *room = NULL;
|
||||||
|
char *invitor = NULL;
|
||||||
|
char *reason = NULL;
|
||||||
|
|
||||||
|
if (from == NULL) {
|
||||||
|
log_warning("Message received with no from attribute, ignoring");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// XEP-0429
|
// XEP-0429
|
||||||
} else if (xns_conference != NULL) {
|
room = xmpp_stanza_get_attribute(xns_conference, STANZA_ATTR_JID);
|
||||||
room = xmpp_stanza_get_attribute(xns_conference, STANZA_ATTR_JID);
|
if (room == NULL) {
|
||||||
if (room == NULL) {
|
return 1;
|
||||||
return 1;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Jid *jidp = jid_create(from);
|
Jid *jidp = jid_create(from);
|
||||||
if (jidp == NULL) {
|
if (jidp == NULL) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
invitor = jidp->barejid;
|
invitor = jidp->barejid;
|
||||||
|
|
||||||
reason = xmpp_stanza_get_attribute(xns_conference, STANZA_ATTR_REASON);
|
reason = xmpp_stanza_get_attribute(xns_conference, STANZA_ATTR_REASON);
|
||||||
|
|
||||||
handle_room_invite(INVITE_DIRECT, invitor, room, reason);
|
handle_room_invite(INVITE_DIRECT, invitor, room, reason);
|
||||||
|
|
||||||
jid_destroy(jidp);
|
jid_destroy(jidp);
|
||||||
|
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_captcha_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
|
||||||
|
void * const userdata)
|
||||||
|
{
|
||||||
|
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||||
|
char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
|
||||||
|
|
||||||
|
if (from == NULL) {
|
||||||
|
log_warning("Message received with no from attribute, ignoring");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// XEP-0158
|
// XEP-0158
|
||||||
} else if (xns_captcha != NULL) {
|
xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_BODY);
|
||||||
xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_BODY);
|
if (body != NULL) {
|
||||||
if (body != NULL) {
|
char *message = xmpp_stanza_get_text(body);
|
||||||
char *message = xmpp_stanza_get_text(body);
|
if (message != NULL) {
|
||||||
if (message != NULL) {
|
handle_room_broadcast(from, message);
|
||||||
handle_room_broadcast(from, message);
|
xmpp_free(ctx, message);
|
||||||
xmpp_free(ctx, message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,7 +293,7 @@ _conference_message_handler(xmpp_conn_t * const conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_groupchat_message_handler(xmpp_conn_t * const conn,
|
_groupchat_handler(xmpp_conn_t * const conn,
|
||||||
xmpp_stanza_t * const stanza, void * const userdata)
|
xmpp_stanza_t * const stanza, void * const userdata)
|
||||||
{
|
{
|
||||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||||
@ -341,7 +370,7 @@ _groupchat_message_handler(xmpp_conn_t * const conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_chat_message_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
|
_chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
|
||||||
void * const userdata)
|
void * const userdata)
|
||||||
{
|
{
|
||||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||||
|
Loading…
Reference in New Issue
Block a user