00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CTRLPROXY_STATE_H__
00021 #define __CTRLPROXY_STATE_H__
00022
00023 #include "isupport.h"
00024 #include "log.h"
00025
00026 typedef gboolean irc_modes_t[255];
00027
00033 struct irc_network;
00034 struct irc_client;
00035 struct irc_line;
00036
00037
00038
00039
00043 struct channel_nick {
00044 irc_modes_t modes;
00045 struct network_nick *global_nick;
00046 struct irc_channel_state *channel;
00047
00048
00049 time_t last_update;
00050 char *last_flags;
00051 };
00052
00053 struct network_nick {
00054
00055 gboolean query;
00056 char *nick;
00057 char *fullname;
00058 char *username;
00059 char *hostname;
00060 char *hostmask;
00061 irc_modes_t modes;
00062 char *server;
00063 GList *channel_nicks;
00064
00065 int hops;
00066 };
00067
00071 struct banlist_entry {
00072 char *hostmask;
00073 char *by;
00074 time_t time_set;
00075 };
00076
00080 struct irc_channel_state {
00081 char *name;
00082 char *key;
00083 char *topic;
00084 time_t topic_set_time;
00085 char *topic_set_by;
00086 char mode;
00087 irc_modes_t modes;
00088 time_t creation_time;
00089 gboolean namreply_started;
00090 gboolean banlist_started;
00091 gboolean invitelist_started;
00092 gboolean exceptlist_started;
00093 gboolean mode_received;
00094 int limit;
00095 GList *nicks;
00096 GList *banlist;
00097 GList *invitelist;
00098 GList *exceptlist;
00099 struct irc_network_state *network;
00100 };
00101
00105 struct irc_network_state
00106 {
00108 void *userdata;
00110 void (*log) (enum log_level l,
00111 void *userdata,
00112 const char *msg);
00114 GList *channels;
00116 GList *nicks;
00118 struct network_nick me;
00120 struct irc_network_info *info;
00122 gboolean is_away;
00123 };
00124
00125
00126 G_GNUC_MALLOC G_MODULE_EXPORT struct irc_network_state *network_state_init(const char *nick, const char *username, const char *hostname);
00127 G_MODULE_EXPORT void free_network_state(struct irc_network_state *);
00128 G_MODULE_EXPORT gboolean state_handle_data(struct irc_network_state *s, const struct irc_line *l);
00129
00130 G_MODULE_EXPORT struct irc_channel_state *find_channel(struct irc_network_state *st, const char *name);
00131 G_MODULE_EXPORT struct channel_nick *find_channel_nick(struct irc_channel_state *c, const char *name);
00132 G_MODULE_EXPORT struct channel_nick *find_channel_nick_hostmask(struct irc_channel_state *c, const char *hostmask);
00133 G_MODULE_EXPORT struct channel_nick *find_add_channel_nick(struct irc_channel_state *c, const char *name);
00134 G_MODULE_EXPORT struct network_nick *find_network_nick(struct irc_network_state *c, const char *name);
00135 G_MODULE_EXPORT gboolean network_nick_set_hostmask(struct network_nick *n, const char *hm);
00136 G_MODULE_EXPORT gboolean client_send_state(struct irc_client *, struct irc_network_state *);
00137 G_MODULE_EXPORT void network_state_log(enum log_level l, const struct irc_network_state *st, const char *fmt, ...);
00138 G_MODULE_EXPORT void network_state_set_log_fn(struct irc_network_state *st, void (*fn) (enum log_level, void *, const char *), void *userdata);
00139
00140 G_MODULE_EXPORT G_GNUC_MALLOC char *mode2string(irc_modes_t modes);
00141 G_MODULE_EXPORT void string2mode(char *modestring, irc_modes_t modes);
00142 G_MODULE_EXPORT gboolean modes_change_mode(irc_modes_t modes, gboolean set, char newmode);
00143 #define modes_set_mode(modes, newmode) modes_change_mode(modes, TRUE, newmode)
00144 #define modes_unset_mode(modes, newmode) modes_change_mode(modes, FALSE, newmode)
00145 G_MODULE_EXPORT char get_prefix_from_modes(struct irc_network_info *info, irc_modes_t modes);
00146 G_MODULE_EXPORT gboolean is_channel_mode(struct irc_network_info *info, char mode);
00147 G_MODULE_EXPORT gboolean is_user_mode(struct irc_network_info *info, char mode);
00148 G_MODULE_EXPORT char get_mode_by_prefix(char prefix, const struct irc_network_info *n);
00149 G_MODULE_EXPORT char get_prefix_by_mode(char mode, const struct irc_network_info *n);
00150 G_MODULE_EXPORT gboolean is_prefix_mode(const struct irc_network_info *info, char mode);
00151
00152 #endif