[ADD/WIP] Try dealing in VCards

This commit is contained in:
LDA 2024-10-01 06:59:13 +02:00
commit 9ea8f35c49
3 changed files with 55 additions and 1 deletions

View file

@ -46,6 +46,42 @@ TrimBase64(char *b64)
return ret;
}
XMLElement *
GenerateAvatarData(ParseeData *data, char *mxid)
{
char *mxc, *mime = NULL, *out = NULL, *b64 = NULL;
XMLElement *elem = NULL, *type, *binval;
size_t len = 0;
if (!data || !mxid)
{
return NULL;
}
mxc = ASGetAvatar(data->config, NULL, mxid);
if (!ASGrab(data->config, mxc, &mime, &out, &len))
{
goto end;
}
b64 = Base64Encode(out, len);
elem = XMLCreateTag("PHOTO");
type = XMLCreateTag("TYPE");
binval = XMLCreateTag("BINVAL");
XMLAddChild(type, XMLCreateText(mime));
XMLAddChild(binval, XMLCreateText(b64));
XMLAddChild(elem, type);
XMLAddChild(elem, binval);
end:
Free(mime);
Free(out);
Free(b64);
return elem;
}
#define DISCO "http://jabber.org/protocol/disco#info"
static XMLElement *
IQGenerateQuery(void)
@ -425,6 +461,7 @@ IQGet(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
XMLAddChild(vCard, nick);
XMLAddChild(vCard, url);
XMLAddChild(vCard, fn);
XMLAddChild(vCard, GenerateAvatarData(args, to_matrix));
Free(mto_link);
}
@ -435,6 +472,7 @@ IQGet(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
XMLEncode(jabber->stream, iqVCard);
StreamFlush(jabber->stream);
pthread_mutex_unlock(&jabber->write_lock);
XMLFreeElement(iqVCard);
Free(to_matrix);
Free(name);
}