MCPcopy Create free account
hub / github.com/WaykiChain/WaykiChain / ThreadMapPort

Function ThreadMapPort

src/net.cpp:783–862  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

781
782#ifdef USE_UPNP
783void ThreadMapPort() {
784 string port = strprintf("%u", GetListenPort());
785 const char* multicastif = 0;
786 const char* minissdpdpath = 0;
787 struct UPNPDev* devlist = 0;
788 char lanaddr[64];
789
790#ifndef UPNPDISCOVER_SUCCESS
791 /* miniupnpc 1.5 */
792 devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0);
793#else
794 /* miniupnpc 1.6 */
795 int32_t error = 0;
796#ifdef MAC_OSX
797 devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, 0, &error);
798#else
799 devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error);
800#endif
801#endif
802
803 struct UPNPUrls urls;
804 struct IGDdatas data;
805 int32_t r;
806
807 r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
808 if (r == 1) {
809 if (fDiscover) {
810 char externalIPAddress[40];
811 r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress);
812 if (r != UPNPCOMMAND_SUCCESS) {
813 LogPrint(BCLog::INFO, "UPnP: GetExternalIPAddress() returned %d\n", r);
814 } else {
815 if (externalIPAddress[0]) {
816 LogPrint(BCLog::INFO, "UPnP: ExternalIPAddress = %s\n", externalIPAddress);
817 AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP);
818 } else {
819 LogPrint(BCLog::INFO, "UPnP: GetExternalIPAddress failed.\n");
820 }
821 }
822 }
823
824 string strDesc = "Coin " + FormatFullVersion();
825
826 try {
827 while (true) {
828#ifndef UPNPDISCOVER_SUCCESS
829 /* miniupnpc 1.5 */
830 r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, port.c_str(), port.c_str(), lanaddr,
831 strDesc.c_str(), "TCP", 0);
832#else
833 /* miniupnpc 1.6 */
834 r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, port.c_str(), port.c_str(), lanaddr,
835 strDesc.c_str(), "TCP", 0, "0");
836#endif
837
838 if (r != UPNPCOMMAND_SUCCESS) {
839 LogPrint(BCLog::INFO, "AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", port, port, lanaddr, r,
840 strupnperror(r));

Callers

nothing calls this directly

Calls 5

GetListenPortFunction · 0.85
AddLocalFunction · 0.85
FormatFullVersionFunction · 0.85
MilliSleepFunction · 0.85
CNetAddrClass · 0.70

Tested by

no test coverage detected