/*
* -------------------------------------------------------
* Copyright (C) 2002-2007 Tommi Saviranta <wnd@iki.fi>
* (C) 2002 Lee Hardy <lee@leeh.co.uk>
* (C) 1998-2002 Sebastian Kienzl <zap@riot.org>
* -------------------------------------------------------
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef MIAU_H_
#define MIAU_H_
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /* ifdef HAVE_CONFIG_H */
#include "etc.h"
#include "server.h"
#include "client.h"
#include "llist.h"
#include <time.h>
#define MIAURC "miaurc"
#define MIAUDIR ".miau/"
#define FILE_PID "pid"
#define FILE_LOG "log"
#define FILE_INBOX "inbox"
#ifndef VERSION
#define VERSION "???"
#endif
#define DEFAULT_NICKFILL '_'
#define DEFAULT_PORT 6667
#define MINSTONEDTIMEOUT 30
#define MINCONNECTTIMEOUT 5
#define MINRECONNECTDELAY 1
#define JOINTRYINTERVAL 60
#define MAXCMDPARAMS 4
#define GOOD_SERVER_DELAY 60
#define CONN_DISABLED 999
typedef struct {
char *nickname;
int got_nick;
int getting_nick; /* ...so we could suppress "NICKNAMEINUSE" */
int passok;
int init;
int supress;
int allowconnect;
int allowreply;
int reconnectdelay; /* Time before next try to connection. */
int autojoindone; /* Joined cfg.channels once ? */
char *awaymsg; /* Current away-message, NULL is not away. */
int awaystate; /* User-set away-message. */
int good_server; /* This server is recognized as "good". */
#ifdef UPTIME
time_t startup;
#endif /* ifdef UPTIME */
#ifdef AUTOMODE
int automodes;
#endif /* ifdef AUTOMODE */
char *idhostname; /* ident@host where miau runs from */
int goodhostname; /* -1 if we haven't got hostname containing @ */
} status_type;
#define AWAY 0x01
#define CUSTOM 0x02
typedef struct {
llist_list nicks; /* Defined nicks. */
llist_node *current; /* Current nick. */
int next; /* Nick-status. */
int gen_tries; /* N of tries to generate a nick. */
} nicknames_type;
#define NICK_FIRST 0 /* Try the first nick on the list. */
#define NICK_NEXT 1 /* Try next nick on the list. */
#define NICK_GEN 2 /* Generate a nick. */
typedef struct {
int statelog; /* stdout to log */
#ifdef QUICKLOG
int qloglength;
int autoqlog;
#ifdef QLOGSTAMP
int timestamp; /* Timestamp type in quicklog. */
#endif /* ifdef QLOGSTAMP */
int flushqlog; /* Flush quicklog on fakeconnect() ? */
#endif /* ifdef QUICKLOG */
#ifdef DCCBOUNCE
int dccbounce; /* DCC-bounce */
#endif /* ifdef DCCBOUNCE */
#ifdef AUTOMODE
int automodedelay;
#endif /* ifdef AUTOMODE */
#ifdef INBOX
int inbox;
#endif /* ifdef INBOX */
int listenport;
int floodtimer; /* Sending one message takes n seconds. */
int burstsize; /* We may send up to n messages in a burst. */
int jointries; /* Times to try joining a channel. */
int getnick;
int getnickinterval;
int antiidle;
int nevergiveup;
int jumprestricted;
int stonedtimeout; /* Stoned server -timeout. */
int rejoin;
int connecttimeout; /* Timeout for connect() (s). 0 to disable. */
int reconnectdelay; /* Time before next try to connect (s). */
int leave; /* Leave channels at detach. */
int chandiscon; /* What to do with channels at disconnect. */
int maxnicklen; /* Maximum length for nick. */
int maxclients; /* Maximum number of clients connected. */
int usequitmsg; /* Use quit-message as away/leavemsg */
int autoaway; /* Autoaway never/detach/noclients */
#ifdef PRIVLOG
int privlog; /* Write log of _private_ messages. */
#endif /* ifdef PRIVLOG */
char nickfillchar; /* Character to fill nick with. */
#ifdef NEED_LOGGING
char *logsuffix; /* Suffix for global logfiles. */
#endif /* ifdef NEED_LOGGING */
#ifdef DCCBOUNCE
char *dccbindhost;
#endif /* ifdef DCCBOUNCE */
#ifdef NEED_CMDPASSWD
char *cmdpasswd;
#endif /* ifdef NEED_CMDPASSWD */
char *username;
char *realname;
char *password;
char *leavemsg;
char *bind;
char *listenhost;
char *awaymsg;
char *forwardmsg;
int forwardtime;
char *channels;
char *home;
char *usermode; /* User modes. Set on connect. */
int no_identify_capab; /* suppress request of "CAPAB IDENTIFY-*" */
int qlog_no_my_quit; /* suppress QUIT messages for me in quicklog */
char *privmsg_fmt;
int newserv_disconn; /* Disconnect client on connect to server */
} cfg_type;
enum { /* yet another horrible kludge */
NEWSERV_DISCONN_NONE = 0,
NEWSERV_DISCONN_MYINFO = 1,
NEWSERV_DISCONN_ALWAYS = 2
};
typedef struct {
int reply;
int listen;
signed int nickname;
int antiidle;
int forward;
int connect;
int join;
int good_server;
#ifdef AUTOMODE
int automode;
#endif /* ifdef AUTOMODE */
#ifdef PRIVLOG
int privlog;
#endif /* ifdef PRIVLOG */
#ifdef NEED_LOGGING
int logfile_warn;
#endif /* ifdef NEED_LOGGING */
} timer_type;
/* export global stuff */
extern serverlist_type servers;
extern server_info i_server;
extern client_info i_client;
extern client_info i_newclient;
extern connection_type c_server;
/* extern connection_type c_client; */
extern connection_type c_newclient;
extern clientlist_type c_clients;
extern cfg_type cfg;
extern nicknames_type nicknames;
extern status_type status;
extern FILE *inbox;
extern timer_type timers;
extern char *forwardmsg;
extern int forwardmsgsize;
#ifdef PINGSTAT
extern int ping_sent;
extern int ping_got;
#endif /* ifdef PINGSTAT */
extern int error_code;
void get_nick(char *format);
void join_channels(connection_type *client);
void miau_commands(char *command, char *param, connection_type *client);
void set_away(const char *reason);
void clients_left(const char *reason);
void drop_newclient(char *reason);
#endif /* ifndef MIAU_H_ */
syntax highlighted by Code2HTML, v. 0.9.1