From 8962355d6cb654f58402156b9ab2731f51a42ab9 Mon Sep 17 00:00:00 2001 From: SteelT <steeltitanium1@gmail.com> Date: Sat, 17 Feb 2024 13:04:29 -0500 Subject: [PATCH] Fix UPnP port mapping not working Despite UPNP_AddPortMapping returning sucess status, no port mapping would actually be added at all. And that's due to a memset call in the middle of the function. Wiping the IGDdatas struct, moving the memset to the start of the function fixes it and a port mapping is actually created/removed when a server is started/stopped. --- src/netcode/i_tcp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/netcode/i_tcp.c b/src/netcode/i_tcp.c index 6d9a2725a3..96342d5c6c 100644 --- a/src/netcode/i_tcp.c +++ b/src/netcode/i_tcp.c @@ -300,6 +300,10 @@ init_upnpc_once(struct upnpdata *upnpuserdata) int upnp_error = -2; int scope_id = 0; int status_code = 0; + + memset(&urls, 0, sizeof(struct UPNPUrls)); + memset(&data, 0, sizeof(struct IGDdatas)); + CONS_Printf(M_GetText("Looking for UPnP Internet Gateway Device\n")); devlist = upnpDiscoverDevices(deviceTypes, 500, NULL, NULL, 0, false, 2, &upnp_error, 0); if (devlist) @@ -327,8 +331,6 @@ init_upnpc_once(struct upnpdata *upnpuserdata) parserootdesc(descXML, descXMLsize, &data); free(descXML); descXML = NULL; - memset(&urls, 0, sizeof(struct UPNPUrls)); - memset(&data, 0, sizeof(struct IGDdatas)); GetUPNPUrls(&urls, &data, dev->descURL, status_code); I_AddExitFunc(I_ShutdownUPnP); } -- GitLab