Changeset 4286


Ignore:
Timestamp:
Dec 22, 2007, 6:00:47 PM (15 years ago)
Author:
charles
Message:

save a copy of the torrent's metadata in tr_torrentInit(), not tr_torrentParse(). remove dead code from metainfo.c.

Location:
trunk/libtransmission
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/metainfo.c

    r4267 r4286  
    6868 * Local prototypes
    6969 **********************************************************************/
    70 static int realparse( tr_info * inf, const uint8_t * buf, size_t len );
    71 static int realparse2( tr_info * inf, const benc_val_t * meta );
    72 static void savedname( char * name, size_t len, const char * hash,
    73                        const char * tag );
    74 static uint8_t * readtorrent( const char * path, size_t * len );
    75 static int savetorrent( const char * hash, const char * tag,
    76                         const uint8_t * buf, size_t buflen );
    77 static int getfile( char * buf, int size,
    78                     const char * prefix, benc_val_t * name );
    7970static int getannounce( tr_info * inf, benc_val_t * meta );
    8071static char * announceToScrape( const char * announce );
     
    158149}
    159150
    160 /***********************************************************************
    161  * tr_metainfoParse
    162  ***********************************************************************
    163  *
    164  **********************************************************************/
    165151int
    166 tr_metainfoParseFile( tr_info * inf, const char * tag,
    167                       const char * path, int save )
    168 {
    169     uint8_t * buf;
    170     size_t    size;
    171 
    172     /* read the torrent data */
    173     buf = readtorrent( path, &size );
    174     if( NULL == buf )
    175     {
    176         return TR_EINVALID;
    177     }
    178 
    179     if( realparse( inf, buf, size ) )
    180     {
    181         free( buf );
    182         return TR_EINVALID;
    183     }
    184 
    185     if( save )
    186     {
    187         if( savetorrent( inf->hashString, tag, buf, size ) )
    188         {
    189             free( buf );
    190             return TR_EINVALID;
    191         }
    192         savedname( inf->torrent, sizeof inf->torrent, inf->hashString, tag );
    193     }
    194     else
    195     {
    196         snprintf( inf->torrent, sizeof inf->torrent, "%s", path );
    197     }
    198 
    199     free( buf );
    200 
    201     return TR_OK;
    202 }
    203 
    204 int
    205 tr_metainfoParseData( tr_info * inf, const char * tag,
    206                       const uint8_t * data, size_t size, int save )
    207 {
    208     if( realparse( inf, data, size ) )
    209     {
    210         return TR_EINVALID;
    211     }
    212 
    213     if( save )
    214     {
    215         if( savetorrent( inf->hashString, tag, data, size ) )
    216         {
    217             return TR_EINVALID;
    218         }
    219         savedname( inf->torrent, sizeof inf->torrent, inf->hashString, tag );
    220     }
    221 
    222     return TR_OK;
    223 }
    224 
    225 int
    226 tr_metainfoParseBenc( tr_info * inf, const char * tag, const benc_val_t * val, int save )
    227 {
    228     int err = 0;
    229 
    230     if( !err && realparse2( inf, val ) )
    231         err = TR_EINVALID;
    232 
    233     if( !err && save ) {
    234         int len;
    235         uint8_t * text = (uint8_t *) tr_bencSave( val, &len );
    236         err = savetorrent( inf->hashString, tag, text, len );
    237         tr_free( text );
    238         if( !err )
    239             savedname( inf->torrent, sizeof( inf->torrent ), inf->hashString, tag );
    240     }
    241 
    242     return err;
    243 }
    244 
    245 int
    246 tr_metainfoParseHash( tr_info * inf, const char * tag, const char * hash )
    247 {
    248     struct stat sb;
    249     uint8_t   * buf;
    250     size_t      size;
    251     int         save;
    252 
    253     /* check it we should use an old file without a tag */
    254     /* XXX this should go away at some point */
    255     save = 0;
    256     savedname( inf->torrent, sizeof inf->torrent, hash, tag );
    257     if( 0 > stat( inf->torrent, &sb ) && ENOENT == errno )
    258     {
    259         savedname( inf->torrent, sizeof inf->torrent, hash, NULL );
    260         if( 0 == stat( inf->torrent, &sb ))
    261         {
    262             save = 1;
    263         }
    264     }
    265 
    266     buf = readtorrent( inf->torrent, &size );
    267     if( NULL == buf )
    268     {
    269         return TR_EINVALID;
    270     }
    271 
    272     if( realparse( inf, buf, size ) )
    273     {
    274         free( buf );
    275         return TR_EINVALID;
    276     }
    277 
    278     /* save a new tagged copy of the old untagged torrent */
    279     if( save )
    280     {
    281         if( savetorrent( hash, tag, buf, size ) )
    282         {
    283             free( buf );
    284             return TR_EINVALID;
    285         }
    286         savedname( inf->torrent, sizeof inf->torrent, hash, tag );
    287     }
    288 
    289     free( buf );
    290 
    291     return TR_OK;
    292 }
    293 
    294 static int
    295 realparse( tr_info * inf, const uint8_t * buf, size_t size )
    296 {
    297     int err = 0;
    298     benc_val_t meta;
    299 
    300     if( !err && tr_bencLoad( buf, size, &meta, NULL ) ) {
    301         err = TR_EINVALID;
    302         tr_err( "Error while parsing bencoded data [%*.*s]", (int)size, (int)size, (char*)buf );
    303     }
    304 
    305     if( !err ) {
    306         err = realparse2( inf, &meta );
    307         tr_bencFree( &meta );
    308     }
    309 
    310     return err;
    311 }
    312 
    313 static int
    314 realparse2( tr_info * inf, const benc_val_t * meta_in )
     152tr_metainfoParse( tr_info * inf, const benc_val_t * meta_in )
    315153{
    316154    int i;
     
    745583}
    746584
    747 static uint8_t *
    748 readtorrent( const char * path, size_t * size )
    749 {
    750     return tr_loadFile( path, size );
    751 }
    752 
    753585/* Save a copy of the torrent file in the saved torrent directory */
    754 static int
    755 savetorrent( const char * hash, const char * tag,
    756              const uint8_t * buf, size_t buflen )
     586int
     587tr_metainfoSave( const char * hash, const char * tag,
     588                 const uint8_t * buf, size_t buflen )
    757589{
    758590    char   path[MAX_PATH_LENGTH];
  • trunk/libtransmission/metainfo.h

    r4267 r4286  
    3030struct benc_val_t;
    3131
    32 int tr_metainfoParseFile( tr_info *, const char * tag,
    33                           const char * path, int save );
    34 int tr_metainfoParseData( tr_info *, const char * tag,
    35                           const uint8_t * data, size_t size, int save );
    36 int tr_metainfoParseHash( tr_info *, const char * tag, const char * hash );
    37 int tr_metainfoParseBenc( tr_info *, const char * tag, const struct benc_val_s *, int save );
     32int tr_metainfoParse( tr_info *, const struct benc_val_s * );
    3833void tr_metainfoFree( tr_info * inf );
    3934void tr_metainfoRemoveSaved( const char * hashString, const char * tag );
    4035
     36int tr_metainfoSave( const char *hashString, const char * tag, const uint8_t * metainfo, size_t len );
     37
    4138#endif
  • trunk/libtransmission/torrent.c

    r4285 r4286  
    371371    tr_globalUnlock( h );
    372372
     373    /* maybe save our own copy of the metainfo */
     374    if( tr_ctorGetSave( ctor ) ) {
     375        const benc_val_t * val;
     376        if( !tr_ctorGetMetainfo( ctor, &val ) ) {
     377            int len;
     378            uint8_t * text = (uint8_t*) tr_bencSave( val, &len );
     379            tr_metainfoSave( tor->info.hashString,
     380                             tor->handle->tag,
     381                             text, len );
     382            tr_free( text );
     383        }
     384    }
     385
    373386    if( doStart )
    374387        tr_torrentStart( tor );
     
    389402
    390403int
    391 tr_torrentParseFromCtor( const tr_handle  * handle,
    392                          const tr_ctor    * ctor,
    393                          tr_info          * setmeInfo )
     404tr_torrentParse( const tr_handle  * handle,
     405                 const tr_ctor    * ctor,
     406                 tr_info          * setmeInfo )
    394407{
    395408    int err = 0;
     
    397410    tr_info tmp;
    398411    const benc_val_t * metainfo;
    399     const int doSave = tr_ctorGetSave( ctor );
    400412
    401413    if( setmeInfo == NULL )
     
    406418        return TR_EINVALID;
    407419
    408     err = tr_metainfoParseBenc( setmeInfo, handle->tag, metainfo, doSave );
     420    err = tr_metainfoParse( setmeInfo, metainfo );
    409421    doFree = !err && ( setmeInfo == &tmp );
    410422
     
    427439    tr_torrent * tor = NULL;
    428440
    429     err = tr_torrentParseFromCtor( handle, ctor, &tmpInfo );
     441    err = tr_torrentParse( handle, ctor, &tmpInfo );
    430442    if( !err ) {
    431443        tor = tr_new0( tr_torrent, 1 );
  • trunk/libtransmission/transmission.h

    r4285 r4286  
    452452 * call tr_metainfoFree( setme_info ) when done with it.
    453453 */
    454 int tr_torrentParseFromCtor( const tr_handle  * handle,
    455                              const tr_ctor    * ctor,
    456                              tr_info          * setme_info );
     454int tr_torrentParse( const tr_handle  * handle,
     455                     const tr_ctor    * ctor,
     456                     tr_info          * setme_info );
    457457
    458458/**
Note: See TracChangeset for help on using the changeset viewer.