XMPP: add X-Macros to automated parse tokens
[citadel.git] / citadel / modules / xmpp / serv_xmpp.h
index d8e29e9e1400839c7ff9f88b0f3abda97b929582..2137ea33088967f5be102c9967b7f29fbc5ba53c 100644 (file)
@@ -1,24 +1,27 @@
 /*
- * $Id$
- *
  * Copyright (c) 2007-2009 by Art Cancro
  *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *  This program is open source software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 3.
+ *  
+ *  
  *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  
+ *  
+ *  
  */
 
-struct citxmpp {                       /* Information about the current session */
+#include "xmpp_xmacros.h"
+#include "xmpp_util.h"
+
+
+typedef struct _citxmpp {                      /* Information about the current session */
+       StrBuf *OutBuf;
        XML_Parser xp;                  /* XML parser instance for incoming client stream */
        char server_name[256];          /* who they think we are */
        char *chardata;
@@ -27,10 +30,8 @@ struct citxmpp {                     /* Information about the current session */
        char client_jid[256];           /* "full JID" of the client */
        int last_event_processed;
 
-       char iq_type[256];              /* for <iq> stanzas */
-       char iq_id[256];
-       char iq_from[256];
-       char iq_to[256];
+       TheToken_iq IQ;
+
        char iq_client_username[256];   /* username requested by the client (NON SASL ONLY) */
        char iq_client_password[256];   /* password requested by the client (NON SASL ONLY) */
        char iq_client_resource[256];   /* resource name requested by the client */
@@ -45,9 +46,9 @@ struct citxmpp {                      /* Information about the current session */
 
        int bind_requested;             /* In this stanza, client is asking server to bind a resource. */
        int ping_requested;             /* In this stanza, client is pinging the server. */
-};
+} citxmpp;
 
-#define XMPP ((struct citxmpp *)CC->session_specific_data)
+#define XMPP ((citxmpp *)CC->session_specific_data)
 
 struct xmpp_event {
        struct xmpp_event *next;
@@ -66,20 +67,57 @@ enum {
        XMPP_EVT_LOGOUT
 };
 
+
+typedef void (*xmpp_handler_func)(void *data, const char *supplied_el, const char **attr);
+
+typedef struct __xmpp_handler {
+       int               Flags;
+       xmpp_handler_func Handler;
+}xmpp_handler;
+
+
 void xmpp_cleanup_function(void);
 void xmpp_greeting(void);
 void xmpp_command_loop(void);
 void xmpp_async_loop(void);
 void xmpp_sasl_auth(char *, char *);
 void xmpp_output_auth_mechs(void);
-void xmpp_query_namespace(char *, char *, char *, char *);
-void xmpp_wholist_presence_dump(void);
+void xmpp_query_namespace(TheToken_iq *iq, char *);
 void xmpp_output_incoming_messages(void);
 void xmpp_queue_event(int, char *);
 void xmpp_process_events(void);
 void xmpp_presence_notify(char *, int);
 void xmpp_roster_item(struct CitContext *);
 void xmpp_send_message(char *, char *);
-void xmpp_non_sasl_authenticate(char *, char *, char *, char *);
+void xmpp_non_sasl_authenticate(StrBuf *IQ_id, char *, char *, char *);
 void xmpp_massacre_roster(void);
 void xmpp_delete_old_buddies_who_no_longer_exist_from_the_client_roster(void);
+int xmpp_is_visible(struct CitContext *from, struct CitContext *to_whom);
+char *xmlesc(char *buf, char *str, int bufsiz);
+
+extern int XMPPSrvDebugEnable;
+
+#define DBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (XMPPSrvDebugEnable != 0))
+
+#define XMPP_syslog(LEVEL, FORMAT, ...)                                \
+       DBGLOG(LEVEL) syslog(LEVEL,                             \
+                            "XMPP: " FORMAT, __VA_ARGS__)
+
+#define XMPPM_syslog(LEVEL, FORMAT)            \
+       DBGLOG(LEVEL) syslog(LEVEL,             \
+                            "XMPP: " FORMAT);
+
+
+void AddXMPPStartHandler(const char *key,
+                        long len,
+                        xmpp_handler_func Handler,
+                        int Flags);
+
+void AddXMPPEndHandler(const char *key,
+                      long len,
+                      xmpp_handler_func Handler,
+                      int Flags);
+
+
+
+