Parsee/src/XMPPThread/internal.h
LDA ca87972b3a [ADD/WIP] Push all the Janet changes
This is still unstable(and I still need to design/document the exposed
API)! Do(n't) go and use it!
2024-11-16 14:11:32 +01:00

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);