mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 15:05:11 +00:00
[WIP/ADD] Try to separate discovery, make links nicer
This commit is contained in:
parent
2e566c73fc
commit
5ddc5d3e5c
15 changed files with 409 additions and 118 deletions
|
|
@ -115,33 +115,37 @@ end:
|
|||
|
||||
#define DISCO "http://jabber.org/protocol/disco#info"
|
||||
static XMLElement *
|
||||
IQGenerateQuery(void)
|
||||
IQGenerateQuery(IQFeatures *features)
|
||||
{
|
||||
XMLElement *query = XMLCreateTag("query");
|
||||
XMLElement *query;
|
||||
if (!features)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
query = XMLCreateTag("query");
|
||||
XMLAddAttr(query, "xmlns", DISCO);
|
||||
{
|
||||
XMLElement *feature;
|
||||
#define IdentitySimple(c,t,n) do \
|
||||
{ \
|
||||
feature = XMLCreateTag("identity"); \
|
||||
XMLAddAttr(feature, "category", c); \
|
||||
XMLAddAttr(feature, "type", t); \
|
||||
XMLAddAttr(feature, "name", n); \
|
||||
XMLAddChild(query, feature); \
|
||||
} \
|
||||
while (0);
|
||||
IQ_IDENTITY
|
||||
#undef IdentitySimple
|
||||
#define AdvertiseSimple(f) do \
|
||||
{ \
|
||||
feature = XMLCreateTag("feature"); \
|
||||
XMLAddAttr(feature, "var", f); \
|
||||
XMLAddChild(query, feature); \
|
||||
} \
|
||||
while (0);
|
||||
size_t i;
|
||||
for (i = 0; i < ArraySize(features->identity); i++)
|
||||
{
|
||||
XMPPIdentity *identity = ArrayGet(features->identity, i);
|
||||
|
||||
IQ_ADVERT
|
||||
#undef AdvertiseSimple
|
||||
feature = XMLCreateTag("identity");
|
||||
XMLAddAttr(feature, "category", identity->category);
|
||||
XMLAddAttr(feature, "type", identity->type);
|
||||
XMLAddAttr(feature, "name", identity->name);
|
||||
|
||||
XMLAddChild(query, feature);
|
||||
}
|
||||
for (i = 0; i < ArraySize(features->adverts); i++)
|
||||
{
|
||||
char *var = ArrayGet(features->adverts, i);
|
||||
|
||||
feature = XMLCreateTag("feature");
|
||||
XMLAddAttr(feature, "var", var);
|
||||
XMLAddChild(query, feature);
|
||||
}
|
||||
}
|
||||
|
||||
return query;
|
||||
|
|
@ -151,7 +155,7 @@ IQDiscoGet(ParseeData *args, XMPPComponent *jabber, XMLElement *stanza)
|
|||
{
|
||||
char *from, *to, *id;
|
||||
XMLElement *iq_reply, *query;
|
||||
IQFeatures *features = CreateIQFeatures();
|
||||
IQFeatures *features;
|
||||
|
||||
from = HashMapGet(stanza->attrs, "from");
|
||||
to = HashMapGet(stanza->attrs, "to");
|
||||
|
|
@ -164,13 +168,8 @@ IQDiscoGet(ParseeData *args, XMPPComponent *jabber, XMLElement *stanza)
|
|||
XMLAddAttr(iq_reply, "type", "result");
|
||||
XMLAddAttr(iq_reply, "id", id);
|
||||
|
||||
query = IQGenerateQuery();
|
||||
#define IdentitySimple(cat, Type, Name) AddIQIdentity(features, cat, NULL, Type, Name);
|
||||
IQ_IDENTITY
|
||||
#undef IdentitySimple
|
||||
#define AdvertiseSimple(feature) AdvertiseIQFeature(features, feature);
|
||||
IQ_ADVERT
|
||||
#undef AdvertiseSimple
|
||||
features = LookupJIDFeatures(to);
|
||||
query = IQGenerateQuery(features);
|
||||
{
|
||||
char *ver = XMPPGenerateVer(features);
|
||||
char *node = StrConcat(3, REPOSITORY, "#", ver);
|
||||
|
|
@ -599,10 +598,14 @@ IQGet(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
|
|||
}
|
||||
else
|
||||
{
|
||||
char *buf = NULL;
|
||||
Stream *s = StrStreamWriter(&buf);
|
||||
Log(LOG_WARNING, "Unknown I/Q received:");
|
||||
XMLEncode(StreamStdout(), stanza);
|
||||
StreamPrintf(StreamStdout(),"\n");
|
||||
StreamFlush(StreamStdout());
|
||||
XMLEncode(s, stanza);
|
||||
StreamFlush(s);
|
||||
StreamClose(s);
|
||||
Log(LOG_WARNING, "%s", buf);
|
||||
Free(buf);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue