mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge branch 'master' into caps
This commit is contained in:
commit
5c6e75fa06
@ -61,23 +61,22 @@
|
||||
#include "xmpp/form.h"
|
||||
#include "xmpp/muc.h"
|
||||
|
||||
static void _stanza_add_unique_id(xmpp_stanza_t *stanza, char *prefix);
|
||||
static char* _stanza_text_to_str(xmpp_stanza_t *stanza);
|
||||
|
||||
#if 0
|
||||
xmpp_stanza_t*
|
||||
stanza_create_bookmarks_pubsub_request(xmpp_ctx_t *ctx)
|
||||
{
|
||||
xmpp_stanza_t *iq, *pubsub, *items;
|
||||
|
||||
/* TODO: check pointers for NULL */
|
||||
iq = xmpp_stanza_new(ctx);
|
||||
pubsub = xmpp_stanza_new(ctx);
|
||||
items = xmpp_stanza_new(ctx);
|
||||
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
|
||||
xmpp_stanza_t *pubsub = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(pubsub, STANZA_NAME_PUBSUB);
|
||||
xmpp_stanza_set_ns(pubsub, STANZA_NS_PUBSUB);
|
||||
|
||||
xmpp_stanza_t *items = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(items, STANZA_NAME_ITEMS);
|
||||
xmpp_stanza_set_attribute(items, "node", "storage:bookmarks");
|
||||
|
||||
@ -93,20 +92,16 @@ stanza_create_bookmarks_pubsub_request(xmpp_ctx_t *ctx)
|
||||
xmpp_stanza_t*
|
||||
stanza_create_bookmarks_storage_request(xmpp_ctx_t *ctx)
|
||||
{
|
||||
xmpp_stanza_t *iq, *query, *storage;
|
||||
|
||||
/* TODO: check pointers for NULL */
|
||||
iq = xmpp_stanza_new(ctx);
|
||||
query = xmpp_stanza_new(ctx);
|
||||
storage = xmpp_stanza_new(ctx);
|
||||
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
xmpp_stanza_set_ns(iq, "jabber:client");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
xmpp_stanza_set_ns(query, "jabber:iq:private");
|
||||
|
||||
xmpp_stanza_t *storage = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(storage, STANZA_NAME_STORAGE);
|
||||
xmpp_stanza_set_ns(storage, "storage:bookmarks");
|
||||
|
||||
@ -121,14 +116,11 @@ stanza_create_bookmarks_storage_request(xmpp_ctx_t *ctx)
|
||||
xmpp_stanza_t*
|
||||
stanza_create_blocked_list_request(xmpp_ctx_t *ctx)
|
||||
{
|
||||
xmpp_stanza_t *iq, *blocklist;
|
||||
|
||||
iq = xmpp_stanza_new(ctx);
|
||||
blocklist = xmpp_stanza_new(ctx);
|
||||
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
|
||||
xmpp_stanza_t *blocklist = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(blocklist, STANZA_NAME_BLOCKLIST);
|
||||
xmpp_stanza_set_ns(blocklist, STANZA_NS_BLOCKING);
|
||||
|
||||
@ -145,9 +137,7 @@ stanza_create_bookmarks_pubsub_add(xmpp_ctx_t *ctx, const char *const jid,
|
||||
{
|
||||
xmpp_stanza_t *stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(stanza, STANZA_NAME_IQ);
|
||||
char *id = create_unique_id("bookmark_add");
|
||||
xmpp_stanza_set_id(stanza, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(stanza, "bookmark_add");
|
||||
xmpp_stanza_set_type(stanza, STANZA_TYPE_SET);
|
||||
|
||||
xmpp_stanza_t *pubsub = xmpp_stanza_new(ctx);
|
||||
@ -236,8 +226,6 @@ xmpp_stanza_t*
|
||||
stanza_create_http_upload_request(xmpp_ctx_t *ctx, const char *const id,
|
||||
const char *const jid, HTTPUpload *upload)
|
||||
{
|
||||
int i;
|
||||
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
@ -253,6 +241,7 @@ stanza_create_http_upload_request(xmpp_ctx_t *ctx, const char *const id,
|
||||
xmpp_stanza_t *filename_txt = xmpp_stanza_new(ctx);
|
||||
char* filename_cpy = strdup(upload->filename);
|
||||
// strip spaces from filename (servers don't spaces)
|
||||
int i;
|
||||
for (i=0; i<strlen(filename_cpy); i++) {
|
||||
if (filename_cpy[i] == ' ') {
|
||||
filename_cpy[i] = '_';
|
||||
@ -291,12 +280,9 @@ xmpp_stanza_t*
|
||||
stanza_enable_carbons(xmpp_ctx_t *ctx)
|
||||
{
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
char *id = create_unique_id("carbons");
|
||||
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "carbons");
|
||||
|
||||
xmpp_stanza_t *carbons_enable = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(carbons_enable, STANZA_NAME_ENABLE);
|
||||
@ -312,12 +298,9 @@ xmpp_stanza_t*
|
||||
stanza_disable_carbons(xmpp_ctx_t *ctx)
|
||||
{
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
char *id = create_unique_id("carbons");
|
||||
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "carbons");
|
||||
|
||||
xmpp_stanza_t *carbons_disable = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(carbons_disable, STANZA_NAME_DISABLE);
|
||||
@ -332,17 +315,14 @@ stanza_disable_carbons(xmpp_ctx_t *ctx)
|
||||
xmpp_stanza_t*
|
||||
stanza_create_chat_state(xmpp_ctx_t *ctx, const char *const fulljid, const char *const state)
|
||||
{
|
||||
xmpp_stanza_t *msg, *chat_state;
|
||||
|
||||
msg = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *msg = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(msg, STANZA_NAME_MESSAGE);
|
||||
xmpp_stanza_set_type(msg, STANZA_TYPE_CHAT);
|
||||
xmpp_stanza_set_attribute(msg, STANZA_ATTR_TO, fulljid);
|
||||
char *id = create_unique_id(NULL);
|
||||
xmpp_stanza_set_id(msg, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(msg, NULL);
|
||||
|
||||
chat_state = xmpp_stanza_new(ctx);
|
||||
|
||||
xmpp_stanza_t *chat_state = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(chat_state, state);
|
||||
xmpp_stanza_set_ns(chat_state, STANZA_NS_CHATSTATES);
|
||||
xmpp_stanza_add_child(msg, chat_state);
|
||||
@ -462,18 +442,16 @@ xmpp_stanza_t*
|
||||
stanza_create_message(xmpp_ctx_t *ctx, char *id, const char *const recipient,
|
||||
const char *const type, const char *const message)
|
||||
{
|
||||
xmpp_stanza_t *msg, *body, *text;
|
||||
|
||||
msg = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *msg = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(msg, STANZA_NAME_MESSAGE);
|
||||
xmpp_stanza_set_type(msg, type);
|
||||
xmpp_stanza_set_attribute(msg, STANZA_ATTR_TO, recipient);
|
||||
xmpp_stanza_set_id(msg, id);
|
||||
|
||||
body = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *body = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(body, STANZA_NAME_BODY);
|
||||
|
||||
text = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *text = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_text(text, message);
|
||||
xmpp_stanza_add_child(body, text);
|
||||
xmpp_stanza_release(text);
|
||||
@ -489,10 +467,7 @@ stanza_create_roster_remove_set(xmpp_ctx_t *ctx, const char *const barejid)
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
|
||||
char *id = create_unique_id("roster");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "roster");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -561,16 +536,12 @@ xmpp_stanza_t*
|
||||
stanza_create_invite(xmpp_ctx_t *ctx, const char *const room,
|
||||
const char *const contact, const char *const reason, const char *const password)
|
||||
{
|
||||
xmpp_stanza_t *message, *x;
|
||||
|
||||
message = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *message = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(message, STANZA_NAME_MESSAGE);
|
||||
xmpp_stanza_set_attribute(message, STANZA_ATTR_TO, contact);
|
||||
char *id = create_unique_id(NULL);
|
||||
xmpp_stanza_set_id(message, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(message, NULL);
|
||||
|
||||
x = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *x = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(x, STANZA_NAME_X);
|
||||
xmpp_stanza_set_ns(x, STANZA_NS_CONFERENCE);
|
||||
|
||||
@ -592,20 +563,16 @@ xmpp_stanza_t*
|
||||
stanza_create_mediated_invite(xmpp_ctx_t *ctx, const char *const room,
|
||||
const char *const contact, const char *const reason)
|
||||
{
|
||||
xmpp_stanza_t *message, *x, *invite;
|
||||
|
||||
message = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *message = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(message, STANZA_NAME_MESSAGE);
|
||||
xmpp_stanza_set_attribute(message, STANZA_ATTR_TO, room);
|
||||
char *id = create_unique_id(NULL);
|
||||
xmpp_stanza_set_id(message, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(message, NULL);
|
||||
|
||||
x = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *x = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(x, STANZA_NAME_X);
|
||||
xmpp_stanza_set_ns(x, STANZA_NS_MUC_USER);
|
||||
|
||||
invite = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_t *invite = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(invite, STANZA_NAME_INVITE);
|
||||
xmpp_stanza_set_attribute(invite, STANZA_ATTR_TO, contact);
|
||||
|
||||
@ -635,15 +602,12 @@ stanza_create_room_join_presence(xmpp_ctx_t *const ctx,
|
||||
xmpp_stanza_t *presence = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(presence, STANZA_NAME_PRESENCE);
|
||||
xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, full_room_jid);
|
||||
char *id = create_unique_id("join");
|
||||
xmpp_stanza_set_id(presence, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(presence, "join");
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(x, STANZA_NAME_X);
|
||||
xmpp_stanza_set_ns(x, STANZA_NS_MUC);
|
||||
|
||||
// if a password was given
|
||||
if (passwd) {
|
||||
xmpp_stanza_t *pass = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(pass, "password");
|
||||
@ -666,9 +630,7 @@ stanza_create_room_newnick_presence(xmpp_ctx_t *ctx,
|
||||
const char *const full_room_jid)
|
||||
{
|
||||
xmpp_stanza_t *presence = xmpp_stanza_new(ctx);
|
||||
char *id = create_unique_id("sub");
|
||||
xmpp_stanza_set_id(presence, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(presence, "sub");
|
||||
xmpp_stanza_set_name(presence, STANZA_NAME_PRESENCE);
|
||||
xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, full_room_jid);
|
||||
|
||||
@ -687,9 +649,7 @@ stanza_create_room_leave_presence(xmpp_ctx_t *ctx, const char *const room,
|
||||
xmpp_stanza_set_name(presence, STANZA_NAME_PRESENCE);
|
||||
xmpp_stanza_set_type(presence, STANZA_TYPE_UNAVAILABLE);
|
||||
xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, full_jid->str);
|
||||
char *id = create_unique_id("leave");
|
||||
xmpp_stanza_set_id(presence, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(presence, "leave");
|
||||
|
||||
g_string_free(full_jid, TRUE);
|
||||
|
||||
@ -703,9 +663,7 @@ stanza_create_instant_room_request_iq(xmpp_ctx_t *ctx, const char *const room_ji
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room_jid);
|
||||
char *id = create_unique_id("room");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "room");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -732,9 +690,7 @@ stanza_create_instant_room_destroy_iq(xmpp_ctx_t *ctx, const char *const room_ji
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room_jid);
|
||||
char *id = create_unique_id("room");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "room");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -759,9 +715,7 @@ stanza_create_room_config_request_iq(xmpp_ctx_t *ctx, const char *const room_jid
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room_jid);
|
||||
char *id = create_unique_id("room");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "room");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -780,9 +734,7 @@ stanza_create_room_config_cancel_iq(xmpp_ctx_t *ctx, const char *const room_jid)
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room_jid);
|
||||
char *id = create_unique_id("room");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "room");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -809,9 +761,7 @@ stanza_create_room_affiliation_list_iq(xmpp_ctx_t *ctx, const char *const room,
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room);
|
||||
char *id = create_unique_id("affiliation_get");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "affiliation_get");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -836,9 +786,7 @@ stanza_create_room_role_list_iq(xmpp_ctx_t *ctx, const char *const room, const c
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room);
|
||||
char *id = create_unique_id("role_get");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "role_get");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -864,9 +812,7 @@ stanza_create_room_affiliation_set_iq(xmpp_ctx_t *ctx, const char *const room, c
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room);
|
||||
char *id = create_unique_id("affiliation_set");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "affiliation_set");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -905,9 +851,7 @@ stanza_create_room_role_set_iq(xmpp_ctx_t *const ctx, const char *const room, co
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room);
|
||||
char *id = create_unique_id("role_set");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "role_set");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -946,9 +890,7 @@ stanza_create_room_kick_iq(xmpp_ctx_t *const ctx, const char *const room, const
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room);
|
||||
char *id = create_unique_id("room_kick");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "room_kick");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -994,11 +936,7 @@ stanza_create_software_version_iq(xmpp_ctx_t *ctx, const char *const fulljid)
|
||||
xmpp_stanza_t *iq = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_GET);
|
||||
|
||||
char *id = create_unique_id("sv");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
|
||||
_stanza_add_unique_id(iq, "sv");
|
||||
xmpp_stanza_set_attribute(iq, "to", fulljid);
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
@ -1098,9 +1036,7 @@ stanza_create_room_config_submit_iq(xmpp_ctx_t *ctx, const char *const room, Dat
|
||||
xmpp_stanza_set_name(iq, STANZA_NAME_IQ);
|
||||
xmpp_stanza_set_type(iq, STANZA_TYPE_SET);
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, room);
|
||||
char *id = create_unique_id("roomconf_submit");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "roomconf_submit");
|
||||
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
@ -1135,9 +1071,7 @@ stanza_create_ping_iq(xmpp_ctx_t *ctx, const char *const target)
|
||||
if (target) {
|
||||
xmpp_stanza_set_attribute(iq, STANZA_ATTR_TO, target);
|
||||
}
|
||||
char *id = create_unique_id("ping");
|
||||
xmpp_stanza_set_id(iq, id);
|
||||
free(id);
|
||||
_stanza_add_unique_id(iq, "ping");
|
||||
|
||||
xmpp_stanza_t *ping = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(ping, STANZA_NAME_PING);
|
||||
@ -1191,20 +1125,10 @@ stanza_get_delay(xmpp_stanza_t *const stanza)
|
||||
char*
|
||||
stanza_get_status(xmpp_stanza_t *stanza, char *def)
|
||||
{
|
||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||
xmpp_stanza_t *status =
|
||||
xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_STATUS);
|
||||
xmpp_stanza_t *status = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_STATUS);
|
||||
|
||||
if (status) {
|
||||
// xmpp_free and free may be different functions so convert all to
|
||||
// libc malloc
|
||||
char *s1, *s2 = NULL;
|
||||
s1 = xmpp_stanza_get_text(status);
|
||||
if (s1) {
|
||||
s2 = strdup(s1);
|
||||
xmpp_free(ctx, s1);
|
||||
}
|
||||
return s2;
|
||||
return _stanza_text_to_str(status);
|
||||
} else if (def) {
|
||||
return strdup(def);
|
||||
} else {
|
||||
@ -1215,20 +1139,10 @@ stanza_get_status(xmpp_stanza_t *stanza, char *def)
|
||||
char*
|
||||
stanza_get_show(xmpp_stanza_t *stanza, char *def)
|
||||
{
|
||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||
xmpp_stanza_t *show =
|
||||
xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_SHOW);
|
||||
xmpp_stanza_t *show = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_SHOW);
|
||||
|
||||
if (show) {
|
||||
// xmpp_free and free may be different functions so convert all to
|
||||
// libc malloc
|
||||
char *s1, *s2 = NULL;
|
||||
s1 = xmpp_stanza_get_text(show);
|
||||
if (s1) {
|
||||
s2 = strdup(s1);
|
||||
xmpp_free(ctx, s1);
|
||||
}
|
||||
return s2;
|
||||
return _stanza_text_to_str(show);
|
||||
} else if (def) {
|
||||
return strdup(def);
|
||||
} else {
|
||||
@ -1265,7 +1179,9 @@ stanza_muc_requires_config(xmpp_stanza_t *const stanza)
|
||||
|
||||
// muc user namespaced x element
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
if (x == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// check for item element with owner affiliation
|
||||
xmpp_stanza_t *item = xmpp_stanza_get_child_by_name(x, "item");
|
||||
@ -1288,7 +1204,7 @@ stanza_muc_requires_config(xmpp_stanza_t *const stanza)
|
||||
}
|
||||
x_children = xmpp_stanza_get_next(x_children);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1303,7 +1219,10 @@ stanza_is_muc_self_presence(xmpp_stanza_t *const stanza,
|
||||
|
||||
// muc user namespaced x element
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
|
||||
if (x == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// check for status child element with 110 code
|
||||
xmpp_stanza_t *x_children = xmpp_stanza_get_children(x);
|
||||
@ -1355,7 +1274,6 @@ stanza_is_muc_self_presence(xmpp_stanza_t *const stanza,
|
||||
|
||||
jid_destroy(from_jid);
|
||||
}
|
||||
}
|
||||
|
||||
// self presence not found
|
||||
return FALSE;
|
||||
@ -1364,9 +1282,12 @@ stanza_is_muc_self_presence(xmpp_stanza_t *const stanza,
|
||||
GSList*
|
||||
stanza_get_status_codes_by_ns(xmpp_stanza_t *const stanza, char *ns)
|
||||
{
|
||||
GSList *codes = NULL;
|
||||
xmpp_stanza_t *ns_child = xmpp_stanza_get_child_by_ns(stanza, ns);
|
||||
if (ns_child) {
|
||||
if (ns_child == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GSList *codes = NULL;
|
||||
xmpp_stanza_t *child = xmpp_stanza_get_children(ns_child);
|
||||
while (child) {
|
||||
const char *name = xmpp_stanza_get_name(child);
|
||||
@ -1378,7 +1299,7 @@ stanza_get_status_codes_by_ns(xmpp_stanza_t *const stanza, char *ns)
|
||||
}
|
||||
child = xmpp_stanza_get_next(child);
|
||||
}
|
||||
}
|
||||
|
||||
return codes;
|
||||
}
|
||||
|
||||
@ -1386,15 +1307,19 @@ gboolean
|
||||
stanza_room_destroyed(xmpp_stanza_t *stanza)
|
||||
{
|
||||
const char *stanza_name = xmpp_stanza_get_name(stanza);
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) == 0) {
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) != 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
if (x == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *destroy = xmpp_stanza_get_child_by_name(x, STANZA_NAME_DESTROY);
|
||||
if (destroy) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -1403,18 +1328,24 @@ const char*
|
||||
stanza_get_muc_destroy_alternative_room(xmpp_stanza_t *stanza)
|
||||
{
|
||||
const char *stanza_name = xmpp_stanza_get_name(stanza);
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) == 0) {
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
if (x == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *destroy = xmpp_stanza_get_child_by_name(x, STANZA_NAME_DESTROY);
|
||||
if (destroy) {
|
||||
if (destroy == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *jid = xmpp_stanza_get_attribute(destroy, STANZA_ATTR_JID);
|
||||
if (jid) {
|
||||
return jid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -1423,69 +1354,87 @@ char*
|
||||
stanza_get_muc_destroy_alternative_password(xmpp_stanza_t *stanza)
|
||||
{
|
||||
const char *stanza_name = xmpp_stanza_get_name(stanza);
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) == 0) {
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
xmpp_stanza_t *destroy = xmpp_stanza_get_child_by_name(x, STANZA_NAME_DESTROY);
|
||||
if (destroy) {
|
||||
xmpp_stanza_t *password_st = xmpp_stanza_get_child_by_name(destroy, STANZA_NAME_PASSWORD);
|
||||
if (password_st) {
|
||||
char *password = xmpp_stanza_get_text(password_st);
|
||||
if (password) {
|
||||
return password;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *destroy = xmpp_stanza_get_child_by_name(x, STANZA_NAME_DESTROY);
|
||||
if (destroy == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *password_st = xmpp_stanza_get_child_by_name(destroy, STANZA_NAME_PASSWORD);
|
||||
if (password_st == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return _stanza_text_to_str(password_st);
|
||||
}
|
||||
|
||||
char*
|
||||
stanza_get_muc_destroy_reason(xmpp_stanza_t *stanza)
|
||||
{
|
||||
const char *stanza_name = xmpp_stanza_get_name(stanza);
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) == 0) {
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
xmpp_stanza_t *destroy = xmpp_stanza_get_child_by_name(x, STANZA_NAME_DESTROY);
|
||||
if (destroy) {
|
||||
xmpp_stanza_t *reason_st = xmpp_stanza_get_child_by_name(destroy, STANZA_NAME_REASON);
|
||||
if (reason_st) {
|
||||
char *reason = xmpp_stanza_get_text(reason_st);
|
||||
if (reason) {
|
||||
return reason;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *destroy = xmpp_stanza_get_child_by_name(x, STANZA_NAME_DESTROY);
|
||||
if (destroy == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *reason_st = xmpp_stanza_get_child_by_name(destroy, STANZA_NAME_REASON);
|
||||
if (reason_st == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return _stanza_text_to_str(reason_st);
|
||||
}
|
||||
|
||||
const char*
|
||||
stanza_get_actor(xmpp_stanza_t *stanza)
|
||||
{
|
||||
const char *stanza_name = xmpp_stanza_get_name(stanza);
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) == 0) {
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
if (x == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *item = xmpp_stanza_get_child_by_name(x, STANZA_NAME_ITEM);
|
||||
if (item) {
|
||||
if (item == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *actor = xmpp_stanza_get_child_by_name(item, STANZA_NAME_ACTOR);
|
||||
if (actor) {
|
||||
if (actor == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *nick = xmpp_stanza_get_attribute(actor, STANZA_ATTR_NICK);
|
||||
if (nick) {
|
||||
return nick;
|
||||
}
|
||||
|
||||
const char *jid = xmpp_stanza_get_attribute(actor, STANZA_ATTR_JID);
|
||||
if (jid) {
|
||||
return jid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1493,27 +1442,28 @@ char*
|
||||
stanza_get_reason(xmpp_stanza_t *stanza)
|
||||
{
|
||||
const char *stanza_name = xmpp_stanza_get_name(stanza);
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) == 0) {
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
xmpp_stanza_t *item = xmpp_stanza_get_child_by_name(x, STANZA_NAME_ITEM);
|
||||
if (item) {
|
||||
xmpp_stanza_t *reason_st = xmpp_stanza_get_child_by_name(item, STANZA_NAME_REASON);
|
||||
if (reason_st) {
|
||||
/* TODO don't return text generated by xmpp_stanza_get_text(),
|
||||
* because it should be freed by xmpp_free(). Instead, return
|
||||
* strdup(reason) and free the `reason'. Check similar places. */
|
||||
char *reason = xmpp_stanza_get_text(reason_st);
|
||||
if (reason) {
|
||||
return reason;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (g_strcmp0(stanza_name, STANZA_NAME_PRESENCE) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *item = xmpp_stanza_get_child_by_name(x, STANZA_NAME_ITEM);
|
||||
if (item == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *reason_st = xmpp_stanza_get_child_by_name(item, STANZA_NAME_REASON);
|
||||
if (reason_st == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return _stanza_text_to_str(reason_st);
|
||||
}
|
||||
|
||||
gboolean
|
||||
stanza_is_room_nick_change(xmpp_stanza_t *const stanza)
|
||||
{
|
||||
@ -1524,7 +1474,9 @@ stanza_is_room_nick_change(xmpp_stanza_t *const stanza)
|
||||
|
||||
// muc user namespaced x element
|
||||
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||
if (x) {
|
||||
if (x == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// check for status child element with 303 code
|
||||
xmpp_stanza_t *x_children = xmpp_stanza_get_children(x);
|
||||
@ -1537,7 +1489,6 @@ stanza_is_room_nick_change(xmpp_stanza_t *const stanza)
|
||||
}
|
||||
x_children = xmpp_stanza_get_next(x_children);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -1625,24 +1576,21 @@ stanza_parse_caps(xmpp_stanza_t *const stanza)
|
||||
char*
|
||||
stanza_get_error_message(xmpp_stanza_t *stanza)
|
||||
{
|
||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||
xmpp_stanza_t *error_stanza = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_ERROR);
|
||||
|
||||
// return nothing if no error stanza
|
||||
if (error_stanza == NULL) {
|
||||
return strdup("unknown");
|
||||
} else {
|
||||
}
|
||||
|
||||
// check for text child
|
||||
xmpp_stanza_t *text_stanza = xmpp_stanza_get_child_by_name(error_stanza, STANZA_NAME_TEXT);
|
||||
|
||||
// check for text
|
||||
if (text_stanza) {
|
||||
gchar *err_msg = xmpp_stanza_get_text(text_stanza);
|
||||
char *err_msg = _stanza_text_to_str(text_stanza);
|
||||
if (err_msg) {
|
||||
char *result = strdup(err_msg);
|
||||
xmpp_free(ctx, err_msg);
|
||||
return result;
|
||||
return err_msg;
|
||||
}
|
||||
|
||||
// otherwise check each defined-condition RFC-6120 8.3.3
|
||||
@ -1679,8 +1627,6 @@ stanza_get_error_message(xmpp_stanza_t *stanza)
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// if undefined-condition or no condition, return nothing
|
||||
@ -1688,30 +1634,36 @@ stanza_get_error_message(xmpp_stanza_t *stanza)
|
||||
}
|
||||
|
||||
void
|
||||
stanza_attach_priority(xmpp_ctx_t *const ctx, xmpp_stanza_t *const presence,
|
||||
const int pri)
|
||||
stanza_attach_priority(xmpp_ctx_t *const ctx, xmpp_stanza_t *const presence, const int pri)
|
||||
{
|
||||
if (pri != 0) {
|
||||
xmpp_stanza_t *priority, *value;
|
||||
char pri_str[10];
|
||||
if (pri == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
char pri_str[10];
|
||||
snprintf(pri_str, sizeof(pri_str), "%d", pri);
|
||||
priority = xmpp_stanza_new(ctx);
|
||||
value = xmpp_stanza_new(ctx);
|
||||
|
||||
xmpp_stanza_t *priority = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(priority, STANZA_NAME_PRIORITY);
|
||||
|
||||
xmpp_stanza_t *value = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_text(value, pri_str);
|
||||
|
||||
xmpp_stanza_add_child(priority, value);
|
||||
xmpp_stanza_release(value);
|
||||
|
||||
xmpp_stanza_add_child(presence, priority);
|
||||
xmpp_stanza_release(priority);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
stanza_attach_show(xmpp_ctx_t *const ctx, xmpp_stanza_t *const presence,
|
||||
const char *const show)
|
||||
{
|
||||
if (show) {
|
||||
if (show == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *show_stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(show_stanza, STANZA_NAME_SHOW);
|
||||
xmpp_stanza_t *text = xmpp_stanza_new(ctx);
|
||||
@ -1721,13 +1673,15 @@ stanza_attach_show(xmpp_ctx_t *const ctx, xmpp_stanza_t *const presence,
|
||||
xmpp_stanza_release(text);
|
||||
xmpp_stanza_release(show_stanza);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
stanza_attach_status(xmpp_ctx_t *const ctx, xmpp_stanza_t *const presence,
|
||||
const char *const status)
|
||||
{
|
||||
if (status) {
|
||||
if (status == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
xmpp_stanza_t *status_stanza = xmpp_stanza_new(ctx);
|
||||
xmpp_stanza_set_name(status_stanza, STANZA_NAME_STATUS);
|
||||
xmpp_stanza_t *text = xmpp_stanza_new(ctx);
|
||||
@ -1737,7 +1691,6 @@ stanza_attach_status(xmpp_ctx_t *const ctx, xmpp_stanza_t *const presence,
|
||||
xmpp_stanza_release(text);
|
||||
xmpp_stanza_release(status_stanza);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
stanza_attach_last_activity(xmpp_ctx_t *const ctx,
|
||||
@ -1806,7 +1759,10 @@ stanza_resource_from_presence(XMPPPresence *presence)
|
||||
void
|
||||
stanza_free_caps(XMPPCaps *caps)
|
||||
{
|
||||
if (caps) {
|
||||
if (caps == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (caps->hash) {
|
||||
free(caps->hash);
|
||||
}
|
||||
@ -1818,12 +1774,14 @@ stanza_free_caps(XMPPCaps *caps)
|
||||
}
|
||||
FREE_SET_NULL(caps);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
stanza_free_presence(XMPPPresence *presence)
|
||||
{
|
||||
if (presence) {
|
||||
if (presence == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (presence->jid) {
|
||||
jid_destroy(presence->jid);
|
||||
}
|
||||
@ -1838,7 +1796,6 @@ stanza_free_presence(XMPPPresence *presence)
|
||||
}
|
||||
FREE_SET_NULL(presence);
|
||||
}
|
||||
}
|
||||
|
||||
XMPPPresence*
|
||||
stanza_parse_presence(xmpp_stanza_t *stanza, int *err)
|
||||
@ -1877,8 +1834,32 @@ stanza_parse_presence(xmpp_stanza_t *stanza, int *err)
|
||||
if (priority_str) {
|
||||
result->priority = atoi(priority_str);
|
||||
}
|
||||
free(priority_str);
|
||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||
xmpp_free(ctx, priority_str);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
_stanza_add_unique_id(xmpp_stanza_t *stanza, char *prefix)
|
||||
{
|
||||
char *id = create_unique_id(prefix);
|
||||
xmpp_stanza_set_id(stanza, id);
|
||||
free(id);
|
||||
}
|
||||
|
||||
static char*
|
||||
_stanza_text_to_str(xmpp_stanza_t *stanza)
|
||||
{
|
||||
xmpp_ctx_t *ctx = connection_get_ctx();
|
||||
|
||||
char *string = NULL;
|
||||
char *stanza_text = xmpp_stanza_get_text(stanza);
|
||||
if (stanza_text) {
|
||||
string = strdup(stanza_text);
|
||||
xmpp_free(ctx, stanza_text);
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user