Ignore:
Timestamp:
Jun 11, 2007, 12:37:10 AM (15 years ago)
Author:
joshe
Message:

Send bad-format instead of not-supported where appropriate.
Implement supported message.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/IPCController.m

    r1966 r2043  
    6868void
    6969msg_setstr   ( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg );
     70void
     71msg_empty    ( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg );
     72void
     73msg_sup      ( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg );
    7074static void
    7175msg_default  ( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg );
     
    156160        0 > ipc_addmsg( _funcs, IPC_MSG_GETUPLIMIT,   msg_getint    ) ||
    157161        0 > ipc_addmsg( _funcs, IPC_MSG_LOOKUP,       msg_lookup    ) ||
     162        0 > ipc_addmsg( _funcs, IPC_MSG_NOOP,         msg_empty     ) ||
    158163        0 > ipc_addmsg( _funcs, IPC_MSG_PEX,          msg_setbool   ) ||
    159164        0 > ipc_addmsg( _funcs, IPC_MSG_PORT,         msg_setint    ) ||
     165        0 > ipc_addmsg( _funcs, IPC_MSG_QUIT,         msg_empty     ) ||
    160166        0 > ipc_addmsg( _funcs, IPC_MSG_REMOVE,       msg_action    ) ||
    161167        0 > ipc_addmsg( _funcs, IPC_MSG_REMOVEALL,    msg_actionall ) ||
     
    164170        0 > ipc_addmsg( _funcs, IPC_MSG_STOP,         msg_action    ) ||
    165171        0 > ipc_addmsg( _funcs, IPC_MSG_STOPALL,      msg_actionall ) ||
     172        0 > ipc_addmsg( _funcs, IPC_MSG_SUP,          msg_sup       ) ||
    166173        0 > ipc_addmsg( _funcs, IPC_MSG_UPLIMIT,      msg_setint    ) )
    167174    {
     
    542549    if( NULL == hashes )
    543550    {
    544         [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     551        [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    545552        return;
    546553    }
     
    578585  bad:
    579586    NSLog( @"Got bad IPC packet" );
    580     [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     587    [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    581588}
    582589
     
    592599    {
    593600        NSLog( @"Got bad IPC packet" );
    594         [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     601        [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    595602        return;
    596603    }
     
    614621    {
    615622        NSLog( @"Got bad IPC packet" );
    616         [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     623        [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    617624        return;
    618625    }
     
    685692    {
    686693        NSLog( @"Got bad IPC packet" );
    687         [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     694        [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    688695        return;
    689696    }
     
    763770  bad:
    764771    NSLog( @"Got bad IPC packet" );
    765     [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     772    [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    766773}
    767774
     
    826833    {
    827834        NSLog( @"Got bad IPC packet" );
    828         [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     835        [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    829836        return;
    830837    }
     
    851858    {
    852859        NSLog( @"Got bad IPC packet" );
    853         [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     860        [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    854861        return;
    855862    }
     
    876883    {
    877884        NSLog( @"Got bad IPC packet" );
    878         [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     885        [client sendrespEmpty: IPC_MSG_BAD tag: tag];
    879886        return;
    880887    }
     
    891898}
    892899
    893 
    894 void
    895 msg_default( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg )
     900void
     901msg_empty( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg )
    896902{
    897903    IPCClient * client = arg;
     
    907913            break;
    908914        default:
    909             [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
    910             break;
    911     }
    912 }
     915            assert( 0 );
     916            break;
     917    }
     918}
     919
     920void
     921msg_sup( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg )
     922{
     923    IPCClient       * client = arg;
     924    benc_val_t        packet, * pkval, * name;
     925    struct ipc_info * ipc;
     926    int               ii;
     927    enum ipc_msg      found;
     928    uint8_t         * buf;
     929    size_t            size;
     930
     931    if( NULL == val || TYPE_LIST != val->type )
     932        goto bad;
     933
     934    ipc   = [client ipc];
     935    pkval = ipc_initval( ipc, IPC_MSG_SUP, tag, &packet, TYPE_LIST );
     936    if( NULL == pkval )
     937        goto fail;
     938    if( tr_bencListReserve( pkval, val->val.l.count ) )
     939    {
     940        tr_bencFree( &packet );
     941        goto fail;
     942    }
     943
     944    for( ii = 0; val->val.l.count > ii; ii++ )
     945    {
     946        name = &val->val.l.vals[ii];
     947        if( NULL == name || TYPE_STR != name->type )
     948            goto bad;
     949        found = ipc_msgid( ipc, name->val.s.s );
     950        if( IPC__MSG_COUNT == found || !ipc_ishandled( ipc, found ) )
     951        {
     952            continue;
     953        }
     954        tr_bencInitStr( tr_bencListAdd( pkval ),
     955                        name->val.s.s, name->val.s.i, 1 );
     956    }
     957
     958    buf = ipc_mkval( &packet, &size );
     959    tr_bencFree( &packet );
     960    if( NULL == buf )
     961        goto fail;
     962    [client sendresp: buf size: size ];
     963    return;
     964
     965  bad:
     966    NSLog( @"Got bad IPC packet" );
     967    [client sendrespEmpty: IPC_MSG_BAD tag: tag];
     968    return;
     969
     970  fail:
     971    NSLog( @"Failed to create IPC reply packet" );
     972    [[client controller] killclient: client];
     973}
     974
     975void
     976msg_default( enum ipc_msg msgid, benc_val_t * val, int64_t tag, void * arg )
     977{
     978    IPCClient * client = arg;
     979
     980    [client sendrespEmpty: IPC_MSG_NOTSUP tag: tag];
     981}
Note: See TracChangeset for help on using the changeset viewer.