upnpctrl: add command to show all existing port mappings

This can be useful for debugging purposes.

Change-Id: I9da11d20a7a8cd9f7d1eae9d4aee45281c5cd4ad
diff --git a/src/upnp/upnp_context.cpp b/src/upnp/upnp_context.cpp
index 78488dc..7ea3d83 100644
--- a/src/upnp/upnp_context.cpp
+++ b/src/upnp/upnp_context.cpp
@@ -459,6 +459,27 @@
     }
 }
 
+std::vector<IGDInfo>
+UPnPContext::getIgdsInfo() const
+{
+    std::vector<IGDInfo> igdInfoList;
+
+    std::lock_guard lk(mappingMutex_);
+    for (auto& igd : validIgdList_) {
+        auto protocol = protocolList_.at(igd->getProtocol());
+
+        IGDInfo info;
+        info.uid = igd->getUID();
+        info.localIp = igd->getLocalIp();
+        info.publicIp = igd->getPublicIp();
+        info.mappingInfoList = protocol->getMappingsInfo(igd);
+
+        igdInfoList.push_back(std::move(info));
+    }
+
+    return igdInfoList;
+}
+
 uint16_t
 UPnPContext::getAvailablePortNumber(PortType type)
 {