mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 13:45:10 +00:00
[MOD] Cache XEP-0421 support
This commit is contained in:
parent
3366fcb759
commit
063314b081
4 changed files with 33 additions and 3 deletions
|
|
@ -27,6 +27,9 @@ ParseeInitData(XMPPComponent *comp)
|
|||
data->jabber = comp;
|
||||
data->handler = CommandCreateRouter();
|
||||
|
||||
data->oid_servers = HashMapCreate();
|
||||
pthread_mutex_init(&data->oidl, NULL);
|
||||
|
||||
if (data->config->db_size)
|
||||
{
|
||||
data->db = DbOpenLMDB(data->config->db_path, data->config->db_size);
|
||||
|
|
@ -71,6 +74,8 @@ ParseeFreeData(ParseeData *data)
|
|||
return;
|
||||
}
|
||||
|
||||
HashMapFree(data->oid_servers);
|
||||
pthread_mutex_destroy(&data->oidl);
|
||||
Free(data->id);
|
||||
XMPPEndCompStream(data->jabber);
|
||||
DbClose(data->db);
|
||||
|
|
|
|||
|
|
@ -48,7 +48,13 @@ GetRandomQuote(void)
|
|||
"XMPP kinda sucks.",
|
||||
"Matrix kinda sucks.",
|
||||
|
||||
"Throw jabs!"
|
||||
"Throw jabs!",
|
||||
"'Won't you hold my <presence/> safe?' - Kanako",
|
||||
|
||||
NAME ": the federated world's little little kobashi",
|
||||
|
||||
"Go take a look at your stanzas!",
|
||||
"Go take a look at your objects!"
|
||||
};
|
||||
const size_t count = sizeof(quotes)/sizeof(*quotes);
|
||||
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ ServerHasXEP421(ParseeData *data, char *from)
|
|||
{
|
||||
char *server = NULL, *parsee;
|
||||
XMLElement *disco;
|
||||
bool ret;
|
||||
bool ret = false;
|
||||
if (!data || !from)
|
||||
{
|
||||
return false;
|
||||
|
|
@ -138,17 +138,33 @@ ServerHasXEP421(ParseeData *data, char *from)
|
|||
{
|
||||
server++;
|
||||
}
|
||||
server = StrDuplicate(server);
|
||||
|
||||
server = StrDuplicate(server);
|
||||
if (strchr(server, '/'))
|
||||
{
|
||||
*(strchr(server, '/')) = '\0';
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&data->oidl);
|
||||
ret = HashMapGet(data->oid_servers, server);
|
||||
pthread_mutex_unlock(&data->oidl);
|
||||
if (ret)
|
||||
{
|
||||
Log(LOG_DEBUG, "XEP-0421 is cached for '%s'", server);
|
||||
Free(server);
|
||||
return ret;
|
||||
}
|
||||
|
||||
parsee = ParseeJID(data);
|
||||
disco = XMPPSendDisco(data->jabber, parsee, server);
|
||||
|
||||
ret = XMPPDiscoAdvertises(disco, "urn:xmpp:occupant-id:0");
|
||||
if (ret)
|
||||
{
|
||||
pthread_mutex_lock(&data->oidl);
|
||||
HashMapSet(data->oid_servers, server, server);
|
||||
pthread_mutex_unlock(&data->oidl);
|
||||
}
|
||||
|
||||
XMLFreeElement(disco);
|
||||
Free(parsee);
|
||||
|
|
|
|||
|
|
@ -63,6 +63,9 @@ typedef struct ParseeData {
|
|||
char *id;
|
||||
|
||||
int verbosity;
|
||||
|
||||
HashMap *oid_servers;
|
||||
pthread_mutex_t oidl;
|
||||
} ParseeData;
|
||||
|
||||
typedef struct Argument {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue