removed duplicated code, fixed compile, few additions

This commit is contained in:
sehraf 2015-09-07 11:51:24 +02:00
parent c17d0e1498
commit ba74c04581
6 changed files with 133 additions and 106 deletions

View file

@ -77,8 +77,10 @@ static const std::string kConfigDefaultProxyServerIpAddr = "127.0.0.1";
static const uint16_t kConfigDefaultProxyServerPort = 9050; // standard port. static const uint16_t kConfigDefaultProxyServerPort = 9050; // standard port.
static const std::string kConfigKeyExtIpFinder = "USE_EXTR_IP_FINDER"; static const std::string kConfigKeyExtIpFinder = "USE_EXTR_IP_FINDER";
static const std::string kConfigKeyProxyServerIpAddr = "PROXY_SERVER_IPADDR"; static const std::string kConfigKeyProxyServerIpAddrTor = "PROXY_SERVER_IPADDR";
static const std::string kConfigKeyProxyServerPort = "PROXY_SERVER_PORT"; static const std::string kConfigKeyProxyServerPortTor = "PROXY_SERVER_PORT";
static const std::string kConfigKeyProxyServerIpAddrI2P = "PROXY_SERVER_IPADDR_I2P";
static const std::string kConfigKeyProxyServerPortI2P = "PROXY_SERVER_PORT_I2P";
void printConnectState(std::ostream &out, peerState &peer); void printConnectState(std::ostream &out, peerState &peer);
@ -373,12 +375,42 @@ bool p3PeerMgrIMPL::getGpgId(const RsPeerId &ssl_id, RsPgpId &gpgId)
bool p3PeerMgrIMPL::isHidden() bool p3PeerMgrIMPL::isHidden()
{ {
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/ return isHidden(RS_HIDDEN_TYPE_NONE);
return mOwnState.hiddenNode;
} }
/**
* @brief checks the hidden type of the own peer. When type RS_HIDDEN_TYPE_NONE is choosen it returns the 'hiddenNode' value instead
* @param type type to check. Use RS_HIDDEN_TYPE_NONE to check 'hiddenNode' value
* @return true when the peer has the same hidden type than type
*/
bool p3PeerMgrIMPL::isHidden(const uint32_t type)
{
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
switch (type) {
case RS_HIDDEN_TYPE_TOR:
return mOwnState.hiddenType == RS_HIDDEN_TYPE_TOR;
break;
case RS_HIDDEN_TYPE_I2P:
return mOwnState.hiddenType == RS_HIDDEN_TYPE_I2P;
break;
default:
return mOwnState.hiddenNode;
break;
}
}
bool p3PeerMgrIMPL::isHiddenPeer(const RsPeerId &ssl_id) bool p3PeerMgrIMPL::isHiddenPeer(const RsPeerId &ssl_id)
{
return isHiddenPeer(ssl_id, RS_HIDDEN_TYPE_NONE);
}
/**
* @brief checks the hidden type of a given ssl id. When type RS_HIDDEN_TYPE_NONE is choosen it returns the 'hiddenNode' value instead
* @param ssl_id to check
* @param type type to check. Use RS_HIDDEN_TYPE_NONE to check 'hiddenNode' value
* @return true when the peer has the same hidden type than type
*/
bool p3PeerMgrIMPL::isHiddenPeer(const RsPeerId &ssl_id, const uint32_t type)
{ {
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/ RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
@ -399,67 +431,17 @@ bool p3PeerMgrIMPL::isHiddenPeer(const RsPeerId &ssl_id)
std::cerr << "p3PeerMgrIMPL::isHiddenPeer(" << ssl_id << ") = " << (it->second).hiddenNode; std::cerr << "p3PeerMgrIMPL::isHiddenPeer(" << ssl_id << ") = " << (it->second).hiddenNode;
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
return (it->second).hiddenNode; switch (type) {
} case RS_HIDDEN_TYPE_TOR:
bool p3PeerMgrIMPL::isHiddenTor()
{
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
return mOwnState.hiddenType == RS_HIDDEN_TYPE_TOR;
}
bool p3PeerMgrIMPL::isHiddenTorPeer(const RsPeerId &ssl_id)
{
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
/* check for existing */
std::map<RsPeerId, peerState>::iterator it;
it = mFriendList.find(ssl_id);
if (it == mFriendList.end())
{
#ifdef PEER_DEBUG
std::cerr << "p3PeerMgrIMPL::isHiddenTorPeer(" << ssl_id << ") Missing Peer => false";
std::cerr << std::endl;
#endif
return false;
}
#ifdef PEER_DEBUG
std::cerr << "p3PeerMgrIMPL::isHiddenTorPeer(" << ssl_id << ") = " << (it->second).hiddenType;
std::cerr << std::endl;
#endif
return (it->second).hiddenType == RS_HIDDEN_TYPE_TOR; return (it->second).hiddenType == RS_HIDDEN_TYPE_TOR;
} break;
case RS_HIDDEN_TYPE_I2P:
bool p3PeerMgrIMPL::isHiddenI2P()
{
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
return mOwnState.hiddenType == RS_HIDDEN_TYPE_I2P;
}
bool p3PeerMgrIMPL::isHiddenI2PPeer(const RsPeerId &ssl_id)
{
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
/* check for existing */
std::map<RsPeerId, peerState>::iterator it;
it = mFriendList.find(ssl_id);
if (it == mFriendList.end())
{
#ifdef PEER_DEBUG
std::cerr << "p3PeerMgrIMPL::isHiddenI2PPeer(" << ssl_id << ") Missing Peer => false";
std::cerr << std::endl;
#endif
return false;
}
#ifdef PEER_DEBUG
std::cerr << "p3PeerMgrIMPL::isHiddenI2PPeer(" << ssl_id << ") = " << (it->second).hiddenType;
std::cerr << std::endl;
#endif
return (it->second).hiddenType == RS_HIDDEN_TYPE_I2P; return (it->second).hiddenType == RS_HIDDEN_TYPE_I2P;
break;
default:
return (it->second).hiddenNode;
break;
}
} }
bool hasEnding (std::string const &fullString, std::string const &ending) { bool hasEnding (std::string const &fullString, std::string const &ending) {
@ -1756,10 +1738,6 @@ bool p3PeerMgrIMPL::saveList(bool &cleanup, std::list<RsItem *>& saveData)
cleanup = false; cleanup = false;
bool useExtAddrFinder = mNetMgr->getIPServersEnabled(); bool useExtAddrFinder = mNetMgr->getIPServersEnabled();
// Store Proxy Server.
struct sockaddr_storage proxy_addr;
getProxyServerAddress(proxy_addr);
mPeerMtx.lock(); /****** MUTEX LOCKED *******/ mPeerMtx.lock(); /****** MUTEX LOCKED *******/
RsPeerNetItem *item = new RsPeerNetItem(); RsPeerNetItem *item = new RsPeerNetItem();
@ -1869,16 +1847,37 @@ bool p3PeerMgrIMPL::saveList(bool &cleanup, std::list<RsItem *>& saveData)
vitem->tlvkvs.pairs.push_back(kv) ; vitem->tlvkvs.pairs.push_back(kv) ;
// Store Proxy Server.
// Tor
struct sockaddr_storage proxy_addr;
getProxyServerAddress(RS_HIDDEN_TYPE_TOR, proxy_addr);
#ifdef PEER_DEBUG #ifdef PEER_DEBUG
std::cerr << "Saving proxyServerAddress: " << sockaddr_storage_tostring(proxy_addr); std::cerr << "Saving proxyServerAddress for Tor: " << sockaddr_storage_tostring(proxy_addr);
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
kv.key = kConfigKeyProxyServerIpAddr; kv.key = kConfigKeyProxyServerIpAddrTor;
kv.value = sockaddr_storage_iptostring(proxy_addr); kv.value = sockaddr_storage_iptostring(proxy_addr);
vitem->tlvkvs.pairs.push_back(kv) ; vitem->tlvkvs.pairs.push_back(kv) ;
kv.key = kConfigKeyProxyServerPort; kv.key = kConfigKeyProxyServerPortTor;
kv.value = sockaddr_storage_porttostring(proxy_addr);
vitem->tlvkvs.pairs.push_back(kv) ;
// I2P
getProxyServerAddress(RS_HIDDEN_TYPE_I2P, proxy_addr);
#ifdef PEER_DEBUG
std::cerr << "Saving proxyServerAddress for I2P: " << sockaddr_storage_tostring(proxy_addr);
std::cerr << std::endl;
#endif
kv.key = kConfigKeyProxyServerIpAddrI2P;
kv.value = sockaddr_storage_iptostring(proxy_addr);
vitem->tlvkvs.pairs.push_back(kv) ;
kv.key = kConfigKeyProxyServerPortI2P;
kv.value = sockaddr_storage_porttostring(proxy_addr); kv.value = sockaddr_storage_porttostring(proxy_addr);
vitem->tlvkvs.pairs.push_back(kv) ; vitem->tlvkvs.pairs.push_back(kv) ;
@ -1915,8 +1914,10 @@ bool p3PeerMgrIMPL::loadList(std::list<RsItem *>& load)
// DEFAULTS. // DEFAULTS.
bool useExtAddrFinder = true; bool useExtAddrFinder = true;
std::string proxyIpAddress = kConfigDefaultProxyServerIpAddr; std::string proxyIpAddressTor = kConfigDefaultProxyServerIpAddr;
uint16_t proxyPort = kConfigDefaultProxyServerPort; uint16_t proxyPortTor = kConfigDefaultProxyServerPort;
std::string proxyIpAddressI2P = kConfigDefaultProxyServerIpAddr;
uint16_t proxyPortI2P = kConfigDefaultProxyServerPort;
if (load.empty()) { if (load.empty()) {
std::cerr << "p3PeerMgrIMPL::loadList() list is empty, it may be a configuration problem." << std::endl; std::cerr << "p3PeerMgrIMPL::loadList() list is empty, it may be a configuration problem." << std::endl;
@ -2012,20 +2013,39 @@ bool p3PeerMgrIMPL::loadList(std::list<RsItem *>& load)
std::cerr << "setting use_extr_addr_finder to " << useExtAddrFinder << std::endl ; std::cerr << "setting use_extr_addr_finder to " << useExtAddrFinder << std::endl ;
#endif #endif
} }
else if (kit->key == kConfigKeyProxyServerIpAddr) // Tor
else if (kit->key == kConfigKeyProxyServerIpAddrTor)
{ {
proxyIpAddress = kit->value; proxyIpAddressTor = kit->value;
#ifdef PEER_DEBUG #ifdef PEER_DEBUG
std::cerr << "Loaded proxyIpAddress: " << proxyIpAddress; std::cerr << "Loaded proxyIpAddress for Tor: " << proxyIpAddress;
std::cerr << std::endl ; std::cerr << std::endl ;
#endif #endif
} }
else if (kit->key == kConfigKeyProxyServerPort) else if (kit->key == kConfigKeyProxyServerPortTor)
{ {
proxyPort = atoi(kit->value.c_str()); proxyPortTor = atoi(kit->value.c_str());
#ifdef PEER_DEBUG #ifdef PEER_DEBUG
std::cerr << "Loaded proxyPort: " << proxyPort; std::cerr << "Loaded proxyPort for Tor: " << proxyPort;
std::cerr << std::endl ;
#endif
}
// I2p
else if (kit->key == kConfigKeyProxyServerIpAddrI2P)
{
proxyIpAddressI2P = kit->value;
#ifdef PEER_DEBUG
std::cerr << "Loaded proxyIpAddress for I2P: " << proxyIpAddress;
std::cerr << std::endl ;
#endif
}
else if (kit->key == kConfigKeyProxyServerPortI2P)
{
proxyPortI2P = atoi(kit->value.c_str());
#ifdef PEER_DEBUG
std::cerr << "Loaded proxyPort for I2P: " << proxyPort;
std::cerr << std::endl ; std::cerr << std::endl ;
#endif #endif
} }
@ -2141,13 +2161,24 @@ bool p3PeerMgrIMPL::loadList(std::list<RsItem *>& load)
// Configure Proxy Server. // Configure Proxy Server.
struct sockaddr_storage proxy_addr; struct sockaddr_storage proxy_addr;
// Tor
sockaddr_storage_clear(proxy_addr); sockaddr_storage_clear(proxy_addr);
sockaddr_storage_ipv4_aton(proxy_addr, proxyIpAddress.c_str()); sockaddr_storage_ipv4_aton(proxy_addr, proxyIpAddressTor.c_str());
sockaddr_storage_ipv4_setport(proxy_addr, proxyPort); sockaddr_storage_ipv4_setport(proxy_addr, proxyPortTor);
if (sockaddr_storage_isValidNet(proxy_addr)) if (sockaddr_storage_isValidNet(proxy_addr))
{ {
setProxyServerAddress(proxy_addr); setProxyServerAddress(RS_HIDDEN_TYPE_TOR, proxy_addr);
}
// I2P
sockaddr_storage_clear(proxy_addr);
sockaddr_storage_ipv4_aton(proxy_addr, proxyIpAddressI2P.c_str());
sockaddr_storage_ipv4_setport(proxy_addr, proxyPortI2P);
if (sockaddr_storage_isValidNet(proxy_addr))
{
setProxyServerAddress(RS_HIDDEN_TYPE_I2P, proxy_addr);
} }
return true; return true;

View file

@ -190,11 +190,9 @@ virtual bool setProxyServerAddress(const uint32_t type, const struct sockaddr
virtual bool getProxyServerAddress(const uint32_t type, struct sockaddr_storage &proxy_addr) = 0; virtual bool getProxyServerAddress(const uint32_t type, struct sockaddr_storage &proxy_addr) = 0;
virtual bool getProxyServerStatus(const uint32_t type, uint32_t& status) = 0; virtual bool getProxyServerStatus(const uint32_t type, uint32_t& status) = 0;
virtual bool isHidden() = 0; virtual bool isHidden() = 0;
virtual bool isHidden(const uint32_t type) = 0;
virtual bool isHiddenPeer(const RsPeerId &ssl_id) = 0; virtual bool isHiddenPeer(const RsPeerId &ssl_id) = 0;
virtual bool isHiddenTor() = 0; virtual bool isHiddenPeer(const RsPeerId &ssl_id, const uint32_t type) = 0;
virtual bool isHiddenTorPeer(const RsPeerId &ssl_id) = 0;
virtual bool isHiddenI2P() = 0;
virtual bool isHiddenI2PPeer(const RsPeerId &ssl_id) = 0;
virtual bool getProxyAddress(const RsPeerId &ssl_id, struct sockaddr_storage &proxy_addr, std::string &domain_addr, uint16_t &domain_port) = 0; virtual bool getProxyAddress(const RsPeerId &ssl_id, struct sockaddr_storage &proxy_addr, std::string &domain_addr, uint16_t &domain_port) = 0;
@ -297,11 +295,9 @@ virtual bool setProxyServerAddress(const uint32_t type, const struct sockaddr
virtual bool getProxyServerAddress(const uint32_t type, struct sockaddr_storage &proxy_addr); virtual bool getProxyServerAddress(const uint32_t type, struct sockaddr_storage &proxy_addr);
virtual bool getProxyServerStatus(const uint32_t type, uint32_t &proxy_status); virtual bool getProxyServerStatus(const uint32_t type, uint32_t &proxy_status);
virtual bool isHidden(); virtual bool isHidden();
virtual bool isHidden(const uint32_t type);
virtual bool isHiddenPeer(const RsPeerId &ssl_id); virtual bool isHiddenPeer(const RsPeerId &ssl_id);
virtual bool isHiddenTor(); virtual bool isHiddenPeer(const RsPeerId &ssl_id, const uint32_t type);
virtual bool isHiddenTorPeer(const RsPeerId &ssl_id);
virtual bool isHiddenI2P();
virtual bool isHiddenI2PPeer(const RsPeerId &ssl_id);
virtual bool getProxyAddress(const RsPeerId& ssl_id, struct sockaddr_storage &proxy_addr, std::string &domain_addr, uint16_t &domain_port); virtual bool getProxyAddress(const RsPeerId& ssl_id, struct sockaddr_storage &proxy_addr, std::string &domain_addr, uint16_t &domain_port);
virtual uint32_t hiddenDomainToHiddenType(const std::string &domain); virtual uint32_t hiddenDomainToHiddenType(const std::string &domain);

View file

@ -91,7 +91,7 @@ pqiperson * pqisslpersongrp::locked_createPerson(const RsPeerId& id, pqilistener
pqiconnect *pqisc = new pqiconnect(pqip, rss, pqis); pqiconnect *pqisc = new pqiconnect(pqip, rss, pqis);
if (mPeerMgr->isHiddenI2P() | mPeerMgr->isHiddenI2PPeer(id)) if (mPeerMgr->isHidden(RS_HIDDEN_TYPE_I2P) | mPeerMgr->isHiddenPeer(id, RS_HIDDEN_TYPE_I2P))
pqip -> addChildInterface(PQI_CONNECT_HIDDEN_I2P_TCP, pqisc); pqip -> addChildInterface(PQI_CONNECT_HIDDEN_I2P_TCP, pqisc);
else else
/* default tor */ /* default tor */

View file

@ -355,8 +355,8 @@ class RsPeers
virtual bool setNetworkMode(const RsPeerId &ssl_id, uint32_t netMode) = 0; virtual bool setNetworkMode(const RsPeerId &ssl_id, uint32_t netMode) = 0;
virtual bool setVisState(const RsPeerId &ssl_id, uint16_t vs_disc, uint16_t vs_dht) = 0; virtual bool setVisState(const RsPeerId &ssl_id, uint16_t vs_disc, uint16_t vs_dht) = 0;
virtual bool getProxyServer(std::string &addr, uint16_t &port,uint32_t& status_flags) = 0; virtual bool getProxyServer(const uint32_t type, std::string &addr, uint16_t &port,uint32_t& status_flags) = 0;
virtual bool setProxyServer(const std::string &addr, const uint16_t port) = 0; virtual bool setProxyServer(const uint32_t type, const std::string &addr, const uint16_t port) = 0;
virtual void getIPServersList(std::list<std::string>& ip_servers) = 0; virtual void getIPServersList(std::list<std::string>& ip_servers) = 0;
virtual void allowServerIPDetermination(bool) = 0; virtual void allowServerIPDetermination(bool) = 0;

View file

@ -435,7 +435,7 @@ bool p3Peers::getPeerDetails(const RsPeerId& id, RsPeerDetails &d)
} }
else if (pcs.state & RS_PEER_S_CONNECTED) else if (pcs.state & RS_PEER_S_CONNECTED)
{ {
if(isProxyAddress(pcs.connectaddr) || mPeerMgr->isHidden()) if(isProxyAddress(RS_HIDDEN_TYPE_TOR, pcs.connectaddr) || isProxyAddress(RS_HIDDEN_TYPE_I2P, pcs.connectaddr) || mPeerMgr->isHidden())
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_TOR; d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_TOR;
else if (pcs.connecttype == RS_NET_CONN_TCP_ALL) else if (pcs.connecttype == RS_NET_CONN_TCP_ALL)
{ {
@ -457,13 +457,13 @@ bool p3Peers::getPeerDetails(const RsPeerId& id, RsPeerDetails &d)
return true; return true;
} }
bool p3Peers::isProxyAddress(const sockaddr_storage& addr) bool p3Peers::isProxyAddress(const uint32_t type, const sockaddr_storage& addr)
{ {
uint16_t port ; uint16_t port ;
std::string string_addr; std::string string_addr;
uint32_t status ; uint32_t status ;
if(!getProxyServer(string_addr, port, status)) if(!getProxyServer(type, string_addr, port, status))
return false ; return false ;
return sockaddr_storage_iptostring(addr)==string_addr && sockaddr_storage_port(addr)==port ; return sockaddr_storage_iptostring(addr)==string_addr && sockaddr_storage_port(addr)==port ;
@ -923,21 +923,21 @@ bool p3Peers::setVisState(const RsPeerId &id, uint16_t vs_disc, uint16_t vs_dht)
return mPeerMgr->setVisState(id, vs_disc, vs_dht); return mPeerMgr->setVisState(id, vs_disc, vs_dht);
} }
bool p3Peers::getProxyServer(std::string &addr, uint16_t &port, uint32_t &status) bool p3Peers::getProxyServer(const uint32_t type, std::string &addr, uint16_t &port, uint32_t &status)
{ {
#ifdef P3PEERS_DEBUG #ifdef P3PEERS_DEBUG
std::cerr << "p3Peers::getProxyServer()" << std::endl; std::cerr << "p3Peers::getProxyServer()" << std::endl;
#endif #endif
struct sockaddr_storage proxy_addr; struct sockaddr_storage proxy_addr;
mPeerMgr->getProxyServerAddressTor(proxy_addr); mPeerMgr->getProxyServerAddress(type, proxy_addr);
addr = sockaddr_storage_iptostring(proxy_addr); addr = sockaddr_storage_iptostring(proxy_addr);
port = sockaddr_storage_port(proxy_addr); port = sockaddr_storage_port(proxy_addr);
mPeerMgr->getProxyServerStatusTor(status); mPeerMgr->getProxyServerStatus(type, status);
return true; return true;
} }
bool p3Peers::setProxyServer(const std::string &addr_str, const uint16_t port) bool p3Peers::setProxyServer(const uint32_t type, const std::string &addr_str, const uint16_t port)
{ {
#ifdef P3PEERS_DEBUG #ifdef P3PEERS_DEBUG
std::cerr << "p3Peers::setProxyServer() " << std::endl; std::cerr << "p3Peers::setProxyServer() " << std::endl;
@ -958,7 +958,7 @@ bool p3Peers::setProxyServer(const std::string &addr_str, const uint16_t port)
#endif #endif
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/ /********************************** WINDOWS/UNIX SPECIFIC PART *******************/
{ {
return mPeerMgr->setProxyServerAddressTor(addr); return mPeerMgr->setProxyServerAddress(type, addr);
} }
else else
{ {

View file

@ -94,9 +94,9 @@ virtual bool setDynDNS(const RsPeerId &id, const std::string &dyndns);
virtual bool setNetworkMode(const RsPeerId &id, uint32_t netMode); virtual bool setNetworkMode(const RsPeerId &id, uint32_t netMode);
virtual bool setVisState(const RsPeerId &id, uint16_t vs_disc, uint16_t vs_dht); virtual bool setVisState(const RsPeerId &id, uint16_t vs_disc, uint16_t vs_dht);
virtual bool getProxyServer(std::string &addr, uint16_t &port,uint32_t& status); virtual bool getProxyServer(const uint32_t type, std::string &addr, uint16_t &port,uint32_t& status);
virtual bool setProxyServer(const std::string &addr, const uint16_t port); virtual bool setProxyServer(const uint32_t type,const std::string &addr, const uint16_t port);
virtual bool isProxyAddress(const sockaddr_storage&); virtual bool isProxyAddress(const uint32_t type,const sockaddr_storage&);
virtual void getIPServersList(std::list<std::string>& ip_servers) ; virtual void getIPServersList(std::list<std::string>& ip_servers) ;
virtual void allowServerIPDetermination(bool) ; virtual void allowServerIPDetermination(bool) ;