Changeset 9fae35c for root_commands.c


Ignore:
Timestamp:
2006-01-23T23:28:13Z (18 years ago)
Author:
Jelmer Vernooij <jelmer@…>
Branches:
master
Children:
ec3e411
Parents:
7308b63 (diff), 68c7c14 (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.
Message:

Merge from Wilmer

File:
1 moved

Legend:

Unmodified
Added
Removed
  • root_commands.c

    r7308b63 r9fae35c  
    3232#include <string.h>
    3333
    34 command_t commands[] = {
    35         { "help",           0, cmd_help },
    36         { "identify",       1, cmd_identify },
    37         { "register",       1, cmd_register },
    38         { "drop",           1, cmd_drop },
    39         { "account",        1, cmd_account },
    40         { "add",            2, cmd_add },
    41         { "info",           1, cmd_info },
    42         { "rename",         2, cmd_rename },
    43         { "remove",         1, cmd_remove },
    44         { "block",          1, cmd_block },
    45         { "allow",          1, cmd_allow },
    46         { "save",           0, cmd_save },
    47         { "set",            0, cmd_set },
    48         { "yes",            0, cmd_yesno },
    49         { "no",             0, cmd_yesno },
    50         { "blist",          0, cmd_blist },
    51         { "nick",           1, cmd_nick },
    52         { "import_buddies", 1, cmd_import_buddies },
    53         { "qlist",          0, cmd_qlist },
    54         { NULL }
    55 };
    56 
    57 int cmd_help( irc_t *irc, char **cmd )
     34void root_command_string( irc_t *irc, user_t *u, char *command, int flags )
     35{
     36        char *cmd[IRC_MAX_ARGS];
     37        char *s;
     38        int k;
     39        char q = 0;
     40       
     41        memset( cmd, 0, sizeof( cmd ) );
     42        cmd[0] = command;
     43        k = 1;
     44        for( s = command; *s && k < ( IRC_MAX_ARGS - 1 ); s ++ )
     45                if( *s == ' ' && !q )
     46                {
     47                        *s = 0;
     48                        while( *++s == ' ' );
     49                        if( *s == '"' || *s == '\'' )
     50                        {
     51                                q = *s;
     52                                s ++;
     53                        }
     54                        if( *s )
     55                        {
     56                                cmd[k++] = s;
     57                                s --;
     58                        }
     59                }
     60                else if( *s == q )
     61                {
     62                        q = *s = 0;
     63                }
     64        cmd[k] = NULL;
     65       
     66        root_command( irc, cmd );
     67}
     68
     69void root_command( irc_t *irc, char *cmd[] )
     70{       
     71        int i;
     72       
     73        if( !cmd[0] )
     74                return;
     75       
     76        for( i = 0; commands[i].command; i++ )
     77                if( g_strcasecmp( commands[i].command, cmd[0] ) == 0 )
     78                {
     79                        if( !cmd[commands[i].required_parameters] )
     80                        {
     81                                irc_usermsg( irc, "Not enough parameters given (need %d)", commands[i].required_parameters );
     82                                return;
     83                        }
     84                        commands[i].execute( irc, cmd );
     85                        return;
     86                }
     87       
     88        irc_usermsg( irc, "Unknown command: %s. Please use \x02help commands\x02 to get a list of available commands.", cmd[0] );
     89}
     90
     91static void cmd_help( irc_t *irc, char **cmd )
    5892{
    5993        char param[80];
     
    75109                irc_usermsg( irc, "%s", s );
    76110                g_free( s );
    77                 return( 1 );
    78111        }
    79112        else
    80113        {
    81114                irc_usermsg( irc, "Error opening helpfile." );
    82                 return( 0 );
    83         }
    84 }
    85 
    86 int cmd_identify( irc_t *irc, char **cmd )
     115        }
     116}
     117
     118static void cmd_identify( irc_t *irc, char **cmd )
    87119{
    88120        storage_status_t status = storage_load( irc->nick, cmd[1], irc );
     
    97129        case STORAGE_OK:
    98130                irc_usermsg( irc, "Password accepted" );
     131                irc_umode_set( irc, "+R", 1 );
    99132                break;
    100133        default:
     
    102135                break;
    103136        }
    104 
    105         return( 0 );
    106 }
    107 
    108 int cmd_register( irc_t *irc, char **cmd )
     137}
     138
     139static void cmd_register( irc_t *irc, char **cmd )
    109140{
    110141        if( global.conf->authmode == AUTHMODE_REGISTERED )
    111142        {
    112143                irc_usermsg( irc, "This server does not allow registering new accounts" );
    113                 return( 0 );
     144                return;
    114145        }
    115146
     
    122153                case STORAGE_OK:
    123154                        irc->status = USTATUS_IDENTIFIED;
     155                        irc_umode_set( irc, "+R", 1 );
    124156                        break;
    125157
     
    128160                        break;
    129161        }
    130        
    131         return( 0 );
    132 }
    133 
    134 int cmd_drop( irc_t *irc, char **cmd )
     162}
     163
     164static void cmd_drop( irc_t *irc, char **cmd )
    135165{
    136166        storage_status_t status;
     
    140170        case STORAGE_NO_SUCH_USER:
    141171                irc_usermsg( irc, "That account does not exist" );
    142                 return( 0 );
     172                break;
    143173        case STORAGE_INVALID_PASSWORD:
    144174                irc_usermsg( irc, "Password invalid" );
    145                 return( 0 );
     175                break;
    146176        case STORAGE_OK:
    147177                irc_setpass( irc, NULL );
     178                irc->status = USTATUS_LOGGED_IN;
     179                irc_umode_set( irc, "-R", 1 );
    148180                irc_usermsg( irc, "Account `%s' removed", irc->nick );
    149                 return( 0 );
     181                break;
    150182        default:
    151183                irc_usermsg( irc, "Error: '%d'", status );
    152                 return( 0 );
    153         }
    154 }
    155 
    156 int cmd_account( irc_t *irc, char **cmd )
     184                break;
     185        }
     186}
     187
     188static void cmd_account( irc_t *irc, char **cmd )
    157189{
    158190        account_t *a;
     
    161193        {
    162194                irc_usermsg( irc, "This server only accepts registered users" );
    163                 return( 0 );
     195                return;
    164196        }
    165197       
     
    171203                {
    172204                        irc_usermsg( irc, "Not enough parameters" );
    173                         return( 0 );
     205                        return;
    174206                }
    175207               
     
    179211                {
    180212                        irc_usermsg( irc, "Unknown protocol" );
    181                         return( 0 );
     213                        return;
    182214                }
    183215
     
    241273                                {
    242274                                        irc_usermsg( irc, "Account already online" );
    243                                         return( 0 );
     275                                        return;
    244276                                }
    245277                                else
     
    251283                        {
    252284                                irc_usermsg( irc, "Invalid account" );
    253                                 return( 0 );
     285                                return;
    254286                        }
    255287                }
     
    297329                        {
    298330                                irc_usermsg( irc, "Account already offline" );
    299                                 return( 0 );
     331                                return;
    300332                        }
    301333                }
     
    303335                {
    304336                        irc_usermsg( irc, "Invalid account" );
    305                         return( 0 );
     337                        return;
    306338                }
    307339        }
     
    310342                irc_usermsg( irc, "Unknown command: account %s. Please use \x02help commands\x02 to get a list of available commands.", cmd[1] );
    311343        }
    312        
    313         return( 1 );
    314 }
    315 
    316 int cmd_add( irc_t *irc, char **cmd )
     344}
     345
     346static void cmd_add( irc_t *irc, char **cmd )
    317347{
    318348        account_t *a;
     
    321351        {
    322352                irc_usermsg( irc, "Invalid account" );
    323                 return( 1 );
     353                return;
    324354        }
    325355        else if( !( a->gc && ( a->gc->flags & OPT_LOGGED_IN ) ) )
    326356        {
    327357                irc_usermsg( irc, "That account is not on-line" );
    328                 return( 1 );
     358                return;
    329359        }
    330360       
     
    334364                {
    335365                        irc_usermsg( irc, "The requested nick `%s' is invalid", cmd[3] );
    336                         return( 0 );
     366                        return;
    337367                }
    338368                else if( user_find( irc, cmd[3] ) )
    339369                {
    340370                        irc_usermsg( irc, "The requested nick `%s' already exists", cmd[3] );
    341                         return( 0 );
     371                        return;
    342372                }
    343373                else
     
    350380       
    351381        irc_usermsg( irc, "User `%s' added to your contact list as `%s'", cmd[2], user_findhandle( a->gc, cmd[2] )->nick );
    352        
    353         return( 0 );
    354 }
    355 
    356 int cmd_info( irc_t *irc, char **cmd )
     382}
     383
     384static void cmd_info( irc_t *irc, char **cmd )
    357385{
    358386        struct gaim_connection *gc;
     
    365393                {
    366394                        irc_usermsg( irc, "Nick `%s' does not exist", cmd[1] );
    367                         return( 1 );
     395                        return;
    368396                }
    369397                gc = u->gc;
     
    373401        {
    374402                irc_usermsg( irc, "Invalid account" );
    375                 return( 1 );
     403                return;
    376404        }
    377405        else if( !( ( gc = a->gc ) && ( a->gc->flags & OPT_LOGGED_IN ) ) )
    378406        {
    379407                irc_usermsg( irc, "That account is not on-line" );
    380                 return( 1 );
     408                return;
    381409        }
    382410       
     
    384412        {
    385413                irc_usermsg( irc, "Command `%s' not supported by this protocol", cmd[0] );
    386                 return( 1 );
    387         }
    388         gc->prpl->get_info( gc, cmd[2] );
    389        
    390         return( 0 );
    391 }
    392 
    393 int cmd_rename( irc_t *irc, char **cmd )
     414        }
     415        else
     416        {
     417                gc->prpl->get_info( gc, cmd[2] );
     418        }
     419}
     420
     421static void cmd_rename( irc_t *irc, char **cmd )
    394422{
    395423        user_t *u;
     
    398426        {
    399427                irc_usermsg( irc, "Nick `%s' can't be changed", cmd[1] );
    400                 return( 1 );
    401         }
    402         if( user_find( irc, cmd[2] ) && ( nick_cmp( cmd[1], cmd[2] ) != 0 ) )
     428        }
     429        else if( user_find( irc, cmd[2] ) && ( nick_cmp( cmd[1], cmd[2] ) != 0 ) )
    403430        {
    404431                irc_usermsg( irc, "Nick `%s' already exists", cmd[2] );
    405                 return( 1 );
    406         }
    407         if( !nick_ok( cmd[2] ) )
     432        }
     433        else if( !nick_ok( cmd[2] ) )
    408434        {
    409435                irc_usermsg( irc, "Nick `%s' is invalid", cmd[2] );
    410                 return( 1 );
    411         }
    412         if( !( u = user_find( irc, cmd[1] ) ) )
     436        }
     437        else if( !( u = user_find( irc, cmd[1] ) ) )
    413438        {
    414439                irc_usermsg( irc, "Nick `%s' does not exist", cmd[1] );
    415                 return( 1 );
    416         }
    417         user_rename( irc, cmd[1], cmd[2] );
    418         irc_write( irc, ":%s!%s@%s NICK %s", cmd[1], u->user, u->host, cmd[2] );
    419         if( g_strcasecmp( cmd[1], irc->mynick ) == 0 )
    420         {
    421                 g_free( irc->mynick );
    422                 irc->mynick = g_strdup( cmd[2] );
    423         }
    424         else if( u->send_handler == buddy_send_handler )
    425         {
    426                 nick_set( irc, u->handle, u->gc->prpl, cmd[2] );
    427         }
    428        
    429         irc_usermsg( irc, "Nick successfully changed" );
    430        
    431         return( 0 );
    432 }
    433 
    434 int cmd_remove( irc_t *irc, char **cmd )
     440        }
     441        else
     442        {
     443                user_rename( irc, cmd[1], cmd[2] );
     444                irc_write( irc, ":%s!%s@%s NICK %s", cmd[1], u->user, u->host, cmd[2] );
     445                if( g_strcasecmp( cmd[1], irc->mynick ) == 0 )
     446                {
     447                        g_free( irc->mynick );
     448                        irc->mynick = g_strdup( cmd[2] );
     449                }
     450                else if( u->send_handler == buddy_send_handler )
     451                {
     452                        nick_set( irc, u->handle, u->gc->prpl, cmd[2] );
     453                }
     454               
     455                irc_usermsg( irc, "Nick successfully changed" );
     456        }
     457}
     458
     459static void cmd_remove( irc_t *irc, char **cmd )
    435460{
    436461        user_t *u;
     
    440465        {
    441466                irc_usermsg( irc, "Buddy `%s' not found", cmd[1] );
    442                 return( 1 );
     467                return;
    443468        }
    444469        s = g_strdup( u->handle );
     
    451476        g_free( s );
    452477       
    453         return( 0 );
    454 }
    455 
    456 int cmd_block( irc_t *irc, char **cmd )
     478        return;
     479}
     480
     481static void cmd_block( irc_t *irc, char **cmd )
    457482{
    458483        struct gaim_connection *gc;
     
    465490                {
    466491                        irc_usermsg( irc, "Nick `%s' does not exist", cmd[1] );
    467                         return( 1 );
     492                        return;
    468493                }
    469494                gc = u->gc;
     
    473498        {
    474499                irc_usermsg( irc, "Invalid account" );
    475                 return( 1 );
     500                return;
    476501        }
    477502        else if( !( ( gc = a->gc ) && ( a->gc->flags & OPT_LOGGED_IN ) ) )
    478503        {
    479504                irc_usermsg( irc, "That account is not on-line" );
    480                 return( 1 );
     505                return;
    481506        }
    482507       
     
    491516                irc_usermsg( irc, "Buddy `%s' moved from your permit- to your deny-list", cmd[2] );
    492517        }
    493        
    494         return( 0 );
    495 }
    496 
    497 int cmd_allow( irc_t *irc, char **cmd )
     518}
     519
     520static void cmd_allow( irc_t *irc, char **cmd )
    498521{
    499522        struct gaim_connection *gc;
     
    506529                {
    507530                        irc_usermsg( irc, "Nick `%s' does not exist", cmd[1] );
    508                         return( 1 );
     531                        return;
    509532                }
    510533                gc = u->gc;
     
    514537        {
    515538                irc_usermsg( irc, "Invalid account" );
    516                 return( 1 );
     539                return;
    517540        }
    518541        else if( !( ( gc = a->gc ) && ( a->gc->flags & OPT_LOGGED_IN ) ) )
    519542        {
    520543                irc_usermsg( irc, "That account is not on-line" );
    521                 return( 1 );
     544                return;
    522545        }
    523546       
     
    533556                irc_usermsg( irc, "Buddy `%s' moved from your deny- to your permit-list", cmd[2] );
    534557        }
    535        
    536         return( 0 );
    537 }
    538 
    539 int cmd_yesno( irc_t *irc, char **cmd )
     558}
     559
     560static void cmd_yesno( irc_t *irc, char **cmd )
    540561{
    541562        query_t *q = NULL;
     
    545566        {
    546567                irc_usermsg( irc, "Did I ask you something?" );
    547                 return( 0 );
     568                return;
    548569        }
    549570       
     
    555576                {
    556577                        irc_usermsg( irc, "Invalid query number" );
    557                         return( 0 );
     578                        return;
    558579                }
    559580               
     
    565586                {
    566587                        irc_usermsg( irc, "Uhm, I never asked you something like that..." );
    567                         return( 0 );
     588                        return;
    568589                }
    569590        }
     
    573594        else if( g_strcasecmp( cmd[0], "no" ) == 0 )
    574595                query_answer( irc, q, 0 );
    575        
    576         return( 1 );
    577 }
    578 
    579 int cmd_set( irc_t *irc, char **cmd )
     596}
     597
     598static void cmd_set( irc_t *irc, char **cmd )
    580599{
    581600        if( cmd[1] && cmd[2] )
     
    599618                }
    600619        }
    601        
    602         return( 0 );
    603 }
    604 
    605 int cmd_save( irc_t *irc, char **cmd )
     620}
     621
     622static void cmd_save( irc_t *irc, char **cmd )
    606623{
    607624        if( storage_save( irc, TRUE ) == STORAGE_OK )
     
    609626        else
    610627                irc_usermsg( irc, "Configuration could not be saved!" );
    611        
    612         return( 0 );
    613 }
    614 
    615 int cmd_blist( irc_t *irc, char **cmd )
     628}
     629
     630static void cmd_blist( irc_t *irc, char **cmd )
    616631{
    617632        int online = 0, away = 0, offline = 0;
     
    655670       
    656671        irc_usermsg( irc, "%d buddies (%d available, %d away, %d offline)", n_online + n_away + n_offline, n_online, n_away, n_offline );
    657        
    658         return( 0 );
    659 }
    660 
    661 int cmd_nick( irc_t *irc, char **cmd )
     672}
     673
     674static void cmd_nick( irc_t *irc, char **cmd )
    662675{
    663676        account_t *a;
     
    691704                        a->gc->prpl->set_info( a->gc, cmd[2] );
    692705        }
    693        
    694         return( 1 );
    695 }
    696 
    697 int cmd_qlist( irc_t *irc, char **cmd )
     706}
     707
     708static void cmd_qlist( irc_t *irc, char **cmd )
    698709{
    699710        query_t *q = irc->queries;
     
    703714        {
    704715                irc_usermsg( irc, "There are no pending questions." );
    705                 return( 0 );
     716                return;
    706717        }
    707718       
     
    713724                else
    714725                        irc_usermsg( irc, "%d, BitlBee: %s", num, q->question );
    715        
    716         return( 0 );
    717 }
    718 
    719 int cmd_import_buddies( irc_t *irc, char **cmd )
     726}
     727
     728static void cmd_import_buddies( irc_t *irc, char **cmd )
    720729{
    721730        struct gaim_connection *gc;
     
    726735        {
    727736                irc_usermsg( irc, "Invalid account" );
    728                 return( 0 );
     737                return;
    729738        }
    730739        else if( !( ( gc = a->gc ) && ( a->gc->flags & OPT_LOGGED_IN ) ) )
    731740        {
    732741                irc_usermsg( irc, "That account is not on-line" );
    733                 return( 0 );
     742                return;
    734743        }
    735744       
     
    752761                {
    753762                        irc_usermsg( irc, "Invalid argument: %s", cmd[2] );
    754                         return( 0 );
     763                        return;
    755764                }
    756765        }
     
    766775       
    767776        irc_usermsg( irc, "Sent all add requests. Please wait for a while, the server needs some time to handle all the adds." );
    768        
    769         return( 0 );
    770 }
     777}
     778
     779const command_t commands[] = {
     780        { "help",           0, cmd_help,           0 },
     781        { "identify",       1, cmd_identify,       0 },
     782        { "register",       1, cmd_register,       0 },
     783        { "drop",           1, cmd_drop,           0 },
     784        { "account",        1, cmd_account,        0 },
     785        { "add",            2, cmd_add,            0 },
     786        { "info",           1, cmd_info,           0 },
     787        { "rename",         2, cmd_rename,         0 },
     788        { "remove",         1, cmd_remove,         0 },
     789        { "block",          1, cmd_block,          0 },
     790        { "allow",          1, cmd_allow,          0 },
     791        { "save",           0, cmd_save,           0 },
     792        { "set",            0, cmd_set,            0 },
     793        { "yes",            0, cmd_yesno,          0 },
     794        { "no",             0, cmd_yesno,          0 },
     795        { "blist",          0, cmd_blist,          0 },
     796        { "nick",           1, cmd_nick,           0 },
     797        { "import_buddies", 1, cmd_import_buddies, 0 },
     798        { "qlist",          0, cmd_qlist,          0 },
     799        { NULL }
     800};
Note: See TracChangeset for help on using the changeset viewer.