drbob 94371600be Fixed upnp issues
* Removed periodic Check and thread.
 * Added Shutdown.
 * switched to terminating background thread.
 * removed temporary lease.
 * A bit of a HACK - this class could be cleaned up significantly.

Adding the start of forums/channels.
 * Dummy Interface and Forum data (so GUI work can start)
 * rough p3distrib - needs a lot of work.

Added shutdown function to p3connmgr, to shutdown Upnp.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@493 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2008-04-09 12:54:15 +00:00

104 lines
2.1 KiB
C++

#ifndef _RS_UPNP_IFACE_H
#define _RS_UPNP_IFACE_H
#include <string.h>
#include <string>
#include <map>
/* platform independent networking... */
#include "pqi/pqinetwork.h"
#include "pqi/p3upnpmgr.h"
class upnpentry
{
public:
std::string name;
std::string id;
struct sockaddr_in addr;
unsigned int flags;
int status;
int lastTs;
};
class upnpforward
{
public:
std::string name;
unsigned int flags;
struct sockaddr_in iaddr;
struct sockaddr_in eaddr;
int status;
int lastTs;
};
#define RS_UPNP_S_UNINITIALISED 0
#define RS_UPNP_S_UNAVAILABLE 1
#define RS_UPNP_S_READY 2
#define RS_UPNP_S_TCP_FAILED 3
#define RS_UPNP_S_UDP_FAILED 4
#define RS_UPNP_S_ACTIVE 5
class uPnPConfigData;
class upnphandler: public p3UpnpMgr
{
public:
upnphandler();
virtual ~upnphandler();
/* External Interface */
virtual void enableUPnP(bool active);
virtual void shutdownUPnP();
virtual void restartUPnP();
virtual bool getUPnPEnabled();
virtual bool getUPnPActive();
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);
/* Public functions - for background thread operation,
* but effectively private from rest of RS, as in derived class
*/
bool start_upnp();
bool shutdown_upnp();
bool initUPnPState();
bool printUPnPState();
private:
bool background_setup_upnp(bool, bool);
bool checkUPnPActive();
/* Mutex for data below */
RsMutex dataMtx;
bool toEnable; /* overall on/off switch */
bool toStart; /* if set start forwarding */
bool toStop; /* if set stop forwarding */
unsigned short iport;
unsigned short eport; /* config */
unsigned short eport_curr; /* current forwarded */
/* info from upnp */
unsigned int upnpState;
uPnPConfigData *upnpConfig;
struct sockaddr_in upnp_iaddr;
struct sockaddr_in upnp_eaddr;
/* active port forwarding */
std::list<upnpforward> activeForwards;
};
#endif /* _RS_UPNP_IFACE_H */