Merge pull request #1272 from G10h4ck/net_little_fixes

Net little fixes
This commit is contained in:
csoler 2018-05-22 23:59:26 +02:00 committed by GitHub
commit de65cb6dc0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 40 deletions

View file

@ -987,8 +987,8 @@ bool p3NetMgrIMPL::checkNetAddress()
bool addrChanged = false; bool addrChanged = false;
bool validAddr = false; bool validAddr = false;
struct sockaddr_storage prefAddr; sockaddr_storage prefAddr;
struct sockaddr_storage oldAddr; sockaddr_storage oldAddr;
if (mNetMode & RS_NET_MODE_TRY_LOOPBACK) if (mNetMode & RS_NET_MODE_TRY_LOOPBACK)
{ {
@ -996,7 +996,7 @@ bool p3NetMgrIMPL::checkNetAddress()
std::cerr << "p3NetMgrIMPL::checkNetAddress() LOOPBACK ... forcing to 127.0.0.1"; std::cerr << "p3NetMgrIMPL::checkNetAddress() LOOPBACK ... forcing to 127.0.0.1";
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
sockaddr_storage_ipv4_aton(prefAddr, "127.0.0.1"); sockaddr_storage_ipv4_aton(prefAddr, "127.0.0.1");
validAddr = true; validAddr = true;
} }
else else
@ -1012,7 +1012,7 @@ bool p3NetMgrIMPL::checkNetAddress()
std::vector<sockaddr_storage> addrs; std::vector<sockaddr_storage> addrs;
if (getLocalAddresses(addrs)) if (getLocalAddresses(addrs))
{ {
for (auto it = addrs.begin(); it!=addrs.end(); ++it) for (auto it = addrs.begin(); it != addrs.end(); ++it)
{ {
sockaddr_storage& addr(*it); sockaddr_storage& addr(*it);
if( sockaddr_storage_isValidNet(addr) && if( sockaddr_storage_isValidNet(addr) &&
@ -1060,8 +1060,8 @@ bool p3NetMgrIMPL::checkNetAddress()
{ {
RS_STACK_MUTEX(mNetMtx); RS_STACK_MUTEX(mNetMtx);
oldAddr = mLocalAddr; sockaddr_storage_copy(mLocalAddr, oldAddr);
addrChanged = !sockaddr_storage_sameip(prefAddr, mLocalAddr); addrChanged = !sockaddr_storage_sameip(prefAddr, mLocalAddr);
#ifdef NETMGR_DEBUG_TICK #ifdef NETMGR_DEBUG_TICK
@ -1087,7 +1087,7 @@ bool p3NetMgrIMPL::checkNetAddress()
// update address. // update address.
sockaddr_storage_copyip(mLocalAddr, prefAddr); sockaddr_storage_copyip(mLocalAddr, prefAddr);
mNetFlags.mLocalAddr = mLocalAddr; sockaddr_storage_copy(mLocalAddr, mNetFlags.mLocalAddr);
if(sockaddr_storage_isLoopbackNet(mLocalAddr)) if(sockaddr_storage_isLoopbackNet(mLocalAddr))
{ {
@ -1137,6 +1137,7 @@ bool p3NetMgrIMPL::checkNetAddress()
if (sockaddr_storage_sameip(mLocalAddr, mExtAddr)) if (sockaddr_storage_sameip(mLocalAddr, mExtAddr))
{ {
sockaddr_storage_setport(mExtAddr, sockaddr_storage_port(mLocalAddr)); sockaddr_storage_setport(mExtAddr, sockaddr_storage_port(mLocalAddr));
addrChanged = true;
} }
// ensure that address family is set, otherwise windows Barfs. // ensure that address family is set, otherwise windows Barfs.

View file

@ -1239,11 +1239,11 @@ bool p3PeerMgrIMPL::UpdateOwnAddress( const sockaddr_storage& pLocalAddr,
sockaddr_storage_copy(pExtAddr, extAddr); sockaddr_storage_copy(pExtAddr, extAddr);
sockaddr_storage_ipv6_to_ipv4(extAddr); sockaddr_storage_ipv6_to_ipv4(extAddr);
#ifdef PEER_DEBUG //#ifdef PEER_DEBUG
std::cerr << "p3PeerMgrIMPL::UpdateOwnAddress(" std::cerr << "p3PeerMgrIMPL::UpdateOwnAddress("
<< sockaddr_storage_tostring(localAddr) << ", " << sockaddr_storage_tostring(localAddr) << ", "
<< sockaddr_storage_tostring(extAddr) << ")" << std::endl; << sockaddr_storage_tostring(extAddr) << ")" << std::endl;
#endif //#endif
if( rsBanList && if( rsBanList &&
!rsBanList->isAddressAccepted(localAddr, !rsBanList->isAddressAccepted(localAddr,
@ -1428,21 +1428,25 @@ bool p3PeerMgrIMPL::setLocalAddress(const RsPeerId &id, const struct sockaddr
return changed; return changed;
} }
bool p3PeerMgrIMPL::setExtAddress(const RsPeerId &id, const struct sockaddr_storage &addr) bool p3PeerMgrIMPL::setExtAddress( const RsPeerId &id,
const sockaddr_storage &addr )
{ {
bool changed = false; bool changed = false;
uint32_t check_res = 0 ; uint32_t check_res = 0;
if(rsBanList!=NULL && !rsBanList->isAddressAccepted(addr,RSBANLIST_CHECKING_FLAGS_BLACKLIST,&check_res)) if( rsBanList!=NULL && !rsBanList->isAddressAccepted(
{ addr, RSBANLIST_CHECKING_FLAGS_BLACKLIST, &check_res) )
std::cerr << "(SS) trying to set external contact address for peer " << id << " to a banned address " << sockaddr_storage_iptostring(addr )<< std::endl; {
return false ; std::cerr << "(SS) trying to set external contact address for peer "
} << id << " to a banned address "
<< sockaddr_storage_iptostring(addr) << std::endl;
return false;
}
if (id == AuthSSL::getAuthSSL()->OwnId()) if (id == AuthSSL::getAuthSSL()->OwnId())
{ {
{ {
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/ RS_STACK_MUTEX(mPeerMtx);
if (!sockaddr_storage_same(mOwnState.serveraddr, addr)) if (!sockaddr_storage_same(mOwnState.serveraddr, addr))
{ {
mOwnState.serveraddr = addr; mOwnState.serveraddr = addr;
@ -1455,7 +1459,7 @@ bool p3PeerMgrIMPL::setExtAddress(const RsPeerId &id, const struct sockaddr_s
return changed; return changed;
} }
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/ RS_STACK_MUTEX(mPeerMtx);
/* check if it is a friend */ /* check if it is a friend */
std::map<RsPeerId, peerState>::iterator it; std::map<RsPeerId, peerState>::iterator it;
if (mFriendList.end() == (it = mFriendList.find(id))) if (mFriendList.end() == (it = mFriendList.find(id)))
@ -1463,7 +1467,9 @@ bool p3PeerMgrIMPL::setExtAddress(const RsPeerId &id, const struct sockaddr_s
if (mOthersList.end() == (it = mOthersList.find(id))) if (mOthersList.end() == (it = mOthersList.find(id)))
{ {
#ifdef PEER_DEBUG #ifdef PEER_DEBUG
std::cerr << "p3PeerMgrIMPL::setLocalAddress() cannot add addres info : peer id not found in friend list id: " << id << std::endl; std::cerr << "p3PeerMgrIMPL::setLocalAddress() cannot add addres "
<< "info : peer id not found in friend list id: " << id
<< std::endl;
#endif #endif
return false; return false;
} }

View file

@ -227,6 +227,15 @@ int pqissludp::Initiate_Connection()
return -1; return -1;
} }
if(!sockaddr_storage_ipv6_to_ipv4(remote_addr))
{
std::cerr << __PRETTY_FUNCTION__ << "Error: remote_addr is not "
<< "valid IPv4!" << std::endl;
sockaddr_storage_dump(remote_addr);
print_stacktrace();
return -EINVAL;
}
mTimeoutTS = time(NULL) + mConnectTimeout; mTimeoutTS = time(NULL) + mConnectTimeout;
//std::cerr << "Setting Connect Timeout " << mConnectTimeout << " Seconds into Future " << std::endl; //std::cerr << "Setting Connect Timeout " << mConnectTimeout << " Seconds into Future " << std::endl;
//std::cerr << " Connect Period is:" << mConnectPeriod << std::endl; //std::cerr << " Connect Period is:" << mConnectPeriod << std::endl;
@ -254,32 +263,22 @@ int pqissludp::Initiate_Connection()
struct sockaddr_in proxyaddr; struct sockaddr_in proxyaddr;
struct sockaddr_in remoteaddr; struct sockaddr_in remoteaddr;
bool nonIpV4 = false;
if(!sockaddr_storage_ipv6_to_ipv4(remote_addr))
{
nonIpV4 = true;
std::cerr << __PRETTY_FUNCTION__ << "Error: remote_addr is not "
<< "valid IPv4!" << std::endl;
sockaddr_storage_dump(remote_addr);
}
if(!sockaddr_storage_ipv6_to_ipv4(mConnectSrcAddr)) if(!sockaddr_storage_ipv6_to_ipv4(mConnectSrcAddr))
{ {
nonIpV4 = true;
std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectSrcAddr is " std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectSrcAddr is "
<< "not valid IPv4!" << std::endl; << "not valid IPv4!" << std::endl;
sockaddr_storage_dump(mConnectSrcAddr); sockaddr_storage_dump(mConnectSrcAddr);
print_stacktrace();
return -EINVAL;
} }
if(!sockaddr_storage_ipv6_to_ipv4(mConnectProxyAddr)) if(!sockaddr_storage_ipv6_to_ipv4(mConnectProxyAddr))
{ {
nonIpV4 = true;
std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectProxyAddr " std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectProxyAddr "
<< "is not valid IPv4!" << std::endl; << "is not valid IPv4!" << std::endl;
sockaddr_storage_dump(mConnectProxyAddr); sockaddr_storage_dump(mConnectProxyAddr);
}
if(!nonIpV4)
{
print_stacktrace(); print_stacktrace();
return -EINVAL; return -EINVAL;
} }
struct sockaddr_in *rap = (struct sockaddr_in *) &remote_addr; struct sockaddr_in *rap = (struct sockaddr_in *) &remote_addr;
@ -301,7 +300,6 @@ int pqissludp::Initiate_Connection()
err = tou_connect_via_relay(sockfd, &srcaddr, &proxyaddr, &remoteaddr); err = tou_connect_via_relay(sockfd, &srcaddr, &proxyaddr, &remoteaddr);
} }
/*** It seems that the UDP Layer sees x 1.2 the traffic of the SSL layer. /*** It seems that the UDP Layer sees x 1.2 the traffic of the SSL layer.
* We need to compensate somewhere... we drop the maximum traffic to 75% of limit * We need to compensate somewhere... we drop the maximum traffic to 75% of limit

View file

@ -336,8 +336,8 @@ bool p3Peers::getPeerDetails(const RsPeerId& id, RsPeerDetails &d)
if(!sockaddr_storage_isnull(ps.localaddr)) if(!sockaddr_storage_isnull(ps.localaddr))
{ {
sockaddr_storage_ipv6_to_ipv4(ps.localaddr); sockaddr_storage_ipv6_to_ipv4(ps.localaddr);
d.localAddr = sockaddr_storage_iptostring(ps.localaddr); d.localAddr = sockaddr_storage_iptostring(ps.localaddr);
d.localPort = sockaddr_storage_port(ps.localaddr); d.localPort = sockaddr_storage_port(ps.localaddr);
} }
else else
{ {

View file

@ -846,10 +846,15 @@ void ServerPage::updateStatus()
return; return;
} }
/* load up configuration from rsPeers */ /* load up configuration from rsPeers */
RsPeerDetails detail; RsPeerDetails detail;
if (!rsPeers->getPeerDetails(rsPeers->getOwnId(), detail)) if (!rsPeers->getPeerDetails(rsPeers->getOwnId(), detail))
return; {
std::cerr << __PRETTY_FUNCTION__ << " getPeerDetails(...) failed!"
<< " This is unexpected report to developers please."
<< std::endl;
return;
}
/* only update if can't edit */ /* only update if can't edit */
if (!ui.localPort->isEnabled()) if (!ui.localPort->isEnabled())