mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-18 23:16:37 +02:00
Updating UPnP code for windows. (untested)
This commit is contained in:
parent
3c5e9ddd4e
commit
7a387b9a9f
2 changed files with 51 additions and 3 deletions
48
UPnP.cpp
48
UPnP.cpp
|
@ -2,6 +2,10 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <boost/thread/thread.hpp>
|
#include <boost/thread/thread.hpp>
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
@ -66,11 +70,21 @@ namespace UPnP
|
||||||
{
|
{
|
||||||
#ifdef MAC_OSX
|
#ifdef MAC_OSX
|
||||||
m_Module = dlopen ("libminiupnpc.dylib", RTLD_LAZY);
|
m_Module = dlopen ("libminiupnpc.dylib", RTLD_LAZY);
|
||||||
#elif WIN32
|
#elif _WIN32
|
||||||
m_Module = dlopen ("libminiupnpc.dll", RTLD_LAZY);
|
m_Module = LoadLibrary ("libminiupnpc.dll");
|
||||||
|
if (m_Module == NULL)
|
||||||
|
{
|
||||||
|
LogPrint ("Error loading UPNP library. This often happens if there is version mismatch!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_IsModuleLoaded = true;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
m_Module = dlopen ("libminiupnpc.so", RTLD_LAZY);
|
m_Module = dlopen ("libminiupnpc.so", RTLD_LAZY);
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef _WIN32
|
||||||
if (!m_Module)
|
if (!m_Module)
|
||||||
{
|
{
|
||||||
LogPrint ("no UPnP module available (", dlerror (), ")");
|
LogPrint ("no UPnP module available (", dlerror (), ")");
|
||||||
|
@ -80,6 +94,7 @@ namespace UPnP
|
||||||
{
|
{
|
||||||
m_IsModuleLoaded = true;
|
m_IsModuleLoaded = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
for (auto& address : context.GetRouterInfo ().GetAddresses ())
|
for (auto& address : context.GetRouterInfo ().GetAddresses ())
|
||||||
{
|
{
|
||||||
if (!address.host.is_v6 ())
|
if (!address.host.is_v6 ())
|
||||||
|
@ -101,6 +116,9 @@ namespace UPnP
|
||||||
void UPnP::Discover ()
|
void UPnP::Discover ()
|
||||||
{
|
{
|
||||||
const char *error;
|
const char *error;
|
||||||
|
#ifdef _WIN32
|
||||||
|
upnp_upnpDiscoverFunc upnpDiscoverFunc = (upnp_upnpDiscoverFunc) GetProcAddress (m_Module, "upnpDiscover");
|
||||||
|
#else
|
||||||
upnp_upnpDiscoverFunc upnpDiscoverFunc = (upnp_upnpDiscoverFunc) dlsym (m_Module, "upnpDiscover");
|
upnp_upnpDiscoverFunc upnpDiscoverFunc = (upnp_upnpDiscoverFunc) dlsym (m_Module, "upnpDiscover");
|
||||||
// reinterpret_cast<upnp_upnpDiscoverFunc> (dlsym(...));
|
// reinterpret_cast<upnp_upnpDiscoverFunc> (dlsym(...));
|
||||||
if ( (error = dlerror ()))
|
if ( (error = dlerror ()))
|
||||||
|
@ -108,6 +126,7 @@ namespace UPnP
|
||||||
LogPrint ("Error loading UPNP library. This often happens if there is version mismatch!");
|
LogPrint ("Error loading UPNP library. This often happens if there is version mismatch!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif // _WIN32
|
||||||
#ifndef UPNPDISCOVER_SUCCESS
|
#ifndef UPNPDISCOVER_SUCCESS
|
||||||
/* miniupnpc 1.5 */
|
/* miniupnpc 1.5 */
|
||||||
m_Devlist = upnpDiscoverFunc (2000, m_MulticastIf, m_Minissdpdpath, 0);
|
m_Devlist = upnpDiscoverFunc (2000, m_MulticastIf, m_Minissdpdpath, 0);
|
||||||
|
@ -116,8 +135,13 @@ namespace UPnP
|
||||||
int nerror = 0;
|
int nerror = 0;
|
||||||
m_Devlist = upnpDiscoverFunc (2000, m_MulticastIf, m_Minissdpdpath, 0, 0, &nerror);
|
m_Devlist = upnpDiscoverFunc (2000, m_MulticastIf, m_Minissdpdpath, 0, 0, &nerror);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int r;
|
int r;
|
||||||
|
#ifdef _WIN32
|
||||||
|
upnp_UPNP_GetValidIGDFunc UPNP_GetValidIGDFunc = (upnp_UPNP_GetValidIGDFunc) GetProcAddress (m_Module, "UPNP_GetValidIGD");
|
||||||
|
#else
|
||||||
upnp_UPNP_GetValidIGDFunc UPNP_GetValidIGDFunc = (upnp_UPNP_GetValidIGDFunc) dlsym (m_Module, "UPNP_GetValidIGD");
|
upnp_UPNP_GetValidIGDFunc UPNP_GetValidIGDFunc = (upnp_UPNP_GetValidIGDFunc) dlsym (m_Module, "UPNP_GetValidIGD");
|
||||||
|
#endif
|
||||||
r = (*UPNP_GetValidIGDFunc) (m_Devlist, &m_upnpUrls, &m_upnpData, m_NetworkAddr, sizeof (m_NetworkAddr));
|
r = (*UPNP_GetValidIGDFunc) (m_Devlist, &m_upnpUrls, &m_upnpData, m_NetworkAddr, sizeof (m_NetworkAddr));
|
||||||
if (r == 1)
|
if (r == 1)
|
||||||
{
|
{
|
||||||
|
@ -161,7 +185,11 @@ namespace UPnP
|
||||||
std::string strDesc = "I2Pd";
|
std::string strDesc = "I2Pd";
|
||||||
try {
|
try {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
upnp_UPNP_AddPortMappingFunc UPNP_AddPortMappingFunc = (upnp_UPNP_AddPortMappingFunc) GetProcAddress (m_Module, "UPNP_AddPortMapping");
|
||||||
|
#else
|
||||||
upnp_UPNP_AddPortMappingFunc UPNP_AddPortMappingFunc = (upnp_UPNP_AddPortMappingFunc) dlsym (m_Module, "UPNP_AddPortMapping");
|
upnp_UPNP_AddPortMappingFunc UPNP_AddPortMappingFunc = (upnp_UPNP_AddPortMappingFunc) dlsym (m_Module, "UPNP_AddPortMapping");
|
||||||
|
#endif
|
||||||
#ifndef UPNPDISCOVER_SUCCESS
|
#ifndef UPNPDISCOVER_SUCCESS
|
||||||
/* miniupnpc 1.5 */
|
/* miniupnpc 1.5 */
|
||||||
r = UPNP_AddPortMappingFunc (m_upnpUrls.controlURL, m_upnpData.first.servicetype, m_Port.c_str (), m_Port.c_str (), m_NetworkAddr, strDesc.c_str (), strType.c_str (), 0);
|
r = UPNP_AddPortMappingFunc (m_upnpUrls.controlURL, m_upnpData.first.servicetype, m_Port.c_str (), m_Port.c_str (), m_NetworkAddr, strDesc.c_str (), strType.c_str (), 0);
|
||||||
|
@ -203,19 +231,35 @@ namespace UPnP
|
||||||
strType = "UDP";
|
strType = "UDP";
|
||||||
}
|
}
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
#ifdef _WIN32
|
||||||
|
upnp_UPNP_DeletePortMappingFunc UPNP_DeletePortMappingFunc = (upnp_UPNP_DeletePortMappingFunc) GetProcAddress (m_Module, "UPNP_DeletePortMapping");
|
||||||
|
#else
|
||||||
upnp_UPNP_DeletePortMappingFunc UPNP_DeletePortMappingFunc = (upnp_UPNP_DeletePortMappingFunc) dlsym (m_Module, "UPNP_DeletePortMapping");
|
upnp_UPNP_DeletePortMappingFunc UPNP_DeletePortMappingFunc = (upnp_UPNP_DeletePortMappingFunc) dlsym (m_Module, "UPNP_DeletePortMapping");
|
||||||
|
#endif
|
||||||
r = UPNP_DeletePortMappingFunc (m_upnpUrls.controlURL, m_upnpData.first.servicetype, m_Port.c_str (), strType.c_str (), 0);
|
r = UPNP_DeletePortMappingFunc (m_upnpUrls.controlURL, m_upnpData.first.servicetype, m_Port.c_str (), strType.c_str (), 0);
|
||||||
LogPrint ("UPNP_DeletePortMapping() returned : ", r, "\n");
|
LogPrint ("UPNP_DeletePortMapping() returned : ", r, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPnP::Close ()
|
void UPnP::Close ()
|
||||||
{
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
upnp_freeUPNPDevlistFunc freeUPNPDevlistFunc = (upnp_freeUPNPDevlistFunc) GetProcAddress (m_Module, "freeUPNPDevlist");
|
||||||
|
#else
|
||||||
upnp_freeUPNPDevlistFunc freeUPNPDevlistFunc = (upnp_freeUPNPDevlistFunc) dlsym (m_Module, "freeUPNPDevlist");
|
upnp_freeUPNPDevlistFunc freeUPNPDevlistFunc = (upnp_freeUPNPDevlistFunc) dlsym (m_Module, "freeUPNPDevlist");
|
||||||
|
#endif
|
||||||
freeUPNPDevlistFunc (m_Devlist);
|
freeUPNPDevlistFunc (m_Devlist);
|
||||||
m_Devlist = 0;
|
m_Devlist = 0;
|
||||||
|
#ifdef _WIN32
|
||||||
|
upnp_FreeUPNPUrlsFunc FreeUPNPUrlsFunc = (upnp_FreeUPNPUrlsFunc) GetProcAddress (m_Module, "FreeUPNPUrlsFunc");
|
||||||
|
#else
|
||||||
upnp_FreeUPNPUrlsFunc FreeUPNPUrlsFunc = (upnp_FreeUPNPUrlsFunc) dlsym (m_Module, "FreeUPNPUrlsFunc");
|
upnp_FreeUPNPUrlsFunc FreeUPNPUrlsFunc = (upnp_FreeUPNPUrlsFunc) dlsym (m_Module, "FreeUPNPUrlsFunc");
|
||||||
|
#endif
|
||||||
FreeUPNPUrlsFunc (&m_upnpUrls);
|
FreeUPNPUrlsFunc (&m_upnpUrls);
|
||||||
|
#ifndef _WIN32
|
||||||
dlclose (m_Module);
|
dlclose (m_Module);
|
||||||
|
#else
|
||||||
|
FreeLibrary (m_Module);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
4
UPnP.h
4
UPnP.h
|
@ -50,7 +50,11 @@ namespace UPnP
|
||||||
char m_externalIPAddress[40];
|
char m_externalIPAddress[40];
|
||||||
bool m_IsModuleLoaded;
|
bool m_IsModuleLoaded;
|
||||||
std::string m_Port = std::to_string (util::config::GetArg ("-port", 17070));
|
std::string m_Port = std::to_string (util::config::GetArg ("-port", 17070));
|
||||||
|
#ifndef _WIN32
|
||||||
void *m_Module;
|
void *m_Module;
|
||||||
|
#else
|
||||||
|
HINSTANCE *m_Module;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
extern UPnP upnpc;
|
extern UPnP upnpc;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue