- Timestamp:
- 2010-07-24T21:16:18Z (14 years ago)
- Branches:
- master
- Children:
- f1f7b5e
- Parents:
- ef14a83 (diff), 593971d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
irc.h
ref14a83 r2945c6f 5 5 \********************************************************************/ 6 6 7 /* The big hairy IRCd part of the project*/7 /* The IRC-based UI (for now the only one) */ 8 8 9 9 /* … … 33 33 #define IRC_PING_STRING "PinglBee" 34 34 35 #define UMODES "abisw" 36 #define UMODES_PRIV "Ro" 37 #define CMODES "nt" 38 #define CMODE "t" 39 #define UMODE "s" 40 #define CTYPES "&#" 35 #define UMODES "abisw" /* Allowed umodes (although they mostly do nothing) */ 36 #define UMODES_PRIV "Ro" /* Allowed, but not by user directly */ 37 #define UMODES_KEEP "R" /* Don't allow unsetting using /MODE */ 38 #define CMODES "nt" /* Allowed modes */ 39 #define CMODE "t" /* Default mode */ 40 #define UMODE "s" /* Default mode */ 41 42 #define CTYPES "&#" /* Valid channel name prefixes */ 41 43 42 44 typedef enum … … 48 50 USTATUS_SHUTDOWN = 8 49 51 } irc_status_t; 52 53 struct irc_user; 50 54 51 55 typedef struct irc … … 59 63 GIConv iconv, oconv; 60 64 61 int sentbytes; 62 time_t oldtime; 63 65 struct irc_user *root; 66 struct irc_user *user; 67 68 char *last_root_cmd; /* Either the nickname from which the last root 69 msg came, or the last channel root was talked 70 to. */ 71 72 char *password; /* HACK: Used to save the user's password, but before 73 logging in, this may contain a password we should 74 send to identify after USER/NICK are received. */ 75 76 char umode[8]; 77 78 struct query *queries; 79 GSList *file_transfers; 80 81 GSList *users, *channels; 82 struct irc_channel *default_channel; 83 GHashTable *nick_user_hash; 84 GHashTable *watches; /* See irc_cmd_watch() */ 85 86 gint r_watch_source_id; 87 gint w_watch_source_id; 88 gint ping_source_id; 89 gint login_source_id; /* To slightly delay some events at login time. */ 90 91 struct bee *b; 92 } irc_t; 93 94 typedef enum 95 { 96 /* Replaced with iu->last_channel IRC_USER_PRIVATE = 1, */ 97 IRC_USER_AWAY = 2, 98 } irc_user_flags_t; 99 100 typedef struct irc_user 101 { 102 irc_t *irc; 103 64 104 char *nick; 65 105 char *user; 66 106 char *host; 67 char *realname; 68 char *password; /* HACK: Used to save the user's password, but before 69 logging in, this may contain a password we should 70 send to identify after USER/NICK are received. */ 71 72 char umode[8]; 73 74 char *myhost; 75 char *mynick; 76 77 char *channel; 78 int c_id; 79 80 char is_private; /* Not too nice... */ 81 char *last_target; 82 83 struct query *queries; 84 struct account *accounts; 85 struct chat *chatrooms; 86 87 struct __USER *users; 88 GHashTable *userhash; 89 GHashTable *watches; 90 struct __NICK *nicks; 107 char *fullname; 108 109 /* Nickname in lowercase for case sensitive searches */ 110 char *key; 111 112 irc_user_flags_t flags; 113 struct irc_channel *last_channel; 114 115 GString *pastebuf; /* Paste buffer (combine lines into a multiline msg). */ 116 guint pastebuf_timer; 117 time_t away_reply_timeout; /* Only send a 301 if this time passed. */ 118 119 struct bee_user *bu; 120 121 const struct irc_user_funcs *f; 122 } irc_user_t; 123 124 struct irc_user_funcs 125 { 126 gboolean (*privmsg)( irc_user_t *iu, const char *msg ); 127 gboolean (*ctcp)( irc_user_t *iu, char * const* ctcp ); 128 }; 129 130 extern const struct irc_user_funcs irc_user_root_funcs; 131 extern const struct irc_user_funcs irc_user_self_funcs; 132 133 typedef enum 134 { 135 IRC_CHANNEL_JOINED = 1, /* The user is currently in the channel. */ 136 IRC_CHANNEL_TEMP = 2, /* Erase the channel when the user leaves, 137 and don't save it. */ 138 139 /* Hack: Set this flag right before jumping into IM when we expect 140 a call to imcb_chat_new(). */ 141 IRC_CHANNEL_CHAT_PICKME = 0x10000, 142 } irc_channel_flags_t; 143 144 typedef struct irc_channel 145 { 146 irc_t *irc; 147 char *name; 148 char mode[8]; 149 int flags; 150 151 char *topic; 152 char *topic_who; 153 time_t topic_time; 154 155 GSList *users; /* struct irc_channel_user */ 91 156 struct set *set; 92 93 gint r_watch_source_id; 94 gint w_watch_source_id; 95 gint ping_source_id; 96 } irc_t; 97 98 #include "user.h" 99 157 158 GString *pastebuf; /* Paste buffer (combine lines into a multiline msg). */ 159 guint pastebuf_timer; 160 161 const struct irc_channel_funcs *f; 162 void *data; 163 } irc_channel_t; 164 165 struct irc_channel_funcs 166 { 167 gboolean (*privmsg)( irc_channel_t *ic, const char *msg ); 168 gboolean (*join)( irc_channel_t *ic ); 169 gboolean (*part)( irc_channel_t *ic, const char *msg ); 170 gboolean (*topic)( irc_channel_t *ic, const char *new ); 171 gboolean (*invite)( irc_channel_t *ic, irc_user_t *iu ); 172 173 gboolean (*_init)( irc_channel_t *ic ); 174 gboolean (*_free)( irc_channel_t *ic ); 175 }; 176 177 typedef enum 178 { 179 IRC_CHANNEL_USER_OP = 1, 180 IRC_CHANNEL_USER_HALFOP = 2, 181 IRC_CHANNEL_USER_VOICE = 4, 182 IRC_CHANNEL_USER_NONE = 8, 183 } irc_channel_user_flags_t; 184 185 typedef struct irc_channel_user 186 { 187 irc_user_t *iu; 188 int flags; 189 } irc_channel_user_t; 190 191 typedef enum 192 { 193 IRC_CC_TYPE_DEFAULT, 194 IRC_CC_TYPE_REST, 195 IRC_CC_TYPE_GROUP, 196 IRC_CC_TYPE_ACCOUNT, 197 IRC_CC_TYPE_PROTOCOL, 198 } irc_control_channel_type_t; 199 200 struct irc_control_channel 201 { 202 irc_control_channel_type_t type; 203 struct bee_group *group; 204 struct account *account; 205 struct prpl *protocol; 206 char modes[4]; 207 }; 208 209 extern const struct bee_ui_funcs irc_ui_funcs; 210 211 typedef enum 212 { 213 IRC_CDU_SILENT, 214 IRC_CDU_PART, 215 IRC_CDU_KICK, 216 } irc_channel_del_user_type_t; 217 218 /* irc.c */ 100 219 extern GSList *irc_connection_list; 101 220 … … 103 222 void irc_abort( irc_t *irc, int immed, char *format, ... ) G_GNUC_PRINTF( 3, 4 ); 104 223 void irc_free( irc_t *irc ); 105 106 void irc_exec( irc_t *irc, char **cmd ); 224 void irc_setpass (irc_t *irc, const char *pass); 225 107 226 void irc_process( irc_t *irc ); 108 227 char **irc_parse_line( char *line ); 109 228 char *irc_build_line( char **cmd ); 110 229 111 void irc_vawrite( irc_t *irc, char *format, va_list params );112 230 void irc_write( irc_t *irc, char *format, ... ) G_GNUC_PRINTF( 2, 3 ); 113 231 void irc_write_all( int now, char *format, ... ) G_GNUC_PRINTF( 2, 3 ); 114 void irc_reply( irc_t *irc, int code, char *format, ... ) G_GNUC_PRINTF( 3, 4 ); 115 G_MODULE_EXPORT int irc_usermsg( irc_t *irc, char *format, ... ) G_GNUC_PRINTF( 2, 3 ); 116 char **irc_tokenize( char *buffer ); 117 118 void irc_login( irc_t *irc ); 232 void irc_vawrite( irc_t *irc, char *format, va_list params ); 233 234 void irc_flush( irc_t *irc ); 235 void irc_switch_fd( irc_t *irc, int fd ); 236 void irc_sync( irc_t *irc ); 237 void irc_desync( irc_t *irc ); 238 119 239 int irc_check_login( irc_t *irc ); 120 void irc_motd( irc_t *irc ); 121 void irc_names( irc_t *irc, char *channel ); 122 void irc_topic( irc_t *irc, char *channel ); 123 void irc_umode_set( irc_t *irc, char *s, int allow_priv ); 124 void irc_who( irc_t *irc, char *channel ); 125 void irc_spawn( irc_t *irc, user_t *u ); 126 void irc_join( irc_t *irc, user_t *u, char *channel ); 127 void irc_part( irc_t *irc, user_t *u, char *channel ); 128 void irc_kick( irc_t *irc, user_t *u, char *channel, user_t *kicker ); 129 void irc_kill( irc_t *irc, user_t *u ); 130 void irc_invite( irc_t *irc, char *nick, char *channel ); 131 void irc_whois( irc_t *irc, char *nick ); 132 void irc_setpass( irc_t *irc, const char *pass ); /* USE WITH CAUTION! */ 133 134 int irc_send( irc_t *irc, char *nick, char *s, int flags ); 135 int irc_privmsg( irc_t *irc, user_t *u, char *type, char *to, char *prefix, char *msg ); 136 int irc_msgfrom( irc_t *irc, char *nick, char *msg ); 137 int irc_noticefrom( irc_t *irc, char *nick, char *msg ); 138 139 void buddy_send_handler( irc_t *irc, user_t *u, char *msg, int flags ); 140 struct groupchat *irc_chat_by_channel( irc_t *irc, char *channel ); 240 241 void irc_umode_set( irc_t *irc, const char *s, gboolean allow_priv ); 242 243 /* irc_channel.c */ 244 irc_channel_t *irc_channel_new( irc_t *irc, const char *name ); 245 irc_channel_t *irc_channel_by_name( irc_t *irc, const char *name ); 246 irc_channel_t *irc_channel_get( irc_t *irc, char *id ); 247 int irc_channel_free( irc_channel_t *ic ); 248 void irc_channel_free_soon( irc_channel_t *ic ); 249 int irc_channel_add_user( irc_channel_t *ic, irc_user_t *iu ); 250 int irc_channel_del_user( irc_channel_t *ic, irc_user_t *iu, irc_channel_del_user_type_t type, const char *msg ); 251 irc_channel_user_t *irc_channel_has_user( irc_channel_t *ic, irc_user_t *iu ); 252 int irc_channel_set_topic( irc_channel_t *ic, const char *topic, const irc_user_t *who ); 253 void irc_channel_user_set_mode( irc_channel_t *ic, irc_user_t *iu, irc_channel_user_flags_t flags ); 254 void irc_channel_auto_joins( irc_t *irc, struct account *acc ); 255 void irc_channel_printf( irc_channel_t *ic, char *format, ... ); 256 gboolean irc_channel_name_ok( const char *name ); 257 void irc_channel_name_strip( char *name ); 258 int irc_channel_name_cmp( const char *a_, const char *b_ ); 259 void irc_channel_update_ops( irc_channel_t *ic, char *value ); 260 char *set_eval_irc_channel_ops( struct set *set, char *value ); 261 262 /* irc_commands.c */ 263 void irc_exec( irc_t *irc, char **cmd ); 264 265 /* irc_send.c */ 266 void irc_send_num( irc_t *irc, int code, char *format, ... ) G_GNUC_PRINTF( 3, 4 ); 267 void irc_send_login( irc_t *irc ); 268 void irc_send_motd( irc_t *irc ); 269 void irc_usermsg( irc_t *irc, char *format, ... ); 270 void irc_send_join( irc_channel_t *ic, irc_user_t *iu ); 271 void irc_send_part( irc_channel_t *ic, irc_user_t *iu, const char *reason ); 272 void irc_send_quit( irc_user_t *iu, const char *reason ); 273 void irc_send_kick( irc_channel_t *ic, irc_user_t *iu, irc_user_t *kicker, const char *reason ); 274 void irc_send_names( irc_channel_t *ic ); 275 void irc_send_topic( irc_channel_t *ic, gboolean topic_change ); 276 void irc_send_whois( irc_user_t *iu ); 277 void irc_send_who( irc_t *irc, GSList *l, const char *channel ); 278 void irc_send_msg( irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *prefix ); 279 void irc_send_msg_raw( irc_user_t *iu, const char *type, const char *dst, const char *msg ); 280 void irc_send_msg_f( irc_user_t *iu, const char *type, const char *dst, const char *format, ... ) G_GNUC_PRINTF( 4, 5 ); 281 void irc_send_nick( irc_user_t *iu, const char *new ); 282 void irc_send_channel_user_mode_diff( irc_channel_t *ic, irc_user_t *iu, 283 irc_channel_user_flags_t old, irc_channel_user_flags_t new ); 284 285 /* irc_user.c */ 286 irc_user_t *irc_user_new( irc_t *irc, const char *nick ); 287 int irc_user_free( irc_t *irc, irc_user_t *iu ); 288 irc_user_t *irc_user_by_name( irc_t *irc, const char *nick ); 289 int irc_user_set_nick( irc_user_t *iu, const char *new ); 290 gint irc_user_cmp( gconstpointer a_, gconstpointer b_ ); 291 const char *irc_user_get_away( irc_user_t *iu ); 292 void irc_user_quit( irc_user_t *iu, const char *msg ); 293 294 /* irc_util.c */ 295 char *set_eval_timezone( struct set *set, char *value ); 296 char *irc_format_timestamp( irc_t *irc, time_t msg_ts ); 297 298 /* irc_im.c */ 299 void bee_irc_channel_update( irc_t *irc, irc_channel_t *ic, irc_user_t *iu ); 141 300 142 301 #endif
Note: See TracChangeset
for help on using the changeset viewer.