Changeset 2042


Ignore:
Timestamp:
Jun 10, 2007, 11:56:35 PM (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/gtk/ipc.c

    r1959 r2042  
    108108smsg_quit( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
    109109static void
     110smsg_noop( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
     111static void
    110112smsg_info( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
    111113static void
     
    126128static void
    127129smsg_str( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
     130static void
     131smsg_sup( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
    128132static void
    129133all_default( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
     
    168172      0 > ipc_addmsg( con->msgs, IPC_MSG_GETUPLIMIT,   smsg_pref ) ||
    169173      0 > ipc_addmsg( con->msgs, IPC_MSG_LOOKUP,       smsg_look ) ||
     174      0 > ipc_addmsg( con->msgs, IPC_MSG_NOOP,         smsg_noop ) ||
    170175      0 > ipc_addmsg( con->msgs, IPC_MSG_PEX,          smsg_int ) ||
    171176      0 > ipc_addmsg( con->msgs, IPC_MSG_PORT,         smsg_int ) ||
     
    177182      0 > ipc_addmsg( con->msgs, IPC_MSG_STOP,         smsg_tor ) ||
    178183      0 > ipc_addmsg( con->msgs, IPC_MSG_STOPALL,      smsg_torall ) ||
     184      0 > ipc_addmsg( con->msgs, IPC_MSG_SUP,          smsg_sup ) ||
    179185      0 > ipc_addmsg( con->msgs, IPC_MSG_UPLIMIT,      smsg_int ) )
    180186  {
     
    554560    if( NULL == val || TYPE_LIST != val->type )
    555561    {
    556         simpleresp( con, tag, IPC_MSG_NOTSUP );
     562        simpleresp( con, tag, IPC_MSG_BAD );
    557563        return;
    558564    }
     
    587593    if( NULL == val || TYPE_DICT != val->type )
    588594    {
    589         simpleresp( con, tag, IPC_MSG_NOTSUP );
     595        simpleresp( con, tag, IPC_MSG_BAD );
    590596        return;
    591597    }
     
    601607        ( NULL != start && TYPE_INT != start->type ) )
    602608    {
    603         simpleresp( con, tag, IPC_MSG_NOTSUP );
     609        simpleresp( con, tag, IPC_MSG_BAD );
    604610        return;
    605611    }
     
    646652
    647653    tr_core_quit( srv->core );
     654}
     655
     656static void
     657smsg_noop( enum ipc_msg id SHUTUP, benc_val_t * val SHUTUP, int64_t tag,
     658           void * arg )
     659{
     660    simpleresp( arg, tag, IPC_MSG_OK );
    648661}
    649662
     
    662675    if( NULL == val || TYPE_DICT != val->type )
    663676    {
    664         simpleresp( con, tag, IPC_MSG_NOTSUP );
     677        simpleresp( con, tag, IPC_MSG_BAD );
    665678        return;
    666679    }
     
    672685        NULL == types || TYPE_LIST != types->type )
    673686    {
    674         simpleresp( con, tag, IPC_MSG_NOTSUP );
     687        simpleresp( con, tag, IPC_MSG_BAD );
    675688        return;
    676689    }
     
    728741    if( NULL == val || TYPE_LIST != val->type )
    729742    {
    730         simpleresp( con, tag, IPC_MSG_NOTSUP );
     743        simpleresp( con, tag, IPC_MSG_BAD );
    731744        return;
    732745    }
     
    806819    if( NULL == val || TYPE_LIST != val->type )
    807820    {
    808         simpleresp( con, tag, IPC_MSG_NOTSUP );
     821        simpleresp( con, tag, IPC_MSG_BAD );
    809822        return;
    810823    }
     
    859872    if( NULL == val || TYPE_LIST != val->type )
    860873    {
    861         simpleresp( con, tag, IPC_MSG_NOTSUP );
     874        simpleresp( con, tag, IPC_MSG_BAD );
    862875        return;
    863876    }
     
    10091022    if( NULL == val || TYPE_INT != val->type || INT_MAX < val->val.i )
    10101023    {
    1011         simpleresp( con, tag, IPC_MSG_NOTSUP );
     1024        simpleresp( con, tag, IPC_MSG_BAD );
    10121025        return;
    10131026    }
     
    10191032            break;
    10201033        case IPC_MSG_AUTOSTART:
    1021             simpleresp( con, tag, IPC_MSG_NOTSUP );
     1034            simpleresp( con, tag, IPC_MSG_BAD );
    10221035            return;
    10231036        case IPC_MSG_DOWNLIMIT:
     
    10671080    if( NULL == val || TYPE_STR != val->type )
    10681081    {
    1069         simpleresp( con, tag, IPC_MSG_NOTSUP );
     1082        simpleresp( con, tag, IPC_MSG_BAD );
    10701083        return;
    10711084    }
     
    10831096
    10841097static void
     1098smsg_sup( enum ipc_msg id SHUTUP, benc_val_t * val, int64_t tag, void * arg )
     1099{
     1100    struct constate      * con = arg;
     1101    benc_val_t             packet, * pkval, * name;
     1102    int                    ii;
     1103    enum ipc_msg           found;
     1104    uint8_t              * buf;
     1105    size_t                 size;
     1106
     1107    if( NULL == val || TYPE_LIST != val->type )
     1108    {
     1109        simpleresp( con, tag, IPC_MSG_BAD );
     1110        return;
     1111    }
     1112
     1113    pkval = ipc_initval( &con->ipc, IPC_MSG_SUP, tag, &packet, TYPE_LIST );
     1114    if( NULL == pkval )
     1115    {
     1116        simpleresp( con, tag, IPC_MSG_FAIL );
     1117        return;
     1118    }
     1119    if( tr_bencListReserve( pkval, val->val.l.count ) )
     1120    {
     1121        tr_bencFree( &packet );
     1122        simpleresp( con, tag, IPC_MSG_FAIL );
     1123        return;
     1124    }
     1125
     1126    for( ii = 0; val->val.l.count > ii; ii++ )
     1127    {
     1128        name = &val->val.l.vals[ii];
     1129        if( NULL == name || TYPE_STR != name->type )
     1130        {
     1131            continue;
     1132        }
     1133        found = ipc_msgid( &con->ipc, name->val.s.s );
     1134        if( IPC__MSG_COUNT == found || !ipc_ishandled( &con->ipc, found ) )
     1135        {
     1136            continue;
     1137        }
     1138        tr_bencInitStr( tr_bencListAdd( pkval ),
     1139                        name->val.s.s, name->val.s.i, 1 );
     1140    }
     1141
     1142    buf = ipc_mkval( &packet, &size );
     1143    tr_bencFree( &packet );
     1144    if( NULL == buf )
     1145    {
     1146        simpleresp( con, tag, IPC_MSG_FAIL );
     1147    }
     1148    else
     1149    {
     1150        io_send_keepdata( con->source, buf, size );
     1151    }
     1152}
     1153
     1154static void
    10851155all_default( enum ipc_msg id, benc_val_t * val SHUTUP, int64_t tag, void * arg )
    10861156{
     
    10891159        case IPC_MSG_FAIL:
    10901160        case IPC_MSG_NOTSUP:
     1161        case IPC_MSG_BAD:
    10911162        case IPC_MSG_OK:
    1092             break;
    1093         case IPC_MSG_NOOP:
    1094             simpleresp( arg, tag, IPC_MSG_OK );
    10951163            break;
    10961164        default:
Note: See TracChangeset for help on using the changeset viewer.