Browse Source

Merge pull request #47027 from Faless/net/4.x_upnp_null_fixes

[Net] Fix miniupnpc when no interface is specified
Rémi Verschelde 4 years ago
parent
commit
da15867b8c

+ 4 - 2
modules/upnp/upnp.cpp

@@ -52,10 +52,12 @@ int UPNP::discover(int timeout, int ttl, const String &device_filter) {
 	int error = 0;
 	int error = 0;
 	struct UPNPDev *devlist;
 	struct UPNPDev *devlist;
 
 
+	CharString cs = discover_multicast_if.utf8();
+	const char *m_if = cs.length() ? cs.get_data() : nullptr;
 	if (is_common_device(device_filter)) {
 	if (is_common_device(device_filter)) {
-		devlist = upnpDiscover(timeout, discover_multicast_if.utf8().get_data(), nullptr, discover_local_port, discover_ipv6, ttl, &error);
+		devlist = upnpDiscover(timeout, m_if, nullptr, discover_local_port, discover_ipv6, ttl, &error);
 	} else {
 	} else {
-		devlist = upnpDiscoverAll(timeout, discover_multicast_if.utf8().get_data(), nullptr, discover_local_port, discover_ipv6, ttl, &error);
+		devlist = upnpDiscoverAll(timeout, m_if, nullptr, discover_local_port, discover_ipv6, ttl, &error);
 	}
 	}
 
 
 	if (error != UPNPDISCOVER_SUCCESS) {
 	if (error != UPNPDISCOVER_SUCCESS) {

+ 0 - 1
thirdparty/README.md

@@ -364,7 +364,6 @@ Files extracted from upstream source:
 - All `*.c` and `*.h` files from `miniupnpc` to `thirdparty/miniupnpc/miniupnpc`
 - All `*.c` and `*.h` files from `miniupnpc` to `thirdparty/miniupnpc/miniupnpc`
 - Remove `test*`, `minihttptestserver.c` and `wingenminiupnpcstrings.c`
 - Remove `test*`, `minihttptestserver.c` and `wingenminiupnpcstrings.c`
 
 
-The patch `windows_fix.diff` is applied to `minissdpc.c` to fix an upstream issue.
 The only modified file is miniupnpcstrings.h, which was created for Godot
 The only modified file is miniupnpcstrings.h, which was created for Godot
 (it is usually autogenerated by cmake).
 (it is usually autogenerated by cmake).
 
 

+ 4 - 0
thirdparty/miniupnpc/miniupnpc/minissdpc.c

@@ -683,7 +683,11 @@ ssdpDiscoverDevices(const char * const deviceTypes[],
 #endif
 #endif
 		} else {
 		} else {
 			struct in_addr mc_if;
 			struct in_addr mc_if;
+#if defined(_WIN32) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+			InetPtonA(AF_INET, multicastif, &mc_if);
+#else
 			mc_if.s_addr = inet_addr(multicastif); /* ex: 192.168.x.x */
 			mc_if.s_addr = inet_addr(multicastif); /* ex: 192.168.x.x */
+#endif
 			if(mc_if.s_addr != INADDR_NONE)
 			if(mc_if.s_addr != INADDR_NONE)
 			{
 			{
 				((struct sockaddr_in *)&sockudp_r)->sin_addr.s_addr = mc_if.s_addr;
 				((struct sockaddr_in *)&sockudp_r)->sin_addr.s_addr = mc_if.s_addr;

+ 0 - 16
thirdparty/miniupnpc/windows_fix.diff

@@ -1,16 +0,0 @@
-diff --git a/thirdparty/miniupnpc/miniupnpc/minissdpc.c b/thirdparty/miniupnpc/miniupnpc/minissdpc.c
-index 29f8110155..ea9af02e1f 100644
---- a/thirdparty/miniupnpc/miniupnpc/minissdpc.c
-+++ b/thirdparty/miniupnpc/miniupnpc/minissdpc.c
-@@ -683,11 +683,7 @@ ssdpDiscoverDevices(const char * const deviceTypes[],
- #endif
- 		} else {
- 			struct in_addr mc_if;
--#if defined(_WIN32) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
--			InetPtonA(AF_INET, multicastif, &mc_if);
--#else
- 			mc_if.s_addr = inet_addr(multicastif); /* ex: 192.168.x.x */
--#endif
- 			if(mc_if.s_addr != INADDR_NONE)
- 			{
- 				((struct sockaddr_in *)&sockudp_r)->sin_addr.s_addr = mc_if.s_addr;