Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc.c

    r3f9440d r0a3c243  
    3333GSList *irc_connection_list = NULL;
    3434
    35 static char *passchange (irc_t *irc, void *set, char *value)
    36 {
    37         irc_setpass (irc, value);
    38         return (NULL);
     35static 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;
    3940}
    4041
     
    120121        irc_connection_list = g_slist_append( irc_connection_list, irc );
    121122       
    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);
     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 );
    142143       
    143144        conf_loaddefaults( irc );
     
    211212        log_message( LOGLVL_INFO, "Destroying connection with fd %d", irc->fd );
    212213       
    213         if( irc->status & USTATUS_IDENTIFIED && set_getint( irc, "save_on_quit" ) )
     214        if( irc->status & USTATUS_IDENTIFIED && set_getint( &irc->set, "save_on_quit" ) )
    214215                if( storage_save( irc, TRUE ) != STORAGE_OK )
    215216                        irc_usermsg( irc, "Error while saving settings!" );
     
    329330void irc_setpass (irc_t *irc, const char *pass)
    330331{
    331         if (irc->password) g_free (irc->password);
     332        g_free (irc->password);
    332333       
    333334        if (pass) {
    334335                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, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) )
     366                        if( ( cs = set_getstr( &irc->set, "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, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) )
     586        if( ( cs = set_getstr( &irc->set, "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;
    652         char namelist[385] = "";
     651        user_t *u = irc->users;
     652        char *s;
     653        int control = ( g_strcasecmp( channel, irc->channel ) == 0 );
    653654        struct conversation *c = NULL;
     655       
     656        if( !control )
     657                c = conv_findchannel( channel );
    654658       
    655659        /* RFCs say there is no error reply allowed on NAMES, so when the
    656660           channel is invalid, just give an empty reply. */
    657661       
    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 )
     662        if( control || c ) while( u )
     663        {
     664                if( u->online )
     665                {
     666                        if( u->gc && control )
    663667                        {
    664                                 irc_reply( irc, 353, "= %s :%s", channel, namelist );
    665                                 *namelist = 0;
     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 );
    666674                        }
    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 ) ) )
     675                        else if( !u->gc )
     676                        {
     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 );
     685                        }
     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 )
    676694        {
    677695                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 )
    688                         {
    689                                 irc_reply( irc, 353, "= %s :%s", channel, namelist );
    690                                 *namelist = 0;
    691                         }
    692                        
    693                         strcat( namelist, u->nick );
    694                         strcat( namelist, " " );
    695                 }
    696         }
    697        
    698         if( *namelist )
    699                 irc_reply( irc, 353, "= %s :%s", channel, namelist );
     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        }
    700701       
    701702        irc_reply( irc, 366, "%s :End of /NAMES list", channel );
     
    924925{
    925926        char *nick, *s;
    926         char reason[64];
     927        char reason[128];
    927928       
    928929        if( u->gc && u->gc->flags & OPT_LOGGING_OUT )
    929930        {
    930                 if( u->gc->user->proto_opt[0][0] )
     931                if( u->gc->acc->server )
    931932                        g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost,
    932                                     u->gc->user->proto_opt[0] );
     933                                    u->gc->acc->server );
    933934                else if( ( s = strchr( u->gc->username, '@' ) ) )
    934935                        g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost,
     
    936937                else
    937938                        g_snprintf( reason, sizeof( reason ), "%s %s.%s", irc->myhost,
    938                                     u->gc->prpl->name, irc->myhost );
     939                                    u->gc->acc->prpl->name, irc->myhost );
    939940               
    940941                /* proto_opt might contain garbage after the : */
     
    10121013                else if( g_strncasecmp( s + 1, "TYPING", 6 ) == 0 )
    10131014                {
    1014                         if( u && u->gc && u->gc->prpl->send_typing && strlen( s ) >= 10 )
     1015                        if( u && u->gc && u->gc->acc->prpl->send_typing && strlen( s ) >= 10 )
    10151016                        {
    10161017                                time_t current_typing_notice = time( NULL );
     
    10181019                                if( current_typing_notice - u->last_typing_notice >= 5 )
    10191020                                {
    1020                                         u->gc->prpl->send_typing( u->gc, u->handle, s[8] == '1' );
     1021                                        u->gc->acc->prpl->send_typing( u->gc, u->handle, s[8] == '1' );
    10211022                                        u->last_typing_notice = current_typing_notice;
    10221023                                }
     
    10511052                }
    10521053        }
    1053         else if( c && c->gc && c->gc->prpl )
     1054        else if( c && c->gc && c->gc->acc && c->gc->acc->prpl )
    10541055        {
    10551056                return( bim_chat_msg( c->gc, c->id, s ) );
     
    10831084        if( !u || !u->gc ) return;
    10841085       
    1085         if( set_getint( irc, "buddy_sendbuffer" ) && set_getint( irc, "buddy_sendbuffer_delay" ) > 0 )
     1086        if( set_getint( &irc->set, "buddy_sendbuffer" ) && set_getint( &irc->set, "buddy_sendbuffer_delay" ) > 0 )
    10861087        {
    10871088                int delay;
     
    11101111                strcat( u->sendbuf, "\n" );
    11111112               
    1112                 delay = set_getint( irc, "buddy_sendbuffer_delay" );
     1113                delay = set_getint( &irc->set, "buddy_sendbuffer_delay" );
    11131114                if( delay <= 5 )
    11141115                        delay *= 1000;
     
    11751176                int len = strlen( irc->nick) + 3;
    11761177                prefix = g_new (char, len );
    1177                 g_snprintf( prefix, len, "%s%s", irc->nick, set_getstr( irc, "to_char" ) );
     1178                g_snprintf( prefix, len, "%s%s", irc->nick, set_getstr( &irc->set, "to_char" ) );
    11781179                prefix[len-1] = 0;
    11791180        }
Note: See TracChangeset for help on using the changeset viewer.