Ticket #4081: cookies-01.diff

File cookies-01.diff, 9.8 KB (added by jordan, 11 years ago)

first draft

  • libtransmission/rpcimpl.c

     
    10991099{
    11001100    const int port = tr_sessionGetPeerPort( session );
    11011101    char * url = tr_strdup_printf( "http://portcheck.transmissionbt.com/%d", port );
    1102     tr_webRun( session, url, NULL, portTested, idle_data );
     1102    tr_webRun( session, url, NULL, NULL, portTested, idle_data );
    11031103    tr_free( url );
    11041104    return NULL;
    11051105}
     
    12051205                 tr_benc                  * args_out UNUSED,
    12061206                 struct tr_rpc_idle_data  * idle_data )
    12071207{
    1208     tr_webRun( session, session->blocklist_url, NULL, gotNewBlocklist, idle_data );
     1208    tr_webRun( session, session->blocklist_url, NULL, NULL, gotNewBlocklist, idle_data );
    12091209    return NULL;
    12101210}
    12111211
     
    13301330    {
    13311331        int64_t      i;
    13321332        tr_bool      boolVal;
     1333        tr_benc    * l;
    13331334        const char * str;
    1334         tr_benc    * l;
     1335        const char * cookies = NULL;
    13351336        tr_ctor    * ctor = tr_ctorNew( session );
    13361337
    13371338        /* set the optional arguments */
    13381339
     1340        tr_bencDictFindStr( args_in, "cookies", &cookies );
     1341
    13391342        if( tr_bencDictFindStr( args_in, TR_PREFS_KEY_DOWNLOAD_DIR, &str ) )
    13401343            tr_ctorSetDownloadDir( ctor, TR_FORCE, str );
    13411344
     
    13871390            struct add_torrent_idle_data * d = tr_new0( struct add_torrent_idle_data, 1 );
    13881391            d->data = idle_data;
    13891392            d->ctor = ctor;
    1390             tr_webRun( session, filename, NULL, gotMetadataFromURL, d );
     1393            tr_webRun( session, filename, NULL, cookies, gotMetadataFromURL, d );
    13911394        }
    13921395        else
    13931396        {
  • libtransmission/webseed.c

     
    290290        url = make_url( t->webseed, file );
    291291        tr_snprintf( range, sizeof range, "%"PRIu64"-%"PRIu64,
    292292                     file_offset, file_offset + this_pass - 1 );
    293         tr_webRunWithBuffer( t->session, url, range,
     293        tr_webRunWithBuffer( t->session, url, range, NULL,
    294294                             web_response_func, t, t->content );
    295295        tr_free( url );
    296296    }
  • libtransmission/torrent-ctor.c

     
    4646
    4747    struct optional_args    optionalArgs[2];
    4848
     49    char                  * cookies;
    4950    char                  * incompleteDir;
    5051
    5152    tr_file_index_t       * want;
  • libtransmission/announcer-http.c

     
    289289    tr_strlcpy( d->log_name, request->log_name, sizeof( d->log_name ) );
    290290
    291291    dbgmsg( request->log_name, "Sending announce to libcurl: \"%s\"", url );
    292     tr_webRun( session, url, NULL, on_announce_done, d );
     292    tr_webRun( session, url, NULL, NULL, on_announce_done, d );
    293293    tr_free( url );
    294294}
    295295
     
    443443    tr_strlcpy( d->log_name, request->log_name, sizeof( d->log_name ) );
    444444
    445445    dbgmsg( request->log_name, "Sending scrape to libcurl: \"%s\"", url );
    446     tr_webRun( session, url, NULL, on_scrape_done, d );
     446    tr_webRun( session, url, NULL, NULL, on_scrape_done, d );
    447447    tr_free( url );
    448448}
  • libtransmission/web.c

     
    7979    struct evbuffer * freebuf;
    8080    char * url;
    8181    char * range;
     82    char * cookies;
    8283    tr_session * session;
    8384    tr_web_done_func * done_func;
    8485    void * done_func_user_data;
     
    8990{
    9091    if( task->freebuf )
    9192        evbuffer_free( task->freebuf );
     93    tr_free( task->cookies );
    9294    tr_free( task->range );
    9395    tr_free( task->url );
    9496    tr_free( task );
     
    180182    else if ((( addr = tr_sessionGetPublicAddress( s, TR_AF_INET6, &is_default_value ))) && !is_default_value )
    181183        curl_easy_setopt( e, CURLOPT_INTERFACE, tr_ntop_non_ts( addr ) );
    182184
     185    if( task->cookies != NULL )
     186        curl_easy_setopt( e, CURLOPT_COOKIE, task->cookies );
     187
    183188    if( task->range )
    184189        curl_easy_setopt( e, CURLOPT_RANGE, task->range );
    185190
     
    220225tr_webRun( tr_session         * session,
    221226           const char         * url,
    222227           const char         * range,
     228           const char         * cookies,
    223229           tr_web_done_func     done_func,
    224230           void               * done_func_user_data )
    225231{
    226     tr_webRunWithBuffer( session, url, range,
     232    tr_webRunWithBuffer( session, url, range, cookies,
    227233                         done_func, done_func_user_data,
    228234                         NULL );
    229235}
     
    232238tr_webRunWithBuffer( tr_session         * session,
    233239                     const char         * url,
    234240                     const char         * range,
     241                     const char         * cookies,
    235242                     tr_web_done_func     done_func,
    236243                     void               * done_func_user_data,
    237244                     struct evbuffer    * buffer )
     
    245252        task->session = session;
    246253        task->url = tr_strdup( url );
    247254        task->range = tr_strdup( range );
     255        task->cookies = tr_strdup( cookies);
    248256        task->done_func = done_func;
    249257        task->done_func_user_data = done_func_user_data;
    250258        task->response = buffer ? buffer : evbuffer_new( );
  • libtransmission/web.h

     
    5555void tr_webRun( tr_session        * session,
    5656                const char        * url,
    5757                const char        * range,
     58                const char        * cookies,
    5859                tr_web_done_func    done_func,
    5960                void              * done_func_user_data );
    6061
     
    6364void tr_webRunWithBuffer( tr_session         * session,
    6465                          const char         * url,
    6566                          const char         * range,
     67                          const char         * cookies,
    6668                          tr_web_done_func     done_func,
    6769                          void               * done_func_user_data,
    6870                          struct evbuffer    * buffer );
  • gtk/favicon.c

     
    111111            fav->contents = NULL;
    112112            fav->len = 0;
    113113
    114             tr_webRun( fav->session, url, NULL, favicon_web_done_cb, fav );
     114            tr_webRun( fav->session, url, NULL, NULL, favicon_web_done_cb, fav );
    115115            g_free( url );
    116116        }
    117117    }
     
    167167        data->host = g_strdup( host );
    168168        data->type = 0;
    169169
    170         tr_webRun( session, url, NULL, favicon_web_done_cb, data );
     170        tr_webRun( session, url, NULL, NULL, favicon_web_done_cb, data );
    171171        g_free( url );
    172172    }
    173173}
  • gtk/tr-core.c

     
    11941194        data->core = core;
    11951195        data->url = g_strdup( url );
    11961196        core_inc_busy( data->core );
    1197         tr_webRun( session, url, NULL, on_url_done, data );
     1197        tr_webRun( session, url, NULL, NULL, on_url_done, data );
    11981198    }
    11991199}
    12001200
  • extras/rpc-spec.txt

     
    347347
    348348   key                  | value type & description
    349349   ---------------------+-------------------------------------------------
     350   "cookies"            | string      pointer to a string of one or more cookies.
    350351   "download-dir"       | string      path to download the torrent to
    351352   "filename"           | string      filename or URL of the .torrent file
    352353   "metainfo"           | string      base64-encoded .torrent content
     
    362363   Either "filename" OR "metainfo" MUST be included.
    363364   All other arguments are optional.
    364365
     366   The format of the "cookies" should be NAME=CONTENTS, where NAME is the
     367   cookie name and CONTENTS is what the cookie should contain.
     368   Set multiple cookies like this: "name1=content1; name2=content2;" etc.
     369   <http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCOOKIE>
     370
    365371   Response arguments: on success, a "torrent-added" object in the
    366372                       form of one of 3.3's tr_info objects with the
    367373                       fields for id, name, and hashString.
     
    655661         |         | yes       | session-close  | new method
    656662   ------+---------+-----------+----------------+-------------------------------
    657663   13    | 2.30    | yes       | session-get    | new arg "isUTP" to the "peers" list
     664         |         | yes       | torrent-add    | new arg "cookies"
    658665         |         |        NO | torrent-get    | removed arg "peersKnown"
  • cli/cli.c

     
    269269    } else if( !memcmp( torrentPath, "magnet:?", 8 ) ) {
    270270        tr_ctorSetMetainfoFromMagnetLink( ctor, torrentPath );
    271271    } else if( !memcmp( torrentPath, "http", 4 ) ) {
    272         tr_webRun( h, torrentPath, NULL, onTorrentFileDownloaded, ctor );
     272        tr_webRun( h, torrentPath, NULL, NULL, onTorrentFileDownloaded, ctor );
    273273        waitingOnWeb = TRUE;
    274274        while( waitingOnWeb ) tr_wait_msec( 1000 );
    275275    } else {