#1969 separate picking a random port from choosing a random port at startup

This commit is contained in:
Mitchell Livingston 2009-04-03 04:29:27 +00:00
parent a621b7eedb
commit aab0c1b87c
10 changed files with 66 additions and 30 deletions

View File

@ -422,7 +422,7 @@ readargs( int argc,
case 'P':
tr_bencDictAddStr( &top, "method", "session-set" );
tr_bencDictAddBool( args, TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED, TRUE);
tr_bencDictAddBool( args, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START, TRUE);
break;
case 'r':

View File

@ -369,7 +369,7 @@
"peer-limit-per-torrent" | number maximum global number of peers
"pex-enabled" | 'boolean' true means allow pex in public torrents
"peer-port" | number port number
"peer-port-random-enabled" | 'boolean' true means pick a random peer port on launch
"peer-port-random-on-start"| 'boolean' true means pick a random peer port on launch
"port-forwarding-enabled" | 'boolean' true means enabled
"rpc-version" | number the current RPC API version
"rpc-version-minimum" | number the minimum RPC API version supported

View File

@ -939,7 +939,7 @@ prefschanged( TrCore * core UNUSED,
{
tr_setMessageLevel( pref_int_get( key ) );
}
else if( !strcmp( key, TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED ) )
else if( !strcmp( key, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START ) )
{
/* FIXME */
}

View File

@ -970,9 +970,9 @@ sessionSet( tr_session * session,
tr_sessionSetPeerLimitPerTorrent( session, i );
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_PEX_ENABLED, &boolVal ) )
tr_sessionSetPexEnabled( session, boolVal );
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED, &boolVal ) && boolVal )
tr_sessionSetPeerPortRandom( session );
else if( tr_bencDictFindInt( args_in, TR_PREFS_KEY_PEER_PORT, &i ) )
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START, &boolVal ) )
tr_sessionSetPeerPortRandomOnStart( session, boolVal );
if( tr_bencDictFindInt( args_in, TR_PREFS_KEY_PEER_PORT, &i ) )
tr_sessionSetPeerPort( session, i );
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_PORT_FORWARDING, &boolVal ) )
tr_sessionSetPortForwardingEnabled( session, boolVal );
@ -1076,6 +1076,7 @@ sessionGet( tr_session * s,
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_LIMIT_TORRENT, tr_sessionGetPeerLimitPerTorrent( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_PEX_ENABLED, tr_sessionIsPexEnabled( s ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT, tr_sessionGetPeerPort( s ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START, tr_sessionGetPeerPortRandomOnStart( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_PORT_FORWARDING, tr_sessionIsPortForwardingEnabled( s ) );
tr_bencDictAddInt ( d, "rpc-version", 4 );
tr_bencDictAddInt ( d, "rpc-version-minimum", 1 );

View File

@ -254,7 +254,7 @@ tr_sessionGetDefaultSettings( tr_benc * d )
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_LIMIT_GLOBAL, atoi( TR_DEFAULT_PEER_LIMIT_GLOBAL_STR ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_LIMIT_TORRENT, atoi( TR_DEFAULT_PEER_LIMIT_TORRENT_STR ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT, atoi( TR_DEFAULT_PEER_PORT_STR ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED, FALSE );
tr_bencDictAddBool( d, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START, FALSE );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT_RANDOM_LOW, 1024 );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT_RANDOM_HIGH, 65535 );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_SOCKET_TOS, atoi( TR_DEFAULT_PEER_SOCKET_TOS_STR ) );
@ -308,7 +308,7 @@ tr_sessionGetSettings( tr_session * s, struct tr_benc * d )
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_LIMIT_GLOBAL, tr_sessionGetPeerLimit( s ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_LIMIT_TORRENT, s->peerLimitPerTorrent );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT, tr_sessionGetPeerPort( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED, s->isPortRandom );
tr_bencDictAddBool( d, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START, s->isPortRandom );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT_RANDOM_LOW, s->randomPortLow );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_PORT_RANDOM_HIGH, s->randomPortHigh );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_SOCKET_TOS, s->peerSocketTOS );
@ -589,7 +589,7 @@ tr_sessionInitImpl( void * vdata )
*** random port
**/
found = tr_bencDictFindBool( &settings, TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED, &boolVal );
found = tr_bencDictFindBool( &settings, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START, &boolVal );
assert( found );
session->isPortRandom = boolVal;
@ -793,22 +793,10 @@ tr_sessionSetPeerPort( tr_session * session,
{
assert( tr_isSession( session ) );
session->isPortRandom = FALSE;
session->peerPort = port;
setPortImpl( session, session->peerPort );
}
tr_port
tr_sessionSetPeerPortRandom( tr_session * session )
{
assert( tr_isSession( session ) );
session->isPortRandom = TRUE;
session->peerPort = getRandomPort( session );
setPortImpl( session, session->peerPort );
return session->peerPort;
}
tr_port
tr_sessionGetPeerPort( const tr_session * session )
{
@ -817,6 +805,33 @@ tr_sessionGetPeerPort( const tr_session * session )
return session->peerPort;
}
tr_port
tr_sessionSetPeerPortRandom( tr_session * session )
{
assert( tr_isSession( session ) );
session->peerPort = getRandomPort( session );
setPortImpl( session, session->peerPort );
return session->peerPort;
}
void
tr_sessionSetPeerPortRandomOnStart( tr_session * session,
tr_bool random )
{
assert( tr_isSession( session ) );
session->isPortRandom = TRUE;
}
tr_bool
tr_sessionGetPeerPortRandomOnStart( tr_session * session )
{
assert( tr_isSession( session ) );
return session->isPortRandom;
}
tr_port_forwarding
tr_sessionGetPortForwarding( const tr_session * session )
{

View File

@ -177,7 +177,7 @@ static TR_INLINE tr_bool tr_isEncryptionMode( tr_encryption_mode m )
#define TR_PREFS_KEY_PEER_LIMIT_GLOBAL "peer-limit-global"
#define TR_PREFS_KEY_PEER_LIMIT_TORRENT "peer-limit-per-torrent"
#define TR_PREFS_KEY_PEER_PORT "peer-port"
#define TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED "peer-port-random-enabled"
#define TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START "peer-port-random-on-start"
#define TR_PREFS_KEY_PEER_PORT_RANDOM_LOW "peer-port-random-low"
#define TR_PREFS_KEY_PEER_PORT_RANDOM_HIGH "peer-port-random-high"
#define TR_PREFS_KEY_PEER_SOCKET_TOS "peer-socket-tos"
@ -538,9 +538,14 @@ tr_bool tr_sessionIsPortForwardingEnabled( const tr_session * session );
void tr_sessionSetPeerPort( tr_session * session,
tr_port port);
tr_port tr_sessionGetPeerPort( const tr_session * session );
tr_port tr_sessionSetPeerPortRandom( tr_session * session );
tr_port tr_sessionGetPeerPort( const tr_session * session );
void tr_sessionSetPeerPortRandomOnStart( tr_session * session,
tr_bool random );
tr_bool tr_sessionGetPeerPortRandomOnStart( tr_session * session );
typedef enum
{

View File

@ -224,7 +224,6 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
tr_bencInitDict(&settings, 32);
tr_sessionGetDefaultSettings(&settings);
#warning how to work with schedule?
const BOOL usesSpeedLimitSched = [fDefaults boolForKey: @"SpeedLimitAuto"];
if (!usesSpeedLimitSched)
tr_bencDictAddBool(&settings, TR_PREFS_KEY_ALT_SPEED_ENABLED, [fDefaults boolForKey: @"SpeedLimit"]);
@ -254,7 +253,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
tr_bencDictAddInt(&settings, TR_PREFS_KEY_PEER_LIMIT_TORRENT, [fDefaults integerForKey: @"PeersTorrent"]);
const BOOL randomPort = [fDefaults boolForKey: @"RandomPort"];
tr_bencDictAddBool(&settings, TR_PREFS_KEY_PEER_PORT_RANDOM_ENABLED, randomPort);
tr_bencDictAddBool(&settings, TR_PREFS_KEY_PEER_PORT_RANDOM_ON_START, randomPort);
if (!randomPort)
tr_bencDictAddInt(&settings, TR_PREFS_KEY_PEER_PORT, [fDefaults integerForKey: @"BindPort"]);

View File

@ -70,6 +70,7 @@
- (void) setPort: (id) sender;
- (void) randomPort: (id) sender;
- (void) setRandomPortOnStart: (id) sender;
- (void) setNat: (id) sender;
- (void) updatePortStatus;
- (void) portCheckerDidFinishProbing: (PortChecker *) portChecker;

View File

@ -353,6 +353,11 @@ tr_session * fHandle;
[self setPort: fPortField];
}
- (void) setRandomPortOnStart: (id) sender
{
tr_sessionSetPeerPortRandomOnStart(fHandle, [sender state] == NSOnState);
}
- (void) setNat: (id) sender
{
tr_sessionSetPortForwardingEnabled(fHandle, [fDefaults boolForKey: @"NatTraversal"]);

View File

@ -8,7 +8,7 @@
<string key="IBDocument.HIToolboxVersion">353.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="153"/>
<integer value="66"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -3366,7 +3366,7 @@ zcfN584IzijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE0
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="352903881">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -3956,7 +3956,6 @@ AAABAAAAAQ</bytes>
</object>
</object>
<string key="NSFrameSize">{542, 226}</string>
<reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
<string key="NSExtension">NSResponder</string>
</object>
@ -4419,7 +4418,7 @@ AAABAAAAAQ</bytes>
<string key="NSExtension">NSResponder</string>
</object>
<object class="NSCustomView" id="204700639">
<nil key="NSNextResponder"/>
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -5050,6 +5049,7 @@ AAABAAAAAQ</bytes>
</object>
</object>
<string key="NSFrameSize">{542, 345}</string>
<reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
<string key="NSExtension">NSResponder</string>
</object>
@ -8711,6 +8711,14 @@ AAABAAAAAQ</bytes>
</object>
<int key="connectionID">1903</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">setRandomPortOnStart:</string>
<reference key="source" ref="511492310"/>
<reference key="destination" ref="200017199"/>
</object>
<int key="connectionID">1904</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -12499,7 +12507,7 @@ AAABAAAAAQ</bytes>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">1903</int>
<int key="maxID">1904</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -12683,6 +12691,7 @@ AAABAAAAAQ</bytes>
<string>setRPCUseWhitelist:</string>
<string>setRPCUsername:</string>
<string>setRPCWebUIDiscovery:</string>
<string>setRandomPortOnStart:</string>
<string>setRatioStop:</string>
<string>setSound:</string>
<string>setSpeedLimit:</string>
@ -12742,6 +12751,7 @@ AAABAAAAAQ</bytes>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">