Implemented sockaddr_storage functions.

Fixed interfaces for UPnP.

Some further tweaks to get TCP connections working again:
 - hiddenNode issue in p3peers.cc
 - fixed socklen_t for bind() and connect() calls.
 - initialise addr to IPv4 for netmgr.
 - change netAssist (Upnp) interfaces.

Still todo: tou address functions, test UDP functionality.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-initdev@6755 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2013-09-24 05:30:01 +00:00
parent 6290d8fed9
commit 34ea22d5f6
15 changed files with 1076 additions and 40 deletions

View file

@ -386,18 +386,22 @@ void upnphandler::setExternalPort(unsigned short eport_in)
}
/* as determined by uPnP */
bool upnphandler::getInternalAddress(struct sockaddr_in &addr)
bool upnphandler::getInternalAddress(struct sockaddr_storage &addr)
{
dataMtx.lock(); /*** LOCK MUTEX ***/
addr = upnp_iaddr;
bool valid = (upnpState >= RS_UPNP_S_ACTIVE);
// copy to universal addr.
sockaddr_storage_clear(addr);
sockaddr_storage_setipv4(addr, &upnp_iaddr);
dataMtx.unlock(); /*** UNLOCK MUTEX ***/
return valid;
}
bool upnphandler::getExternalAddress(struct sockaddr_in &addr)
bool upnphandler::getExternalAddress(struct sockaddr_storage &addr)
{
std::string externalAdress = cUPnPControlPoint->getExternalAddress();
@ -416,9 +420,13 @@ bool upnphandler::getExternalAddress(struct sockaddr_in &addr)
inet_aton(externalIPAddress, &(upnp_eaddr.sin_addr));
upnp_eaddr.sin_family = AF_INET;
upnp_eaddr.sin_port = htons(eport_curr);
// copy to universal addr.
sockaddr_storage_clear(addr);
sockaddr_storage_setipv4(addr, &upnp_eaddr);
dataMtx.unlock(); /*** UNLOCK MUTEX ***/
addr = upnp_eaddr;
return true;
}
else

View file

@ -36,8 +36,8 @@ class upnphandler: public pqiNetAssistFirewall
virtual void setInternalPort(unsigned short iport_in);
virtual void setExternalPort(unsigned short eport_in);
virtual bool getInternalAddress(struct sockaddr_in &addr);
virtual bool getExternalAddress(struct sockaddr_in &addr);
virtual bool getInternalAddress(struct sockaddr_storage &addr);
virtual bool getExternalAddress(struct sockaddr_storage &addr);
/* TO IMPLEMENT: New Port Forward interface to support as many ports as necessary */
virtual bool requestPortForward(const PortForwardParams &params) { return false; }

View file

@ -535,7 +535,7 @@ void upnphandler::setExternalPort(unsigned short eport_in)
}
/* as determined by uPnP */
bool upnphandler::getInternalAddress(struct sockaddr_in &addr)
bool upnphandler::getInternalAddress(struct sockaddr_storage &addr)
{
// std::cerr << "UPnPHandler::getInternalAddress() pre Lock!" << std::endl;
dataMtx.lock(); /*** LOCK MUTEX ***/
@ -543,7 +543,10 @@ bool upnphandler::getInternalAddress(struct sockaddr_in &addr)
std::cerr << "UPnPHandler::getInternalAddress()" << std::endl;
addr = upnp_iaddr;
// copy to universal addr.
sockaddr_storage_clear(addr);
sockaddr_storage_setipv4(addr, &upnp_iaddr);
bool valid = (upnpState >= RS_UPNP_S_ACTIVE);
dataMtx.unlock(); /*** UNLOCK MUTEX ***/
@ -551,14 +554,18 @@ bool upnphandler::getInternalAddress(struct sockaddr_in &addr)
return valid;
}
bool upnphandler::getExternalAddress(struct sockaddr_in &addr)
bool upnphandler::getExternalAddress(struct sockaddr_storage &addr)
{
// std::cerr << "UPnPHandler::getExternalAddress() pre Lock!" << std::endl;
dataMtx.lock(); /*** LOCK MUTEX ***/
// std::cerr << "UPnPHandler::getExternalAddress() postLock!" << std::endl;
std::cerr << "UPnPHandler::getExternalAddress()" << std::endl;
addr = upnp_eaddr;
// copy to universal addr.
sockaddr_storage_clear(addr);
sockaddr_storage_setipv4(addr, &upnp_eaddr);
bool valid = (upnpState == RS_UPNP_S_ACTIVE);
dataMtx.unlock(); /*** UNLOCK MUTEX ***/

View file

@ -62,8 +62,8 @@ virtual bool getActive();
virtual void setInternalPort(unsigned short iport_in);
virtual void setExternalPort(unsigned short eport_in);
virtual bool getInternalAddress(struct sockaddr_in &addr);
virtual bool getExternalAddress(struct sockaddr_in &addr);
virtual bool getInternalAddress(struct sockaddr_storage &addr);
virtual bool getExternalAddress(struct sockaddr_storage &addr);
/* TO IMPLEMENT: New Port Forward interface to support as many ports as necessary */
virtual bool requestPortForward(const PortForwardParams &/*params*/) { return false; }