static void sig_version(XMPP_SERVER_REC *server, const char *jid, const char *client, const char *version, const char *os) { XMPP_ROSTER_USER_REC *user; char *name, *str; g_return_if_fail(jid != NULL); if (client == NULL && version == NULL && os == NULL) return; str = g_strconcat("is running ", client != NULL ? client : "", client != NULL && version != NULL ? " " : "", version != NULL ? version : "", (client != NULL || version != NULL) && os != NULL ? " - " : "", os != NULL ? "on " : "", os != NULL ? os : "", (void *)NULL); user = rosters_find_user(server->roster, jid, NULL, NULL); name = user != NULL && user->name != NULL ? format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_NAME, user->name, jid) : format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_JID, jid); printformat_module(MODULE_NAME, server, jid, MSGLEVEL_CRAP, XMPPTXT_MESSAGE_EVENT, name, str); g_free(name); g_free(str); }
static void sig_presence_changed(XMPP_SERVER_REC *server, const char *full_jid, int show, const char *status) { XMPP_ROSTER_USER_REC *user; WINDOW_REC *window; const char *msg; char *name; g_return_if_fail(IS_XMPP_SERVER(server)); g_return_if_fail(full_jid != NULL); g_return_if_fail(0 <= show && show < XMPP_PRESENCE_SHOW_LEN); window = fe_xmpp_status_get_window(server); msg = fe_xmpp_presence_show[show]; user = rosters_find_user(server->roster, full_jid, NULL, NULL); name = user != NULL && user->name != NULL ? format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_NAME, user->name, full_jid) : format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_JID, full_jid); if (status != NULL) printformat_module_window(MODULE_NAME, window, MSGLEVEL_CRAP, XMPPTXT_PRESENCE_CHANGE_REASON, name, msg, status); else printformat_module_window(MODULE_NAME, window, MSGLEVEL_CRAP, XMPPTXT_PRESENCE_CHANGE, name, msg); g_free(name); }
static GList * get_resources(XMPP_SERVER_REC *server, const char *nick, const char *resource_name, gboolean quoted) { GSList *rl; GList *list; XMPP_ROSTER_USER_REC *user; XMPP_ROSTER_RESOURCE_REC *resource; size_t len; g_return_val_if_fail(IS_XMPP_SERVER(server), NULL); g_return_val_if_fail(nick != NULL, NULL); len = resource_name != NULL ? strlen(resource_name) : 0; list = NULL; user = rosters_find_user(server->roster, nick, NULL, NULL); if (user == NULL) return NULL; for(rl = user->resources; rl != NULL; rl = rl->next) { resource = rl->data; if (resource_name == NULL || g_ascii_strncasecmp(resource->name, resource_name, len) == 0) list = g_list_append(list, quoted ? quoted_if_space(nick, resource->name) : g_strconcat(nick, "/", resource->name, (void *)NULL)); } return list; }
static void sig_presence_changed(XMPP_SERVER_REC *server, const char *full_jid, int show, const char *status) { XMPP_QUERY_REC *rec; XMPP_ROSTER_USER_REC *user; const char *msg; char *name; g_return_if_fail(server != NULL); g_return_if_fail(full_jid != NULL); g_return_if_fail(0 <= show && show < XMPP_PRESENCE_SHOW_LEN); if ((rec = xmpp_query_find(server, full_jid)) == NULL) return; msg = fe_xmpp_presence_show[show]; user = rosters_find_user(server->roster, full_jid, NULL, NULL); name = user != NULL && user->name != NULL ? format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_NAME, user->name, full_jid) : format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_JID, full_jid); if (status != NULL) printformat_module(MODULE_NAME, server, full_jid, MSGLEVEL_CRAP, XMPPTXT_PRESENCE_CHANGE_REASON, name, msg, status); else printformat_module(MODULE_NAME, server, full_jid, MSGLEVEL_CRAP, XMPPTXT_PRESENCE_CHANGE, name, msg); }
/* SYNTAX: ROSTER REMOVE <jid> */ static void cmd_roster_remove(const char *data, XMPP_SERVER_REC *server) { LmMessage *lmsg; LmMessageNode *query_node, *item_node; XMPP_ROSTER_USER_REC *user; const char *jid; char *recoded; void *free_arg; CMD_XMPP_SERVER(server); if (!cmd_get_params(data, &free_arg, 1, &jid)) return; if (*jid == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); user = rosters_find_user(server->roster, jid, NULL, NULL); if (user == NULL) { signal_emit("xmpp not in roster", 2, server, jid); goto out; } lmsg = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_IQ, LM_MESSAGE_SUB_TYPE_SET); query_node = lm_message_node_add_child(lmsg->node, "query", NULL); lm_message_node_set_attribute(query_node, "xmlns", "jabber:iq:roster"); item_node = lm_message_node_add_child(query_node, "item", NULL); recoded = xmpp_recode_out(jid); lm_message_node_set_attribute(item_node, "jid", recoded); g_free(recoded); lm_message_node_set_attribute(item_node, "subscription", "remove"); signal_emit("xmpp send iq", 2, server, lmsg); lm_message_unref(lmsg); out: cmd_params_free(free_arg); }
static void sig_query_created(XMPP_QUERY_REC *query, int automatic) { XMPP_ROSTER_USER_REC *user; if (!IS_XMPP_QUERY(query)) return; user = rosters_find_user(query->server->roster, query->name, NULL, NULL); if (user == NULL || user->name == NULL) return; printformat_module(MODULE_NAME, query->server, query->name, MSGLEVEL_CRAP, XMPPTXT_QUERY_AKA, user->jid, user->name); }
static void sig_vcard(XMPP_SERVER_REC *server, const char *jid, GHashTable *ht) { XMPP_ROSTER_USER_REC *user; struct vcard_user_data ud; char *name; user = rosters_find_user(server->roster, jid, NULL, NULL); name = user != NULL && user->name != NULL ? g_strdup(user->name) : xmpp_strip_resource(jid); printformat_module(MODULE_NAME, server, jid, MSGLEVEL_CRAP, XMPPTXT_VCARD, name, jid); g_free(name); ud.server = server; ud.jid = jid; g_hash_table_foreach(ht, (void (*)(gpointer, gpointer, gpointer))func_vcard_value, &ud); printformat_module(MODULE_NAME, server, jid, MSGLEVEL_CRAP, XMPPTXT_END_OF_VCARD); }
static void sig_unsubscribed(XMPP_SERVER_REC *server, const char *jid) { XMPP_ROSTER_USER_REC *user; char *name; g_return_if_fail(IS_SERVER(server)); g_return_if_fail(jid != NULL); user = rosters_find_user(server->roster, jid, NULL, NULL); name = user != NULL && user->name != NULL ? format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_NAME, user->name, jid) : format_get_text(MODULE_NAME, NULL, server, NULL, XMPPTXT_FORMAT_JID, jid); if (settings_get_bool("xmpp_status_window")) printformat_module_window(MODULE_NAME, fe_xmpp_status_get_window(server), MSGLEVEL_CRAP, XMPPTXT_UNSUBSCRIBED, name); else printformat_module(MODULE_NAME, server, NULL, MSGLEVEL_CRAP, XMPPTXT_UNSUBSCRIBED, name); g_free(name); }