@ -984,31 +984,36 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
}
}
proxyType addrProxy ;
bool fProxy = false ;
if ( mapArgs . count ( " -proxy " ) ) {
addrProxy = proxyType ( CService ( mapArgs [ " -proxy " ] , 9050 ) , GetBoolArg ( " -proxyrandomize " , true ) ) ;
bool proxyRandomize = GetBoolArg ( " -proxyrandomize " , true ) ;
// -proxy sets a proxy for all outgoing network traffic
// -noproxy (or -proxy=0) as well as the empty string can be used to not set a proxy, this is the default
std : : string proxyArg = GetArg ( " -proxy " , " " ) ;
if ( proxyArg ! = " " & & proxyArg ! = " 0 " ) {
proxyType addrProxy = proxyType ( CService ( proxyArg , 9050 ) , proxyRandomize ) ;
if ( ! addrProxy . IsValid ( ) )
return InitError ( strprintf ( _ ( " Invalid -proxy address: '%s' " ) , mapArgs [ " -proxy " ] ) ) ;
return InitError ( strprintf ( _ ( " Invalid -proxy address: '%s' " ) , proxyArg ) ) ;
SetProxy ( NET_IPV4 , addrProxy ) ;
SetProxy ( NET_IPV6 , addrProxy ) ;
SetProxy ( NET_TOR , addrProxy ) ;
SetNameProxy ( addrProxy ) ;
fProxy = true ;
SetReachable( NET_TOR ) ; // by default, -proxy sets onion as reachable, unless -noonion later
}
// -onion can override normal proxy, -noonion disables connecting to .onion entirely
if ( ! ( mapArgs . count ( " -onion " ) & & mapArgs [ " -onion " ] = = " 0 " ) & &
( fProxy | | mapArgs . count ( " -onion " ) ) ) {
proxyType addrOnion ;
if ( ! mapArgs . count ( " -onion " ) )
addrOnion = addrProxy ;
else
addrOnion = proxyType ( CService ( mapArgs [ " -onion " ] , 9050 ) , GetBoolArg ( " -proxyrandomize " , true ) ) ;
if ( ! addrOnion . IsValid ( ) )
return InitError ( strprintf ( _ ( " Invalid -onion address: '%s' " ) , mapArgs [ " -onion " ] ) ) ;
SetProxy ( NET_TOR , addrOnion ) ;
SetReachable ( NET_TOR ) ;
// -onion can be used to set only a proxy for .onion, or override normal proxy for .onion addresses
// -noonion (or -onion=0) disables connecting to .onion entirely
// An empty string is used to not override the onion proxy (in which case it defaults to -proxy set above, or none)
std : : string onionArg = GetArg ( " -onion " , " " ) ;
if ( onionArg ! = " " ) {
if ( onionArg = = " 0 " ) { // Handle -noonion/-onion=0
SetReachable ( NET_TOR , false ) ; // set onions as unreachable
} else {
proxyType addrOnion = proxyType ( CService ( onionArg , 9050 ) , proxyRandomize ) ;
if ( ! addrOnion . IsValid ( ) )
return InitError ( strprintf ( _ ( " Invalid -onion address: '%s' " ) , onionArg ) ) ;
SetProxy ( NET_TOR , addrOnion ) ;
SetReachable ( NET_TOR ) ;
}
}
// see Step 2: parameter interactions for more information about these