mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Use list for profanity service discovery features
This commit is contained in:
parent
a65403c54a
commit
6ec159737b
@ -67,6 +67,7 @@ static GKeyFile *cache;
|
|||||||
static GHashTable *jid_to_ver;
|
static GHashTable *jid_to_ver;
|
||||||
static GHashTable *jid_to_caps;
|
static GHashTable *jid_to_caps;
|
||||||
|
|
||||||
|
static GList *prof_features;
|
||||||
static char *my_sha1;
|
static char *my_sha1;
|
||||||
|
|
||||||
static void _save_cache(void);
|
static void _save_cache(void);
|
||||||
@ -90,6 +91,18 @@ caps_init(void)
|
|||||||
jid_to_ver = g_hash_table_new_full(g_str_hash, g_str_equal, free, free);
|
jid_to_ver = g_hash_table_new_full(g_str_hash, g_str_equal, free, free);
|
||||||
jid_to_caps = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)caps_destroy);
|
jid_to_caps = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)caps_destroy);
|
||||||
|
|
||||||
|
prof_features = NULL;
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_CAPS));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(XMPP_NS_DISCO_INFO));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(XMPP_NS_DISCO_ITEMS));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_MUC));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_CONFERENCE));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_VERSION));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_CHATSTATES));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_PING));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_RECEIPTS));
|
||||||
|
prof_features = g_list_append(prof_features, strdup(STANZA_NS_LASTACTIVITY));
|
||||||
|
|
||||||
my_sha1 = NULL;
|
my_sha1 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -588,62 +601,22 @@ caps_create_query_response_stanza(xmpp_ctx_t *const ctx)
|
|||||||
}
|
}
|
||||||
xmpp_stanza_set_attribute(identity, "name", name_str->str);
|
xmpp_stanza_set_attribute(identity, "name", name_str->str);
|
||||||
g_string_free(name_str, TRUE);
|
g_string_free(name_str, TRUE);
|
||||||
|
|
||||||
xmpp_stanza_t *feature_caps = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_caps, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_caps, STANZA_ATTR_VAR, STANZA_NS_CAPS);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_discoinfo = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_discoinfo, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_discoinfo, STANZA_ATTR_VAR, XMPP_NS_DISCO_INFO);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_discoitems = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_discoitems, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_discoitems, STANZA_ATTR_VAR, XMPP_NS_DISCO_ITEMS);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_muc = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_muc, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_muc, STANZA_ATTR_VAR, STANZA_NS_MUC);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_conference = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_conference, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_conference, STANZA_ATTR_VAR, STANZA_NS_CONFERENCE);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_version = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_version, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_version, STANZA_ATTR_VAR, STANZA_NS_VERSION);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_chatstates = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_chatstates, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_chatstates, STANZA_ATTR_VAR, STANZA_NS_CHATSTATES);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_ping = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_ping, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_ping, STANZA_ATTR_VAR, STANZA_NS_PING);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_receipts = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_receipts, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_receipts, STANZA_ATTR_VAR, STANZA_NS_RECEIPTS);
|
|
||||||
|
|
||||||
xmpp_stanza_t *feature_last = xmpp_stanza_new(ctx);
|
|
||||||
xmpp_stanza_set_name(feature_last, STANZA_NAME_FEATURE);
|
|
||||||
xmpp_stanza_set_attribute(feature_last, STANZA_ATTR_VAR, STANZA_NS_LASTACTIVITY);
|
|
||||||
|
|
||||||
xmpp_stanza_add_child(query, identity);
|
xmpp_stanza_add_child(query, identity);
|
||||||
|
xmpp_stanza_release(identity);
|
||||||
|
|
||||||
xmpp_stanza_add_child(query, feature_caps);
|
GList *curr = prof_features;
|
||||||
xmpp_stanza_add_child(query, feature_chatstates);
|
while (curr) {
|
||||||
xmpp_stanza_add_child(query, feature_discoinfo);
|
xmpp_stanza_t *feature = xmpp_stanza_new(ctx);
|
||||||
xmpp_stanza_add_child(query, feature_discoitems);
|
xmpp_stanza_set_name(feature, STANZA_NAME_FEATURE);
|
||||||
xmpp_stanza_add_child(query, feature_muc);
|
xmpp_stanza_set_attribute(feature, STANZA_ATTR_VAR, curr->data);
|
||||||
xmpp_stanza_add_child(query, feature_version);
|
xmpp_stanza_add_child(query, feature);
|
||||||
xmpp_stanza_add_child(query, feature_last);
|
xmpp_stanza_release(feature);
|
||||||
xmpp_stanza_add_child(query, feature_conference);
|
|
||||||
xmpp_stanza_add_child(query, feature_ping);
|
curr = g_list_next(curr);
|
||||||
xmpp_stanza_add_child(query, feature_receipts);
|
}
|
||||||
|
|
||||||
GList *plugin_features = plugins_get_disco_features();
|
GList *plugin_features = plugins_get_disco_features();
|
||||||
GList *curr = plugin_features;
|
curr = plugin_features;
|
||||||
while (curr) {
|
while (curr) {
|
||||||
xmpp_stanza_t *feature = xmpp_stanza_new(ctx);
|
xmpp_stanza_t *feature = xmpp_stanza_new(ctx);
|
||||||
xmpp_stanza_set_name(feature, STANZA_NAME_FEATURE);
|
xmpp_stanza_set_name(feature, STANZA_NAME_FEATURE);
|
||||||
@ -655,18 +628,6 @@ caps_create_query_response_stanza(xmpp_ctx_t *const ctx)
|
|||||||
}
|
}
|
||||||
g_list_free(plugin_features);
|
g_list_free(plugin_features);
|
||||||
|
|
||||||
xmpp_stanza_release(feature_receipts);
|
|
||||||
xmpp_stanza_release(feature_ping);
|
|
||||||
xmpp_stanza_release(feature_conference);
|
|
||||||
xmpp_stanza_release(feature_last);
|
|
||||||
xmpp_stanza_release(feature_version);
|
|
||||||
xmpp_stanza_release(feature_muc);
|
|
||||||
xmpp_stanza_release(feature_discoitems);
|
|
||||||
xmpp_stanza_release(feature_discoinfo);
|
|
||||||
xmpp_stanza_release(feature_chatstates);
|
|
||||||
xmpp_stanza_release(feature_caps);
|
|
||||||
xmpp_stanza_release(identity);
|
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,6 +640,8 @@ caps_close(void)
|
|||||||
g_hash_table_destroy(jid_to_caps);
|
g_hash_table_destroy(jid_to_caps);
|
||||||
free(cache_loc);
|
free(cache_loc);
|
||||||
cache_loc = NULL;
|
cache_loc = NULL;
|
||||||
|
g_list_free_full(prof_features, free);
|
||||||
|
prof_features = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user