static void send_message(SERVER_REC *server, const char *target, const char *msg, int target_type) { LmMessage *lmsg; char *str, *recoded; if (!IS_XMPP_SERVER(server)) return; g_return_if_fail(target != NULL); g_return_if_fail(msg != NULL); if (target_type == SEND_TARGET_CHANNEL) { recoded = xmpp_recode_out(target); lmsg = lm_message_new_with_sub_type(recoded, LM_MESSAGE_TYPE_MESSAGE, LM_MESSAGE_SUB_TYPE_GROUPCHAT); } else { str = rosters_resolve_name(XMPP_SERVER(server), target); recoded = xmpp_recode_out(str != NULL ? str : target); g_free(str); lmsg = lm_message_new_with_sub_type(recoded, LM_MESSAGE_TYPE_MESSAGE, LM_MESSAGE_SUB_TYPE_CHAT); } g_free(recoded); /* ugly from irssi: recode the sent message back */ str = recode_in(server, msg, target); recoded = xmpp_recode_out(str); g_free(str); lm_message_node_add_child(lmsg->node, "body", recoded); g_free(recoded); signal_emit("xmpp send message", 2, server, lmsg); lm_message_unref(lmsg); }
char * xmpp_get_dest(const char *cmd_dest, XMPP_SERVER_REC *server, WI_ITEM_REC *item) { NICK_REC *nick; char *dest; if (cmd_dest == NULL || *cmd_dest == '\0') return IS_QUERY(item) ? g_strdup(QUERY(item)->name) : g_strconcat(server->jid, "/", server->resource, (void *)NULL); if (IS_CHANNEL(item) && (nick = nicklist_find(CHANNEL(item), cmd_dest)) != NULL) return g_strdup(nick->host); if ((dest = rosters_resolve_name(server, cmd_dest)) != NULL) return dest; return g_strdup(cmd_dest); }