mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
parent
c8eaaa0ce9
commit
ac940c2c8a
@ -60,7 +60,6 @@ static int _conference_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const s
|
|||||||
static int _captcha_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);
|
||||||
static int _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata);
|
static int _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata);
|
||||||
static int _receipt_received_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata);
|
static int _receipt_received_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata);
|
||||||
static int _carbons_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
message_add_handlers(void)
|
message_add_handlers(void)
|
||||||
@ -75,7 +74,6 @@ message_add_handlers(void)
|
|||||||
HANDLE(STANZA_NS_CONFERENCE, NULL, _conference_handler);
|
HANDLE(STANZA_NS_CONFERENCE, NULL, _conference_handler);
|
||||||
HANDLE(STANZA_NS_CAPTCHA, NULL, _captcha_handler);
|
HANDLE(STANZA_NS_CAPTCHA, NULL, _captcha_handler);
|
||||||
HANDLE(STANZA_NS_RECEIPTS, NULL, _receipt_received_handler);
|
HANDLE(STANZA_NS_RECEIPTS, NULL, _receipt_received_handler);
|
||||||
HANDLE(STANZA_NS_CARBONS, NULL, _carbons_handler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@ -531,48 +529,6 @@ _message_send_receipt(const char * const fulljid, const char * const message_id)
|
|||||||
xmpp_stanza_release(message);
|
xmpp_stanza_release(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
_carbons_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata)
|
|
||||||
{
|
|
||||||
xmpp_stanza_t *carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS);
|
|
||||||
char *name = xmpp_stanza_get_name(carbons);
|
|
||||||
if ((g_strcmp0(name, "received") == 0) || (g_strcmp0(name, "sent")) == 0){
|
|
||||||
xmpp_stanza_t *forwarded = xmpp_stanza_get_child_by_ns(carbons, STANZA_NS_FORWARD);
|
|
||||||
xmpp_stanza_t *message = xmpp_stanza_get_child_by_name(forwarded, STANZA_NAME_MESSAGE);
|
|
||||||
|
|
||||||
gchar *to = xmpp_stanza_get_attribute(message, STANZA_ATTR_TO);
|
|
||||||
gchar *from = xmpp_stanza_get_attribute(message, STANZA_ATTR_FROM);
|
|
||||||
|
|
||||||
// carbon of a self sent message
|
|
||||||
if (!to) to = from;
|
|
||||||
|
|
||||||
Jid *jid_from = jid_create(from);
|
|
||||||
Jid *jid_to = jid_create(to);
|
|
||||||
Jid *my_jid = jid_create(jabber_get_fulljid());
|
|
||||||
|
|
||||||
xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(message, STANZA_NAME_BODY);
|
|
||||||
if (body) {
|
|
||||||
char *message = xmpp_stanza_get_text(body);
|
|
||||||
if (message) {
|
|
||||||
if (g_strcmp0(my_jid->barejid, jid_to->barejid) == 0) {
|
|
||||||
sv_ev_incoming_message(jid_from->barejid, jid_from->resourcepart, message);
|
|
||||||
} else {
|
|
||||||
sv_ev_carbon(jid_to->barejid, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
|
||||||
xmpp_free(ctx, message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
jid_destroy(jid_from);
|
|
||||||
jid_destroy(jid_to);
|
|
||||||
jid_destroy(my_jid);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_receipt_received_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata)
|
_receipt_received_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata)
|
||||||
{
|
{
|
||||||
@ -655,18 +611,61 @@ _private_chat_handler(xmpp_stanza_t * const stanza, const char * const fulljid)
|
|||||||
static int
|
static int
|
||||||
_chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata)
|
_chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata)
|
||||||
{
|
{
|
||||||
|
// ignore if type not chat or absent
|
||||||
|
char *type = xmpp_stanza_get_type(stanza);
|
||||||
|
if (!(g_strcmp0(type, "chat") == 0 || type == NULL)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if carbon message
|
||||||
|
xmpp_stanza_t *carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS);
|
||||||
|
if (carbons) {
|
||||||
|
char *name = xmpp_stanza_get_name(carbons);
|
||||||
|
if ((g_strcmp0(name, "received") == 0) || (g_strcmp0(name, "sent")) == 0){
|
||||||
|
xmpp_stanza_t *forwarded = xmpp_stanza_get_child_by_ns(carbons, STANZA_NS_FORWARD);
|
||||||
|
xmpp_stanza_t *message = xmpp_stanza_get_child_by_name(forwarded, STANZA_NAME_MESSAGE);
|
||||||
|
|
||||||
|
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||||
|
|
||||||
|
gchar *to = xmpp_stanza_get_attribute(message, STANZA_ATTR_TO);
|
||||||
|
gchar *from = xmpp_stanza_get_attribute(message, STANZA_ATTR_FROM);
|
||||||
|
|
||||||
|
// happens when receive a carbon of a self sent message
|
||||||
|
if (!to) to = from;
|
||||||
|
|
||||||
|
Jid *jid_from = jid_create(from);
|
||||||
|
Jid *jid_to = jid_create(to);
|
||||||
|
Jid *my_jid = jid_create(jabber_get_fulljid());
|
||||||
|
|
||||||
|
// check for and deal with message
|
||||||
|
xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(message, STANZA_NAME_BODY);
|
||||||
|
if (body) {
|
||||||
|
char *message = xmpp_stanza_get_text(body);
|
||||||
|
if (message) {
|
||||||
|
// if we are the recipient, treat as standard incoming message
|
||||||
|
if(g_strcmp0(my_jid->barejid, jid_to->barejid) == 0){
|
||||||
|
sv_ev_incoming_message(jid_from->barejid, jid_from->resourcepart, message);
|
||||||
|
}
|
||||||
|
// else treat as a sent message
|
||||||
|
else{
|
||||||
|
sv_ev_carbon(jid_to->barejid, message);
|
||||||
|
}
|
||||||
|
xmpp_free(ctx, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
jid_destroy(jid_from);
|
||||||
|
jid_destroy(jid_to);
|
||||||
|
jid_destroy(my_jid);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ignore handled namespaces
|
// ignore handled namespaces
|
||||||
xmpp_stanza_t *conf = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CONFERENCE);
|
xmpp_stanza_t *conf = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CONFERENCE);
|
||||||
xmpp_stanza_t *mucuser = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
xmpp_stanza_t *mucuser = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||||
xmpp_stanza_t *captcha = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CAPTCHA);
|
xmpp_stanza_t *captcha = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CAPTCHA);
|
||||||
xmpp_stanza_t *carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS);
|
if (conf || mucuser || captcha) {
|
||||||
if (conf || mucuser || captcha || carbons) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ignore if type not chat or absent
|
|
||||||
char *type = xmpp_stanza_get_type(stanza);
|
|
||||||
if (!(g_strcmp0(type, "chat") == 0 || type == NULL)) {
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,6 +678,7 @@ _chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * con
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// standard chat message, use jid without resource
|
||||||
GTimeVal tv_stamp;
|
GTimeVal tv_stamp;
|
||||||
gboolean delayed = stanza_get_delay(stanza, &tv_stamp);
|
gboolean delayed = stanza_get_delay(stanza, &tv_stamp);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user