static void sig_recv_message(XMPP_SERVER_REC *server, LmMessage *lmsg, const int type, const char *id, const char *from, const char *to) { LmMessageNode *node; if ((type != LM_MESSAGE_SUB_TYPE_NOT_SET && type != LM_MESSAGE_SUB_TYPE_HEADLINE && type != LM_MESSAGE_SUB_TYPE_NORMAL && type != LM_MESSAGE_SUB_TYPE_CHAT) || server->ischannel(SERVER(server), from)) return; node = lm_find_node(lmsg->node, "x", XMLNS, XMLNS_EVENT); if (node == NULL) { signal_emit("xmpp composing hide", 2, server, from); return; } if (lm_message_node_get_child(lmsg->node, "body") != NULL || lm_message_node_get_child(lmsg->node, "subject") != NULL) { if (lm_message_node_get_child(node, "composing") != NULL) datalist_add(composings, server, from, g_strdup(id)); else datalist_remove(composings, server, from); signal_emit("xmpp composing hide", 2, server, from); } else { if (lm_message_node_get_child(node, "composing") != NULL) signal_emit("xmpp composing show", 2, server, from); else signal_emit("xmpp composing hide", 2, server, from); } }
static void sig_offline(XMPP_SERVER_REC *server, const char *jid) { g_return_if_fail(IS_XMPP_SERVER(server)); datalist_remove(composings, server, jid); }
ck_assert_str_eq(data_tostring(data_uncopy(datalist_get(list_null, 0))), "push"); END_TEST START_TEST(test_datalist_pop) data_t *pop; pop = datalist_pop(list_valist); check_list(list_valist, 1); ck_assert_int_eq(_data_intval(pop), 42); data_free(pop); END_TEST START_TEST(test_datalist_remove) data_t *removed; removed = datalist_remove(list_array, 1); check_list(list_array, 3); ck_assert_ptr_eq(removed, data_true()); data_free(removed); END_TEST START_TEST(test_datalist_set) datalist_set(list_array, 2, str_wrap("at2")); check_list(list_array, 4); ck_assert_str_eq(data_tostring(data_uncopy(datalist_get(list_array, 2))), "at2"); datalist_set(list_array, 6, str_wrap("at6")); check_list(list_array, 7); ck_assert_str_eq(data_tostring(data_uncopy(datalist_get(list_array, 6))), "at6"); END_TEST