summaryrefslogtreecommitdiffstats
path: root/modules/upnp/upnp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/upnp/upnp.cpp')
-rw-r--r--modules/upnp/upnp.cpp29
1 files changed, 8 insertions, 21 deletions
diff --git a/modules/upnp/upnp.cpp b/modules/upnp/upnp.cpp
index 2812f37eb2..95453c1ecd 100644
--- a/modules/upnp/upnp.cpp
+++ b/modules/upnp/upnp.cpp
@@ -121,33 +121,20 @@ void UPNP::parse_igd(Ref<UPNPDevice> dev, UPNPDev *devlist) {
return;
}
- struct UPNPUrls *urls = (UPNPUrls *)malloc(sizeof(struct UPNPUrls));
-
- if (!urls) {
- dev->set_igd_status(UPNPDevice::IGD_STATUS_MALLOC_ERROR);
- return;
- }
-
+ struct UPNPUrls urls = {};
struct IGDdatas data;
- memset(urls, 0, sizeof(struct UPNPUrls));
-
parserootdesc(xml, size, &data);
free(xml);
xml = nullptr;
- GetUPNPUrls(urls, &data, dev->get_description_url().utf8().get_data(), 0);
-
- if (!urls) {
- dev->set_igd_status(UPNPDevice::IGD_STATUS_NO_URLS);
- return;
- }
+ GetUPNPUrls(&urls, &data, dev->get_description_url().utf8().get_data(), 0);
char addr[16];
- int i = UPNP_GetValidIGD(devlist, urls, &data, (char *)&addr, 16);
+ int i = UPNP_GetValidIGD(devlist, &urls, &data, (char *)&addr, 16);
if (i != 1) {
- FreeUPNPUrls(urls);
+ FreeUPNPUrls(&urls);
switch (i) {
case 0:
@@ -165,18 +152,18 @@ void UPNP::parse_igd(Ref<UPNPDevice> dev, UPNPDev *devlist) {
}
}
- if (urls->controlURL[0] == '\0') {
- FreeUPNPUrls(urls);
+ if (urls.controlURL[0] == '\0') {
+ FreeUPNPUrls(&urls);
dev->set_igd_status(UPNPDevice::IGD_STATUS_INVALID_CONTROL);
return;
}
- dev->set_igd_control_url(urls->controlURL);
+ dev->set_igd_control_url(urls.controlURL);
dev->set_igd_service_type(data.first.servicetype);
dev->set_igd_our_addr(addr);
dev->set_igd_status(UPNPDevice::IGD_STATUS_OK);
- FreeUPNPUrls(urls);
+ FreeUPNPUrls(&urls);
}
int UPNP::upnp_result(int in) {