Mercurial > pidgin.yaz
diff libpurple/protocols/jabber/presence.c @ 17563:95affacf6f82
Added the ability to define extensions to caps
author | Andreas Monitzer <pidgin@monitzer.com> |
---|---|
date | Wed, 06 Jun 2007 01:19:49 +0000 |
parents | 3919c68eb5b7 |
children | ac1ee71efd89 |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/presence.c Wed Jun 06 00:04:29 2007 +0000 +++ b/libpurple/protocols/jabber/presence.c Wed Jun 06 01:19:49 2007 +0000 @@ -118,7 +118,7 @@ purple_status_to_jabber(status, &state, &stripped, &priority); - presence = jabber_presence_create(state, stripped, priority); + presence = jabber_presence_create_js(js, state, stripped, priority); g_free(stripped); if(js->avatar_hash) { @@ -138,6 +138,11 @@ xmlnode *jabber_presence_create(JabberBuddyState state, const char *msg, int priority) { + return jabber_presence_create_js(NULL, state, msg, priority); +} + +xmlnode *jabber_presence_create_js(JabberStream *js, JabberBuddyState state, const char *msg, int priority) +{ xmlnode *show, *status, *presence, *pri, *c; const char *show_string = NULL; @@ -172,6 +177,31 @@ xmlnode_set_namespace(c, "http://jabber.org/protocol/caps"); xmlnode_set_attrib(c, "node", CAPS0115_NODE); xmlnode_set_attrib(c, "ver", VERSION); + + if(js != NULL) { + /* add the extensions */ + char extlist[1024]; + unsigned remaining = 1023; /* one less for the \0 */ + GSList *feature; + + extlist[0] = '\0'; + for(feature = js->features; feature && remaining > 0; feature = feature->next) { + JabberFeature *feat = (JabberFeature*)feature->data; + unsigned featlen = strlen(feat->shortname); + + /* cut off when we don't have any more space left in our buffer (too bad) */ + if(featlen > remaining) + break; + + strncat(extlist,feat->shortname,remaining); + remaining -= featlen; + strncat(extlist," ",remaining); + --remaining; + } + /* did we add anything? */ + if(remaining < 1023) + xmlnode_set_attrib(c, "ext", extlist); + } return presence; }