--- a/CMakeLists.txt Thu Jul 30 14:33:22 2009 +0300
+++ b/CMakeLists.txt Sat Aug 01 23:05:11 2009 +0300
@@ -22,7 +22,7 @@
option(DEBUG "Enable debugging output" ON)
option(LLM_CONNECTION_ENABLE "Enable exposing of mcabber loudmouth connection to lua" ON)
option(LLM_LOG_HANDLER "Enable registration of log messages handler for lua-loudmouth library's messages" ON)
-set(MCABBER_INCLUDE_DIR "/home/isbear/src/mcabber/hglm/mcabber/src" CACHE FILEPATH "Path to mcabber headers")
+set(MCABBER_INCLUDE_DIR "${mcabber-lua_SOURCE_DIR}/include" CACHE FILEPATH "Path to mcabber headers")
set(ML_SOURCE_PRIORITY G_PRIORITY_HIGH_IDLE CACHE STRING "Glib event source priority for timeout and bgread")
set(ML_BGREAD_BUFFER 4096 CACHE STRING "Background pipe reading buffer size")
@@ -86,7 +86,7 @@
if(PERL_FOUND)
install(FILES ${mcabber-lua_BINARY_DIR}/mcabber-lua.html DESTINATION share/doc/${CPACK_PACKAGE_NAME})
endif()
-install(DIRECTORY examples DESTINATION share/doc/${CPACK_PACKAGE_NAME})
+install(DIRECTORY examples DESTINATION share/doc/${CPACK_PACKAGE_NAME} PATTERN "*~" EXCLUDE)
install(FILES README DESTINATION share/doc/${CPACK_PACKAGE_NAME})
install(FILES TODO DESTINATION share/doc/${CPACK_PACKAGE_NAME})
install(FILES COPYING DESTINATION share/doc/${CPACK_PACKAGE_NAME})
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/caps.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,22 @@
+#ifndef __CAPS_H__
+#define __CAPS_H__ 1
+
+#include <glib.h>
+
+void caps_init(void);
+void caps_free(void);
+void caps_add(char *hash);
+int caps_has_hash(const char *hash);
+void caps_set_identity(char *hash,
+ const char *category,
+ const char *name,
+ const char *type);
+void caps_add_feature(char *hash, const char *feature);
+int caps_has_feature(char *hash, char *feature);
+void caps_foreach_feature(const char *hash, GFunc func, gpointer user_data);
+
+char *caps_generate(void);
+
+#endif /* __CAPS_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/commands.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,39 @@
+#ifndef __COMMANDS_H__
+#define __COMMANDS_H__ 1
+
+#include <glib.h>
+
+#include "config.h"
+
+// Command structure
+typedef struct {
+ char name[32];
+ const char *help;
+ guint completion_flags[2];
+ void (*func)(char *);
+#ifdef MODULES_ENABLE
+ gpointer userdata;
+#endif
+} cmd;
+
+void cmd_init(void);
+cmd *cmd_get(const char *command);
+int process_line(const char *line);
+int process_command(const char *line, guint iscmd);
+char *expandalias(const char *line);
+#ifdef MODULES_ENABLE
+void cmd_deinit(void);
+gpointer cmd_del(const char *name);
+void cmd_add(const char *name, const char *help, guint flags1, guint flags2, void (*f)(char*), gpointer userdata);
+#endif
+
+extern char *mcabber_version(void);
+extern void mcabber_set_terminate_ui(void);
+
+void cmd_room_whois(gpointer bud, char *nick_locale, guint interactive);
+void cmd_room_leave(gpointer bud, char *arg);
+void cmd_setstatus(const char *recipient, const char *arg);
+
+#endif /* __COMMANDS_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/compl.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,47 @@
+#ifndef __COMPL_H__
+#define __COMPL_H__ 1
+
+#include <glib.h>
+
+#include "config.h"
+
+#define COMPL_CMD (1U<<0)
+#define COMPL_JID (1U<<1)
+#define COMPL_URLJID (1U<<2) // Not implemented yet
+#define COMPL_NAME (1U<<3) // Not implemented yet
+#define COMPL_STATUS (1U<<4)
+#define COMPL_FILENAME (1U<<5) // Not implemented yet
+#define COMPL_ROSTER (1U<<6)
+#define COMPL_BUFFER (1U<<7)
+#define COMPL_GROUP (1U<<8)
+#define COMPL_GROUPNAME (1U<<9)
+#define COMPL_MULTILINE (1U<<10)
+#define COMPL_ROOM (1U<<11)
+#define COMPL_RESOURCE (1U<<12)
+#define COMPL_AUTH (1U<<13)
+#define COMPL_REQUEST (1U<<14)
+#define COMPL_EVENTS (1U<<15)
+#define COMPL_EVENTSID (1U<<16)
+#define COMPL_PGP (1U<<17)
+#define COMPL_COLOR (1U<<18)
+#define COMPL_OTR (1U<<19)
+#define COMPL_OTRPOLICY (1U<<20)
+#ifdef MODULES_ENABLE
+#define COMPL_MAX_BUILTIN (1U<<20)
+
+guint compl_new_category (void);
+void compl_del_category (guint id);
+#endif
+
+void compl_add_category_word(guint, const char *command);
+void compl_del_category_word(guint categ, const char *word);
+GSList *compl_get_category_list(guint cat_flags, guint *dynlist);
+
+guint new_completion(char *prefix, GSList *compl_cat);
+void done_completion(void);
+guint cancel_completion(void);
+const char *complete(void);
+
+#endif /* __COMPL_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/events.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,50 @@
+#ifndef __EVENTS_H__
+#define __EVENTS_H__ 1
+
+#include "xmpp.h"
+#include "config.h" // MODULES_ENABLE
+
+
+#define EVS_DEFAULT_TIMEOUT 90
+#define EVS_MAX_TIMEOUT 432000
+
+#define EVS_CONTEXT_TIMEOUT 0U
+#define EVS_CONTEXT_CANCEL 1U
+#define EVS_CONTEXT_USER 2U
+
+typedef enum {
+ EVS_TYPE_SUBSCRIPTION = 1,
+ EVS_TYPE_INVITATION = 2,
+#ifdef MODULES_ENABLE
+ EVS_TYPE_USER = 3,
+#endif
+} evs_type;
+
+/* Common structure for events (evs) and IQ requests (iqs) */
+typedef struct {
+ char *id;
+ time_t ts_create;
+ time_t ts_expire;
+ guint8 type;
+ gpointer data;
+ int (*callback)();
+ char *desc;
+} eviqs;
+
+typedef struct {
+ char* to;
+ char* from;
+ char* passwd;
+ char* reason;
+} event_muc_invitation;
+
+eviqs *evs_new(guint8 type, time_t timeout);
+int evs_del(const char *evid);
+int evs_callback(const char *evid, guint evcontext);
+gboolean evs_check_timeout();
+void evs_display_list(void);
+GSList *evs_geteventslist(int forcompl);
+
+#endif /* __EVENTS_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/fifo.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,11 @@
+#ifndef __FIFO_H__
+#define __FIFO_H__ 1
+
+int fifo_init(const char *fifo_path);
+void fifo_deinit(void);
+void fifo_read(void);
+int fifo_get_fd(void);
+
+#endif /* __FIFO_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/hbuf.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,59 @@
+#ifndef __HBUF_H__
+#define __HBUF_H__ 1
+
+#include <time.h>
+#include <glib.h>
+
+// With current implementation a message must fit in a hbuf block,
+// so we shouldn't choose a too small size.
+#define HBB_BLOCKSIZE 8192 // > 20 please
+
+// Flags:
+// - ALLOC: the ptr data has been allocated, it can be freed
+// - PERSISTENT: this is a new history line
+#define HBB_FLAG_ALLOC 1
+#define HBB_FLAG_PERSISTENT 2
+
+#define HBB_PREFIX_IN (1U<<0)
+#define HBB_PREFIX_OUT (1U<<1)
+#define HBB_PREFIX_STATUS (1U<<2)
+#define HBB_PREFIX_AUTH (1U<<3)
+#define HBB_PREFIX_INFO (1U<<4)
+#define HBB_PREFIX_ERR (1U<<5)
+#define HBB_PREFIX_NOFLAG (1U<<6)
+#define HBB_PREFIX_HLIGHT_OUT (1U<<7)
+#define HBB_PREFIX_HLIGHT (1U<<8)
+#define HBB_PREFIX_NONE (1U<<9)
+#define HBB_PREFIX_SPECIAL (1U<<10)
+#define HBB_PREFIX_PGPCRYPT (1U<<11)
+#define HBB_PREFIX_OTRCRYPT (1U<<12)
+#define HBB_PREFIX_CONT (1U<<13)
+#define HBB_PREFIX_RECEIPT (1U<<14)
+
+typedef struct {
+ time_t timestamp;
+ guint flags;
+ unsigned mucnicklen;
+ char *text;
+} hbb_line;
+
+void hbuf_add_line(GList **p_hbuf, const char *text, time_t timestamp,
+ guint prefix_flags, guint width, guint maxhbufblocks,
+ unsigned mucnicklen, gpointer xep184);
+void hbuf_free(GList **p_hbuf);
+void hbuf_rebuild(GList **p_hbuf, unsigned int width);
+GList *hbuf_previous_persistent(GList *l_line);
+
+hbb_line **hbuf_get_lines(GList *hbuf, unsigned int n);
+GList *hbuf_search(GList *hbuf, int direction, const char *string);
+GList *hbuf_jump_date(GList *hbuf, time_t t);
+GList *hbuf_jump_percent(GList *hbuf, int pc);
+gboolean hbuf_remove_receipt(GList *hbuf, gpointer xep184);
+
+void hbuf_dump_to_file(GList *hbuf, const char *filename);
+
+guint hbuf_get_blocks_number(GList *p_hbuf);
+
+#endif /* __HBUF_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/help.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,8 @@
+#ifndef __HELP_H__
+#define __HELP_H__ 1
+
+int help_process(char *string);
+
+#endif /* __HELP_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/hgcset.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,1 @@
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/histolog.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,20 @@
+#ifndef __HISTOLOG_H__
+#define __HISTOLOG_H__ 1
+
+#include <glib.h>
+
+#include "xmpp.h"
+
+void hlog_enable(guint enable, const char *root_dir, guint loadfile);
+char *hlog_get_log_jid(const char *bjid);
+void hlog_read_history(const char *bjid, GList **p_buddyhbuf, guint width);
+void hlog_write_message(const char *bjid, time_t timestamp, int sent,
+ const char *msg);
+void hlog_write_status(const char *bjid, time_t timestamp,
+ enum imstatus status, const char *status_msg);
+void hlog_save_state(void);
+void hlog_load_state(void);
+
+#endif /* __HISTOLOG_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/hooks.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,48 @@
+#ifndef __HOOKS_H__
+#define __HOOKS_H__ 1
+
+#include <time.h>
+#include <loudmouth/loudmouth.h>
+#include "xmpp.h"
+
+// These two defines are used by hk_message_{in,out} arguments
+#define ENCRYPTED_PGP 1
+#define ENCRYPTED_OTR 2
+
+#include "config.h"
+#ifdef MODULES_ENABLE
+#include <glib.h>
+
+typedef struct {
+ const char *name;
+ const char *value;
+} hk_arg_t;
+
+typedef void (*hk_handler_t) (hk_arg_t *args, gpointer userdata);
+
+void hk_add_handler (hk_handler_t handler, gpointer userdata);
+void hk_del_handler (hk_handler_t handler, gpointer userdata);
+#endif
+
+void hk_mainloop(void);
+void hk_message_in(const char *bjid, const char *resname,
+ time_t timestamp, const char *msg, LmMessageSubType type,
+ guint encrypted);
+void hk_message_out(const char *bjid, const char *nickname,
+ time_t timestamp, const char *msg,
+ guint encrypted, gpointer xep184);
+void hk_statuschange(const char *bjid, const char *resname, gchar prio,
+ time_t timestamp, enum imstatus status,
+ char const *status_msg);
+void hk_mystatuschange(time_t timestamp,
+ enum imstatus old_status,
+ enum imstatus new_status, const char *msg);
+
+void hook_execute_internal(const char *hookname);
+
+void hk_ext_cmd_init(const char *command);
+void hk_ext_cmd(const char *bjid, guchar type, guchar info, const char *data);
+
+#endif /* __HOOKS_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/logprint.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,20 @@
+#ifndef __LOGPRINT_H__
+#define __LOGPRINT_H__ 1
+
+// Flags for scr_LogPrint()
+#define LPRINT_NORMAL 1U // Display in log window
+#define LPRINT_LOG 2U // Log to file (if enabled)
+#define LPRINT_DEBUG 4U // Debug message (log if enabled)
+#define LPRINT_NOTUTF8 8U // Do not convert from UTF-8 to locale
+
+// For convenience...
+#define LPRINT_LOGNORM (LPRINT_NORMAL|LPRINT_LOG)
+
+void scr_print_logwindow(const char *string);
+void scr_LogPrint(unsigned int flag, const char *fmt, ...);
+
+void scr_DoUpdate(void);
+
+#endif /* __LOGPRINT_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/nohtml.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,9 @@
+#ifndef __NOHTML_H__
+#define __NOHTML_H__ 1
+
+char *html_strip(const char *buf);
+char *html_escape(const char *text);
+
+#endif /* __NOHTML_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/otr.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,40 @@
+#ifndef __OTR_H__
+#define __OTR_H__ 1
+
+#ifdef HAVE_LIBOTR
+
+#include <libotr/proto.h>
+#include <libotr/message.h>
+#include <libotr/privkey.h>
+
+enum otr_policy {
+ plain,
+ opportunistic,
+ manual,
+ always
+};
+
+void otr_init(const char *jid);
+void otr_terminate(void);
+
+void otr_establish (const char * buddy);
+void otr_disconnect (const char * buddy);
+void otr_fingerprint(const char * buddy, const char * trust);
+void otr_print_info (const char * buddy);
+
+void otr_smp_query (const char * buddy, const char * secret);
+void otr_smp_respond(const char * buddy, const char * secret);
+void otr_smp_abort (const char * buddy);
+
+void otr_key (void);
+
+int otr_receive (char **otr_data, const char * buddy, int * free_msg);
+int otr_send (char **msg, const char *buddy);
+
+#endif /* HAVE_LIBOTR */
+
+int otr_enabled (void);
+
+#endif /* __OTR_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/pgp.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,29 @@
+#ifndef __PGP_H__
+#define __PGP_H__ 1
+
+#include <config.h>
+
+#ifdef HAVE_GPGME
+
+#define GPGME_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_USER_1
+#include <gpgme.h>
+
+int gpg_init(const char *priv_key, const char *passphrase);
+void gpg_terminate(void);
+void gpg_set_passphrase(const char *passphrase);
+void gpg_set_private_key(const char *priv_keyid);
+char *gpg_verify(const char *gpg_data, const char *text,
+ gpgme_sigsum_t *sigsum);
+char *gpg_sign(const char *gpg_data);
+char *gpg_decrypt(const char *gpg_data);
+char *gpg_encrypt(const char *gpg_data, const char *keyid);
+
+int gpg_test_passphrase(void);
+
+#endif /* HAVE_GPGME */
+
+int gpg_enabled(void);
+
+#endif /* __PGP_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/roster.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,248 @@
+#ifndef __ROSTER_H__
+#define __ROSTER_H__ 1
+
+#include <glib.h>
+#include <time.h>
+
+#include "pgp.h"
+
+#ifndef SPECIAL_BUFFER_STATUS_ID
+#define SPECIAL_BUFFER_STATUS_ID "[status]"
+#endif
+
+enum imstatus {
+ offline,
+ available,
+ freeforchat,
+ dontdisturb,
+ notavail,
+ away,
+ invisible,
+ imstatus_size
+};
+
+extern char imstatus2char[]; // Should match enum above
+
+enum imrole {
+ role_none,
+ role_moderator,
+ role_participant,
+ role_visitor,
+ imrole_size
+};
+
+extern char *strrole[]; // Should match enum above
+
+enum imaffiliation {
+ affil_none,
+ affil_owner,
+ affil_admin,
+ affil_member,
+ affil_outcast,
+ imaffiliation_size
+};
+
+extern char *straffil[]; // Should match enum above
+
+enum subscr {
+ sub_none = 0,
+ sub_pending = 1,
+ sub_to = 1 << 1,
+ sub_from = 1 << 2,
+ sub_both = sub_to|sub_from,
+ sub_remove = 1 << 3
+};
+
+enum findwhat {
+ jidsearch,
+ namesearch
+};
+
+extern char *strprintstatus[];
+
+// Note: do not change the ordering as these values are visible
+// to the user (option 'muc_print_status')!
+enum room_printstatus {
+ status_default,
+ status_none,
+ status_in_and_out,
+ status_all
+};
+
+extern char *strautowhois[];
+
+enum room_autowhois {
+ autowhois_default,
+ autowhois_off,
+ autowhois_on
+};
+
+struct role_affil {
+ enum { type_role, type_affil } type;
+ union {
+ enum imrole role;
+ enum imaffiliation affil;
+ } val;
+};
+
+// Roster_type is a set of flags, so values should be 2^n
+#define ROSTER_TYPE_USER 1U
+#define ROSTER_TYPE_GROUP (1U<<1)
+#define ROSTER_TYPE_AGENT (1U<<2)
+#define ROSTER_TYPE_ROOM (1U<<3)
+#define ROSTER_TYPE_SPECIAL (1U<<4)
+
+// Flags:
+#define ROSTER_FLAG_MSG 1U // Message not read
+#define ROSTER_FLAG_HIDE (1U<<1) // Group hidden (or buddy window closed)
+#define ROSTER_FLAG_LOCK (1U<<2) // Node should not be removed from buddylist
+#define ROSTER_FLAG_USRLOCK (1U<<3) // Node should not be removed from buddylist
+// ROSTER_FLAG_LOCAL (1U<<4) // Buddy not on server's roster (??)
+
+#define JEP0022
+#define JEP0085
+
+struct jep0022 {
+ guint support;
+ guint last_state_sent;
+ gchar *last_msgid_sent;
+ guint last_state_rcvd;
+ gchar *last_msgid_rcvd;
+};
+struct jep0085 {
+ guint support;
+ guint last_state_sent;
+ guint last_state_rcvd;
+};
+
+enum chatstate_support {
+ CHATSTATES_SUPPORT_UNKNOWN = 0,
+ CHATSTATES_SUPPORT_PROBED,
+ CHATSTATES_SUPPORT_NONE,
+ CHATSTATES_SUPPORT_OK
+};
+
+struct pgp_data {
+ gchar *sign_keyid; // KeyId used by the contact to sign their presence/msg
+#ifdef HAVE_GPGME
+ gpgme_sigsum_t last_sigsum; // Last signature summary
+#endif
+};
+
+/* Message event and chat state flags */
+#define ROSTER_EVENT_NONE 0U
+/* JEP-22 Message Events */
+#define ROSTER_EVENT_OFFLINE (1U<<0)
+#define ROSTER_EVENT_DELIVERED (1U<<1)
+#define ROSTER_EVENT_DISPLAYED (1U<<2)
+/* JEP-22 & JEP-85 */
+#define ROSTER_EVENT_COMPOSING (1U<<3)
+/* JEP-85 Chat State Notifications */
+#define ROSTER_EVENT_ACTIVE (1U<<4)
+#define ROSTER_EVENT_PAUSED (1U<<5)
+#define ROSTER_EVENT_INACTIVE (1U<<6)
+#define ROSTER_EVENT_GONE (1U<<7)
+
+extern GList *buddylist;
+extern GList *current_buddy;
+extern GList *alternate_buddy;
+
+// Macros...
+
+#define BUDDATA(glist_node) ((glist_node)->data)
+#define CURRENT_JID buddy_getjid(BUDDATA(current_buddy))
+
+// Prototypes...
+void roster_init(void);
+GSList *roster_add_group(const char *name);
+GSList *roster_add_user(const char *jid, const char *name, const char *group,
+ guint type, enum subscr esub, gint on_server);
+GSList *roster_find(const char *jidname, enum findwhat type, guint roster_type);
+void roster_del_user(const char *jid);
+void roster_free(void);
+void roster_setstatus(const char *jid, const char *resname, gchar prio,
+ enum imstatus bstat, const char *status_msg,
+ time_t timestamp,
+ enum imrole role, enum imaffiliation affil,
+ const char *realjid);
+void roster_setflags(const char *jid, guint flags, guint value);
+void roster_msg_setflag(const char *jid, guint special, guint value);
+const char *roster_getname(const char *jid);
+const char *roster_getnickname(const char *jid);
+void roster_settype(const char *jid, guint type);
+enum imstatus roster_getstatus(const char *jid, const char *resname);
+const char *roster_getstatusmsg(const char *jid, const char *resname);
+guint roster_gettype(const char *jid);
+guint roster_getsubscription(const char *jid);
+void roster_unsubscribed(const char *jid);
+
+void buddylist_build(void);
+void buddy_hide_group(gpointer rosterdata, int hide);
+void buddylist_set_hide_offline_buddies(int hide);
+int buddylist_isset_filter(void);
+int buddylist_is_status_filtered(enum imstatus status);
+void buddylist_set_filter(guchar);
+guchar buddylist_get_filter(void);
+const char *buddy_getjid(gpointer rosterdata);
+void buddy_setname(gpointer rosterdata, char *newname);
+const char *buddy_getname(gpointer rosterdata);
+void buddy_setnickname(gpointer rosterdata, const char *newname);
+const char *buddy_getnickname(gpointer rosterdata);
+void buddy_setinsideroom(gpointer rosterdata, guint inside);
+guint buddy_getinsideroom(gpointer rosterdata);
+void buddy_settopic(gpointer rosterdata, const char *newtopic);
+const char *buddy_gettopic(gpointer rosterdata);
+void buddy_setprintstatus(gpointer rosterdata, enum room_printstatus);
+enum room_printstatus buddy_getprintstatus(gpointer rosterdata);
+void buddy_setautowhois(gpointer rosterdata, enum room_autowhois);
+enum room_autowhois buddy_getautowhois(gpointer rosterdata);
+void buddy_settype(gpointer rosterdata, guint type);
+guint buddy_gettype(gpointer rosterdata);
+guint buddy_getsubscription(gpointer rosterdata);
+void buddy_setgroup(gpointer rosterdata, char *newgroupname);
+const char *buddy_getgroupname(gpointer rosterdata);
+gpointer buddy_getgroup(gpointer rosterdata);
+enum imstatus buddy_getstatus(gpointer rosterdata, const char *resname);
+const char *buddy_getstatusmsg(gpointer rosterdata, const char *resname);
+time_t buddy_getstatustime(gpointer rosterdata, const char *resname);
+gchar buddy_getresourceprio(gpointer rosterdata, const char *resname);
+//int buddy_isresource(gpointer rosterdata);
+GSList *buddy_getresources(gpointer rosterdata);
+GSList *buddy_getresources_locale(gpointer rosterdata);
+void buddy_resource_setname(gpointer rosterdata, const char *resname,
+ const char *newname);
+void buddy_resource_setevents(gpointer rosterdata, const char *resname,
+ guint event);
+guint buddy_resource_getevents(gpointer rosterdata, const char *resname);
+void buddy_resource_setcaps(gpointer rosterdata, const char *resname,
+ const char *caps);
+char *buddy_resource_getcaps(gpointer rosterdata, const char *resname);
+struct jep0022 *buddy_resource_jep22(gpointer rosterdata, const char *resname);
+struct jep0085 *buddy_resource_jep85(gpointer rosterdata, const char *resname);
+struct pgp_data *buddy_resource_pgp(gpointer rosterdata, const char *resname);
+enum imrole buddy_getrole(gpointer rosterdata, const char *resname);
+enum imaffiliation buddy_getaffil(gpointer rosterdata, const char *resname);
+const char *buddy_getrjid(gpointer rosterdata, const char *resname);
+void buddy_del_all_resources(gpointer rosterdata);
+void buddy_setflags(gpointer rosterdata, guint flags, guint value);
+guint buddy_getflags(gpointer rosterdata);
+void buddy_setonserverflag(gpointer rosterdata, guint onserver);
+guint buddy_getonserverflag(gpointer rosterdata);
+GList *buddy_search_jid(const char *jid);
+GList *buddy_search(char *string);
+void foreach_buddy(guint roster_type,
+ void (*pfunc)(gpointer rosterdata, void *param),
+ void *param);
+void foreach_group_member(gpointer groupdata,
+ void (*pfunc)(gpointer rosterdata, void *param),
+ void *param);
+gpointer unread_msg(gpointer rosterdata);
+
+void unread_jid_add(const char *jid);
+GList *unread_jid_get_list(void);
+
+GSList *compl_list(guint type);
+
+#endif /* __ROSTER_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/screen.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,187 @@
+#ifndef __SCREEN_H__
+#define __SCREEN_H__ 1
+
+#include <glib.h>
+
+#if HAVE_NCURSESW_NCURSES_H
+# include <ncursesw/ncurses.h>
+# include <ncursesw/panel.h>
+#elif HAVE_NCURSES_NCURSES_H
+# include <ncurses/ncurses.h>
+# include <ncurses/panel.h>
+#else
+# include <ncurses.h>
+# include <panel.h>
+#endif
+
+#ifdef WITH_ASPELL
+void spellcheck_init(void);
+void spellcheck_deinit(void);
+//static void spellcheck(char*, char*);
+#endif
+
+#include "hbuf.h"
+#include "logprint.h"
+#include "roster.h"
+
+#define INPUTLINE_LENGTH 1024
+
+// Only used in screen.c; this is the maximum line number
+// in a multi-line message. Should be < 1000
+// Note: message length is limited by the HBB_BLOCKSIZE size too
+#define MULTILINE_MAX_LINE_NUMBER 299
+
+// When chatstates are enabled, timeout (in seconds) before "composing"
+// becomes "paused" because of user inactivity.
+// Warning: setting this very low will cause more network traffic.
+#define COMPOSING_TIMEOUT 6L
+
+enum colors {
+ COLOR_GENERAL = 3,
+ COLOR_MSGOUT,
+ COLOR_MSGHL,
+ COLOR_STATUS,
+ COLOR_ROSTER,
+ COLOR_ROSTERSEL,
+ COLOR_ROSTERSELNMSG,
+ COLOR_ROSTERNMSG,
+ COLOR_INFO,
+ COLOR_MSGIN,
+ COLOR_max
+};
+
+int COLOR_ATTRIB[COLOR_max];
+
+extern int update_roster;
+
+typedef struct {
+ int value;
+ int utf8;
+ enum {
+ MKEY_META = 1,
+ MKEY_EQUIV,
+ MKEY_CTRL_PGUP,
+ MKEY_CTRL_PGDOWN,
+ MKEY_SHIFT_PGUP,
+ MKEY_SHIFT_PGDOWN,
+ MKEY_CTRL_SHIFT_PGUP,
+ MKEY_CTRL_SHIFT_PGDOWN,
+ MKEY_CTRL_HOME,
+ MKEY_CTRL_END,
+ MKEY_CTRL_INS,
+ MKEY_CTRL_DEL,
+ MKEY_CTRL_SHIFT_HOME,
+ MKEY_CTRL_SHIFT_END,
+ MKEY_MOUSE
+ } mcode;
+} keycode;
+
+typedef enum {
+ MC_ALL,
+ MC_PRESET,
+ MC_OFF,
+ MC_REMOVE
+} muccoltype;
+
+void scr_init_bindings(void);
+
+void scr_Getch(keycode *kcode);
+void process_key(keycode kcode);
+
+void scr_InitLocaleCharSet(void);
+void scr_InitCurses(void);
+void scr_TerminateCurses(void);
+void scr_DrawMainWindow(unsigned int fullinit);
+void scr_DrawRoster(void);
+void scr_UpdateMainStatus(int forceupdate);
+void scr_UpdateChatStatus(int forceupdate);
+void scr_RosterVisibility(int status);
+void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
+ time_t timestamp, guint prefix,
+ unsigned mucnicklen);
+void scr_WriteOutgoingMessage(const char *jidto, const char *text,
+ guint prefix, gpointer xep184);
+void scr_RemoveReceiptFlag(const char *jidto, gpointer xep184);
+void scr_ShowBuddyWindow(void);
+int scr_BuddyBufferExists(const char *jid);
+void scr_UpdateBuddyWindow(void);
+void scr_set_chatmode(int enable);
+int scr_get_chatmode(void);
+void scr_set_multimode(int enable, char *subject);
+int scr_get_multimode(void);
+void scr_setmsgflag_if_needed(const char *jid, int special);
+void scr_append_multiline(const char *line);
+const char *scr_get_multiline(void);
+const char *scr_get_multimode_subj(void);
+
+guint scr_getprefixwidth(void);
+void scr_line_prefix(hbb_line *line, char *prefix, guint preflen);
+
+void scr_Beep(void);
+
+bool Autoaway;
+
+void scr_CheckAutoAway(int activity);
+
+#if defined JEP0022 || defined JEP0085
+gboolean scr_ChatStatesTimeout();
+#endif
+int chatstates_disabled;
+
+// For commands...
+void scr_RosterTop(void);
+void scr_RosterBottom(void);
+void scr_RosterUpDown(int updown, unsigned int n);
+void scr_RosterPrevGroup(void);
+void scr_RosterNextGroup(void);
+void scr_RosterSearch(char *);
+void scr_RosterJumpJid(char *);
+void scr_RosterDisplay(const char *);
+void scr_BufferTopBottom(int topbottom);
+void scr_BufferClear(void);
+void scr_BufferScrollLock(int lock);
+void scr_BufferPurge(int, const char*);
+void scr_BufferPurgeAll(int);
+void scr_BufferSearch(int direction, const char *text);
+void scr_BufferPercent(int pc);
+void scr_BufferDate(time_t t);
+void scr_BufferDump(const char *file);
+void scr_RosterUnreadMessage(int);
+void scr_RosterJumpAlternate(void);
+void scr_BufferScrollUpDown(int updown, unsigned int nblines);
+bool scr_RosterColor(const char *status, const char *wildcard,
+ const char *color);
+void scr_RosterClearColor(void);
+void scr_MucColor(const char *muc, muccoltype type);
+void scr_MucNickColor(const char *nick, const char *color);
+void scr_BufferList(void);
+
+void readline_transpose_chars(void);
+void readline_forward_kill_word(void);
+void readline_backward_kill_word(void);
+void readline_backward_word(void);
+void readline_forward_word(void);
+void readline_updowncase_word(int);
+void readline_capitalize_word(void);
+void readline_backward_char(void);
+void readline_forward_char(void);
+int readline_accept_line(int down_history);
+void readline_cancel_completion(void);
+void readline_do_completion(void);
+void readline_refresh_screen(void);
+void readline_disable_chat_mode(void);
+void readline_hist_beginning_search_bwd(void);
+void readline_hist_beginning_search_fwd(void);
+void readline_hist_prev(void);
+void readline_hist_next(void);
+void readline_backward_kill_char(void);
+void readline_forward_kill_char(void);
+void readline_iline_start(void);
+void readline_iline_end(void);
+void readline_backward_kill_iline(void);
+void readline_forward_kill_iline(void);
+void readline_send_multiline(void);
+
+#endif
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/settings.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,65 @@
+#ifndef __SETTINGS_H__
+#define __SETTINGS_H__ 1
+
+#include <ctype.h>
+#include <glib.h>
+
+#include "roster.h"
+
+#ifndef isblank
+# define isblank(c) ((c) == 0x20 || (c) == 0x09)
+#endif
+
+
+#define SETTINGS_TYPE_OPTION 1
+#define SETTINGS_TYPE_ALIAS 2
+#define SETTINGS_TYPE_BINDING 3
+#ifdef HAVE_LIBOTR
+#define SETTINGS_TYPE_OTR 4
+#endif
+
+#ifndef COMMAND_CHAR
+#define COMMAND_CHAR '/'
+#endif
+#ifndef COMMAND_CHARSTR
+#define COMMAND_CHARSTR "/"
+#endif
+
+#define settings_opt_get(k) settings_get(SETTINGS_TYPE_OPTION, k)
+#define settings_opt_get_int(k) settings_get_int(SETTINGS_TYPE_OPTION, k)
+
+#define mkcmdstr(cmd) COMMAND_CHARSTR cmd
+
+void settings_init(void);
+int cfg_read_file(char *filename, guint mainfile);
+guint parse_assigment(gchar *assignment, gchar **pkey, gchar **pval);
+void settings_set(guint type, const gchar *key, const gchar *value);
+void settings_del(guint type, const gchar *key);
+const gchar *settings_get(guint type, const gchar *key);
+int settings_get_int(guint type, const gchar *key);
+const gchar *settings_get_status_msg(enum imstatus status);
+void settings_foreach(guint type,
+ void (*pfunc)(char *k, char *v, void *param),
+ void *param);
+
+void settings_pgp_setdisabled(const char *bjid, guint value);
+guint settings_pgp_getdisabled(const char *bjid);
+void settings_pgp_setforce(const char *bjid, guint value);
+guint settings_pgp_getforce(const char *bjid);
+void settings_pgp_setkeyid(const char *bjid, const char *keyid);
+const char *settings_pgp_getkeyid(const char *bjid);
+
+#ifdef HAVE_LIBOTR
+guint settings_otr_getpolicy(const char *bjid);
+void settings_otr_setpolicy(const char *bjid, guint value);
+#endif
+
+guint get_max_history_blocks(void);
+
+char *default_muc_nickname(const char *roomid);
+
+const gchar *isbound(int key);
+
+#endif /* __SETTINGS_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/utf8.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,49 @@
+#ifndef __UTF8_H__
+#define __UTF8_H__ 1
+
+#include <config.h>
+
+#if defined HAVE_UNICODE && defined HAVE_WCHAR_H && defined HAVE_WCTYPE_H
+# define UNICODE
+#endif
+
+#ifdef HAVE_WCHAR_H
+# include <wchar.h>
+# define get_char_width(c) (utf8_mode ? wcwidth(get_char(c)) : 1)
+#else
+# define wcwidth(c) 1
+# define get_char_width(c) 1
+#endif
+
+#ifdef HAVE_WCTYPE_H
+# include <wctype.h>
+
+/* The following bit is a hack for Solaris 8&9 systems that don't have
+ * iswblank().
+ * For now i made sure it comes after wctype.h so it doesn't create
+ * problems (wctype.h has calls to iswblank() before wctype() is declared).
+ * (Sebastian Kayser)
+ */
+# ifndef HAVE_ISWBLANK
+# define iswblank(wc) iswctype(wc, wctype("blank"))
+# endif
+
+#else
+# define iswblank(c) (c == ' ')
+# define iswalnum(c) isalnum(c)
+# define iswprint(c) isprint(c)
+# define towupper(c) toupper(c)
+# define towlower(c) tolower(c)
+# define iswalpha(c) isalpha(c)
+#endif
+
+extern int utf8_mode;
+
+char *prev_char(char *str, const char *limit);
+char *next_char(char *str);
+unsigned get_char(const char *str);
+char *put_char(char *str, unsigned c);
+
+#endif /* __UTF8_H__ */
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/utils.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,56 @@
+#ifndef __UTILS_H__
+#define __UTILS_H__ 1
+
+#include <config.h>
+
+extern const char *LocaleCharSet;
+
+#define to_utf8(s) ((s) ? g_locale_to_utf8((s), -1, NULL,NULL,NULL) : NULL)
+#define from_utf8(s) ((s) ? g_convert_with_fallback((s), -1, LocaleCharSet, \
+ "UTF-8", NULL,NULL,NULL,NULL) : NULL)
+
+#define JID_RESOURCE_SEPARATOR '/'
+#define JID_RESOURCE_SEPARATORSTR "/"
+#define JID_DOMAIN_SEPARATOR '@'
+#define JID_DOMAIN_SEPARATORSTR "@"
+
+char *jidtodisp(const char *fjid);
+char *compose_jid(const char *username, const char *servername,
+ const char *resource);
+gboolean jid_equal(const char *jid1, const char *jid2);
+
+void fingerprint_to_hex(const unsigned char *fpr, char hex[49]);
+gboolean hex_to_fingerprint(const char * hex, char fpr[16]);
+
+void ut_InitDebug(int level, const char *file);
+void ut_WriteLog(unsigned int flag, const char *data);
+
+char *expand_filename(const char *fname);
+
+int checkset_perm(const char *name, unsigned int setmode);
+
+const char *ut_get_tmpdir(void);
+
+int to_iso8601(char *dststr, time_t timestamp);
+time_t from_iso8601(const char *timestamp, int utc);
+
+int check_jid_syntax(const char *fjid);
+
+void mc_strtolower(char *str);
+
+void strip_arg_special_chars(char *s);
+char **split_arg(const char *arg, unsigned int n, int dontstriplast);
+void free_arg_lst(char **arglst);
+
+void replace_nl_with_dots(char *bufstr);
+char *ut_expand_tabs(const char *text);
+
+#if !defined (HAVE_STRCASESTR)
+char *strcasestr(const char *haystack, const char *needle);
+#endif
+
+int startswith(const char *str, const char *word, guint ignore_case);
+
+#endif // __UTILS_H__
+
+/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/xmpp.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,89 @@
+#ifndef __XMPP_H__
+#define __XMPP_H__ 1
+
+#include <loudmouth/loudmouth.h>
+#include "roster.h"
+
+enum iqreq_type {
+ iqreq_none,
+ iqreq_version,
+ iqreq_time,
+ iqreq_last,
+ iqreq_vcard
+};
+
+struct annotation {
+ time_t cdate;
+ time_t mdate;
+ gchar *jid;
+ gchar *text;
+};
+
+struct bookmark {
+ gchar *roomjid;
+ gchar *name;
+ gchar *nick;
+ guint autojoin;
+ /* enum room_printstatus pstatus; */
+ /* enum room_autowhois awhois; */
+};
+
+extern LmConnection* lconnection;
+extern LmSSL* lssl;
+extern GMainLoop *main_loop;
+
+typedef struct {
+ char *subject;
+ char *body;
+ time_t timestamp;
+ char *jid;
+} unread_message_t;
+
+extern GSList *unread_messages;
+
+void xmpp_connect(void);
+void xmpp_disconnect(void);
+
+void xmpp_room_join(const char *room, const char *nickname, const char *passwd);
+int xmpp_room_setattrib(const char *roomid, const char *fjid,
+ const char *nick, struct role_affil ra,
+ const char *reason);
+void xmpp_room_invite(const char *room, const char *fjid, const char *reason);
+void xmpp_room_unlock(const char *room);
+void xmpp_room_destroy(const char *room, const char *venue, const char *reason);
+
+void xmpp_addbuddy(const char *bjid, const char *name, const char *group);
+void xmpp_updatebuddy(const char *bjid, const char *name, const char *group);
+void xmpp_delbuddy(const char *bjid);
+
+void xmpp_send_msg(const char *fjid, const char *text, int type,
+ const char *subject, gboolean otrinject, gint *encrypted,
+ LmMessageSubType type_overwrite, gpointer *xep184);
+
+void xmpp_send_s10n(const char *bjid, LmMessageSubType type);
+
+enum imstatus xmpp_getstatus(void);
+const char *xmpp_getstatusmsg(void);
+void xmpp_setprevstatus(void);
+
+void xmpp_setstatus(enum imstatus st, const char *recipient,
+ const char *msg, int do_not_sign);
+
+void xmpp_send_chatstate(gpointer buddy, guint chatstate);
+
+GSList *xmpp_get_all_storage_bookmarks(void);
+GSList *xmpp_get_all_storage_rosternotes(void);
+void xmpp_set_storage_bookmark(const char *roomid, const char *name,
+ const char *nick, const char *passwd,
+ int autojoin, enum room_printstatus pstatus,
+ enum room_autowhois awhois);
+struct annotation *xmpp_get_storage_rosternotes(const char *barejid,
+ int silent);
+void xmpp_set_storage_rosternotes(const char *barejid, const char *note);
+guint xmpp_is_bookmarked(const char *bjid);
+const char *xmpp_get_bookmark_nick(const char *bjid);
+
+void xmpp_request(const char *fjid, enum iqreq_type reqtype);
+void request_vcard(const char *bjid);
+void xmpp_request_storage(const gchar *storage);
+#endif /* __XMPP_H__ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/xmpp_defines.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,80 @@
+#ifndef __XMPP_DEFINES_H__
+#define __XMPP_DEFINES_H__ 1
+
+#define MCABBER_CAPS_NODE "http://mcabber.com/caps"
+
+#define NS_CLIENT "jabber:client"
+#define NS_SERVER "jabber:server"
+#define NS_DIALBACK "jabber:server:dialback"
+#define NS_AUTH "jabber:iq:auth"
+#define NS_AUTH_CRYPT "jabber:iq:auth:crypt"
+#define NS_REGISTER "jabber:iq:register"
+#define NS_ROSTER "jabber:iq:roster"
+#define NS_OFFLINE "jabber:x:offline"
+#define NS_AGENT "jabber:iq:agent"
+#define NS_AGENTS "jabber:iq:agents"
+#define NS_DELAY "jabber:x:delay"
+#define NS_VERSION "jabber:iq:version"
+#define NS_TIME "jabber:iq:time"
+#define NS_VCARD "vcard-temp"
+#define NS_PRIVATE "jabber:iq:private"
+#define NS_SEARCH "jabber:iq:search"
+#define NS_OOB "jabber:iq:oob"
+#define NS_XOOB "jabber:x:oob"
+#define NS_ADMIN "jabber:iq:admin"
+#define NS_FILTER "jabber:iq:filter"
+#define NS_AUTH_0K "jabber:iq:auth:0k"
+#define NS_BROWSE "jabber:iq:browse"
+#define NS_EVENT "jabber:x:event"
+#define NS_CONFERENCE "jabber:iq:conference"
+#define NS_SIGNED "jabber:x:signed"
+#define NS_ENCRYPTED "jabber:x:encrypted"
+#define NS_GATEWAY "jabber:iq:gateway"
+#define NS_LAST "jabber:iq:last"
+#define NS_ENVELOPE "jabber:x:envelope"
+#define NS_EXPIRE "jabber:x:expire"
+#define NS_XHTML "http://www.w3.org/1999/xhtml"
+#define NS_DISCO_INFO "http://jabber.org/protocol/disco#info"
+#define NS_DISCO_ITEMS "http://jabber.org/protocol/disco#items"
+#define NS_IQ_AUTH "http://jabber.org/features/iq-auth"
+#define NS_REGISTER_FEATURE "http://jabber.org/features/iq-register"
+
+#define NS_CAPS "http://jabber.org/protocol/caps"
+#define NS_CHATSTATES "http://jabber.org/protocol/chatstates"
+#define NS_COMMANDS "http://jabber.org/protocol/commands"
+#define NS_MUC "http://jabber.org/protocol/muc"
+
+#define NS_XDBGINSERT "jabber:xdb:ginsert"
+#define NS_XDBNSLIST "jabber:xdb:nslist"
+
+#define NS_XMPP_STANZAS "urn:ietf:params:xml:ns:xmpp-stanzas"
+#define NS_XMPP_TLS "urn:ietf:params:xml:ns:xmpp-tls"
+#define NS_XMPP_STREAMS "urn:ietf:params:xml:ns:xmpp-streams"
+
+#define NS_XMPP_DELAY "urn:xmpp:delay"
+#define NS_XMPP_TIME "urn:xmpp:time"
+#define NS_PING "urn:xmpp:ping"
+#define NS_RECEIPTS "urn:xmpp:receipts"
+
+#define NS_JABBERD_STOREDPRESENCE "http://jabberd.org/ns/storedpresence"
+#define NS_JABBERD_HISTORY "http://jabberd.org/ns/history"
+
+#define XMPP_ERROR_REDIRECT 302
+#define XMPP_ERROR_BAD_REQUEST 400
+#define XMPP_ERROR_NOT_AUTHORIZED 401
+#define XMPP_ERROR_PAYMENT_REQUIRED 402
+#define XMPP_ERROR_FORBIDDEN 403
+#define XMPP_ERROR_NOT_FOUND 404
+#define XMPP_ERROR_NOT_ALLOWED 405
+#define XMPP_ERROR_NOT_ACCEPTABLE 406
+#define XMPP_ERROR_REGISTRATION_REQUIRED 407
+#define XMPP_ERROR_REQUEST_TIMEOUT 408
+#define XMPP_ERROR_CONFLICT 409
+#define XMPP_ERROR_INTERNAL_SERVER_ERROR 500
+#define XMPP_ERROR_NOT_IMPLEMENTED 501
+#define XMPP_ERROR_REMOTE_SERVER_ERROR 502
+#define XMPP_ERROR_SERVICE_UNAVAILABLE 503
+#define XMPP_ERROR_REMOTE_SERVER_TIMEOUT 504
+#define XMPP_ERROR_DISCONNECTED 510
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/xmpp_helper.h Sat Aug 01 23:05:11 2009 +0300
@@ -0,0 +1,28 @@
+#ifndef __XMPPHELPER_H__
+#define __XMPPHELPER_H__ 1
+
+extern time_t iqlast; /* last message/status change time */
+
+struct T_presence {
+ enum imstatus st;
+ const char *msg;
+};
+
+#include "config.h"
+#ifdef MODULES_ENABLE
+void xmpp_add_feature (const char *xmlns);
+void xmpp_del_feature (const char *xmlns);
+#endif
+
+LmMessageNode * lm_message_node_new(const gchar *name, const gchar *xmlns);
+const gchar* lm_message_node_get_child_value(LmMessageNode * node,
+ const gchar *child);
+void lm_message_node_hide(LmMessageNode * node);
+void lm_message_node_insert_childnode(LmMessageNode * node,
+ LmMessageNode *child);
+void lm_message_node_deep_ref(LmMessageNode * node);
+
+/* XEP-0115 (Entity Capabilities) node */
+const char *entity_version(enum imstatus status);
+
+#endif