[MOD] Add CHANGELOG, start PEPing

This commit is contained in:
LDA 2024-09-18 07:58:21 +02:00
commit f666f39b7c
7 changed files with 62 additions and 22 deletions

View file

@ -286,16 +286,6 @@ SetStanzaXParsee(StanzaBuilder *builder, HashMap *e)
XMLAddChild(parsee_link, link_elem);
XMLAddChild(parsee, parsee_link);
parsee_text = XMLCreateTag("zayds-note");
text_elem = XMLCreateText("\"LDA HANG YOURSELF\" - Zayd");
XMLAddChild(parsee_text, text_elem);
XMLAddChild(parsee, parsee_text);
parsee_text = XMLCreateTag("mcnebs-note");
text_elem = XMLCreateText("LDA will never beat the allegations");
XMLAddChild(parsee_text, text_elem);
XMLAddChild(parsee, parsee_text);
if (event_id)
{
parsee_event = XMLCreateTag("event-id");

View file

@ -10,6 +10,8 @@
#include <XMPP.h>
#include <XML.h>
#define PUBSUB "http://jabber.org/protocol/pubsub"
XMLElement *
CreatePubsubRequest(char *from, char *to, char *node)
{
@ -22,7 +24,7 @@ CreatePubsubRequest(char *from, char *to, char *node)
XMLAddAttr(iq_req, "type", "set");
pubsub = XMLCreateTag("pubsub");
XMLAddAttr(pubsub, "xmlns", "http://jabber.org/protocol/pubsub");
XMLAddAttr(pubsub, "xmlns", PUBSUB);
XMLAddChild(iq_req, pubsub);
sub = XMLCreateTag("subscribe");
@ -34,12 +36,40 @@ CreatePubsubRequest(char *from, char *to, char *node)
return iq_req;
}
static bool
IsPubsubRequest(XMLElement *stanza)
{
char *type = HashMapGet(stanza ? stanza->attrs : NULL, "type");
XMLElement *pubsub, *subscribe;
if (!stanza)
{
return false;
}
if (!StrEquals(stanza->name, "iq") ||
!StrEquals(type, "set"))
{
return false;
}
pubsub = XMLookForTKV(stanza, "pubsub", "xmlns", PUBSUB);
if (!pubsub)
{
return false;
}
return XMLookForUnique(pubsub, "subscribe");
}
struct PEPManager {
pthread_mutex_t lock;
ParseeData *data;
HashMap *node_table;
HashMap *followers;
void *cookie;
};
@ -56,6 +86,7 @@ CreatePEPManager(ParseeData *data, void *cookie)
ret->cookie = cookie;
ret->data = data;
ret->node_table = HashMapCreate();
ret->followers = HashMapCreate();
pthread_mutex_init(&ret->lock, NULL);
return ret;
@ -91,9 +122,9 @@ PEPManagerHandleEvent(PEPManager *manager, XMLElement *stanza)
{
return false;
}
#define PEP_NS "http://jabber.org/protocol/pubsub"
if (!(ps = XMLookForTKV(stanza, "pubsub", "xmlns", PEP_NS)) &&
!(ev = XMLookForTKV(stanza, "event", "xmlns", PEP_NS "#event")))
if (!(ps = XMLookForTKV(stanza, "pubsub", "xmlns", PUBSUB)) &&
!(ev = XMLookForTKV(stanza, "event", "xmlns", PUBSUB "#event")))
{
return false;
}
@ -135,6 +166,11 @@ PEPManagerHandle(PEPManager *manager, XMLElement *stanza)
}
/* Check if it is a PEP stanza */
if (IsPubsubRequest(stanza))
{
Log(LOG_DEBUG, "UNIMPLEMENTED PUBSUB SUBSCRIPTION");
/* TODO */
}
if (PEPManagerHandleEvent(manager, stanza))
{
return true;
@ -158,5 +194,8 @@ DestroyPEPManager(PEPManager *manager)
Free(val);
}
HashMapFree(manager->node_table);
HashMapFree(manager->followers);
Free(manager);
}

View file

@ -68,7 +68,7 @@ XMPPDispatcher(void *argp)
if (StrEquals(stanza->name, "presence"))
{
PresenceStanza(args, stanza);
PresenceStanza(args, stanza, thread);
XMLFreeElement(stanza);
continue;
}

View file

@ -57,7 +57,7 @@ GuessStatus(XMLElement *stanza)
return USER_STATUS_ONLINE;
}
void
PresenceStanza(ParseeData *args, XMLElement *stanza)
PresenceStanza(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
{
#define MUC_USER_NS "http://jabber.org/protocol/muc#user"
XMLElement *user_info;
@ -66,6 +66,11 @@ PresenceStanza(ParseeData *args, XMLElement *stanza)
char *oid = HashMapGet(stanza->attrs, "from");
if (PEPManagerHandle(thr->info->pep_manager, stanza))
{
return;
}
if (ServerHasXEP421(args, oid))
{
XMLElement *occupant = XMLookForTKV(

View file

@ -78,7 +78,7 @@ XMLElement * CreatePubsubRequest(char *from, char *to, char *node);
bool MessageStanza(ParseeData *args, XMLElement *stanza, XMPPThread *thr);
void IQStanza(ParseeData *args, XMLElement *stanza, XMPPThread *thr);
void PresenceStanza(ParseeData *args, XMLElement *stanza);
void PresenceStanza(ParseeData *args, XMLElement *stanza, XMPPThread *thr);
bool ServerHasXEP421(ParseeData *data, char *from);
@ -89,6 +89,7 @@ PEPManager * CreatePEPManager(ParseeData *data, void *cookie);
void * PEPManagerCookie(PEPManager *manager);
void PEPManagerAddEvent(PEPManager *manager, char *node, PEPEvent event);
bool PEPManagerHandle(PEPManager *manager, XMLElement *stanza);
void PEPManagerBroadcast(PEPManager *manager, char *as, XMLElement *item);
void DestroyPEPManager(PEPManager *manager);
/* PEP callbacks for the handler */