Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc.c

    r0a3c243 r3f9440d  
    3333GSList *irc_connection_list = NULL;
    3434
    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;
     35static char *passchange (irc_t *irc, void *set, char *value)
     36{
     37        irc_setpass (irc, value);
     38        return (NULL);
    4039}
    4140
     
    121120        irc_connection_list = g_slist_append( irc_connection_list, irc );
    122121       
    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);
    143142       
    144143        conf_loaddefaults( irc );
     
    212211        log_message( LOGLVL_INFO, "Destroying connection with fd %d", irc->fd );
    213212       
    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" ) )
    215214                if( storage_save( irc, TRUE ) != STORAGE_OK )
    216215                        irc_usermsg( irc, "Error while saving settings!" );
     
    330329void irc_setpass (irc_t *irc, const char *pass)
    331330{
    332         g_free (irc->password);
     331        if (irc->password) g_free (irc->password);
    333332       
    334333        if (pass) {
    335334                irc->password = g_strdup (pass);
     335                irc_usermsg (irc, "Password successfully changed");
    336336        } else {
    337337                irc->password = NULL;
     
    364364                        }
    365365                       
    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 ) )
    367367                        {
    368368                                conv[IRC_MAX_LINE] = 0;
     
    584584       
    585585        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 ) )
    587587        {
    588588                char conv[IRC_MAX_LINE+1];
     
    649649void irc_names( irc_t *irc, char *channel )
    650650{
    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] = "";
    654653        struct conversation *c = NULL;
    655        
    656         if( !control )
    657                 c = conv_findchannel( channel );
    658654       
    659655        /* RFCs say there is no error reply allowed on NAMES, so when the
    660656           channel is invalid, just give an empty reply. */
    661657       
    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 )
    667663                        {
    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;
    674666                        }
    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 )
    676688                        {
    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;
    685691                        }
    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 );
    701700       
    702701        irc_reply( irc, 366, "%s :End of /NAMES list", channel );
     
    925924{
    926925        char *nick, *s;
    927         char reason[128];
     926        char reason[64];
    928927       
    929928        if( u->gc && u->gc->flags & OPT_LOGGING_OUT )
    930929        {
    931                 if( u->gc->acc->server )
     930                if( u->gc->user->proto_opt[0][0] )
    932931                        g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost,
    933                                     u->gc->acc->server );
     932                                    u->gc->user->proto_opt[0] );
    934933                else if( ( s = strchr( u->gc->username, '@' ) ) )
    935934                        g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost,
     
    937936                else
    938937                        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 );
    940939               
    941940                /* proto_opt might contain garbage after the : */
     
    10131012                else if( g_strncasecmp( s + 1, "TYPING", 6 ) == 0 )
    10141013                {
    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 )
    10161015                        {
    10171016                                time_t current_typing_notice = time( NULL );
     
    10191018                                if( current_typing_notice - u->last_typing_notice >= 5 )
    10201019                                {
    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' );
    10221021                                        u->last_typing_notice = current_typing_notice;
    10231022                                }
     
    10521051                }
    10531052        }
    1054         else if( c && c->gc && c->gc->acc && c->gc->acc->prpl )
     1053        else if( c && c->gc && c->gc->prpl )
    10551054        {
    10561055                return( bim_chat_msg( c->gc, c->id, s ) );
     
    10841083        if( !u || !u->gc ) return;
    10851084       
    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 )
    10871086        {
    10881087                int delay;
     
    11111110                strcat( u->sendbuf, "\n" );
    11121111               
    1113                 delay = set_getint( &irc->set, "buddy_sendbuffer_delay" );
     1112                delay = set_getint( irc, "buddy_sendbuffer_delay" );
    11141113                if( delay <= 5 )
    11151114                        delay *= 1000;
     
    11761175                int len = strlen( irc->nick) + 3;
    11771176                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" ) );
    11791178                prefix[len-1] = 0;
    11801179        }
Note: See TracChangeset for help on using the changeset viewer.