- Timestamp:
- 2010-04-01T03:38:50Z (15 years ago)
- Branches:
- master
- Children:
- e63507a
- Parents:
- 81e04e1
- Location:
- protocols
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/bee.h
r81e04e1 rd860a8d 80 80 int bee_user_free( bee_t *bee, struct im_connection *ic, const char *handle ); 81 81 bee_user_t *bee_user_by_handle( bee_t *bee, struct im_connection *ic, const char *handle ); 82 int bee_user_msg( bee_t *bee, bee_user_t *bu, const char *msg, int flags ); 83 84 /* Callbacks from IM modules to core: */ 85 /* Buddy activity */ 86 /* To manipulate the status of a handle. 87 * - flags can be |='d with OPT_* constants. You will need at least: 88 * OPT_LOGGED_IN and OPT_AWAY. 89 * - 'state' and 'message' can be NULL */ 90 G_MODULE_EXPORT void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message ); 91 /* Not implemented yet! */ G_MODULE_EXPORT void imcb_buddy_times( struct im_connection *ic, const char *handle, time_t login, time_t idle ); 92 /* Call when a handle says something. 'flags' and 'sent_at may be just 0. */ 93 G_MODULE_EXPORT void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at ); 82 94 83 95 #endif /* __BEE_H__ */ -
protocols/bee_user.c
r81e04e1 rd860a8d 81 81 return NULL; 82 82 } 83 84 int bee_user_msg( bee_t *bee, bee_user_t *bu, const char *msg, int flags ) 85 { 86 char *buf = NULL; 87 int st; 88 89 if( ( bu->ic->flags & OPT_DOES_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) ) 90 { 91 buf = escape_html( msg ); 92 msg = buf; 93 } 94 95 st = bu->ic->acc->prpl->buddy_msg( bu->ic, bu->handle, msg, flags ); 96 g_free( buf ); 97 98 return st; 99 } 100 101 102 /* IM->UI callbacks */ 103 void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message ) 104 { 105 bee_t *bee = ic->bee; 106 bee_user_t *bu, *old; 107 108 if( !( bu = bee_user_by_handle( bee, ic, handle ) ) ) 109 { 110 if( g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "add" ) == 0 ) 111 { 112 bu = bee_user_new( bee, ic, handle ); 113 } 114 else 115 { 116 if( set_getbool( &ic->bee->set, "debug" ) || g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "ignore" ) != 0 ) 117 { 118 imcb_log( ic, "imcb_buddy_status() for unknown handle %s:", handle ); 119 imcb_log( ic, "flags = %d, state = %s, message = %s", flags, 120 state ? state : "NULL", message ? message : "NULL" ); 121 } 122 123 return; 124 } 125 } 126 127 /* May be nice to give the UI something to compare against. */ 128 old = g_memdup( bu, sizeof( bee_user_t ) ); 129 130 /* TODO(wilmer): OPT_AWAY, or just state == NULL ? */ 131 bu->flags = ( flags & OPT_LOGGED_IN ? BEE_USER_ONLINE : 0 ) | 132 ( flags & OPT_AWAY ? BEE_USER_AWAY : 0 ); 133 bu->status = g_strdup( ( flags & OPT_AWAY ) && state == NULL ? "Away" : state ); 134 bu->status_msg = g_strdup( message ); 135 136 if( bee->ui->user_status ) 137 bee->ui->user_status( bee, bu, old ); 138 139 g_free( old->status_msg ); 140 g_free( old->status ); 141 g_free( old ); 142 #if 0 143 oa = u->away != NULL; 144 oo = u->online; 145 146 g_free( u->away ); 147 g_free( u->status_msg ); 148 u->away = u->status_msg = NULL; 149 150 if( ( flags & OPT_LOGGED_IN ) && !u->online ) 151 { 152 irc_spawn( ic->irc, u ); 153 u->online = 1; 154 } 155 else if( !( flags & OPT_LOGGED_IN ) && u->online ) 156 { 157 struct groupchat *c; 158 159 irc_kill( ic->irc, u ); 160 u->online = 0; 161 162 /* Remove him/her from the groupchats to prevent PART messages after he/she QUIT already */ 163 for( c = ic->groupchats; c; c = c->next ) 164 remove_chat_buddy_silent( c, handle ); 165 } 166 167 if( flags & OPT_AWAY ) 168 { 169 if( state && message ) 170 { 171 u->away = g_strdup_printf( "%s (%s)", state, message ); 172 } 173 else if( state ) 174 { 175 u->away = g_strdup( state ); 176 } 177 else if( message ) 178 { 179 u->away = g_strdup( message ); 180 } 181 else 182 { 183 u->away = g_strdup( "Away" ); 184 } 185 } 186 else 187 { 188 u->status_msg = g_strdup( message ); 189 } 190 191 /* LISPy... */ 192 if( ( set_getbool( &ic->bee->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */ 193 ( u->online ) && /* Don't touch offline people */ 194 ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */ 195 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ 196 { 197 char *from; 198 199 if( set_getbool( &ic->bee->set, "simulate_netsplit" ) ) 200 { 201 from = g_strdup( ic->irc->myhost ); 202 } 203 else 204 { 205 from = g_strdup_printf( "%s!%s@%s", ic->irc->mynick, ic->irc->mynick, 206 ic->irc->myhost ); 207 } 208 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 209 u->away?'-':'+', u->nick ); 210 g_free( from ); 211 } 212 #endif 213 } 214 215 void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at ) 216 { 217 #if 0 218 bee_t *bee = ic->bee; 219 char *wrapped; 220 user_t *u; 221 222 u = user_findhandle( ic, handle ); 223 224 if( !u ) 225 { 226 char *h = set_getstr( &bee->set, "handle_unknown" ); 227 228 if( g_strcasecmp( h, "ignore" ) == 0 ) 229 { 230 if( set_getbool( &bee->set, "debug" ) ) 231 imcb_log( ic, "Ignoring message from unknown handle %s", handle ); 232 233 return; 234 } 235 else if( g_strncasecmp( h, "add", 3 ) == 0 ) 236 { 237 int private = set_getbool( &bee->set, "private" ); 238 239 if( h[3] ) 240 { 241 if( g_strcasecmp( h + 3, "_private" ) == 0 ) 242 private = 1; 243 else if( g_strcasecmp( h + 3, "_channel" ) == 0 ) 244 private = 0; 245 } 246 247 imcb_add_buddy( ic, handle, NULL ); 248 u = user_findhandle( ic, handle ); 249 u->is_private = private; 250 } 251 else 252 { 253 imcb_log( ic, "Message from unknown handle %s:", handle ); 254 u = user_find( irc, irc->mynick ); 255 } 256 } 257 258 if( ( g_strcasecmp( set_getstr( &ic->bee->set, "strip_html" ), "always" ) == 0 ) || 259 ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->bee->set, "strip_html" ) ) ) 260 strip_html( msg ); 261 262 wrapped = word_wrap( msg, 425 ); 263 irc_msgfrom( irc, u->nick, wrapped ); 264 g_free( wrapped ); 265 #endif 266 } -
protocols/nogaim.c
r81e04e1 rd860a8d 546 546 data->handle = g_strdup( handle ); 547 547 query_add( ic->irc, ic, s, imcb_ask_add_cb_yes, imcb_ask_add_cb_no, data ); 548 #endif549 }550 551 void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message )552 {553 bee_t *bee = ic->bee;554 bee_user_t *bu, *old;555 556 if( !( bu = bee_user_by_handle( bee, ic, handle ) ) )557 {558 if( g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "add" ) == 0 )559 {560 bu = bee_user_new( bee, ic, handle );561 }562 else563 {564 if( set_getbool( &ic->bee->set, "debug" ) || g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "ignore" ) != 0 )565 {566 imcb_log( ic, "imcb_buddy_status() for unknown handle %s:", handle );567 imcb_log( ic, "flags = %d, state = %s, message = %s", flags,568 state ? state : "NULL", message ? message : "NULL" );569 }570 571 return;572 }573 }574 575 /* May be nice to give the UI something to compare against. */576 old = g_memdup( bu, sizeof( bee_user_t ) );577 578 /* TODO(wilmer): OPT_AWAY, or just state == NULL ? */579 bu->flags = ( flags & OPT_LOGGED_IN ? BEE_USER_ONLINE : 0 ) |580 ( flags & OPT_AWAY ? BEE_USER_AWAY : 0 );581 bu->status = g_strdup( ( flags & OPT_AWAY ) && state == NULL ? "Away" : state );582 bu->status_msg = g_strdup( message );583 584 if( bee->ui->user_status )585 bee->ui->user_status( bee, bu, old );586 587 g_free( old->status_msg );588 g_free( old->status );589 g_free( old );590 #if 0591 oa = u->away != NULL;592 oo = u->online;593 594 g_free( u->away );595 g_free( u->status_msg );596 u->away = u->status_msg = NULL;597 598 if( ( flags & OPT_LOGGED_IN ) && !u->online )599 {600 irc_spawn( ic->irc, u );601 u->online = 1;602 }603 else if( !( flags & OPT_LOGGED_IN ) && u->online )604 {605 struct groupchat *c;606 607 irc_kill( ic->irc, u );608 u->online = 0;609 610 /* Remove him/her from the groupchats to prevent PART messages after he/she QUIT already */611 for( c = ic->groupchats; c; c = c->next )612 remove_chat_buddy_silent( c, handle );613 }614 615 if( flags & OPT_AWAY )616 {617 if( state && message )618 {619 u->away = g_strdup_printf( "%s (%s)", state, message );620 }621 else if( state )622 {623 u->away = g_strdup( state );624 }625 else if( message )626 {627 u->away = g_strdup( message );628 }629 else630 {631 u->away = g_strdup( "Away" );632 }633 }634 else635 {636 u->status_msg = g_strdup( message );637 }638 639 /* LISPy... */640 if( ( set_getbool( &ic->bee->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */641 ( u->online ) && /* Don't touch offline people */642 ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */643 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */644 {645 char *from;646 647 if( set_getbool( &ic->bee->set, "simulate_netsplit" ) )648 {649 from = g_strdup( ic->irc->myhost );650 }651 else652 {653 from = g_strdup_printf( "%s!%s@%s", ic->irc->mynick, ic->irc->mynick,654 ic->irc->myhost );655 }656 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel,657 u->away?'-':'+', u->nick );658 g_free( from );659 }660 #endif661 }662 663 void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at )664 {665 #if 0666 bee_t *bee = ic->bee;667 char *wrapped;668 user_t *u;669 670 u = user_findhandle( ic, handle );671 672 if( !u )673 {674 char *h = set_getstr( &bee->set, "handle_unknown" );675 676 if( g_strcasecmp( h, "ignore" ) == 0 )677 {678 if( set_getbool( &bee->set, "debug" ) )679 imcb_log( ic, "Ignoring message from unknown handle %s", handle );680 681 return;682 }683 else if( g_strncasecmp( h, "add", 3 ) == 0 )684 {685 int private = set_getbool( &bee->set, "private" );686 687 if( h[3] )688 {689 if( g_strcasecmp( h + 3, "_private" ) == 0 )690 private = 1;691 else if( g_strcasecmp( h + 3, "_channel" ) == 0 )692 private = 0;693 }694 695 imcb_add_buddy( ic, handle, NULL );696 u = user_findhandle( ic, handle );697 u->is_private = private;698 }699 else700 {701 imcb_log( ic, "Message from unknown handle %s:", handle );702 u = user_find( irc, irc->mynick );703 }704 }705 706 if( ( g_strcasecmp( set_getstr( &ic->bee->set, "strip_html" ), "always" ) == 0 ) ||707 ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->bee->set, "strip_html" ) ) )708 strip_html( msg );709 710 wrapped = word_wrap( msg, 425 );711 irc_msgfrom( irc, u->nick, wrapped );712 g_free( wrapped );713 548 #endif 714 549 } … … 1035 870 them all from some wrappers. We'll start to define some down here: */ 1036 871 1037 int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags )1038 {1039 char *buf = NULL;1040 int st;1041 1042 if( ( ic->flags & OPT_DOES_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) )1043 {1044 buf = escape_html( msg );1045 msg = buf;1046 }1047 1048 st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags );1049 g_free( buf );1050 1051 return st;1052 }1053 1054 872 int imc_chat_msg( struct groupchat *c, char *msg, int flags ) 1055 873 { -
protocols/nogaim.h
r81e04e1 rd860a8d 2 2 * BitlBee -- An IRC to other IM-networks gateway * 3 3 * * 4 * Copyright 2002-20 04Wilmer van der Gaast and others *4 * Copyright 2002-2010 Wilmer van der Gaast and others * 5 5 \********************************************************************/ 6 6 … … 286 286 G_MODULE_EXPORT void imcb_buddy_nick_hint( struct im_connection *ic, const char *handle, const char *nick ); 287 287 288 /* Buddy activity */289 /* To manipulate the status of a handle.290 * - flags can be |='d with OPT_* constants. You will need at least:291 * OPT_LOGGED_IN and OPT_AWAY.292 * - 'state' and 'message' can be NULL */293 G_MODULE_EXPORT void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message );294 /* Not implemented yet! */ G_MODULE_EXPORT void imcb_buddy_times( struct im_connection *ic, const char *handle, time_t login, time_t idle );295 /* Call when a handle says something. 'flags' and 'sent_at may be just 0. */296 G_MODULE_EXPORT void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at );297 288 G_MODULE_EXPORT void imcb_buddy_typing( struct im_connection *ic, char *handle, uint32_t flags ); 289 G_MODULE_EXPORT struct bee_user *imcb_buddy_by_handle( struct im_connection *ic, const char *handle ); 298 290 G_MODULE_EXPORT void imcb_clean_handle( struct im_connection *ic, char *handle ); 299 291 … … 320 312 /* Actions, or whatever. */ 321 313 int imc_away_send_update( struct im_connection *ic ); 322 int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags );323 314 int imc_chat_msg( struct groupchat *c, char *msg, int flags ); 324 315
Note: See TracChangeset
for help on using the changeset viewer.