Changes in / [9c8ae50:cc9079e]
- Files:
-
- 11 added
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
.bzrignore
r9c8ae50 rcc9079e 11 11 *.aps 12 12 *.clw 13 user-guide.txt14 user-guide.html15 help.txt16 13 debian 17 build-arch-stamp18 14 tags -
bitlbee.c
r9c8ae50 rcc9079e 539 539 } 540 540 541 irc_usermsg( irc, "Unknown command: %s. Please use \x02help commands\x02to get a list of available commands.", cmd[0] );541 irc_usermsg( irc, "Unknown command: %s. Please use help commands to get a list of available commands.", cmd[0] ); 542 542 543 543 return( 1 ); -
bitlbee.conf
r9c8ae50 rcc9079e 13 13 ## stable enough to serve lots of users from one process. Because of this 14 14 ## and other reasons, the use of daemon-mode is *STRONGLY* discouraged, 15 ## don't even *think* of reporting bugs when you use this.15 ## don't think about reporting bugs when you use this! 16 16 ## 17 17 # RunMode = Inetd -
bitlbee.h
r9c8ae50 rcc9079e 81 81 82 82 #define ROOT_NICK "root" 83 #define ROOT_CHAN " &bitlbee"83 #define ROOT_CHAN "#bitlbee" 84 84 #define ROOT_FN "User manager" 85 85 -
commands.c
r9c8ae50 rcc9079e 326 326 else 327 327 { 328 irc_usermsg( irc, "Unknown command: account %s. Please use \x02help commands\x02to get a list of available commands.", cmd[1] );328 irc_usermsg( irc, "Unknown command: account %s. Please use help commands to get a list of available commands.", cmd[1] ); 329 329 } 330 330 … … 727 727 728 728 for( num = 0; q; q = q->next, num ++ ) 729 if( q->gc ) /* Not necessary yet, but it might come later */ 730 irc_usermsg( irc, "%d, %s(%s): %s", num, q->gc->prpl->name, q->gc->username, q->question ); 731 else 732 irc_usermsg( irc, "%d, BitlBee: %s", num, q->question ); 729 irc_usermsg( irc, "%d, %s", num, q->question ); 733 730 734 731 return( 0 ); -
doc/CHANGES
r9c8ae50 rcc9079e 2 2 - Removed some crashy debugging code. 3 3 - QUIT command now works before logging in. (Mainly an RFC-compliancy fix.) 4 - Hopefully slightly clearer handling of buddy add requests.5 - set buddy_sendbuffer_delay now also supports milisecond precision.6 - Renamed #bitlbee to &bitlbee to avoid confusion with the channel on OFTC.7 - Reviewed the xinetd file and installation instructions.8 - HTML stripping is configurable again.9 - Quit messages (at least on crashes) should appear again.10 4 11 5 Finished ... -
doc/FAQ
r9c8ae50 rcc9079e 38 38 artistic creativity. 39 39 40 Q: Why is there no mailing list/CVS/<insert your favourite development tool 41 here>? 42 A: Short answer: we don't need it. 43 44 Longer answer: and we're not completely convinced of their merits. 45 46 Long answer: we currently use some shell scripts which make sure all 47 developers' copies are in sync with Wilmer's master copy. These shell 48 scripts also produce development "releases" and packages, as well as 49 stick them on a http-server. Patches are sent to Wilmer who decides 50 whether or not a patch should be applied and if it may need some 51 additional changes. This has the consistency advantage of a one-person 52 project while having the capacity of more people available. The system 53 works and we are kind of attached to it. 54 40 55 Q: When is $random_feature going to be implemented? 41 56 A: Please do consult doc/TODO (preferably in a development snapshot, which -
doc/README
r9c8ae50 rcc9079e 9 9 make install will move all the files to the right places. 10 10 11 --- inetd installation12 13 11 After installation you have to set up inetd (you got that one running, 14 12 right? If not, just take a look at utils/bitlbeed.c) to start BitlBee. You … … 20 18 of just 'nobody') might be a good idea. 21 19 22 *BSD/Darwin/OSX NOTE: Most *BSD inetds are more scrict than the one that23 comes with Linux systems. Possibly all non-Linux inetds are like this. They24 don't allow you to specify a port number in the inetd.conf entry, instead25 you have to put a service name there (one that is also mentioned in26 /etc/services). So if there's no line in /services for 6667/tcp (or whatever27 you choose), add it and use that name in the inetd.conf entry.28 29 -- xinetd installation30 31 Most machines use xinetd instead of inetd these days. If your machine runs32 xinetd, you can copy the bitlbee.xinetd file from the doc/ directory to your33 xinetd.d/ directory. Most likely you'll have to change a thing or two before34 it'll work.35 36 After configuring your (x)inetd, send the daemon a SIGHUP and things should37 work. If not, see your syslogs, since both daemons will complain there when38 something's wrong.39 40 20 Also, don't forget to create the configuration directory (/var/lib/bitlbee/ 41 21 by default) and chown it to the UID BitlBee is running as. Make sure this 42 22 directory is read-/writable by this user only. 23 24 (For xinetd users a xinetd configuration file is included: doc/bitlbee.xinetd) 43 25 44 26 … … 66 48 ================== 67 49 50 FreeBSD NOTE: It looks like FreeBSD does allow port numbers instead of service 51 names in inetd.conf, as long as the service for this port exists in 52 /etc/services. Linux isn't this strict. If you got problems in FreeBSD, just 53 add a line for your chosen port number to /etc/services. 54 55 Darwin/Mac OS X is even more strict; you should add a bitlbee service to 56 /etc/services and use that name in inetd.conf. Not really a problem, since 57 that's the cleanest way of doing this on any operating system anyway. 58 68 59 Cygwin NOTE: You'll need a glib installation to run BitlBee. However, Cygwin 69 60 doesn't provide a glib package. You can download a binary tar.gz from: … … 75 66 Please do report them, we might be able to fix them if they're not too 76 67 mysterious. 77 78 Also, the configure script is known to not work very well with non-Bash79 shells, so if you experience problems, make sure you use bash to run the80 script. Same for the Makefile, it only works well with GNU make. (gmake on81 most BSD systems)82 83 If someone can tell us how to write Makefiles that work with both/all84 versions of make, we'd love to hear it, but it seems this just isn't85 possible.86 68 87 69 -
doc/bitlbee.xinetd
r9c8ae50 rcc9079e 2 2 ## user, port and/or binary location might be wrong. 3 3 4 ## This file assumes you have ircd somewhere in your /etc/services, if things 5 ## don't work, check that file first. 6 service ircd 4 service 6667 7 5 { 8 6 socket_type = stream 9 7 protocol = tcp 10 8 wait = no 11 12 ## You most likely want to change these two13 9 user = nobody 14 10 server = /usr/local/sbin/bitlbee 15 16 ## xinetd is fucking retarded, what's the use of this port flag if 17 ## it HAS to be the same as in /etc/services ? 18 # port = 6667 11 port = 6667 19 12 } -
doc/user-guide/commands.xml
r9c8ae50 rcc9079e 303 303 </bitlbee-setting> 304 304 305 <bitlbee-setting name="strip_html" type="boolean"> 306 <default>True</default> 307 308 <description> 309 <para> 310 Determines what BitlBee should do with HTML in messages. Normally this is turned on and HTML will be stripped from messages, if BitlBee thinks there is HTML. 311 </para> 312 <para> 313 If BitlBee fails to detect this sometimes (most likely in AIM messages over an ICQ connection), you can set this setting to <emphasis>always</emphasis>, but this might sometimes accidentally strip non-HTML things too. 305 <bitlbee-setting name="html" type="string"> 306 <default>nostrip</default> 307 <possible-values>strip, nostrip</possible-values> 308 309 <description> 310 <para> 311 Determines what BitlBee should do with HTML in messages. If set to nostrip, HTML in messages will not be touched. If set to strip, all HTML will be stripped from messages. Unfortunately this sometimes strips too much. 314 312 </para> 315 313 </description> … … 464 462 465 463 <bitlbee-setting name="buddy_sendbuffer_delay" type="integer"> 466 <default>200</default> 467 468 <description> 469 470 <para> 471 Tell BitlBee after how many (mili)seconds a buffered message should be sent. Values greater than 5 will be interpreted as miliseconds, 5 and lower as seconds. 464 <description> 465 466 <para> 467 Tell BitlBee after how many seconds a buffered message should be sent. 472 468 </para> 473 469 -
irc.c
r9c8ae50 rcc9079e 115 115 set_add( irc, "auto_reconnect_delay", "300", set_eval_int ); 116 116 set_add( irc, "buddy_sendbuffer", "false", set_eval_bool ); 117 set_add( irc, "buddy_sendbuffer_delay", " 200", set_eval_int );117 set_add( irc, "buddy_sendbuffer_delay", "1", set_eval_int ); 118 118 set_add( irc, "charset", "iso8859-1", set_eval_charset ); 119 119 set_add( irc, "debug", "false", set_eval_bool ); … … 121 121 set_add( irc, "display_namechanges", "false", set_eval_bool ); 122 122 set_add( irc, "handle_unknown", "root", NULL ); 123 /* set_add( irc, "html", "nostrip", NULL ); */ 123 124 set_add( irc, "lcnicks", "true", set_eval_bool ); 124 125 set_add( irc, "ops", "both", set_eval_ops ); … … 126 127 set_add( irc, "query_order", "lifo", NULL ); 127 128 set_add( irc, "save_on_quit", "true", set_eval_bool ); 128 set_add( irc, "strip_html", "true", NULL );129 129 set_add( irc, "to_char", ": ", set_eval_to_char ); 130 130 set_add( irc, "typing_notice", "false", set_eval_bool ); … … 486 486 irc_reply( irc, 461, "%s :Need more parameters", cmd[0] ); 487 487 } 488 else if( *cmd[1] == '#' || *cmd[1] == '&')488 else if( *cmd[1] == '#' ) 489 489 { 490 490 if( cmd[2] ) … … 557 557 else if( cmd[1] ) 558 558 { 559 if( ( cmd[1][0] == '#' || cmd[1][0] == '&' )&& cmd[1][1] )559 if( cmd[1][0] == '#' && cmd[1][1] ) 560 560 { 561 561 user_t *u = user_find( irc, cmd[1] + 1 ); … … 931 931 } 932 932 933 void irc_write_all( int now,char *format, ... )933 void irc_write_all( char *format, ... ) 934 934 { 935 935 va_list params; 936 936 GSList *temp; 937 937 938 938 va_start( params, format ); 939 939 940 940 temp = irc_connection_list; 941 while( temp != NULL ) 942 { 943 irc_t *irc = temp->data; 944 945 if( now ) 946 { 947 g_free( irc->sendbuffer ); 948 irc->sendbuffer = g_strdup( "\r\n" ); 949 } 941 while( temp!=NULL ) { 950 942 irc_vawrite( temp->data, format, params ); 951 if( now )952 {953 bitlbee_io_current_client_write( irc->io_channel, G_IO_OUT, irc );954 }955 943 temp = temp->next; 956 944 } 957 945 958 946 va_end( params ); 959 947 return; … … 1081 1069 irc_spawn( irc, u ); 1082 1070 1083 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\nIf you've never used BitlBee before, please do read the help information using the \x02help\x02command. Lots of FAQ's are answered there." );1071 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\nIf you've never used BitlBee before, please do read the help information using the help command. Lots of FAQ's are answered there." ); 1084 1072 1085 1073 irc->status = USTATUS_LOGGED_IN; … … 1325 1313 user_t *u = NULL; 1326 1314 1327 if( *nick == '#' || *nick == '&')1315 if( *nick == '#' ) 1328 1316 { 1329 1317 if( !( c = conv_findchannel( nick ) ) ) … … 1440 1428 if( set_getint( irc, "buddy_sendbuffer" ) && set_getint( irc, "buddy_sendbuffer_delay" ) > 0 ) 1441 1429 { 1442 int delay;1443 1444 1430 if( u->sendbuf_len > 0 && u->sendbuf_flags != flags) 1445 1431 { … … 1465 1451 strcat( u->sendbuf, "\n" ); 1466 1452 1467 delay = set_getint( irc, "buddy_sendbuffer_delay" );1468 if( delay <= 5 )1469 delay *= 1000;1470 1471 1453 if( u->sendbuf_timer > 0 ) 1472 1454 g_source_remove( u->sendbuf_timer ); 1473 u->sendbuf_timer = g_timeout_add( delay, buddy_send_handler_delayed, u ); 1455 u->sendbuf_timer = g_timeout_add( set_getint( irc, "buddy_sendbuffer_delay" ) * 1000, 1456 buddy_send_handler_delayed, u ); 1474 1457 1475 1458 return( 1 ); -
irc.h
r9c8ae50 rcc9079e 118 118 void irc_vawrite( irc_t *irc, char *format, va_list params ); 119 119 void irc_write( irc_t *irc, char *format, ... ); 120 void irc_write_all( int now,char *format, ... );120 void irc_write_all( char *format, ... ); 121 121 void irc_reply( irc_t *irc, int code, char *format, ... ); 122 122 G_MODULE_EXPORT int irc_usermsg( irc_t *irc, char *format, ... ); -
log.c
r9c8ae50 rcc9079e 134 134 static void log_irc(int level, char *message) { 135 135 if(level==LOGLVL_ERROR) 136 irc_write_all( 1,"ERROR :Error: %s", message);136 irc_write_all("ERROR :Error: %s", message); 137 137 if(level==LOGLVL_WARNING) 138 irc_write_all( 0,"ERROR :Warning: %s", message);138 irc_write_all("ERROR :Warning: %s", message); 139 139 if(level==LOGLVL_INFO) 140 irc_write_all( 0,"ERROR :Informational: %s", message);140 irc_write_all("ERROR :Informational: %s", message); 141 141 #ifdef DEBUG 142 142 if(level==LOGLVL_DEBUG) 143 irc_write_all( 0,"ERROR :Debug: %s", message);143 irc_write_all("ERROR :Debug: %s", message); 144 144 #endif 145 145 -
protocols/jabber/jabber.c
r9c8ae50 rcc9079e 1123 1123 */ 1124 1124 struct jabber_add_permit *jap = g_new0(struct jabber_add_permit, 1); 1125 gchar *msg = g_strdup_printf(_("The user %s wants to add you to his/her buddy list."),1125 gchar *msg = g_strdup_printf(_("The user %s wants to add you to their buddy list."), 1126 1126 Jid); 1127 1127 -
protocols/msn/msn_util.c
r9c8ae50 rcc9079e 166 166 167 167 g_snprintf( buf, sizeof( buf ), 168 "The user %s (%s) wants to add you to his/her buddy list. ",168 "The user %s (%s) wants to add you to his/her buddy list. Do you want to allow this?", 169 169 handle, realname ); 170 170 do_ask_dialog( gc, buf, bla, msn_buddy_ask_yes, msn_buddy_ask_no ); -
protocols/nogaim.c
r9c8ae50 rcc9079e 184 184 gc->prpl->set_away( gc, s, away ); 185 185 if( set_getint( gc->irc, "debug" ) ) 186 serv_got_crap( gc, "Setting away state to %s", s );186 irc_usermsg( gc->irc, "Setting away state for %s to %s", gc->prpl->name, s ); 187 187 } 188 188 else … … 277 277 void set_login_progress( struct gaim_connection *gc, int step, char *msg ) 278 278 { 279 serv_got_crap( gc, "Logging in: %s", msg );279 irc_usermsg( gc->irc, "%s(%s) - Logging in: %s", gc->prpl->name, gc->username, msg ); 280 280 } 281 281 … … 283 283 void hide_login_progress( struct gaim_connection *gc, char *msg ) 284 284 { 285 serv_got_crap( gc, "Login error: %s", msg );285 irc_usermsg( gc->irc, "%s(%s) - Login error: %s", gc->prpl->name, gc->username, msg ); 286 286 } 287 287 … … 289 289 void hide_login_progress_error( struct gaim_connection *gc, char *msg ) 290 290 { 291 serv_got_crap( gc, "Logged out: %s", msg );291 irc_usermsg( gc->irc, "%s(%s) - Logged out: %s", gc->prpl->name, gc->username, msg ); 292 292 } 293 293 … … 308 308 msg = text; 309 309 310 if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||311 ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ))310 /* if( g_strcasecmp( set_getstr(gc->irc, "html" ), "strip" ) == 0 ) */ 311 if( gc->flags & OPT_CONN_HTML ) 312 312 strip_html( msg ); 313 313 … … 337 337 u = user_find( gc->irc, gc->irc->nick ); 338 338 339 serv_got_crap( gc, "Logged in");339 irc_usermsg( gc->irc, "%s(%s) - Logged in", gc->prpl->name, gc->username ); 340 340 341 341 gc->keepalive = g_timeout_add( 60000, send_keepalive, gc ); … … 351 351 352 352 if( u == NULL ) 353 serv_got_crap( gc, "\x02""***\x02"" BitlBee now supports ICQ server-side contact lists. "353 irc_usermsg( gc->irc, "\x02""***\x02"" BitlBee now supports ICQ server-side contact lists. " 354 354 "See \x02""help import_buddies\x02"" for more information." ); 355 355 } … … 384 384 account_t *a; 385 385 386 serv_got_crap( gc, "Signing off..");386 irc_usermsg( gc->irc, "%s(%s) - Signing off..", gc->prpl->name, gc->username ); 387 387 388 388 gaim_input_remove( gc->keepalive ); … … 416 416 { 417 417 int delay = set_getint( irc, "auto_reconnect_delay" ); 418 serv_got_crap( gc, "Reconnecting in %d seconds..", delay);418 irc_usermsg( gc->irc, "%s(%s) - Reconnecting in %d seconds..", gc->prpl->name, gc->username, delay); 419 419 420 420 a->reconnect = 1; … … 430 430 void do_error_dialog( struct gaim_connection *gc, char *msg, char *title ) 431 431 { 432 serv_got_crap( gc, "Error: %s", msg );432 irc_usermsg( gc->irc, "%s(%s) - Error: %s", gc->prpl->name, gc->username, msg ); 433 433 } 434 434 … … 459 459 460 460 if( set_getint( irc, "debug" ) && 0 ) /* This message is too useless */ 461 serv_got_crap( gc, "Receiving user add from handle: %s", handle );461 irc_usermsg( irc, "Receiving user add from protocol: %s", handle ); 462 462 463 463 if( user_findhandle( gc, handle ) ) 464 464 { 465 465 if( set_getint( irc, "debug" ) ) 466 serv_got_crap( gc, "User already exists, ignoring add request: %s", handle );466 irc_usermsg( irc, "User already exists, ignoring add request: %s", handle ); 467 467 468 468 return; … … 557 557 558 558 if( ( gc->flags & OPT_LOGGED_IN ) && set_getint( gc->irc, "display_namechanges" ) ) 559 serv_got_crap( gc, "User `%s' changed name to `%s'", u->nick, u->realname );559 irc_usermsg( gc->irc, "User `%s' changed name to `%s'", u->nick, u->realname ); 560 560 } 561 561 } … … 590 590 if( set_getint( gc->irc, "debug" ) || g_strcasecmp( set_getstr( gc->irc, "handle_unknown" ), "ignore" ) != 0 ) 591 591 { 592 serv_got_crap( gc, "serv_got_update() for handle %s:", handle );593 serv_got_crap( gc, "loggedin = %d, type = %d", loggedin, type );592 irc_usermsg( gc->irc, "serv_got_update() for handle %s on connection %s(%s):", handle, gc->prpl->name, gc->username ); 593 irc_usermsg( gc->irc, "loggedin = %d, type = %d", loggedin, type ); 594 594 } 595 595 … … 671 671 { 672 672 if( set_getint( irc, "debug" ) ) 673 serv_got_crap( gc, "Ignoring message from unknown handle %s", handle );673 irc_usermsg( irc, "Ignoring message from unknown handle %s on connection %s(%s)", handle, gc->prpl->name, gc->username ); 674 674 675 675 return; … … 693 693 else 694 694 { 695 serv_got_crap( gc, "Message from unknown handle %s:", handle );695 irc_usermsg( irc, "Message from unknown handle %s on connection %s(%s):", handle, gc->prpl->name, gc->username ); 696 696 u = user_find( irc, irc->mynick ); 697 697 } 698 698 } 699 699 700 if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||701 ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ))700 /* if( g_strcasecmp( set_getstr( irc, "html" ), "strip" ) == 0 ) */ 701 if( gc->flags & OPT_CONN_HTML ) 702 702 strip_html( msg ); 703 703 … … 753 753 754 754 if( set_getint( gc->irc, "debug" ) ) 755 serv_got_crap( gc, "You were removed from conversation %d", (int) id );755 irc_usermsg( gc->irc, "You were removed from conversation %d", (int) id ); 756 756 757 757 for( c = gc->conversations; c && c->id != id; c = (l=c)->next ); … … 798 798 for( c = gc->conversations; c && c->id != id; c = c->next ); 799 799 800 if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||801 ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ))800 /* if( g_strcasecmp( set_getstr( gc->irc, "html" ), "strip" ) == 0 ) */ 801 if( gc->flags & OPT_CONN_HTML ) 802 802 strip_html( msg ); 803 803 … … 809 809 irc_privmsg( gc->irc, u, "PRIVMSG", c->channel, "", msg ); 810 810 else 811 serv_got_crap( gc, "Message from/to conversation %s@%d (unknown conv/user): %s", who, id, msg );811 irc_usermsg( gc->irc, "Message from/to conversation %s@%d (unknown conv/user): %s", who, id, msg ); 812 812 } 813 813 … … 832 832 833 833 s = g_new( char, 16 ); 834 sprintf( s, " &chat_%03d", gc->irc->c_id++ );834 sprintf( s, "#chat_%03d", gc->irc->c_id++ ); 835 835 c->channel = g_strdup( s ); 836 836 g_free( s ); 837 837 838 838 if( set_getint( gc->irc, "debug" ) ) 839 serv_got_crap( gc, "Creating new conversation: (id=%d,handle=%s)", id, handle );839 irc_usermsg( gc->irc, "Creating new conversation: (id=%d,handle=%s)", id, handle ); 840 840 841 841 return( c ); … … 856 856 857 857 if( set_getint( b->gc->irc, "debug" ) ) 858 serv_got_crap( b->gc, "User %s added to conversation %d", handle, b->id );858 irc_usermsg( b->gc->irc, "User %s added to conversation %d", handle, b->id ); 859 859 860 860 /* It might be yourself! */ … … 890 890 891 891 if( set_getint( b->gc->irc, "debug" ) ) 892 serv_got_crap( b->gc, "User %s removed from conversation %d (%s)", handle, b->id, reason ? reason : "" );892 irc_usermsg( b->gc->irc, "User %s removed from conversation %d (%s)", handle, b->id, reason ? reason : "" ); 893 893 894 894 /* It might be yourself! */ … … 1031 1031 msg = buf; 1032 1032 1033 if( ( u->gc->flags & OPT_CONN_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) ) 1034 { 1035 char *html; 1036 1037 html = escape_html( msg ); 1038 strncpy( buf, html, 8192 ); 1039 g_free( html ); 1040 1041 msg = buf; 1033 if( u->gc->flags & OPT_CONN_HTML) { 1034 char * html = escape_html(msg); 1035 strncpy(buf, html, 8192); 1036 g_free(html); 1042 1037 } 1043 1038 -
protocols/oscar/im.c
r9c8ae50 rcc9079e 1996 1996 } 1997 1997 1998 /*1999 * Subtype 0x0014 - Send a mini typing notification (mtn) packet.2000 *2001 * This is supported by winaim5 and newer, MacAIM bleh and newer, iChat bleh and newer,2002 * and Gaim 0.60 and newer.2003 *2004 */2005 int aim_im_sendmtn(aim_session_t *sess, guint16 type1, const char *sn, guint16 type2)2006 {2007 aim_conn_t *conn;2008 aim_frame_t *fr;2009 aim_snacid_t snacid;2010 2011 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0002)))2012 return -EINVAL;2013 2014 if (!sn)2015 return -EINVAL;2016 2017 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+11+strlen(sn)+2)))2018 return -ENOMEM;2019 2020 snacid = aim_cachesnac(sess, 0x0004, 0x0014, 0x0000, NULL, 0);2021 aim_putsnac(&fr->data, 0x0004, 0x0014, 0x0000, snacid);2022 2023 /*2024 * 8 days of light2025 * Er, that is to say, 8 bytes of 0's2026 */2027 aimbs_put16(&fr->data, 0x0000);2028 aimbs_put16(&fr->data, 0x0000);2029 aimbs_put16(&fr->data, 0x0000);2030 aimbs_put16(&fr->data, 0x0000);2031 2032 /*2033 * Type 1 (should be 0x0001 for mtn)2034 */2035 aimbs_put16(&fr->data, type1);2036 2037 /*2038 * Dest sn2039 */2040 aimbs_put8(&fr->data, strlen(sn));2041 aimbs_putraw(&fr->data, sn, strlen(sn));2042 2043 /*2044 * Type 2 (should be 0x0000, 0x0001, or 0x0002 for mtn)2045 */2046 aimbs_put16(&fr->data, type2);2047 2048 aim_tx_enqueue(sess, fr);2049 2050 return 0;2051 }2052 2053 /*2054 * Subtype 0x0014 - Receive a mini typing notification (mtn) packet.2055 *2056 * This is supported by winaim5 and newer, MacAIM bleh and newer, iChat bleh and newer,2057 * and Gaim 0.60 and newer.2058 *2059 */2060 static int mtn_receive(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)2061 {2062 int ret = 0;2063 aim_rxcallback_t userfunc;2064 char *sn;2065 guint8 snlen;2066 guint16 type1, type2;2067 2068 aim_bstream_advance(bs, 8); /* Unknown - All 0's */2069 type1 = aimbs_get16(bs);2070 snlen = aimbs_get8(bs);2071 sn = aimbs_getstr(bs, snlen);2072 type2 = aimbs_get16(bs);2073 2074 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))2075 ret = userfunc(sess, rx, type1, sn, type2);2076 2077 g_free(sn);2078 2079 return ret;2080 }2081 2082 1998 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) 2083 1999 { … … 2095 2011 else if (snac->subtype == 0x000c) 2096 2012 return msgack(sess, mod, rx, snac, bs); 2097 else if (snac->subtype == 0x0014)2098 return mtn_receive(sess, mod, rx, snac, bs);2099 2013 2100 2014 return 0; -
protocols/oscar/im.h
r9c8ae50 rcc9079e 14 14 #define AIM_CB_MSG_CLIENTAUTORESP 0x000b 15 15 #define AIM_CB_MSG_ACK 0x000c 16 #define AIM_CB_MSG_MTN 0x001417 16 #define AIM_CB_MSG_DEFAULT 0xffff 18 17 … … 195 194 196 195 int aim_send_im_ch2_geticqmessage(aim_session_t *sess, const char *sn, int type); 197 int aim_im_sendmtn(aim_session_t *sess, guint16 type1, const char *sn, guint16 type2);198 196 int aim_send_im_ch2_statusmessage(aim_session_t *sess, const char *sender, const guint8 *cookie, const char *message, const guint8 state, const guint16 dc); 199 197 -
protocols/oscar/oscar.c
r9c8ae50 rcc9079e 221 221 static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); 222 222 static int gaim_ssi_parseack (aim_session_t *, aim_frame_t *, ...); 223 static int gaim_parsemtn (aim_session_t *, aim_frame_t *, ...); 223 224 224 static int gaim_icqinfo (aim_session_t *, aim_frame_t *, ...); 225 225 static int gaim_parseaiminfo (aim_session_t *, aim_frame_t *, ...); … … 556 556 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_SRVACK, gaim_ssi_parseack, 0); 557 557 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parseaiminfo, 0); 558 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parsemtn, 0);559 558 560 559 ((struct oscar_data *)gc->proto_data)->conn = bosconn; … … 1677 1676 1678 1677 /* Maybe senderwarn and recverwarn should be user preferences... */ 1679 params->flags = 0x0000000b;1680 1678 params->maxmsglen = 8000; 1681 1679 params->minmsginterval = 0; … … 2435 2433 } 2436 2434 2437 int gaim_parsemtn(aim_session_t *sess, aim_frame_t *fr, ...)2438 {2439 struct gaim_connection * gc = sess->aux_data;2440 va_list ap;2441 guint16 type1, type2;2442 char * sn;2443 2444 va_start(ap, fr);2445 type1 = va_arg(ap, int);2446 sn = va_arg(ap, char*);2447 type2 = va_arg(ap, int);2448 va_end(ap);2449 2450 if(type2 == 0x0001 || type2 == 0x0002)2451 serv_got_typing(gc, sn, 0);2452 2453 return 1;2454 }2455 2456 2435 static char *oscar_get_status_string( struct gaim_connection *gc, int number ) 2457 2436 { … … 2480 2459 return( "Away" ); 2481 2460 } 2482 }2483 2484 int oscar_send_typing(struct gaim_connection *gc, char * who, int typing)2485 {2486 struct oscar_data *od = gc->proto_data;2487 return( aim_im_sendmtn(od->sess, 1, who, typing ? 0x0002 : 0x0000) );2488 2461 } 2489 2462 … … 2509 2482 ret->cmp_buddynames = aim_sncmp; 2510 2483 ret->get_status_string = oscar_get_status_string; 2511 ret->send_typing = oscar_send_typing;2512 2484 2513 2485 register_protocol(ret); -
protocols/util.c
r9c8ae50 rcc9079e 377 377 if( html == NULL ) 378 378 return( NULL ); 379 if( g_strncasecmp( html, "<html>", 6 ) == 0 ) 380 return( g_strdup( html ) ); 379 381 380 382 ret = g_string_new( "" ); -
protocols/yahoo/yahoo.c
r9c8ae50 rcc9079e 845 845 if( c ) 846 846 add_chat_buddy( c, who ); 847 else if( set_getint( gc->irc, "debug" ) ) 848 serv_got_crap( gc, "Got ext_yahoo_conf_userjoin() from %s for unknown conference %s", who, room ); 847 849 } 848 850 … … 856 858 if( c ) 857 859 remove_chat_buddy( c, who, "" ); 860 else if( set_getint( gc->irc, "debug" ) ) 861 serv_got_crap( gc, "Got ext_yahoo_conf_userleave() from %s for unknown conference %s", who, room ); 858 862 } 859 863 -
query.c
r9c8ae50 rcc9079e 127 127 disp = 1; 128 128 } 129 //Using irc_usermsg instead of serv_got_crap because \x02A is a char too, so a SPACE is needed.129 130 130 if( ans ) 131 131 { 132 132 q->yes( NULL, q->data ); 133 serv_got_crap( q->gc, "Accepted: %s", q->question );133 irc_usermsg( irc, "Accepted: %s", q->question ); 134 134 } 135 135 else 136 136 { 137 137 q->no( NULL, q->data ); 138 serv_got_crap( q->gc, "Rejected: %s", q->question );138 irc_usermsg( irc, "Rejected: %s", q->question ); 139 139 } 140 140 q->data = NULL; … … 149 149 { 150 150 if( q->gc ) 151 { 152 serv_got_crap( q->gc, "New request: %s\nYou can use the \2yes\2/\2no\2 commands to accept/reject this request.", q->question ); 153 } 151 irc_usermsg( irc, "Question on %s connection (handle %s):", q->gc->prpl->name, q->gc->username ); 154 152 else 155 {156 irc_usermsg( irc, "New request: %s\nYou can use the \2yes\2/\2no\2 commands to accept/reject this request.", q->question );157 }153 irc_usermsg( irc, "Question:" ); 154 155 irc_usermsg( irc, "%s\nYou can use the yes/no commands to answer this question.", q->question ); 158 156 } 159 157
Note: See TracChangeset
for help on using the changeset viewer.