Changes in irc.c [0a3c243:3f9440d]
Legend:
- Unmodified
- Added
- Removed
-
irc.c
r0a3c243 r3f9440d 33 33 GSList *irc_connection_list = NULL; 34 34 35 static char *passchange( irc_t *irc, void *set, char *value ) 36 { 37 irc_setpass( irc, value ); 38 irc_usermsg( irc, "Password successfully changed" ); 39 return NULL; 35 static char *passchange (irc_t *irc, void *set, char *value) 36 { 37 irc_setpass (irc, value); 38 return (NULL); 40 39 } 41 40 … … 121 120 irc_connection_list = g_slist_append( irc_connection_list, irc ); 122 121 123 set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc);124 set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc);125 set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc);126 set_add( &irc->set, "auto_reconnect_delay", "300", set_eval_int, irc);127 set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc);128 set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc);129 set_add( &irc->set, "charset", "iso8859-1", set_eval_charset, irc);130 set_add( &irc->set, "debug", "false", set_eval_bool, irc);131 set_add( &irc->set, "default_target", "root", NULL, irc);132 set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc);133 set_add( &irc->set, "handle_unknown", "root", NULL, irc);134 set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc);135 set_add( &irc->set, "ops", "both", set_eval_ops, irc);136 set_add( &irc->set, "password", NULL, passchange, irc);137 set_add( &irc->set, "private", "true", set_eval_bool, irc);138 set_add( &irc->set, "query_order", "lifo", NULL, irc);139 set_add( &irc->set, "save_on_quit", "true", set_eval_bool, irc);140 set_add( &irc->set, "strip_html", "true", NULL, irc);141 set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc);142 set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc);122 set_add( irc, "away_devoice", "true", set_eval_away_devoice ); 123 set_add( irc, "auto_connect", "true", set_eval_bool ); 124 set_add( irc, "auto_reconnect", "false", set_eval_bool ); 125 set_add( irc, "auto_reconnect_delay", "300", set_eval_int ); 126 set_add( irc, "buddy_sendbuffer", "false", set_eval_bool ); 127 set_add( irc, "buddy_sendbuffer_delay", "200", set_eval_int ); 128 set_add( irc, "charset", "iso8859-1", set_eval_charset ); 129 set_add( irc, "debug", "false", set_eval_bool ); 130 set_add( irc, "default_target", "root", NULL ); 131 set_add( irc, "display_namechanges", "false", set_eval_bool ); 132 set_add( irc, "handle_unknown", "root", NULL ); 133 set_add( irc, "lcnicks", "true", set_eval_bool ); 134 set_add( irc, "ops", "both", set_eval_ops ); 135 set_add( irc, "private", "true", set_eval_bool ); 136 set_add( irc, "query_order", "lifo", NULL ); 137 set_add( irc, "save_on_quit", "true", set_eval_bool ); 138 set_add( irc, "strip_html", "true", NULL ); 139 set_add( irc, "to_char", ": ", set_eval_to_char ); 140 set_add( irc, "typing_notice", "false", set_eval_bool ); 141 set_add( irc, "password", NULL, passchange); 143 142 144 143 conf_loaddefaults( irc ); … … 212 211 log_message( LOGLVL_INFO, "Destroying connection with fd %d", irc->fd ); 213 212 214 if( irc->status & USTATUS_IDENTIFIED && set_getint( &irc->set, "save_on_quit" ) )213 if( irc->status & USTATUS_IDENTIFIED && set_getint( irc, "save_on_quit" ) ) 215 214 if( storage_save( irc, TRUE ) != STORAGE_OK ) 216 215 irc_usermsg( irc, "Error while saving settings!" ); … … 330 329 void irc_setpass (irc_t *irc, const char *pass) 331 330 { 332 g_free (irc->password);331 if (irc->password) g_free (irc->password); 333 332 334 333 if (pass) { 335 334 irc->password = g_strdup (pass); 335 irc_usermsg (irc, "Password successfully changed"); 336 336 } else { 337 337 irc->password = NULL; … … 364 364 } 365 365 366 if( ( cs = set_getstr( &irc->set, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) )366 if( ( cs = set_getstr( irc, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 367 367 { 368 368 conv[IRC_MAX_LINE] = 0; … … 584 584 585 585 strip_newlines( line ); 586 if( ( cs = set_getstr( &irc->set, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) )586 if( ( cs = set_getstr( irc, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 587 587 { 588 588 char conv[IRC_MAX_LINE+1]; … … 649 649 void irc_names( irc_t *irc, char *channel ) 650 650 { 651 user_t *u = irc->users; 652 char *s; 653 int control = ( g_strcasecmp( channel, irc->channel ) == 0 ); 651 user_t *u; 652 char namelist[385] = ""; 654 653 struct conversation *c = NULL; 655 656 if( !control )657 c = conv_findchannel( channel );658 654 659 655 /* RFCs say there is no error reply allowed on NAMES, so when the 660 656 channel is invalid, just give an empty reply. */ 661 657 662 if( control || c ) while( u)663 { 664 if( u->online )665 { 666 if( u->gc && control)658 if( g_strcasecmp( channel, irc->channel ) == 0 ) 659 { 660 for( u = irc->users; u; u = u->next ) if( u->online ) 661 { 662 if( strlen( namelist ) + strlen( u->nick ) > sizeof( namelist ) - 4 ) 667 663 { 668 if( set_getint( &irc->set, "away_devoice" ) && !u->away ) 669 s = "+"; 670 else 671 s = ""; 672 673 irc_reply( irc, 353, "= %s :%s%s", channel, s, u->nick ); 664 irc_reply( irc, 353, "= %s :%s", channel, namelist ); 665 *namelist = 0; 674 666 } 675 else if( !u->gc ) 667 668 if( u->gc && !u->away && set_getint( irc, "away_devoice" ) ) 669 strcat( namelist, "+" ); 670 671 strcat( namelist, u->nick ); 672 strcat( namelist, " " ); 673 } 674 } 675 else if( ( c = conv_findchannel( channel ) ) ) 676 { 677 GList *l; 678 char *ops = set_getstr( irc, "ops" ); 679 680 /* root and the user aren't in the channel userlist but should 681 show up in /NAMES, so list them first: */ 682 sprintf( namelist, "%s%s %s%s ", strcmp( ops, "root" ) == 0 || strcmp( ops, "both" ) ? "@" : "", irc->mynick, 683 strcmp( ops, "user" ) == 0 || strcmp( ops, "both" ) ? "@" : "", irc->nick ); 684 685 for( l = c->in_room; l; l = l->next ) if( ( u = user_findhandle( c->gc, l->data ) ) ) 686 { 687 if( strlen( namelist ) + strlen( u->nick ) > sizeof( namelist ) - 4 ) 676 688 { 677 if( strcmp( u->nick, irc->mynick ) == 0 && ( strcmp( set_getstr( &irc->set, "ops" ), "root" ) == 0 || strcmp( set_getstr( &irc->set, "ops" ), "both" ) == 0 ) ) 678 s = "@"; 679 else if( strcmp( u->nick, irc->nick ) == 0 && ( strcmp( set_getstr( &irc->set, "ops" ), "user" ) == 0 || strcmp( set_getstr( &irc->set, "ops" ), "both" ) == 0 ) ) 680 s = "@"; 681 else 682 s = ""; 683 684 irc_reply( irc, 353, "= %s :%s%s", channel, s, u->nick ); 689 irc_reply( irc, 353, "= %s :%s", channel, namelist ); 690 *namelist = 0; 685 691 } 686 } 687 688 u = u->next; 689 } 690 691 /* For non-controlchannel channels (group conversations) only root and 692 you are listed now. Time to show the channel people: */ 693 if( !control && c ) 694 { 695 GList *l; 696 697 for( l = c->in_room; l; l = l->next ) 698 if( ( u = user_findhandle( c->gc, l->data ) ) ) 699 irc_reply( irc, 353, "= %s :%s%s", channel, "", u->nick ); 700 } 692 693 strcat( namelist, u->nick ); 694 strcat( namelist, " " ); 695 } 696 } 697 698 if( *namelist ) 699 irc_reply( irc, 353, "= %s :%s", channel, namelist ); 701 700 702 701 irc_reply( irc, 366, "%s :End of /NAMES list", channel ); … … 925 924 { 926 925 char *nick, *s; 927 char reason[ 128];926 char reason[64]; 928 927 929 928 if( u->gc && u->gc->flags & OPT_LOGGING_OUT ) 930 929 { 931 if( u->gc-> acc->server)930 if( u->gc->user->proto_opt[0][0] ) 932 931 g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost, 933 u->gc-> acc->server);932 u->gc->user->proto_opt[0] ); 934 933 else if( ( s = strchr( u->gc->username, '@' ) ) ) 935 934 g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost, … … 937 936 else 938 937 g_snprintf( reason, sizeof( reason ), "%s %s.%s", irc->myhost, 939 u->gc-> acc->prpl->name, irc->myhost );938 u->gc->prpl->name, irc->myhost ); 940 939 941 940 /* proto_opt might contain garbage after the : */ … … 1013 1012 else if( g_strncasecmp( s + 1, "TYPING", 6 ) == 0 ) 1014 1013 { 1015 if( u && u->gc && u->gc-> acc->prpl->send_typing && strlen( s ) >= 10 )1014 if( u && u->gc && u->gc->prpl->send_typing && strlen( s ) >= 10 ) 1016 1015 { 1017 1016 time_t current_typing_notice = time( NULL ); … … 1019 1018 if( current_typing_notice - u->last_typing_notice >= 5 ) 1020 1019 { 1021 u->gc-> acc->prpl->send_typing( u->gc, u->handle, s[8] == '1' );1020 u->gc->prpl->send_typing( u->gc, u->handle, s[8] == '1' ); 1022 1021 u->last_typing_notice = current_typing_notice; 1023 1022 } … … 1052 1051 } 1053 1052 } 1054 else if( c && c->gc && c->gc-> acc && c->gc->acc->prpl )1053 else if( c && c->gc && c->gc->prpl ) 1055 1054 { 1056 1055 return( bim_chat_msg( c->gc, c->id, s ) ); … … 1084 1083 if( !u || !u->gc ) return; 1085 1084 1086 if( set_getint( &irc->set, "buddy_sendbuffer" ) && set_getint( &irc->set, "buddy_sendbuffer_delay" ) > 0 )1085 if( set_getint( irc, "buddy_sendbuffer" ) && set_getint( irc, "buddy_sendbuffer_delay" ) > 0 ) 1087 1086 { 1088 1087 int delay; … … 1111 1110 strcat( u->sendbuf, "\n" ); 1112 1111 1113 delay = set_getint( &irc->set, "buddy_sendbuffer_delay" );1112 delay = set_getint( irc, "buddy_sendbuffer_delay" ); 1114 1113 if( delay <= 5 ) 1115 1114 delay *= 1000; … … 1176 1175 int len = strlen( irc->nick) + 3; 1177 1176 prefix = g_new (char, len ); 1178 g_snprintf( prefix, len, "%s%s", irc->nick, set_getstr( &irc->set, "to_char" ) );1177 g_snprintf( prefix, len, "%s%s", irc->nick, set_getstr( irc, "to_char" ) ); 1179 1178 prefix[len-1] = 0; 1180 1179 }
Note: See TracChangeset
for help on using the changeset viewer.