irssi/src/irc/bot/botnet.h
Timo Sirainen 1fd6f8faf6 more changes from int xx:1 to unsigned int xx:1
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@861 dbcabf3a-b0e7-0310-adc4-f8d773084564
2000-11-23 22:57:59 +00:00

135 lines
3.4 KiB
C

#ifndef __BOT_BOTNET_H
#define __BOT_BOTNET_H
#include "nicklist.h"
#define DEFAULT_BOTNET_PORT 2255
#define DEFAULT_BOTNET_PRIORITY 5
typedef struct _botnet_rec BOTNET_REC;
typedef struct {
char *name;
GSList *nicks; /* NICK_RECs */
unsigned int chanop:1;
GSList *banlist;
GSList *ebanlist;
GSList *invitelist;
char *mode;
int limit;
char *key;
} BOT_CHANNEL_REC;
typedef struct {
char *tag; /* same as server->tag */
char *ircnet;
char *server;
char *nick;
GSList *channels;
} BOT_IRCNET_REC;
typedef struct {
BOTNET_REC *botnet;
void *link; /* NULL, BOT_UPLINK_REC or BOT_DOWNLINK_REC */
unsigned int uplink:1; /* this is our uplink */
unsigned int pass_ok:1; /* downlink's password was ok */
unsigned int connected:1; /* bot is in this botnet now */
unsigned int disconnect:1; /* just disconnecting this bot.. */
unsigned int master:1; /* this bot is the bot network's current master */
char *nick; /* bot's unique nick in botnet */
int priority;
int handle;
int read_tag;
void *buffer;
int file_handle; /* if bot is sending a file to us */
GSList *ircnets;
} BOT_REC;
typedef struct {
BOTNET_REC *botnet;
char *host;
int port;
char *password;
time_t last_connect;
} BOT_UPLINK_REC;
typedef struct {
BOTNET_REC *botnet;
GSList *valid_addrs; /* IP/host masks where this bot is allowed to connect */
char *password;
} BOT_DOWNLINK_REC;
struct _botnet_rec {
unsigned int connected:1;
unsigned int autoconnect:1;
unsigned int reconnect:1;
char *name; /* botnet name */
char *nick; /* our nick in botnet */
int priority; /* our priority in botnet */
char *addr; /* in what address we should listen, NULL = all */
int port; /* what port we should listen, 0 = default, -1 = don't listen */
int listen_handle;
int listen_tag;
GSList *uplinks;
GSList *downlinks;
GNode *bots;
BOT_REC *uplink; /* our current uplink */
BOT_REC *master; /* link to current master */
};
extern GSList *botnets;
void bot_send_cmd(BOT_REC *bot, const char *data);
void bot_send_cmdv(BOT_REC *bot, const char *format, ...);
/* broadcast a message to everyone in bot network, except for `except_bot'
if it's not NULL. If botnet is NULL, the message is sent to all botnets. */
void botnet_broadcast(BOTNET_REC *botnet, BOT_REC *except_bot,
const char *source, const char *data);
void botnet_send_cmd(BOTNET_REC *botnet, const char *source,
const char *target, const char *data);
int botnet_send_file(BOTNET_REC *botnet, const char *target, const char *fname);
BOT_REC *botnet_find_master(BOTNET_REC *botnet, BOT_REC *old_master);
void botnet_set_master(BOTNET_REC *botnet, BOT_REC *bot);
BOTNET_REC *botnet_find(const char *name);
GNode *bot_find_nick(BOTNET_REC *botnet, const char *nick);
/* Return the bot who we should send the message if we wanted `nick' to get it. */
GNode *bot_find_path(BOTNET_REC *botnet, const char *nick);
BOT_DOWNLINK_REC *bot_downlink_find(BOTNET_REC *botnet, IPADDR *ip, const char *host);
void bot_nick_destroy(BOT_CHANNEL_REC *rec, NICK_REC *nick);
void bot_channel_destroy(BOT_IRCNET_REC *ircnet, BOT_CHANNEL_REC *rec);
void bot_ircnet_destroy(BOT_REC *bot, BOT_IRCNET_REC *rec);
void bot_disconnect(BOT_REC *bot);
void bot_destroy(BOT_REC *bot);
void bot_downlink_destroy(BOT_DOWNLINK_REC *rec);
void bot_uplink_destroy(BOT_UPLINK_REC *rec);
void botnet_connect(BOTNET_REC *botnet);
void botnet_disconnect(BOTNET_REC *botnet);
#endif