2 * Copyright (c) 2007-2009 by Art Cancro
4 * This program is open source software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
19 #include "xmpp_xmacros.h"
20 #include "xmpp_util.h"
23 typedef struct _citxmpp { /* Information about the current session */
25 XML_Parser xp; /* XML parser instance for incoming client stream */
26 char server_name[256]; /* who they think we are */
30 char client_jid[256]; /* "full JID" of the client */
31 int last_event_processed;
34 TheToken_message Message;
36 char iq_client_username[256]; /* username requested by the client (NON SASL ONLY) */
37 char iq_client_password[256]; /* password requested by the client (NON SASL ONLY) */
38 char iq_client_resource[256]; /* resource name requested by the client */
39 int iq_session; /* nonzero == client is requesting a session */
40 char iq_query_xmlns[256]; /* Namespace of <query> */
42 char sasl_auth_mech[32]; /* SASL auth mechanism requested by the client */
44 char *message_body; /* Message body in transit */
45 int html_tag_level; /* <html> tag nesting level */
47 int bind_requested; /* In this stanza, client is asking server to bind a resource. */
48 int ping_requested; /* In this stanza, client is pinging the server. */
51 #define XMPP ((citxmpp *)CC->session_specific_data)
54 struct xmpp_event *next;
59 int session_which_generated_this_event;
62 extern int queue_event_seq;
70 typedef void (*xmpp_handler_func)(void *data, const char *supplied_el, const char **attr);
72 typedef struct __xmpp_handler {
74 xmpp_handler_func Handler;
78 void xmpp_cleanup_function(void);
79 void xmpp_greeting(void);
80 void xmpp_command_loop(void);
81 void xmpp_async_loop(void);
82 void xmpp_sasl_auth(char *, char *);
83 void xmpp_output_auth_mechs(void);
84 void xmpp_query_namespace(TheToken_iq *iq, char *);
85 void xmpp_output_incoming_messages(void);
86 void xmpp_queue_event(int, char *);
87 void xmpp_process_events(void);
88 void xmpp_presence_notify(char *, int);
89 void xmpp_roster_item(struct CitContext *);
90 void xmpp_send_message(StrBuf *, char *);
91 void xmpp_non_sasl_authenticate(StrBuf *IQ_id, char *, char *, char *);
92 void xmpp_massacre_roster(void);
93 void xmpp_delete_old_buddies_who_no_longer_exist_from_the_client_roster(void);
94 int xmpp_is_visible(struct CitContext *from, struct CitContext *to_whom);
95 char *xmlesc(char *buf, char *str, int bufsiz);
97 extern int XMPPSrvDebugEnable;
99 #define DBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (XMPPSrvDebugEnable != 0))
101 #define XMPP_syslog(LEVEL, FORMAT, ...) \
102 DBGLOG(LEVEL) syslog(LEVEL, \
103 "XMPP: " FORMAT, __VA_ARGS__)
105 #define XMPPM_syslog(LEVEL, FORMAT) \
106 DBGLOG(LEVEL) syslog(LEVEL, \
110 void AddXMPPStartHandler(const char *key,
112 xmpp_handler_func Handler,
115 void AddXMPPEndHandler(const char *key,
117 xmpp_handler_func Handler,