1
0
Fork 0
mirror of https://bitbucket.org/King_DuckZ/keepupnpup.git synced 2025-01-19 21:36:36 +00:00

Add external IP retrieval.

This commit is contained in:
King_DuckZ 2016-08-25 02:45:55 +02:00
parent 4b61da0d90
commit 74c8be9309

View file

@ -8,6 +8,7 @@
#include <ciso646> #include <ciso646>
#include <cstdint> #include <cstdint>
#include <strings.h> #include <strings.h>
#include <array>
#if !defined(NDEBUG) #if !defined(NDEBUG)
# define KUU_VERBOSE # define KUU_VERBOSE
@ -31,24 +32,32 @@ namespace {
}; };
explicit UPNPUrlsResource (struct UPNPDev* parDevList) : explicit UPNPUrlsResource (struct UPNPDev* parDevList) :
m_lanaddr(64, ' '), m_lanaddr(),
m_externaladdr(),
m_igd_reply(IGDNone) m_igd_reply(IGDNone)
{ {
const auto i = UPNP_GetValidIGD(parDevList, &m_urls, &m_data, &m_lanaddr[0], m_lanaddr.size()); {
std::array<char, 64> lanaddr;
const auto i = UPNP_GetValidIGD(parDevList, &m_urls, &m_data, lanaddr.data(), lanaddr.size());
switch (i) { switch (i) {
case 1: case 1:
case 2: case 2:
case 3: case 3:
m_igd_reply = static_cast<IGDReply>(i); m_igd_reply = static_cast<IGDReply>(i);
break; break;
default: default:
m_igd_reply = IGDNotSure; m_igd_reply = IGDNotSure;
}
m_lanaddr = lanaddr.data();
} }
const auto idx = m_lanaddr.find('\0'); {
if (idx != m_lanaddr.npos) std::array<char, 64> externaladdr;
m_lanaddr.resize(idx); const auto r = UPNP_GetExternalIPAddress(m_urls.controlURL, m_data.first.servicetype, externaladdr.data());
m_externaladdr = externaladdr.data();
}
} }
~UPNPUrlsResource() noexcept { ~UPNPUrlsResource() noexcept {
@ -62,9 +71,11 @@ namespace {
const struct IGDdatas* data() const { return &m_data; } const struct IGDdatas* data() const { return &m_data; }
IGDReply igd_reply() const { return m_igd_reply; } IGDReply igd_reply() const { return m_igd_reply; }
const std::string& lanaddr() const { return m_lanaddr; } const std::string& lanaddr() const { return m_lanaddr; }
const std::string& externaladdr() const { return m_externaladdr; }
private: private:
std::string m_lanaddr; std::string m_lanaddr;
std::string m_externaladdr;
struct UPNPUrls m_urls; struct UPNPUrls m_urls;
struct IGDdatas m_data; struct IGDdatas m_data;
IGDReply m_igd_reply; IGDReply m_igd_reply;
@ -212,6 +223,7 @@ int main() {
} }
std::cout << "Local LAN ip address: " << urls.lanaddr() << '\n'; std::cout << "Local LAN ip address: " << urls.lanaddr() << '\n';
std::cout << "External ip address: " << urls.externaladdr() << '\n';
#endif #endif
const auto redirs = get_redirections(urls); const auto redirs = get_redirections(urls);