Changeset 2cdd8ce
- Timestamp:
- 2005-11-19T15:17:03Z (19 years ago)
- Branches:
- master
- Children:
- 9c8ae50, b20b32f
- Parents:
- c998255 (diff), 94281ef (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. - Files:
-
- 11 deleted
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
.bzrignore
rc998255 r2cdd8ce 2 2 config.h 3 3 bitlbee 4 user-guide.txt 5 user-guide.html 6 help.txt 4 7 debian 8 build-arch-stamp 5 9 tags -
bitlbee.c
rc998255 r2cdd8ce 545 545 } 546 546 547 irc_usermsg( irc, "Unknown command: %s. Please use help commandsto get a list of available commands.", cmd[0] );547 irc_usermsg( irc, "Unknown command: %s. Please use \x02help commands\x02 to get a list of available commands.", cmd[0] ); 548 548 549 549 return( 1 ); -
bitlbee.conf
rc998255 r2cdd8ce 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 think about reporting bugs when you use this!15 ## don't even *think* of reporting bugs when you use this. 16 16 ## 17 17 # RunMode = Inetd -
bitlbee.h
rc998255 r2cdd8ce 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
rc998255 r2cdd8ce 326 326 else 327 327 { 328 irc_usermsg( irc, "Unknown command: account %s. Please use help commandsto get a list of available commands.", cmd[1] );328 irc_usermsg( irc, "Unknown command: account %s. Please use \x02help commands\x02 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 irc_usermsg( irc, "%d, %s", num, q->question ); 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 ); 730 733 731 734 return( 0 ); -
doc/CHANGES
rc998255 r2cdd8ce 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. 4 10 5 11 Finished ... -
doc/FAQ
rc998255 r2cdd8ce 38 38 artistic creativity. 39 39 40 Q: Why is there no mailing list/CVS/<insert your favourite development tool41 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 all47 developers' copies are in sync with Wilmer's master copy. These shell48 scripts also produce development "releases" and packages, as well as49 stick them on a http-server. Patches are sent to Wilmer who decides50 whether or not a patch should be applied and if it may need some51 additional changes. This has the consistency advantage of a one-person52 project while having the capacity of more people available. The system53 works and we are kind of attached to it.54 55 40 Q: When is $random_feature going to be implemented? 56 41 A: Please do consult doc/TODO (preferably in a development snapshot, which -
doc/README
rc998255 r2cdd8ce 9 9 make install will move all the files to the right places. 10 10 11 --- inetd installation 12 11 13 After installation you have to set up inetd (you got that one running, 12 14 right? If not, just take a look at utils/bitlbeed.c) to start BitlBee. You … … 18 20 of just 'nobody') might be a good idea. 19 21 22 *BSD/Darwin/OSX NOTE: Most *BSD inetds are more scrict than the one that 23 comes with Linux systems. Possibly all non-Linux inetds are like this. They 24 don't allow you to specify a port number in the inetd.conf entry, instead 25 you have to put a service name there (one that is also mentioned in 26 /etc/services). So if there's no line in /services for 6667/tcp (or whatever 27 you choose), add it and use that name in the inetd.conf entry. 28 29 -- xinetd installation 30 31 Most machines use xinetd instead of inetd these days. If your machine runs 32 xinetd, you can copy the bitlbee.xinetd file from the doc/ directory to your 33 xinetd.d/ directory. Most likely you'll have to change a thing or two before 34 it'll work. 35 36 After configuring your (x)inetd, send the daemon a SIGHUP and things should 37 work. If not, see your syslogs, since both daemons will complain there when 38 something's wrong. 39 20 40 Also, don't forget to create the configuration directory (/var/lib/bitlbee/ 21 41 by default) and chown it to the UID BitlBee is running as. Make sure this 22 42 directory is read-/writable by this user only. 23 24 (For xinetd users a xinetd configuration file is included: doc/bitlbee.xinetd)25 43 26 44 … … 48 66 ================== 49 67 50 FreeBSD NOTE: It looks like FreeBSD does allow port numbers instead of service51 names in inetd.conf, as long as the service for this port exists in52 /etc/services. Linux isn't this strict. If you got problems in FreeBSD, just53 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 to56 /etc/services and use that name in inetd.conf. Not really a problem, since57 that's the cleanest way of doing this on any operating system anyway.58 59 68 Cygwin NOTE: You'll need a glib installation to run BitlBee. However, Cygwin 60 69 doesn't provide a glib package. You can download a binary tar.gz from: … … 66 75 Please do report them, we might be able to fix them if they're not too 67 76 mysterious. 77 78 Also, the configure script is known to not work very well with non-Bash 79 shells, so if you experience problems, make sure you use bash to run the 80 script. Same for the Makefile, it only works well with GNU make. (gmake on 81 most BSD systems) 82 83 If someone can tell us how to write Makefiles that work with both/all 84 versions of make, we'd love to hear it, but it seems this just isn't 85 possible. 68 86 69 87 -
doc/bitlbee.xinetd
rc998255 r2cdd8ce 2 2 ## user, port and/or binary location might be wrong. 3 3 4 service 6667 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 5 7 { 6 8 socket_type = stream 7 9 protocol = tcp 8 10 wait = no 11 12 ## You most likely want to change these two 9 13 user = nobody 10 14 server = /usr/local/sbin/bitlbee 11 port = 6667 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 12 19 } -
doc/user-guide/commands.xml
rc998255 r2cdd8ce 303 303 </bitlbee-setting> 304 304 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. 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. 312 314 </para> 313 315 </description> … … 462 464 463 465 <bitlbee-setting name="buddy_sendbuffer_delay" type="integer"> 464 <description> 465 466 <para> 467 Tell BitlBee after how many seconds a buffered message should be sent. 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. 468 472 </para> 469 473 -
irc.c
rc998255 r2cdd8ce 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", " 1", set_eval_int );117 set_add( irc, "buddy_sendbuffer_delay", "200", 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 ); */124 123 set_add( irc, "lcnicks", "true", set_eval_bool ); 125 124 set_add( irc, "ops", "both", set_eval_ops ); … … 127 126 set_add( irc, "query_order", "lifo", NULL ); 128 127 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] == '#' )488 else if( *cmd[1] == '#' || *cmd[1] == '&' ) 489 489 { 490 490 if( cmd[2] ) … … 557 557 else if( cmd[1] ) 558 558 { 559 if( cmd[1][0] == '#'&& cmd[1][1] )559 if( ( cmd[1][0] == '#' || 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( char *format, ... )933 void irc_write_all( int now, 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 ) { 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 } 942 950 irc_vawrite( temp->data, format, params ); 951 if( now ) 952 { 953 bitlbee_io_current_client_write( irc->io_channel, G_IO_OUT, irc ); 954 } 943 955 temp = temp->next; 944 956 } 945 957 946 958 va_end( params ); 947 959 return; … … 1069 1081 irc_spawn( irc, u ); 1070 1082 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 helpcommand. Lots of FAQ's are answered there." );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\x02 command. Lots of FAQ's are answered there." ); 1072 1084 1073 1085 irc->status = USTATUS_LOGGED_IN; … … 1313 1325 user_t *u = NULL; 1314 1326 1315 if( *nick == '#' )1327 if( *nick == '#' || *nick == '&' ) 1316 1328 { 1317 1329 if( !( c = conv_findchannel( nick ) ) ) … … 1428 1440 if( set_getint( irc, "buddy_sendbuffer" ) && set_getint( irc, "buddy_sendbuffer_delay" ) > 0 ) 1429 1441 { 1442 int delay; 1443 1430 1444 if( u->sendbuf_len > 0 && u->sendbuf_flags != flags) 1431 1445 { … … 1451 1465 strcat( u->sendbuf, "\n" ); 1452 1466 1467 delay = set_getint( irc, "buddy_sendbuffer_delay" ); 1468 if( delay <= 5 ) 1469 delay *= 1000; 1470 1453 1471 if( u->sendbuf_timer > 0 ) 1454 1472 g_source_remove( u->sendbuf_timer ); 1455 u->sendbuf_timer = g_timeout_add( set_getint( irc, "buddy_sendbuffer_delay" ) * 1000, 1456 buddy_send_handler_delayed, u ); 1473 u->sendbuf_timer = g_timeout_add( delay, buddy_send_handler_delayed, u ); 1457 1474 1458 1475 return( 1 ); -
irc.h
rc998255 r2cdd8ce 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( char *format, ... );120 void irc_write_all( int now, 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
rc998255 r2cdd8ce 134 134 static void log_irc(int level, char *message) { 135 135 if(level==LOGLVL_ERROR) 136 irc_write_all( "ERROR :Error: %s", message);136 irc_write_all(1, "ERROR :Error: %s", message); 137 137 if(level==LOGLVL_WARNING) 138 irc_write_all( "ERROR :Warning: %s", message);138 irc_write_all(0, "ERROR :Warning: %s", message); 139 139 if(level==LOGLVL_INFO) 140 irc_write_all( "ERROR :Informational: %s", message);140 irc_write_all(0, "ERROR :Informational: %s", message); 141 141 #ifdef DEBUG 142 142 if(level==LOGLVL_DEBUG) 143 irc_write_all( "ERROR :Debug: %s", message);143 irc_write_all(0, "ERROR :Debug: %s", message); 144 144 #endif 145 145 -
protocols/jabber/jabber.c
rc998255 r2cdd8ce 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 their buddy list."),1125 gchar *msg = g_strdup_printf(_("The user %s wants to add you to his/her buddy list."), 1126 1126 Jid); 1127 1127 -
protocols/msn/msn_util.c
rc998255 r2cdd8ce 166 166 167 167 g_snprintf( buf, sizeof( buf ), 168 "The user %s (%s) wants to add you to his/her buddy list. Do you want to allow this?",168 "The user %s (%s) wants to add you to his/her buddy list.", 169 169 handle, realname ); 170 170 do_ask_dialog( gc, buf, bla, msn_buddy_ask_yes, msn_buddy_ask_no ); -
protocols/nogaim.c
rc998255 r2cdd8ce 184 184 gc->prpl->set_away( gc, s, away ); 185 185 if( set_getint( gc->irc, "debug" ) ) 186 irc_usermsg( gc->irc, "Setting away state for %s to %s", gc->prpl->name, s );186 serv_got_crap( gc, "Setting away state to %s", s ); 187 187 } 188 188 else … … 277 277 void set_login_progress( struct gaim_connection *gc, int step, char *msg ) 278 278 { 279 irc_usermsg( gc->irc, "%s(%s) - Logging in: %s", gc->prpl->name, gc->username, msg );279 serv_got_crap( gc, "Logging in: %s", msg ); 280 280 } 281 281 … … 283 283 void hide_login_progress( struct gaim_connection *gc, char *msg ) 284 284 { 285 irc_usermsg( gc->irc, "%s(%s) - Login error: %s", gc->prpl->name, gc->username, msg );285 serv_got_crap( gc, "Login error: %s", msg ); 286 286 } 287 287 … … 289 289 void hide_login_progress_error( struct gaim_connection *gc, char *msg ) 290 290 { 291 irc_usermsg( gc->irc, "%s(%s) - Logged out: %s", gc->prpl->name, gc->username, msg );291 serv_got_crap( gc, "Logged out: %s", msg ); 292 292 } 293 293 … … 308 308 msg = text; 309 309 310 /* if( g_strcasecmp( set_getstr(gc->irc, "html" ), "strip" ) == 0 ) */311 if( gc->flags & OPT_CONN_HTML)310 if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) || 311 ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) ) 312 312 strip_html( msg ); 313 313 … … 337 337 u = user_find( gc->irc, gc->irc->nick ); 338 338 339 irc_usermsg( gc->irc, "%s(%s) - Logged in", gc->prpl->name, gc->username);339 serv_got_crap( gc, "Logged in" ); 340 340 341 341 gc->keepalive = g_timeout_add( 60000, send_keepalive, gc ); … … 351 351 352 352 if( u == NULL ) 353 irc_usermsg( gc->irc, "\x02""***\x02"" BitlBee now supports ICQ server-side contact lists. "353 serv_got_crap( gc, "\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 irc_usermsg( gc->irc, "%s(%s) - Signing off..", gc->prpl->name, gc->username);386 serv_got_crap( gc, "Signing off.." ); 387 387 388 388 gaim_input_remove( gc->keepalive ); … … 416 416 { 417 417 int delay = set_getint( irc, "auto_reconnect_delay" ); 418 irc_usermsg( gc->irc, "%s(%s) - Reconnecting in %d seconds..", gc->prpl->name, gc->username, delay);418 serv_got_crap( gc, "Reconnecting in %d seconds..", 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 irc_usermsg( gc->irc, "%s(%s) - Error: %s", gc->prpl->name, gc->username, msg );432 serv_got_crap( gc, "Error: %s", msg ); 433 433 } 434 434 … … 459 459 460 460 if( set_getint( irc, "debug" ) && 0 ) /* This message is too useless */ 461 irc_usermsg( irc, "Receiving user add from protocol: %s", handle );461 serv_got_crap( gc, "Receiving user add from handle: %s", handle ); 462 462 463 463 if( user_findhandle( gc, handle ) ) 464 464 { 465 465 if( set_getint( irc, "debug" ) ) 466 irc_usermsg( irc, "User already exists, ignoring add request: %s", handle );466 serv_got_crap( gc, "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 irc_usermsg( gc->irc, "User `%s' changed name to `%s'", u->nick, u->realname );559 serv_got_crap( gc, "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 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 );592 serv_got_crap( gc, "serv_got_update() for handle %s:", handle ); 593 serv_got_crap( gc, "loggedin = %d, type = %d", loggedin, type ); 594 594 } 595 595 … … 671 671 { 672 672 if( set_getint( irc, "debug" ) ) 673 irc_usermsg( irc, "Ignoring message from unknown handle %s on connection %s(%s)", handle, gc->prpl->name, gc->username );673 serv_got_crap( gc, "Ignoring message from unknown handle %s", handle ); 674 674 675 675 return; … … 693 693 else 694 694 { 695 irc_usermsg( irc, "Message from unknown handle %s on connection %s(%s):", handle, gc->prpl->name, gc->username );695 serv_got_crap( gc, "Message from unknown handle %s:", handle ); 696 696 u = user_find( irc, irc->mynick ); 697 697 } 698 698 } 699 699 700 /* if( g_strcasecmp( set_getstr( irc, "html" ), "strip" ) == 0 ) */701 if( gc->flags & OPT_CONN_HTML)700 if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) || 701 ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) ) 702 702 strip_html( msg ); 703 703 … … 753 753 754 754 if( set_getint( gc->irc, "debug" ) ) 755 irc_usermsg( gc->irc, "You were removed from conversation %d", (int) id );755 serv_got_crap( gc, "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, "html" ), "strip" ) == 0 ) */801 if( gc->flags & OPT_CONN_HTML)800 if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) || 801 ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) ) 802 802 strip_html( msg ); 803 803 … … 809 809 irc_privmsg( gc->irc, u, "PRIVMSG", c->channel, "", msg ); 810 810 else 811 irc_usermsg( gc->irc, "Message from/to conversation %s@%d (unknown conv/user): %s", who, id, msg );811 serv_got_crap( gc, "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 irc_usermsg( gc->irc, "Creating new conversation: (id=%d,handle=%s)", id, handle );839 serv_got_crap( gc, "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 irc_usermsg( b->gc->irc, "User %s added to conversation %d", handle, b->id );858 serv_got_crap( b->gc, "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 irc_usermsg( b->gc->irc, "User %s removed from conversation %d (%s)", handle, b->id, reason ? reason : "" );892 serv_got_crap( b->gc, "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) { 1034 char * html = escape_html(msg); 1035 strncpy(buf, html, 8192); 1036 g_free(html); 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; 1037 1042 } 1038 1043 -
protocols/oscar/im.c
rc998255 r2cdd8ce 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 light 2025 * Er, that is to say, 8 bytes of 0's 2026 */ 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 sn 2039 */ 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 1998 2082 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) 1999 2083 { … … 2011 2095 else if (snac->subtype == 0x000c) 2012 2096 return msgack(sess, mod, rx, snac, bs); 2097 else if (snac->subtype == 0x0014) 2098 return mtn_receive(sess, mod, rx, snac, bs); 2013 2099 2014 2100 return 0; -
protocols/oscar/im.h
rc998255 r2cdd8ce 14 14 #define AIM_CB_MSG_CLIENTAUTORESP 0x000b 15 15 #define AIM_CB_MSG_ACK 0x000c 16 #define AIM_CB_MSG_MTN 0x0014 16 17 #define AIM_CB_MSG_DEFAULT 0xffff 17 18 … … 194 195 195 196 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); 196 198 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); 197 199 -
protocols/oscar/oscar.c
rc998255 r2cdd8ce 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 223 static int gaim_parsemtn (aim_session_t *, aim_frame_t *, ...); 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); 558 559 559 560 ((struct oscar_data *)gc->proto_data)->conn = bosconn; … … 1676 1677 1677 1678 /* Maybe senderwarn and recverwarn should be user preferences... */ 1679 params->flags = 0x0000000b; 1678 1680 params->maxmsglen = 8000; 1679 1681 params->minmsginterval = 0; … … 2433 2435 } 2434 2436 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 2435 2456 static char *oscar_get_status_string( struct gaim_connection *gc, int number ) 2436 2457 { … … 2459 2480 return( "Away" ); 2460 2481 } 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) ); 2461 2488 } 2462 2489 … … 2482 2509 ret->cmp_buddynames = aim_sncmp; 2483 2510 ret->get_status_string = oscar_get_status_string; 2511 ret->send_typing = oscar_send_typing; 2484 2512 2485 2513 register_protocol(ret); -
protocols/util.c
rc998255 r2cdd8ce 377 377 if( html == NULL ) 378 378 return( NULL ); 379 if( g_strncasecmp( html, "<html>", 6 ) == 0 )380 return( g_strdup( html ) );381 379 382 380 ret = g_string_new( "" ); -
protocols/yahoo/yahoo.c
rc998255 r2cdd8ce 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 );849 847 } 850 848 … … 858 856 if( c ) 859 857 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 );862 858 } 863 859 -
query.c
rc998255 r2cdd8ce 127 127 disp = 1; 128 128 } 129 129 //Using irc_usermsg instead of serv_got_crap because \x02A is a char too, so a SPACE is needed. 130 130 if( ans ) 131 131 { 132 132 q->yes( NULL, q->data ); 133 irc_usermsg( irc, "Accepted: %s", q->question );133 serv_got_crap( q->gc, "Accepted: %s", q->question ); 134 134 } 135 135 else 136 136 { 137 137 q->no( NULL, q->data ); 138 irc_usermsg( irc, "Rejected: %s", q->question );138 serv_got_crap( q->gc, "Rejected: %s", q->question ); 139 139 } 140 140 q->data = NULL; … … 149 149 { 150 150 if( q->gc ) 151 irc_usermsg( irc, "Question on %s connection (handle %s):", q->gc->prpl->name, q->gc->username ); 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 } 152 154 else 153 irc_usermsg( irc, "Question:" );154 155 irc_usermsg( irc, "%s\nYou can use the yes/no commands to answer this question.", q->question );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 } 156 158 } 157 159
Note: See TracChangeset
for help on using the changeset viewer.