diff --git a/libtransmission/rpc-server.c b/libtransmission/rpc-server.c index 35be5db14..7e69420ae 100644 --- a/libtransmission/rpc-server.c +++ b/libtransmission/rpc-server.c @@ -27,11 +27,13 @@ #define MY_NAME "RPC Server" #define BUSY_INTERVAL_MSEC 30 -#define IDLE_INTERVAL_MSEC 1000 +#define IDLE_INTERVAL_MSEC 100 +#define UNUSED_INTERVAL_MSEC 1000 struct tr_rpc_server { int port; + time_t lastRequestTime; struct shttpd_ctx * ctx; tr_handle * session; struct evbuffer * in; @@ -96,16 +98,21 @@ rpcPulse( int socket UNUSED, short action UNUSED, void * vserver ) int interval; struct timeval tv; tr_rpc_server * server = vserver; + const time_t now = time( NULL ); assert( server ); shttpd_poll( server->ctx, 1 ); /* set a timer for the next pulse */ - if( EVBUFFER_LENGTH( server->in ) || EVBUFFER_LENGTH( server->out ) ) + if( EVBUFFER_LENGTH( server->in ) || EVBUFFER_LENGTH( server->out ) ) { interval = BUSY_INTERVAL_MSEC; - else + server->lastRequestTime = now; + } else if( now - server->lastRequestTime < 300 ) { interval = IDLE_INTERVAL_MSEC; + } else { + interval = UNUSED_INTERVAL_MSEC; + } tv = tr_timevalMsec( interval ); evtimer_add( &server->timer, &tv ); } @@ -116,7 +123,7 @@ startServer( tr_rpc_server * server ) if( !server->ctx ) { char ports[128]; - struct timeval tv = tr_timevalMsec( IDLE_INTERVAL_MSEC ); + struct timeval tv = tr_timevalMsec( UNUSED_INTERVAL_MSEC ); server->ctx = shttpd_init( ); snprintf( ports, sizeof( ports ), "%d", server->port ); diff --git a/libtransmission/rpc-server.h b/libtransmission/rpc-server.h index f86d53382..12a16ec9d 100644 --- a/libtransmission/rpc-server.h +++ b/libtransmission/rpc-server.h @@ -36,6 +36,10 @@ int tr_rpcSetTest ( const tr_rpc_server * server, const char * acl, char ** allocme_errmsg ); +int tr_rpcTestACL ( const tr_rpc_server * server, + const char * acl, + char ** allocme_errmsg ); + int tr_rpcSetACL ( tr_rpc_server * server, const char * acl, char ** allocme_errmsg );