mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 13:45:10 +00:00
This is still unstable(and I still need to design/document the exposed API)! Do(n't) go and use it!
99 lines
3.9 KiB
C
99 lines
3.9 KiB
C
#include <XMPPCommand.h>
|
|
#include <Parsee.h>
|
|
#include <XMPP.h>
|
|
#include <XML.h>
|
|
|
|
#define IQ_ADVERT \
|
|
AdvertiseSimple("http://jabber.org/protocol/chatstates") \
|
|
AdvertiseSimple("http://jabber.org/protocol/commands") \
|
|
AdvertiseSimple("http://jabber.org/protocol/caps") \
|
|
AdvertiseSimple("urn:xmpp:avatar:metadata+notify") \
|
|
AdvertiseSimple("urn:xmpp:avatar:data+notify") \
|
|
AdvertiseSimple("urn:xmpp:avatar:metadata") \
|
|
AdvertiseSimple("urn:xmpp:message-correct:0") \
|
|
AdvertiseSimple("urn:xmpp:message-moderate:0") \
|
|
AdvertiseSimple("urn:xmpp:message-moderate:1") \
|
|
AdvertiseSimple("urn:xmpp:message-retract:0") \
|
|
AdvertiseSimple("urn:xmpp:message-retract:1") \
|
|
AdvertiseSimple("urn:xmpp:avatar:data") \
|
|
AdvertiseSimple("urn:xmpp:chat-markers:0") \
|
|
AdvertiseSimple("urn:xmpp:reactions:0") \
|
|
AdvertiseSimple("urn:xmpp:styling:0") \
|
|
AdvertiseSimple("urn:xmpp:receipts") \
|
|
AdvertiseSimple("urn:xmpp:reply:0") \
|
|
AdvertiseSimple("jabber:x:oob") \
|
|
AdvertiseSimple("vcard-temp") \
|
|
AdvertiseSimple("jabber:iq:version") \
|
|
AdvertiseSimple("urn:parsee:x-parsee:0") \
|
|
AdvertiseSimple("urn:parsee:jealousy:0")
|
|
|
|
#define IQ_IDENTITY \
|
|
IdentitySimple("gateway", "matrix", "Parsee Matrix Gateway") \
|
|
IdentitySimple("client", "pc", NAME " v" VERSION " bridge") \
|
|
IdentitySimple("component", "generic", "Parsee's component")
|
|
|
|
typedef struct PEPManager PEPManager;
|
|
typedef void (*PEPEvent)(PEPManager *m, XMLElement *stanza, XMLElement *item);
|
|
|
|
typedef struct XMPPIdentity {
|
|
char *category, *type, *lang, *name;
|
|
} XMPPIdentity;
|
|
|
|
typedef struct XMPPThread XMPPThread;
|
|
typedef struct XMPPThreadInfo {
|
|
/* A FIFO of stanzas inbound, to be read by dispatcher
|
|
* threads. */
|
|
Array *stanzas;
|
|
pthread_mutex_t lock;
|
|
|
|
ParseeData *args;
|
|
XMPPComponent *jabber;
|
|
XMPPCommandManager *m;
|
|
PEPManager *pep_manager;
|
|
|
|
struct XMPPThread *dispatchers;
|
|
size_t available_dispatchers;
|
|
|
|
bool running;
|
|
pthread_mutex_t chk_lock;
|
|
} XMPPThreadInfo;
|
|
struct XMPPThread {
|
|
pthread_t thr;
|
|
XMPPThreadInfo *info;
|
|
};
|
|
|
|
int ICollate(unsigned char *cata, unsigned char *catb);
|
|
int IdentitySort(void *idap, void *idbp);
|
|
|
|
char * ParseeGetBridgedRoom(ParseeData *data, XMLElement *stanza);
|
|
char * ParseeGetEventFromID(ParseeData *data, XMLElement *stanza, char *id);
|
|
char * ParseeGetReactedEvent(ParseeData *data, XMLElement *stanza);
|
|
bool ParseeVerifyAllStanza(ParseeData *args, XMLElement *stanza);
|
|
|
|
HashMap * ShoveStanza(HashMap *content, XMLElement *stanza);
|
|
void ManageProfileItem(ParseeData *args, XMLElement *item, XMLElement *stanza, XMPPThread *thr);
|
|
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, XMPPThread *thr);
|
|
|
|
bool ServerHasXEP421(ParseeData *data, char *from);
|
|
|
|
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 */
|
|
void PEPAvatarEvent(PEPManager *m, XMLElement *stanza, XMLElement *item);
|
|
void PEPVCardEvent(PEPManager *m, XMLElement *stanza, XMLElement *item);
|
|
|
|
char * ScrambleOID(ParseeData *data, char *opaque_oid);
|
|
|
|
/* Presence management */
|
|
void AddPresenceSubscriber(ParseeData *data, char *from, char *to);
|
|
bool IsSubscribed(ParseeData *data, char *user, char *to);
|