Mcabber-lm includes moved into a project tree
authorMyhailo Danylenko <isbear@ukrpost.net>
Sat, 01 Aug 2009 23:05:11 +0300
changeset 79 05328c643696
parent 78 1253cacc0f21
child 80 c8271a839357
Mcabber-lm includes moved into a project tree
CMakeLists.txt
include/caps.h
include/commands.h
include/compl.h
include/events.h
include/fifo.h
include/hbuf.h
include/help.h
include/hgcset.h
include/histolog.h
include/hooks.h
include/logprint.h
include/nohtml.h
include/otr.h
include/pgp.h
include/roster.h
include/screen.h
include/settings.h
include/utf8.h
include/utils.h
include/xmpp.h
include/xmpp_defines.h
include/xmpp_helper.h
--- 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