mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-14 00:45:10 +00:00
[ADD] Respect MIME, start bridging leaves/kicks
Wow, this one _wasn't_ pushed at 3AM, Outstanding.
This commit is contained in:
parent
4d055f3688
commit
43b3f8aaf5
8 changed files with 146 additions and 24 deletions
|
|
@ -822,7 +822,7 @@ IQResult(ParseeData *args, XMLElement *stanza)
|
|||
/* TODO: Bound checks for a size limit. */
|
||||
bdata = (char *) Base64Decode(base64, b64len);
|
||||
datastream = StrStreamReaderN(bdata, length);
|
||||
mxc = ASUpload(args->config, datastream, length);
|
||||
mxc = ASUpload(args->config, datastream, length, "image/png");
|
||||
|
||||
jid = ParseeLookupJID(from);
|
||||
from_matrix = ParseeEncodeJID(args->config, jid, false);
|
||||
|
|
@ -859,34 +859,65 @@ IQResult(ParseeData *args, XMLElement *stanza)
|
|||
if (photo)
|
||||
{
|
||||
XMLElement *binval = XMLookForUnique(photo, "BINVAL");
|
||||
XMLElement *data = ArrayGet(binval->children, 0);
|
||||
XMLElement *type = XMLookForUnique(photo, "TYPE");
|
||||
XMLElement *data =
|
||||
binval ? ArrayGet(binval->children, 0) : NULL;
|
||||
XMLElement *tdata = type ? ArrayGet(type->children, 0) : NULL;
|
||||
char *base64;
|
||||
char *bdata;
|
||||
size_t length, b64len;
|
||||
Stream *datastream;
|
||||
char *mxc, *from_matrix, *jid;
|
||||
char *mxc = NULL, *from_matrix = NULL, *jid = NULL;
|
||||
char *room = NULL;
|
||||
if (!data || !data->data)
|
||||
{
|
||||
Log(LOG_ERR, "%s NOT FOUND", HashMapGet(stanza->attrs, "from"));
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get the base64, decode it, and shove it in a nicely put
|
||||
* MXC address */
|
||||
base64 = data->data;
|
||||
b64len = base64 ? strlen(base64) : 0;
|
||||
length = Base64DecodedSize(base64, b64len);
|
||||
|
||||
bdata = Base64Decode(base64, b64len);
|
||||
datastream = StrStreamReaderN(bdata, length);
|
||||
mxc = ASUpload(args->config, datastream, length);
|
||||
|
||||
jid = ParseeLookupJID(HashMapGet(stanza->attrs, "from"));
|
||||
from_matrix = ParseeEncodeJID(args->config, jid, false);
|
||||
ASSetAvatar(args->config, from_matrix, mxc);
|
||||
|
||||
/* TODO: Check if already set. */
|
||||
|
||||
mxc = ASUpload(
|
||||
args->config,
|
||||
datastream,
|
||||
length,
|
||||
tdata ? tdata->data : NULL
|
||||
);
|
||||
Free(bdata);
|
||||
StreamClose(datastream);
|
||||
|
||||
room = ParseeGetBridgedRoom(args, stanza);
|
||||
jid = ParseeLookupJID(HashMapGet(stanza->attrs, "from"));
|
||||
if (jid && !StrEquals(jid, HashMapGet(stanza->attrs, "from")))
|
||||
{
|
||||
from_matrix = ParseeEncodeJID(args->config, jid, false);
|
||||
ASSetAvatar(args->config, from_matrix, mxc);
|
||||
}
|
||||
else if (room)
|
||||
{
|
||||
char *mask = StrConcat(4,
|
||||
"@", args->config->sender_localpart,
|
||||
":", args->config->homeserver_host
|
||||
);
|
||||
HashMap *obj = HashMapCreate();
|
||||
|
||||
HashMapSet(obj, "url", JsonValueString(mxc));
|
||||
ASSetState(
|
||||
args->config,
|
||||
room, "m.room.avatar", "",
|
||||
mask, obj
|
||||
);
|
||||
Free(mask);
|
||||
}
|
||||
|
||||
Free(from_matrix);
|
||||
Free(room);
|
||||
Free(jid);
|
||||
Free(mxc);
|
||||
}
|
||||
|
|
@ -1117,7 +1148,7 @@ PresenceStanza(ParseeData *args, XMLElement *stanza)
|
|||
json = DbJson(avatars);
|
||||
|
||||
avatar_id = GrabString(json, 1, oid);
|
||||
if (StrEquals(avatar_id, p_dat->data))
|
||||
if (avatar_id && StrEquals(avatar_id, p_dat->data))
|
||||
{
|
||||
DbUnlock(args->db, avatars);
|
||||
return;
|
||||
|
|
@ -1142,6 +1173,24 @@ PresenceStanza(ParseeData *args, XMLElement *stanza)
|
|||
XMLFreeElement(vcard_request);
|
||||
Free(from);
|
||||
}
|
||||
|
||||
/* TODO: Sending VCard on presence is slow and stalls the thread */
|
||||
if (0)
|
||||
{
|
||||
XMPPComponent *jabber = args->jabber;
|
||||
char *from = StrConcat(2, "parsee@", args->config->component_host);
|
||||
|
||||
XMLElement *vcard_request = CreateVCardRequest(
|
||||
from, HashMapGet(stanza->attrs, "from")
|
||||
);
|
||||
pthread_mutex_lock(&jabber->write_lock);
|
||||
XMLEncode(jabber->stream, vcard_request);
|
||||
StreamFlush(jabber->stream);
|
||||
pthread_mutex_unlock(&jabber->write_lock);
|
||||
|
||||
XMLFreeElement(vcard_request);
|
||||
Free(from);
|
||||
}
|
||||
#undef MUC_USER_NS
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue