Changeset 5142


Ignore:
Timestamp:
Feb 27, 2008, 4:47:58 PM (14 years ago)
Author:
charles
Message:

make struct ipc_info opaque. const-ify the ipcparse functions where possible.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/client.c

    r5137 r5142  
    170170    if( NULL == con->ipc )
    171171    {
    172         mallocmsg( sizeof *con->ipc );
    173172        close( fd );
    174173        free( con );
     
    293292    if( NULL == con->ipc )
    294293    {
    295         mallocmsg( sizeof *con->ipc );
    296294        bufferevent_free( con->evin );
    297295        bufferevent_free( con->evout );
     
    763761    struct stritem * jj;
    764762
    765     if( !HASVERS( con->ipc ) )
     763    if( !ipc_hasvers( con->ipc ) )
    766764    {
    767765        return;
  • trunk/daemon/server.c

    r5137 r5142  
    245245        if( NULL == client->ipc )
    246246        {
    247             mallocmsg( sizeof *client->ipc );
    248247            close( clfd );
    249248            free( client );
  • trunk/gtk/ipc.c

    r5137 r5142  
    242242    }
    243243
    244     if( HASVERS( con->ipc ) && 0 == cli->msgid )
     244    if( ipc_hasvers( con->ipc ) && 0 == cli->msgid )
    245245    {
    246246        client_sendmsg( con );
  • trunk/libtransmission/ipcparse.c

    r5138 r5142  
    6363#define MSGNAME( id )           ( gl_msgs[(id)].name )
    6464#define DICTPAYLOAD( info )     ( 2 > (info)->vers )
     65
     66struct ipc_info
     67{
     68    struct ipc_funcs * funcs;
     69    int                vers;
     70};
     71
     72int
     73ipc_hasvers( const struct ipc_info * inf )
     74{
     75    return inf && ( inf->vers > 0 );
     76}
    6577
    6678struct msg
     
    219231
    220232static int
    221 ipc_havemsg( struct ipc_info * info, enum ipc_msg id )
     233ipc_havemsg( const struct ipc_info * info, enum ipc_msg id )
    222234{
    223235    assert( MSGVALID( id ) );
    224     assert( HASVERS( info ) );
     236    assert( ipc_hasvers( info ) );
    225237
    226238    return gl_msgs[id].minvers <= info->vers;
     
    228240
    229241tr_benc *
    230 ipc_initval( struct ipc_info * info, enum ipc_msg id, int64_t tag,
     242ipc_initval( const struct ipc_info * info, enum ipc_msg id, int64_t tag,
    231243             tr_benc * pk, int type )
    232244{
     
    292304
    293305uint8_t *
    294 ipc_mkempty( struct ipc_info * info, size_t * len, enum ipc_msg id,
     306ipc_mkempty( const struct ipc_info * info, size_t * len, enum ipc_msg id,
    295307             int64_t tag )
    296308{
     
    308320
    309321uint8_t *
    310 ipc_mkint( struct ipc_info * info, size_t * len, enum ipc_msg id, int64_t tag,
    311            int64_t num )
     322ipc_mkint( const struct ipc_info * info, size_t * len, enum ipc_msg id,
     323           int64_t tag, int64_t num )
    312324{
    313325    tr_benc pk, * val;
     
    326338
    327339uint8_t *
    328 ipc_mkstr( struct ipc_info * info, size_t * len, enum ipc_msg id, int64_t tag,
    329            const char * str )
     340ipc_mkstr( const struct ipc_info * info, size_t * len, enum ipc_msg id,
     341           int64_t tag, const char * str )
    330342{
    331343    tr_benc pk, * val;
     
    374386
    375387uint8_t *
    376 ipc_mkgetinfo( struct ipc_info * info, size_t * len, enum ipc_msg id,
     388ipc_mkgetinfo( const struct ipc_info * info, size_t * len, enum ipc_msg id,
    377389               int64_t tag, int types, const int * ids )
    378390{
     
    896908
    897909static int
    898 gotmsg( struct ipc_info * info, tr_benc * name, tr_benc * val,
     910gotmsg( const struct ipc_info * info, tr_benc * name, tr_benc * val,
    899911        tr_benc * tagval, void * arg )
    900912{
     
    941953
    942954static int
    943 handlemsgs( struct ipc_info * info, tr_benc * pay, void * arg )
     955handlemsgs( const struct ipc_info * info, tr_benc * pay, void * arg )
    944956{
    945957    tr_benc * name, * val, * tag;
    946958    int          ii;
    947959
    948     assert( HASVERS( info ) );
     960    assert( ipc_hasvers( info ) );
    949961
    950962    if( DICTPAYLOAD( info ) )
     
    10191031            return -1;
    10201032        }
    1021         if( 0 > ( HASVERS( info ) ? handlemsgs( info, &benc, arg ) :
    1022                                     handlevers( info, &benc ) ) )
     1033        if( 0 > ( ipc_hasvers( info ) ? handlemsgs( info, &benc, arg ) :
     1034                                        handlevers( info, &benc ) ) )
    10231035        {
    10241036            SAFEBENCFREE( &benc );
     
    10321044
    10331045enum ipc_msg
    1034 ipc_msgid( struct ipc_info * info, const char * name )
     1046ipc_msgid( const struct ipc_info * info, const char * name )
    10351047{
    10361048    const struct msg * msg = msglookup( name );
     
    10421054
    10431055int
    1044 ipc_ishandled( struct ipc_info * info, enum ipc_msg id )
     1056ipc_ishandled( const struct ipc_info * info, enum ipc_msg id )
    10451057{
    10461058    assert( MSGVALID( id ) );
     
    10501062
    10511063int
    1052 ipc_havetags( struct ipc_info * info )
     1064ipc_havetags( const struct ipc_info * info )
    10531065{
    10541066    return !DICTPAYLOAD( info );
  • trunk/libtransmission/ipcparse.h

    r5138 r5142  
    127127struct tr_stat;
    128128
    129 struct ipc_info
    130 {
    131     struct ipc_funcs * funcs;
    132     int                vers;
    133 };
    134129
    135 #define HASVERS( info )         ( 0 < (info)->vers )
    136 #define TORRENT_ID_VALID( id )  ( 0 < (id) && INT_MAX > (id) )
     130#define TORRENT_ID_VALID( id )  ( ( 0 < (id) ) && ( (id) < INT_MAX ) )
    137131
    138 typedef void ( *trd_msgfunc )( enum ipc_msg, struct tr_benc *, int64_t, void * );
     132typedef void ( *trd_msgfunc )( enum ipc_msg      msg_id,
     133                               struct tr_benc  * benc,
     134                               int64_t           tag,
     135                               void            * arg );
    139136
    140137/* any of these functions that can fail may set errno for any of the
     
    143140/* setup */
    144141struct ipc_funcs * ipc_initmsgs ( void );
    145 void               ipc_addmsg   ( struct ipc_funcs *, enum ipc_msg, trd_msgfunc );
     142void               ipc_addmsg   ( struct ipc_funcs *, enum ipc_msg,
     143                                  trd_msgfunc );
    146144void               ipc_setdefmsg( struct ipc_funcs *, trd_msgfunc );
    147145void               ipc_freemsgs ( struct ipc_funcs * );
    148146struct ipc_info *  ipc_newcon   ( struct ipc_funcs * );
    149147void               ipc_freecon  ( struct ipc_info * );
     148int                ipc_hasvers  ( const struct ipc_info * );
    150149
    151150/* message creation */
    152151/* sets errno to EPERM if requested message not supported by protocol vers */
    153 struct tr_benc * ipc_initval  ( struct ipc_info *, enum ipc_msg, int64_t,
    154                             struct tr_benc *, int );
     152struct tr_benc * ipc_initval  ( const struct ipc_info *, enum ipc_msg,
     153                                int64_t tag, struct tr_benc *, int );
    155154uint8_t *    ipc_mkval    ( const struct tr_benc *, size_t * );
    156 uint8_t *    ipc_mkempty  ( struct ipc_info *, size_t *, enum ipc_msg,
     155uint8_t *    ipc_mkempty  ( const struct ipc_info *, size_t *, enum ipc_msg,
    157156                            int64_t );
    158 uint8_t *    ipc_mkint    ( struct ipc_info *, size_t *, enum ipc_msg, int64_t,
    159                             int64_t );
    160 uint8_t *    ipc_mkstr    ( struct ipc_info *, size_t *, enum ipc_msg, int64_t,
    161                             const char * );
     157uint8_t *    ipc_mkint    ( const struct ipc_info *, size_t *, enum ipc_msg,
     158                            int64_t tag, int64_t val );
     159uint8_t *    ipc_mkstr    ( const struct ipc_info *, size_t *, enum ipc_msg,
     160                            int64_t tag, const char * val );
    162161uint8_t *    ipc_mkvers   ( size_t *, const char * );
    163 uint8_t *    ipc_mkgetinfo( struct ipc_info *, size_t *, enum ipc_msg, int64_t,
    164                             int, const int * );
    165 int          ipc_addinfo  ( struct tr_benc *, int, const struct tr_info *, int );
    166 int          ipc_addstat  ( struct tr_benc *, int, const struct tr_stat *, int );
     162uint8_t *    ipc_mkgetinfo( const struct ipc_info *, size_t *, enum ipc_msg,
     163                            int64_t, int, const int * );
     164int          ipc_addinfo  ( struct tr_benc *, int,
     165                            const struct tr_info *, int );
     166int          ipc_addstat  ( struct tr_benc *, int,
     167                            const struct tr_stat *, int );
    167168
    168169/* sets errno to EINVAL on parse error or
    169170   EPERM for unsupported protocol version */
    170 ssize_t      ipc_parse    ( struct ipc_info *, const uint8_t *, ssize_t, void * );
     171ssize_t      ipc_parse    ( struct ipc_info *, const uint8_t *,
     172                            ssize_t, void * );
    171173
    172174/* misc info functions, these will always succeed */
    173 enum ipc_msg ipc_msgid    ( struct ipc_info *, const char * );
    174 int          ipc_ishandled( struct ipc_info *, enum ipc_msg );
    175 int          ipc_havetags ( struct ipc_info * );
     175enum ipc_msg ipc_msgid    ( const struct ipc_info *, const char * );
     176int          ipc_ishandled( const struct ipc_info *, enum ipc_msg );
     177int          ipc_havetags ( const struct ipc_info * );
    176178int          ipc_infotypes( enum ipc_msg, const struct tr_benc * );
    177179const char * ipc_infoname ( enum ipc_msg, int );
Note: See TracChangeset for help on using the changeset viewer.