- Timestamp:
- 2015-02-20T22:50:54Z (9 years ago)
- Branches:
- master
- Children:
- 0b9daac, 3d45471, 7733b8c
- Parents:
- af359b4
- git-author:
- Indent <please@…> (19-02-15 05:47:20)
- git-committer:
- dequis <dx@…> (20-02-15 22:50:54)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
irc.h
raf359b4 r5ebff60 1 1 /********************************************************************\ 2 2 * BitlBee -- An IRC to other IM-networks gateway * 3 3 * * … … 42 42 #define CTYPES "&#" /* Valid channel name prefixes */ 43 43 44 typedef enum 45 { 44 typedef enum { 46 45 USTATUS_OFFLINE = 0, 47 46 USTATUS_AUTHORIZED = 1, /* Gave the correct server password (PASS). */ … … 61 60 OPER_HACK_REGISTER = 0x200, 62 61 OPER_HACK_ACCOUNT_PASSWORD = 0x400, 63 OPER_HACK_ANY = 0x3700, 64 62 OPER_HACK_ANY = 0x3700, /* To check for them all at once. */ 63 65 64 IRC_UTF8_NICKS = 0x10000, /* Disable ASCII restrictions on buddy nicks. */ 66 65 } irc_status_t; … … 68 67 struct irc_user; 69 68 70 typedef struct irc 71 { 69 typedef struct irc { 72 70 int fd; 73 71 irc_status_t status; … … 80 78 struct irc_user *root; 81 79 struct irc_user *user; 82 80 83 81 char *password; /* HACK: Used to save the user's password, but before 84 82 logging in, this may contain a password we should … … 86 84 87 85 char umode[8]; 88 86 89 87 struct query *queries; 90 88 GSList *file_transfers; 91 89 92 90 GSList *users, *channels; 93 91 struct irc_channel *default_channel; … … 99 97 gint ping_source_id; 100 98 gint login_source_id; /* To slightly delay some events at login time. */ 101 99 102 100 struct otr *otr; /* OTR state and book keeping, used by the OTR plugin. 103 101 TODO: Some mechanism for plugindata. */ 104 102 105 103 struct bee *b; 106 104 } irc_t; 107 105 108 typedef enum 109 { 106 typedef enum { 110 107 /* Replaced with iu->last_channel IRC_USER_PRIVATE = 1, */ 111 108 IRC_USER_AWAY = 2, 112 109 113 110 IRC_USER_OTR_ENCRYPTED = 0x10000, 114 111 IRC_USER_OTR_TRUSTED = 0x20000, 115 112 } irc_user_flags_t; 116 113 117 typedef struct irc_user 118 { 114 typedef struct irc_user { 119 115 irc_t *irc; 120 116 121 117 char *nick; 122 118 char *user; 123 119 char *host; 124 120 char *fullname; 125 121 126 122 /* Nickname in lowercase for case insensitive searches */ 127 123 char *key; 128 124 129 125 irc_user_flags_t flags; 130 126 struct irc_channel *last_channel; 131 127 132 128 GString *pastebuf; /* Paste buffer (combine lines into a multiline msg). */ 133 129 guint pastebuf_timer; 134 130 time_t away_reply_timeout; /* Only send a 301 if this time passed. */ 135 131 136 132 struct bee_user *bu; 137 133 138 134 const struct irc_user_funcs *f; 139 135 } irc_user_t; 140 136 141 struct irc_user_funcs 142 { 143 gboolean (*privmsg)( irc_user_t *iu, const char *msg ); 144 gboolean (*ctcp)( irc_user_t *iu, char * const* ctcp ); 137 struct irc_user_funcs { 138 gboolean (*privmsg)(irc_user_t *iu, const char *msg); 139 gboolean (*ctcp)(irc_user_t *iu, char * const* ctcp); 145 140 }; 146 141 … … 148 143 extern const struct irc_user_funcs irc_user_self_funcs; 149 144 150 typedef enum 151 { 145 typedef enum { 152 146 IRC_CHANNEL_JOINED = 1, /* The user is currently in the channel. */ 153 147 IRC_CHANNEL_TEMP = 2, /* Erase the channel when the user leaves, 154 148 and don't save it. */ 155 149 156 150 /* Hack: Set this flag right before jumping into IM when we expect 157 151 a call to imcb_chat_new(). */ … … 159 153 } irc_channel_flags_t; 160 154 161 typedef struct irc_channel 162 { 155 typedef struct irc_channel { 163 156 irc_t *irc; 164 157 char *name; 165 158 char mode[8]; 166 159 int flags; 167 160 168 161 char *topic; 169 162 char *topic_who; 170 163 time_t topic_time; 171 164 172 165 GSList *users; /* struct irc_channel_user */ 173 166 struct irc_user *last_target; 174 167 struct set *set; 175 168 176 169 GString *pastebuf; /* Paste buffer (combine lines into a multiline msg). */ 177 170 guint pastebuf_timer; 178 171 179 172 const struct irc_channel_funcs *f; 180 173 void *data; 181 174 } irc_channel_t; 182 175 183 struct irc_channel_funcs 184 { 185 gboolean (*privmsg)( irc_channel_t *ic, const char *msg ); 186 gboolean (*join)( irc_channel_t *ic ); 187 gboolean (*part)( irc_channel_t *ic, const char *msg ); 188 gboolean (*topic)( irc_channel_t *ic, const char *new_topic ); 189 gboolean (*invite)( irc_channel_t *ic, irc_user_t *iu ); 190 void (*kick)( irc_channel_t *ic, irc_user_t *iu, const char *msg ); 191 192 gboolean (*_init)( irc_channel_t *ic ); 193 gboolean (*_free)( irc_channel_t *ic ); 176 struct irc_channel_funcs { 177 gboolean (*privmsg)(irc_channel_t *ic, const char *msg); 178 gboolean (*join)(irc_channel_t *ic); 179 gboolean (*part)(irc_channel_t *ic, const char *msg); 180 gboolean (*topic)(irc_channel_t *ic, const char *new_topic); 181 gboolean (*invite)(irc_channel_t *ic, irc_user_t *iu); 182 void (*kick)(irc_channel_t *ic, irc_user_t *iu, const char *msg); 183 184 gboolean (*_init)(irc_channel_t *ic); 185 gboolean (*_free)(irc_channel_t *ic); 194 186 }; 195 187 196 typedef enum 197 { 188 typedef enum { 198 189 IRC_CHANNEL_USER_OP = 1, 199 190 IRC_CHANNEL_USER_HALFOP = 2, … … 202 193 } irc_channel_user_flags_t; 203 194 204 typedef struct irc_channel_user 205 { 195 typedef struct irc_channel_user { 206 196 irc_user_t *iu; 207 197 int flags; 208 198 } irc_channel_user_t; 209 199 210 typedef enum 211 { 200 typedef enum { 212 201 IRC_CC_TYPE_DEFAULT = 0x00001, 213 202 IRC_CC_TYPE_REST = 0x00002, /* Still not implemented. */ … … 219 208 } irc_control_channel_type_t; 220 209 221 struct irc_control_channel 222 { 210 struct irc_control_channel { 223 211 irc_control_channel_type_t type; 224 212 struct bee_group *group; … … 230 218 extern const struct bee_ui_funcs irc_ui_funcs; 231 219 232 typedef enum 233 { 220 typedef enum { 234 221 IRC_CDU_SILENT, 235 222 IRC_CDU_PART, … … 240 227 IRC. The first user is OTR, and I guess at some point we'll get to shape 241 228 this a little bit more as other uses come up. */ 242 typedef struct irc_plugin 243 { 229 typedef struct irc_plugin { 244 230 /* Called at the end of irc_new(). Can be used to add settings, etc. */ 245 gboolean (*irc_new)( irc_t *irc);231 gboolean (*irc_new)(irc_t *irc); 246 232 /* At the end of irc_free(). */ 247 void (*irc_free)( irc_t *irc);248 233 void (*irc_free)(irc_t *irc); 234 249 235 /* Problem with the following two functions is ordering if multiple 250 236 plugins are handling them. Let's keep fixing that problem for 251 237 whenever it becomes important. */ 252 238 253 239 /* Called by bee_irc_user_privmsg_cb(). Return NULL if you want to 254 240 abort sending the msg. */ 255 char* (*filter_msg_out)( irc_user_t *iu, char *msg, int flags);241 char* (*filter_msg_out)(irc_user_t * iu, char *msg, int flags); 256 242 /* Called by bee_irc_user_msg(). Return NULL if you swallowed the 257 243 message and don't want anything to go to the user. */ 258 char* (*filter_msg_in)( irc_user_t *iu, char *msg, int flags);259 244 char* (*filter_msg_in)(irc_user_t * iu, char *msg, int flags); 245 260 246 /* From storage.c functions. Ideally these should not be used 261 247 and instead data should be stored in settings which will get 262 248 saved automatically. Consider these deprecated! */ 263 void (*storage_load)( irc_t *irc);264 void (*storage_save)( irc_t *irc);265 void (*storage_remove)( const char *nick);249 void (*storage_load)(irc_t *irc); 250 void (*storage_save)(irc_t *irc); 251 void (*storage_remove)(const char *nick); 266 252 } irc_plugin_t; 267 253 … … 271 257 extern GSList *irc_connection_list; 272 258 273 irc_t *irc_new( int fd);274 void irc_abort( irc_t *irc, int immed, char *format, ... ) G_GNUC_PRINTF( 3, 4);275 void irc_free( irc_t *irc);276 void irc_setpass 277 278 void irc_process( irc_t *irc);279 char **irc_parse_line( char *line);280 char *irc_build_line( char **cmd);281 282 void irc_write( irc_t *irc, char *format, ... ) G_GNUC_PRINTF( 2, 3);283 void irc_write_all( int now, char *format, ... ) G_GNUC_PRINTF( 2, 3);284 void irc_vawrite( irc_t *irc, char *format, va_list params);285 286 void irc_flush( irc_t *irc);287 void irc_switch_fd( irc_t *irc, int fd);288 void irc_sync( irc_t *irc);289 void irc_desync( irc_t *irc);290 291 int irc_check_login( irc_t *irc);292 293 void irc_umode_set( irc_t *irc, const char *s, gboolean allow_priv);294 295 void register_irc_plugin( const struct irc_plugin *p);259 irc_t *irc_new(int fd); 260 void irc_abort(irc_t *irc, int immed, char *format, ...) G_GNUC_PRINTF(3, 4); 261 void irc_free(irc_t *irc); 262 void irc_setpass(irc_t *irc, const char *pass); 263 264 void irc_process(irc_t *irc); 265 char **irc_parse_line(char *line); 266 char *irc_build_line(char **cmd); 267 268 void irc_write(irc_t *irc, char *format, ...) G_GNUC_PRINTF(2, 3); 269 void irc_write_all(int now, char *format, ...) G_GNUC_PRINTF(2, 3); 270 void irc_vawrite(irc_t *irc, char *format, va_list params); 271 272 void irc_flush(irc_t *irc); 273 void irc_switch_fd(irc_t *irc, int fd); 274 void irc_sync(irc_t *irc); 275 void irc_desync(irc_t *irc); 276 277 int irc_check_login(irc_t *irc); 278 279 void irc_umode_set(irc_t *irc, const char *s, gboolean allow_priv); 280 281 void register_irc_plugin(const struct irc_plugin *p); 296 282 297 283 /* irc_channel.c */ 298 irc_channel_t *irc_channel_new( irc_t *irc, const char *name);299 irc_channel_t *irc_channel_by_name( irc_t *irc, const char *name);300 irc_channel_t *irc_channel_get( irc_t *irc, char *id);301 int irc_channel_free( irc_channel_t *ic);302 void irc_channel_free_soon( irc_channel_t *ic);303 int irc_channel_add_user( irc_channel_t *ic, irc_user_t *iu);304 int irc_channel_del_user( irc_channel_t *ic, irc_user_t *iu, irc_channel_del_user_type_t type, const char *msg);305 irc_channel_user_t *irc_channel_has_user( irc_channel_t *ic, irc_user_t *iu);306 struct irc_channel *irc_channel_with_user( irc_t *irc, irc_user_t *iu);307 int irc_channel_set_topic( irc_channel_t *ic, const char *topic, const irc_user_t *who);308 void irc_channel_user_set_mode( irc_channel_t *ic, irc_user_t *iu, irc_channel_user_flags_t flags);309 void irc_channel_set_mode( irc_channel_t *ic, const char *s);310 void irc_channel_auto_joins( irc_t *irc, struct account *acc);311 void irc_channel_printf( irc_channel_t *ic, char *format, ...);312 gboolean irc_channel_name_ok( const char *name);313 void irc_channel_name_strip( char *name);314 int irc_channel_name_cmp( const char *a_, const char *b_);315 void irc_channel_update_ops( irc_channel_t *ic, char *value);316 char *set_eval_irc_channel_ops( struct set *set, char *value);317 gboolean irc_channel_wants_user( irc_channel_t *ic, irc_user_t *iu);284 irc_channel_t *irc_channel_new(irc_t *irc, const char *name); 285 irc_channel_t *irc_channel_by_name(irc_t *irc, const char *name); 286 irc_channel_t *irc_channel_get(irc_t *irc, char *id); 287 int irc_channel_free(irc_channel_t *ic); 288 void irc_channel_free_soon(irc_channel_t *ic); 289 int irc_channel_add_user(irc_channel_t *ic, irc_user_t *iu); 290 int irc_channel_del_user(irc_channel_t *ic, irc_user_t *iu, irc_channel_del_user_type_t type, const char *msg); 291 irc_channel_user_t *irc_channel_has_user(irc_channel_t *ic, irc_user_t *iu); 292 struct irc_channel *irc_channel_with_user(irc_t *irc, irc_user_t *iu); 293 int irc_channel_set_topic(irc_channel_t *ic, const char *topic, const irc_user_t *who); 294 void irc_channel_user_set_mode(irc_channel_t *ic, irc_user_t *iu, irc_channel_user_flags_t flags); 295 void irc_channel_set_mode(irc_channel_t *ic, const char *s); 296 void irc_channel_auto_joins(irc_t *irc, struct account *acc); 297 void irc_channel_printf(irc_channel_t *ic, char *format, ...); 298 gboolean irc_channel_name_ok(const char *name); 299 void irc_channel_name_strip(char *name); 300 int irc_channel_name_cmp(const char *a_, const char *b_); 301 void irc_channel_update_ops(irc_channel_t *ic, char *value); 302 char *set_eval_irc_channel_ops(struct set *set, char *value); 303 gboolean irc_channel_wants_user(irc_channel_t *ic, irc_user_t *iu); 318 304 319 305 /* irc_commands.c */ 320 void irc_exec( irc_t *irc, char **cmd);306 void irc_exec(irc_t *irc, char **cmd); 321 307 322 308 /* irc_send.c */ 323 void irc_send_num( irc_t *irc, int code, char *format, ... ) G_GNUC_PRINTF( 3, 4);324 void irc_send_login( irc_t *irc);325 void irc_send_motd( irc_t *irc);326 const char *irc_user_msgdest( irc_user_t *iu);327 void irc_rootmsg( irc_t *irc, char *format, ...);328 void irc_usermsg( irc_user_t *iu, char *format, ...);329 void irc_usernotice( irc_user_t *iu, char *format, ...);330 void irc_send_join( irc_channel_t *ic, irc_user_t *iu);331 void irc_send_part( irc_channel_t *ic, irc_user_t *iu, const char *reason);332 void irc_send_quit( irc_user_t *iu, const char *reason);333 void irc_send_kick( irc_channel_t *ic, irc_user_t *iu, irc_user_t *kicker, const char *reason);334 void irc_send_names( irc_channel_t *ic);335 void irc_send_topic( irc_channel_t *ic, gboolean topic_change);336 void irc_send_whois( irc_user_t *iu);337 void irc_send_who( irc_t *irc, GSList *l, const char *channel);338 void irc_send_msg( irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *prefix);339 void irc_send_msg_raw( irc_user_t *iu, const char *type, const char *dst, const char *msg);340 void irc_send_msg_f( irc_user_t *iu, const char *type, const char *dst, const char *format, ... ) G_GNUC_PRINTF( 4, 5);341 void irc_send_nick( irc_user_t *iu, const char *new_nick);342 void irc_send_channel_user_mode_diff( 343 irc_channel_user_flags_t old_flags, irc_channel_user_flags_t new_flags);344 void irc_send_invite( irc_user_t *iu, irc_channel_t *ic);309 void irc_send_num(irc_t *irc, int code, char *format, ...) G_GNUC_PRINTF(3, 4); 310 void irc_send_login(irc_t *irc); 311 void irc_send_motd(irc_t *irc); 312 const char *irc_user_msgdest(irc_user_t *iu); 313 void irc_rootmsg(irc_t *irc, char *format, ...); 314 void irc_usermsg(irc_user_t *iu, char *format, ...); 315 void irc_usernotice(irc_user_t *iu, char *format, ...); 316 void irc_send_join(irc_channel_t *ic, irc_user_t *iu); 317 void irc_send_part(irc_channel_t *ic, irc_user_t *iu, const char *reason); 318 void irc_send_quit(irc_user_t *iu, const char *reason); 319 void irc_send_kick(irc_channel_t *ic, irc_user_t *iu, irc_user_t *kicker, const char *reason); 320 void irc_send_names(irc_channel_t *ic); 321 void irc_send_topic(irc_channel_t *ic, gboolean topic_change); 322 void irc_send_whois(irc_user_t *iu); 323 void irc_send_who(irc_t *irc, GSList *l, const char *channel); 324 void irc_send_msg(irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *prefix); 325 void irc_send_msg_raw(irc_user_t *iu, const char *type, const char *dst, const char *msg); 326 void irc_send_msg_f(irc_user_t *iu, const char *type, const char *dst, const char *format, ...) G_GNUC_PRINTF(4, 5); 327 void irc_send_nick(irc_user_t *iu, const char *new_nick); 328 void irc_send_channel_user_mode_diff(irc_channel_t *ic, irc_user_t *iu, 329 irc_channel_user_flags_t old_flags, irc_channel_user_flags_t new_flags); 330 void irc_send_invite(irc_user_t *iu, irc_channel_t *ic); 345 331 346 332 /* irc_user.c */ 347 irc_user_t *irc_user_new( irc_t *irc, const char *nick);348 int irc_user_free( irc_t *irc, irc_user_t *iu);349 irc_user_t *irc_user_by_name( irc_t *irc, const char *nick);350 int irc_user_set_nick( irc_user_t *iu, const char *new_nick);351 gint irc_user_cmp( gconstpointer a_, gconstpointer b_);352 const char *irc_user_get_away( irc_user_t *iu);353 void irc_user_quit( irc_user_t *iu, const char *msg);333 irc_user_t *irc_user_new(irc_t *irc, const char *nick); 334 int irc_user_free(irc_t *irc, irc_user_t *iu); 335 irc_user_t *irc_user_by_name(irc_t *irc, const char *nick); 336 int irc_user_set_nick(irc_user_t *iu, const char *new_nick); 337 gint irc_user_cmp(gconstpointer a_, gconstpointer b_); 338 const char *irc_user_get_away(irc_user_t *iu); 339 void irc_user_quit(irc_user_t *iu, const char *msg); 354 340 355 341 /* irc_util.c */ 356 char *set_eval_timezone( struct set *set, char *value);357 char *irc_format_timestamp( irc_t *irc, time_t msg_ts);342 char *set_eval_timezone(struct set *set, char *value); 343 char *irc_format_timestamp(irc_t *irc, time_t msg_ts); 358 344 359 345 /* irc_im.c */ 360 void bee_irc_channel_update( irc_t *irc, irc_channel_t *ic, irc_user_t *iu);361 void bee_irc_user_nick_reset( irc_user_t *iu);346 void bee_irc_channel_update(irc_t *irc, irc_channel_t *ic, irc_user_t *iu); 347 void bee_irc_user_nick_reset(irc_user_t *iu); 362 348 363 349 #endif
Note: See TracChangeset
for help on using the changeset viewer.