aboutsummaryrefslogtreecommitdiff
path: root/include/xchat.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/xchat.h')
-rw-r--r--include/xchat.h425
1 files changed, 425 insertions, 0 deletions
diff --git a/include/xchat.h b/include/xchat.h
new file mode 100644
index 0000000..671117f
--- /dev/null
+++ b/include/xchat.h
@@ -0,0 +1,425 @@
+#include "config.h"
+
+#ifdef USE_MYGLIB
+#include "../fe-text/myglib.h"
+#else
+#include <glib.h>
+#endif
+#include <time.h> /* need time_t */
+
+#include "history.h"
+
+#ifndef HAVE_SNPRINTF
+#define snprintf g_snprintf
+#endif
+
+#ifdef USE_DEBUG
+#define malloc(n) xchat_malloc(n, __FILE__, __LINE__)
+#define realloc(n, m) xchat_realloc(n, m, __FILE__, __LINE__)
+#define free(n) xchat_free(n, __FILE__, __LINE__)
+#define strdup(n) xchat_strdup(n, __FILE__, __LINE__)
+void *xchat_malloc (int size, char *file, int line);
+void *xchat_strdup (char *str, char *file, int line);
+void xchat_free (void *buf, char *file, int line);
+void *xchat_realloc (char *old, int len, char *file, int line);
+#endif
+
+#ifdef SOCKS
+#ifdef __sgi
+#include <sys/time.h>
+#define INCLUDE_PROTOTYPES 1
+#endif
+#include <socks.h>
+#endif
+
+#ifdef USE_OPENSSL
+#include <openssl/ssl.h> /* SSL_() */
+#endif
+
+#ifdef __EMX__ /* for o/s 2 */
+#define OFLAGS O_BINARY
+#define strcasecmp stricmp
+#define strncasecmp strnicmp
+#define PATH_MAX MAXPATHLEN
+#define FILEPATH_LEN_MAX MAXPATHLEN
+#else
+#ifdef WIN32
+#define OFLAGS O_BINARY
+#define sleep(t) _sleep(t*1000)
+#include <direct.h>
+#define F_OK 0
+#define X_OK 1
+#define W_OK 2
+#define R_OK 4
+#ifndef S_ISDIR
+#define S_ISDIR(m) ((m) & _S_IFDIR)
+#endif
+#define NETWORK_PRIVATE
+#else
+#define OFLAGS 0
+#endif
+#endif
+
+#define FONTNAMELEN 127
+#define PATHLEN 255
+#define NICKLEN 64 /* including the NULL, so 63 really */
+#define CHANLEN 202
+#define PDIWORDS 32
+
+#define safe_strcpy(dest,src,len) strncpy(dest,src,len); \
+ dest[len-1] = 0;
+
+#if defined(ENABLE_NLS) && !defined(_)
+# include <libintl.h>
+# define _(x) gettext(x)
+# ifdef gettext_noop
+# define N_(String) gettext_noop (String)
+# else
+# define N_(String) (String)
+# endif
+#endif
+#if !defined(_)
+# define N_(String) (String)
+# define _(x) (x)
+#endif
+
+struct nbexec
+{
+ int myfd;
+ int childpid;
+ int tochannel; /* making this int keeps the struct 4-byte aligned */
+ int iotag;
+ char *linebuf;
+ int buffill;
+ struct session *sess;
+};
+
+struct xchatprefs
+{
+ char nick1[64];
+ char nick2[64];
+ char nick3[64];
+ char realname[127];
+ char username[127];
+ char nick_suffix[4]; /* Only ever holds a one-character string. */
+ char awayreason[256];
+ char quitreason[256];
+ char partreason[256];
+ char font_normal[FONTNAMELEN + 1];
+ char dialog_font_normal[FONTNAMELEN + 1];
+ char font_shell[FONTNAMELEN + 1];
+ char doubleclickuser[256];
+ char sounddir[PATHLEN + 1];
+ char soundcmd[PATHLEN + 1];
+ char background[PATHLEN + 1];
+ char background_dialog[PATHLEN + 1];
+ char dccdir[PATHLEN + 1];
+ char bluestring[300];
+ char dnsprogram[72];
+ char hostname[127];
+ char cmdchar[4];
+ char trans_file[256];
+ char logmask[256];
+ char stamp_format[64];
+ char timestamp_log_format[64];
+
+ char proxy_host[64];
+ int proxy_port;
+ int proxy_type; /* 0=disabled, 1=wingate 2=socks4, 3=socks5, 4=http */
+
+ int first_dcc_send_port;
+ int last_dcc_send_port;
+
+ int tint_red;
+ int tint_green;
+ int tint_blue;
+
+ int dialog_tint_red;
+ int dialog_tint_green;
+ int dialog_tint_blue;
+
+ int tabs_position;
+ int max_auto_indent;
+ int indent_pixels;
+ int dialog_indent_pixels;
+ int dcc_blocksize;
+ int max_lines;
+ int notify_timeout;
+ int dcctimeout;
+ int dccstalltimeout;
+ int mainwindow_left;
+ int mainwindow_top;
+ int mainwindow_width;
+ int mainwindow_height;
+ int dccpermissions;
+ int recon_delay;
+ int bantype;
+ int userlist_sort;
+ int nu_color;
+ unsigned long local_ip;
+ unsigned long dcc_ip;
+ char dcc_ip_str[16];
+
+ unsigned int mainwindow_save;
+ unsigned int perc_color;
+ unsigned int perc_ascii;
+ unsigned int hilightnick;
+ unsigned int use_trans;
+ unsigned int nopanel;
+ unsigned int autosave;
+ unsigned int autodialog;
+ unsigned int autosave_url;
+ unsigned int autoreconnect;
+ unsigned int autoreconnectonfail;
+ unsigned int invisible;
+ unsigned int servernotice;
+ unsigned int wallops;
+ unsigned int skipmotd;
+ unsigned int autorejoin;
+ unsigned int colorednicks;
+ unsigned int chanmodebuttons;
+ unsigned int userlistbuttons;
+ unsigned int userlist_icons;
+ unsigned int showhostname_in_userlist;
+ unsigned int nickcompletion;
+ unsigned int old_nickcompletion;
+ unsigned int tabchannels;
+ unsigned int paned_userlist;
+ unsigned int autodccchat;
+ unsigned int autodccsend;
+ unsigned int autoresume;
+ unsigned int autoopendccsendwindow;
+ unsigned int autoopendccrecvwindow;
+ unsigned int autoopendccchatwindow;
+ unsigned int transparent;
+ unsigned int tint;
+ unsigned int dialog_transparent;
+ unsigned int dialog_tint;
+ unsigned int dialog_width;
+ unsigned int dialog_height;
+ unsigned int stripcolor;
+ unsigned int timestamp;
+ unsigned int fastdccsend;
+ unsigned int dcc_send_fillspaces;
+ unsigned int dcc_remove;
+ unsigned int skipserverlist;
+ unsigned int filterbeep;
+ unsigned int beepmsg;
+ unsigned int beepchans;
+ unsigned int truncchans;
+ unsigned int privmsgtab;
+ unsigned int logging;
+ unsigned int timestamp_logs;
+ unsigned int newtabstofront;
+ unsigned int dccwithnick;
+ unsigned int hilitenotify;
+ unsigned int hidever;
+ unsigned int ip_from_server;
+ unsigned int panelize_hide;
+ unsigned int panel_vbox;
+ unsigned int raw_modes;
+ unsigned int show_away_once;
+ unsigned int show_away_message;
+ unsigned int auto_unmark_away;
+ unsigned int userhost;
+ unsigned int use_server_tab;
+ unsigned int notices_tabs;
+ unsigned int style_namelistgad;
+ unsigned int style_inputbox;
+ unsigned int windows_as_tabs;
+#ifdef USE_JCODE
+ unsigned int kanji_conv;
+#endif
+ unsigned int use_fontset;
+ unsigned int indent_nicks;
+ unsigned int show_separator;
+ unsigned int thin_separator;
+ unsigned int dialog_indent_nicks;
+ unsigned int dialog_show_separator;
+ unsigned int treeview;
+ unsigned int auto_indent;
+ unsigned int wordwrap;
+ unsigned int dialog_wordwrap;
+ unsigned int mail_check;
+ unsigned int throttle;
+ unsigned int fudgeservernotice;
+ unsigned int topicbar;
+ unsigned int hideuserlist;
+ unsigned int hidemenu;
+ unsigned int perlwarnings;
+ unsigned int lagometer;
+ unsigned int throttlemeter;
+ unsigned int hebrew;
+ unsigned int limitedtabhighlight;
+ unsigned int pingtimeout;
+ unsigned int show_invite_in_front_session;
+ unsigned int show_notify_in_front_session;
+ unsigned int whois_on_notifyonline;
+ unsigned int inputgad_superfocus;
+ unsigned int nickgad;
+ unsigned int channelbox;
+ unsigned int persist_chans;
+
+ unsigned int ctcp_number_limit; /*flood */
+ unsigned int ctcp_time_limit; /*seconds of floods */
+
+ unsigned int msg_number_limit; /*same deal */
+ unsigned int msg_time_limit;
+};
+
+/* Session types */
+#define SESS_SERVER 1
+#define SESS_CHANNEL 2
+#define SESS_DIALOG 3
+#define SESS_SHELL 4
+#define SESS_NOTICES 5
+#define SESS_SNOTICES 6
+
+struct session
+{
+ struct server *server;
+ GSList *userlist;
+ char channel[CHANLEN];
+ char waitchannel[CHANLEN]; /* waiting to join this channel */
+ char willjoinchannel[CHANLEN]; /* /join done for this channel */
+ char channelkey[64]; /* XXX correct max length? */
+ int limit; /* channel user limit */
+ int logfd;
+
+ char lastnick[NICKLEN]; /* last nick you /msg'ed */
+
+ struct history history;
+
+ int ops; /* num. of ops in channel */
+ int hops; /* num. of half-oped users */
+ int voices; /* num. of voiced people */
+ int total; /* num. of users in channel */
+
+ char *quitreason;
+ char *topic;
+ char *current_modes; /* free() me */
+
+ int mode_timeout_tag;
+
+ struct session *lastlog_sess;
+ struct setup *setup;
+ struct nbexec *running_exec;
+
+ struct session_gui *gui; /* initialized by fe_new_window */
+
+ int userlisthidden;
+ int type;
+ int is_tab:1; /* is this a tab or toplevel window? */
+ int new_data:1; /* new data avail? (red tab) */
+ int nick_said:1; /* your nick mentioned? (blue tab) */
+ int ignore_date:1;
+ int ignore_mode:1;
+ int ignore_names:1;
+ int end_of_names:1;
+ int doing_who:1; /* /who sent on this channel */
+ int highlight_tab:1; /* Highlight the channel tab (red-style) */
+};
+
+typedef struct session session;
+
+struct server
+{
+ int port;
+ int sok;
+ int sok4;
+ int sok6;
+#ifdef USE_OPENSSL
+ SSL *ssl;
+ int ssl_do_connect_tag;
+ int use_ssl:1; /* is server SSL capable? */
+ int accept_invalid_cert:1; /* ignore result of server's cert. verify */
+#endif
+ int childread;
+ int childwrite;
+ int childpid;
+ int iotag;
+ int bartag;
+ int recondelay_tag; /* reconnect delay timeout */
+ char hostname[128]; /* real ip number */
+ char servername[128]; /* what the server says is its name */
+ char password[86];
+ char nick[NICKLEN];
+ char linebuf[522]; /* RFC says 512 including \r\n */
+ char *last_away_reason;
+ int pos; /* current position in linebuf */
+ int nickcount;
+
+ char *chantypes; /* for 005 numeric - free me */
+ char *chanmodes; /* for 005 numeric - free me */
+ char *nick_prefixes; /* e.g. "*@%+" */
+ char *nick_modes; /* e.g. "aohv" */
+ char *bad_nick_prefixes; /* for ircd that doesn't give the modes */
+ int modes_per_line; /* 6 on undernet, 4 on efnet etc... */
+
+ char *eom_cmd; /* end-of-motd command, free it! */
+
+ GSList *outbound_queue;
+ int next_send; /* cptr->since in ircu */
+ int sendq_len; /* queue size */
+
+ struct session *front_session;
+
+ struct server_gui *gui; /* initialized by fe_new_server */
+
+ unsigned int ctcp_counter; /*flood */
+ time_t ctcp_last_time;
+
+ unsigned int msg_counter; /*counts the msg tab opened in a certain time */
+ time_t msg_last_time;
+
+ /*time_t connect_time;*/ /* when did it connect? */
+ time_t lag_sent;
+ time_t ping_recv; /* when we last got a ping reply */
+ time_t away_time; /* when we were marked away */
+
+ int motd_skipped:1;
+ int connected:1;
+ int connecting:1;
+ int no_login:1;
+ int skip_next_who:1; /* used for "get my ip from server" */
+ int inside_whois:1;
+ int doing_who:1; /* /dns has been done */
+ int end_of_motd:1; /* end of motd reached (logged in) */
+ int sent_quit:1; /* sent a QUIT already? */
+ int is_newtype:1; /* undernet and dalnet need /list >0,<10000 */
+ int is_away:1;
+ int reconnect_away:1; /* whether to reconnect in is_away state */
+ int dont_use_proxy:1; /* to proxy or not to proxy */
+ int supports_watch:1; /* supports the WATCH command */
+ int bad_prefix:1; /* gave us a bad PREFIX= 005 number */
+};
+
+typedef struct server server;
+
+typedef int (*cmd_callback) (struct session * sess, char *tbuf, char *word[],
+ char *word_eol[]);
+
+struct commands
+{
+ char *name;
+ cmd_callback callback;
+ char needserver;
+ char needchannel;
+ char *help;
+};
+
+struct away_msg
+{
+ struct server *server;
+ char nick[NICKLEN];
+ char *message;
+};
+
+/* not just for popups, but used for usercommands, ctcp replies,
+ userlist buttons etc */
+
+struct popup
+{
+ char *cmd;
+ char *name;
+};