i2pd/UPnP.h

80 lines
1.6 KiB
C
Raw Normal View History

#ifndef __UPNP_H__
#define __UPNP_H__
#ifdef USE_UPNP
#include <string>
#include <thread>
2016-07-31 14:22:41 +00:00
#include <condition_variable>
#include <mutex>
2016-07-18 18:01:58 +00:00
#include <memory>
#include <miniupnpc/miniwget.h>
#include <miniupnpc/miniupnpc.h>
#include <miniupnpc/upnpcommands.h>
#include <miniupnpc/upnperrors.h>
2014-02-09 20:15:47 +00:00
#include <boost/asio.hpp>
namespace i2p
{
namespace transport
{
2014-02-09 20:15:47 +00:00
class UPnP
{
public:
UPnP ();
~UPnP ();
void Close ();
void Start ();
void Stop ();
private:
2016-07-18 18:01:58 +00:00
void Discover ();
void PortMapping ();
void TryPortMapping (std::shared_ptr<i2p::data::RouterInfo::Address> address);
void CloseMapping ();
void CloseMapping (std::shared_ptr<i2p::data::RouterInfo::Address> address);
void Run ();
2016-07-18 18:01:58 +00:00
std::string GetProto (std::shared_ptr<i2p::data::RouterInfo::Address> address);
2016-07-18 18:01:58 +00:00
private:
bool m_IsRunning;
std::unique_ptr<std::thread> m_Thread;
2016-07-31 14:22:41 +00:00
std::condition_variable m_Started;
std::mutex m_StartedMutex;
2016-07-18 18:01:58 +00:00
boost::asio::io_service m_Service;
2016-07-31 14:22:41 +00:00
boost::asio::deadline_timer m_Timer;
struct UPNPUrls m_upnpUrls;
struct IGDdatas m_upnpData;
// For miniupnpc
char * m_MulticastIf = 0;
char * m_Minissdpdpath = 0;
struct UPNPDev * m_Devlist = 0;
char m_NetworkAddr[64];
char m_externalIPAddress[40];
};
2014-02-09 20:15:47 +00:00
}
}
#else // USE_UPNP
namespace i2p {
namespace transport {
/* class stub */
class UPnP {
public:
UPnP () {};
~UPnP () {};
void Start () { LogPrint(eLogWarning, "UPnP: this module was disabled at compile-time"); }
void Stop () {};
};
}
}
2016-03-24 00:00:00 +00:00
#endif // USE_UPNP
#endif // __UPNP_H__