Changeset 8164


Ignore:
Timestamp:
Apr 6, 2009, 4:36:00 PM (13 years ago)
Author:
charles
Message:

(trunk rpc) add a method to make the daemon test & see if the incoming peer port is open

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/rpc-spec.txt

    r8154 r8164  
    434434   Method name: "blocklist-update"
    435435   Request arguments: none
    436    Response arguments: "blocklist-size"
    437    
     436   Response arguments: a number "blocklist-size"
     437
     4384.4.  Port Checking
     439
     440   This method tests to see if your incoming peer port is accessible
     441   from the outside world.
     442
     443   Method name: "port-test"
     444   Request arguments: none
     445   Response arguments: a bool, "port-is-open"
    438446
    4394475.0.  Protocol Versions
     
    488496         |         | yes       |                | new method "torrent-reannounce"
    489497         |         | yes       |                | new method "blocklist-update"
     498         |         | yes       |                | new method "port-test"
    490499         |         |        NO | torrent-get    | removed arg "downloadLimitMode"
    491500         |         |        NO | torrent-get    | removed arg "uploadLimitMode"
  • trunk/libtransmission/rpcimpl.c

    r8148 r8164  
    759759
    760760static void
     761portTested( tr_session       * session UNUSED,
     762            long               response_code,
     763            const void       * response,
     764            size_t             response_byte_count,
     765            void             * user_data )
     766{
     767    char result[1024];
     768    struct tr_rpc_idle_data * data = user_data;
     769
     770    if( response_code != 200 )
     771    {
     772        tr_snprintf( result, sizeof( result ), "http error %ld: %s",
     773                     response_code, tr_webGetResponseStr( response_code ) );
     774    }
     775    else /* success */
     776    {
     777        const tr_bool isOpen = response_byte_count && *(char*)response == '1';
     778        tr_bencDictAddBool( data->args_out, "port-is-open", isOpen );
     779        tr_snprintf( result, sizeof( result ), "success" );
     780    }
     781
     782    tr_idle_function_done( data, result );
     783}
     784
     785static const char*
     786portTest( tr_session               * session,
     787          tr_benc                  * args_in UNUSED,
     788          tr_benc                  * args_out UNUSED,
     789          struct tr_rpc_idle_data  * idle_data )
     790{
     791    const int port = tr_sessionGetPeerPort( session );
     792    char * url = tr_strdup_printf( "http://portcheck.transmissionbt.com/%d", port );
     793    tr_webRun( session, url, NULL, portTest, idle_data );
     794    tr_free( url );
     795    return NULL;
     796}
     797
     798/***
     799****
     800***/
     801
     802static void
    761803gotNewBlocklist( tr_session       * session,
    762804                 long               response_code,
     
    11841226methods[] =
    11851227{
     1228    { "port-test",          FALSE, portTest            },
    11861229    { "blocklist-update",   FALSE, blocklistUpdate     },
    11871230    { "session-get",        TRUE,  sessionGet          },
Note: See TracChangeset for help on using the changeset viewer.