From 951bd53fc8ee8b3c7660a97de02760c40becd672 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Fri, 30 Nov 2007 21:54:58 +0000 Subject: [PATCH] Define an XMPP queue... --- citadel/modules/jabber/serv_xmpp.c | 16 ++++++++++++++++ citadel/modules/jabber/serv_xmpp.h | 8 ++++++++ citadel/modules/jabber/xmpp_presence.c | 1 - citadel/modules/jabber/xmpp_query_namespace.c | 19 +++++++++++++------ citadel/server.h | 1 + 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/citadel/modules/jabber/serv_xmpp.c b/citadel/modules/jabber/serv_xmpp.c index 31c0142bc..66a32097c 100644 --- a/citadel/modules/jabber/serv_xmpp.c +++ b/citadel/modules/jabber/serv_xmpp.c @@ -51,6 +51,7 @@ #include #include "serv_xmpp.h" +struct xmpp_event *xmpp_queue = NULL; /* We have just received a tag from the client, so send them ours */ @@ -365,6 +366,19 @@ void xmpp_async_loop(void) { } +/* + * Login hook for XMPP sessions + */ +void xmpp_login_hook(void) { + + // we need to somehow alert all xmpp sessions that we are here + // and do a roster push followed by a presence push + + lprintf(CTDL_DEBUG, "LOGIN HOOOOOOOOOOOOOKK!!!\n"); + +} + + const char *CitadelServiceXMPP="XMPP"; #endif /* HAVE_EXPAT */ @@ -380,6 +394,8 @@ CTDL_MODULE_INIT(jabber) xmpp_async_loop, CitadelServiceXMPP); CtdlRegisterSessionHook(xmpp_cleanup_function, EVT_STOP); + CtdlRegisterSessionHook(xmpp_login_hook, EVT_LOGIN); + #else lprintf(CTDL_INFO, "This server is missing the Expat XML parser. Jabber service will be disabled.\n"); #endif diff --git a/citadel/modules/jabber/serv_xmpp.h b/citadel/modules/jabber/serv_xmpp.h index f6f3438a4..ec488308c 100644 --- a/citadel/modules/jabber/serv_xmpp.h +++ b/citadel/modules/jabber/serv_xmpp.h @@ -24,6 +24,14 @@ struct citxmpp { /* Information about the current session */ #define XMPP ((struct citxmpp *)CC->session_specific_data) +struct xmpp_event { + struct xmpp_event *next; + int event_type; + char event_jid[256]; +}; + +extern struct xmpp_event *xmpp_queue; + void xmpp_cleanup_function(void); void xmpp_greeting(void); void xmpp_command_loop(void); diff --git a/citadel/modules/jabber/xmpp_presence.c b/citadel/modules/jabber/xmpp_presence.c index 1b10ef416..678e399ee 100644 --- a/citadel/modules/jabber/xmpp_presence.c +++ b/citadel/modules/jabber/xmpp_presence.c @@ -66,5 +66,4 @@ void jabber_wholist_presence_dump(void) } } - #endif /* HAVE_EXPAT */ diff --git a/citadel/modules/jabber/xmpp_query_namespace.c b/citadel/modules/jabber/xmpp_query_namespace.c index 30b8d1680..5cca90639 100644 --- a/citadel/modules/jabber/xmpp_query_namespace.c +++ b/citadel/modules/jabber/xmpp_query_namespace.c @@ -48,6 +48,18 @@ #include "serv_xmpp.h" +/* + * Output a single roster item, for roster queries or pushes + */ +void jabber_roster_item(struct CitContext *cptr) { + cprintf("", + cptr->cs_inet_email, + cptr->user.fullname + ); + cprintf("%s", config.c_humannode); + cprintf(""); +} + /* * Return the results for a "jabber:iq:roster:query" * @@ -68,12 +80,7 @@ void jabber_iq_roster_query(void) (((cptr->cs_flags&CS_STEALTH)==0) || (aide)) && (cptr->user.usernum != CC->user.usernum) ) { - cprintf("", - cptr->cs_inet_email, - cptr->user.fullname - ); - cprintf("%s", config.c_humannode); - cprintf(""); + jabber_roster_item(cptr); } } diff --git a/citadel/server.h b/citadel/server.h index 982aa37d8..6ab5a6cde 100644 --- a/citadel/server.h +++ b/citadel/server.h @@ -240,6 +240,7 @@ enum { S_LOG, S_NETSPOOL, S_THREAD_LIST, + S_XMPP_QUEUE, MAX_SEMAPHORES }; -- 2.30.2