|
@@ -1,7 +1,8 @@
|
|
-/* $Id: upnpcommands.c,v 1.47 2016/03/07 12:26:48 nanard Exp $ */
|
|
|
|
-/* Project : miniupnp
|
|
|
|
|
|
+/* $Id: upnpcommands.c,v 1.48 2017/04/21 10:22:40 nanard Exp $ */
|
|
|
|
+/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
|
|
|
+ * Project : miniupnp
|
|
* Author : Thomas Bernard
|
|
* Author : Thomas Bernard
|
|
- * Copyright (c) 2005-2015 Thomas Bernard
|
|
|
|
|
|
+ * Copyright (c) 2005-2017 Thomas Bernard
|
|
* This software is subject to the conditions detailed in the
|
|
* This software is subject to the conditions detailed in the
|
|
* LICENCE file provided in this distribution.
|
|
* LICENCE file provided in this distribution.
|
|
* */
|
|
* */
|
|
@@ -372,10 +373,11 @@ UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
|
AddPortMappingArgs[6].val = desc?desc:"libminiupnpc";
|
|
AddPortMappingArgs[6].val = desc?desc:"libminiupnpc";
|
|
AddPortMappingArgs[7].elt = "NewLeaseDuration";
|
|
AddPortMappingArgs[7].elt = "NewLeaseDuration";
|
|
AddPortMappingArgs[7].val = leaseDuration?leaseDuration:"0";
|
|
AddPortMappingArgs[7].val = leaseDuration?leaseDuration:"0";
|
|
- if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
- "AddPortMapping", AddPortMappingArgs,
|
|
|
|
- &bufsize))) {
|
|
|
|
- free(AddPortMappingArgs);
|
|
|
|
|
|
+ buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
+ "AddPortMapping", AddPortMappingArgs,
|
|
|
|
+ &bufsize);
|
|
|
|
+ free(AddPortMappingArgs);
|
|
|
|
+ if(!buffer) {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
}
|
|
}
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
@@ -392,7 +394,6 @@ UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(AddPortMappingArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -436,10 +437,11 @@ UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype,
|
|
AddPortMappingArgs[6].val = desc?desc:"libminiupnpc";
|
|
AddPortMappingArgs[6].val = desc?desc:"libminiupnpc";
|
|
AddPortMappingArgs[7].elt = "NewLeaseDuration";
|
|
AddPortMappingArgs[7].elt = "NewLeaseDuration";
|
|
AddPortMappingArgs[7].val = leaseDuration?leaseDuration:"0";
|
|
AddPortMappingArgs[7].val = leaseDuration?leaseDuration:"0";
|
|
- if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
- "AddAnyPortMapping", AddPortMappingArgs,
|
|
|
|
- &bufsize))) {
|
|
|
|
- free(AddPortMappingArgs);
|
|
|
|
|
|
+ buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
+ "AddAnyPortMapping", AddPortMappingArgs,
|
|
|
|
+ &bufsize);
|
|
|
|
+ free(AddPortMappingArgs);
|
|
|
|
+ if(!buffer) {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
}
|
|
}
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -461,7 +463,6 @@ UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(AddPortMappingArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -490,10 +491,11 @@ UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
|
|
DeletePortMappingArgs[1].val = extPort;
|
|
DeletePortMappingArgs[1].val = extPort;
|
|
DeletePortMappingArgs[2].elt = "NewProtocol";
|
|
DeletePortMappingArgs[2].elt = "NewProtocol";
|
|
DeletePortMappingArgs[2].val = proto;
|
|
DeletePortMappingArgs[2].val = proto;
|
|
- if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
- "DeletePortMapping",
|
|
|
|
- DeletePortMappingArgs, &bufsize))) {
|
|
|
|
- free(DeletePortMappingArgs);
|
|
|
|
|
|
+ buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
+ "DeletePortMapping",
|
|
|
|
+ DeletePortMappingArgs, &bufsize);
|
|
|
|
+ free(DeletePortMappingArgs);
|
|
|
|
+ if(!buffer) {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
}
|
|
}
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
@@ -507,7 +509,6 @@ UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(DeletePortMappingArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -539,10 +540,11 @@ UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype,
|
|
DeletePortMappingArgs[3].elt = "NewManage";
|
|
DeletePortMappingArgs[3].elt = "NewManage";
|
|
DeletePortMappingArgs[3].val = manage;
|
|
DeletePortMappingArgs[3].val = manage;
|
|
|
|
|
|
- if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
- "DeletePortMappingRange",
|
|
|
|
- DeletePortMappingArgs, &bufsize))) {
|
|
|
|
- free(DeletePortMappingArgs);
|
|
|
|
|
|
+ buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
+ "DeletePortMappingRange",
|
|
|
|
+ DeletePortMappingArgs, &bufsize);
|
|
|
|
+ free(DeletePortMappingArgs);
|
|
|
|
+ if(!buffer) {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
}
|
|
}
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -555,7 +557,6 @@ UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype,
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(DeletePortMappingArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -587,10 +588,11 @@ UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
|
return UPNPCOMMAND_MEM_ALLOC_ERROR;
|
|
return UPNPCOMMAND_MEM_ALLOC_ERROR;
|
|
GetPortMappingArgs[0].elt = "NewPortMappingIndex";
|
|
GetPortMappingArgs[0].elt = "NewPortMappingIndex";
|
|
GetPortMappingArgs[0].val = index;
|
|
GetPortMappingArgs[0].val = index;
|
|
- if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
- "GetGenericPortMappingEntry",
|
|
|
|
- GetPortMappingArgs, &bufsize))) {
|
|
|
|
- free(GetPortMappingArgs);
|
|
|
|
|
|
+ buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
+ "GetGenericPortMappingEntry",
|
|
|
|
+ GetPortMappingArgs, &bufsize);
|
|
|
|
+ free(GetPortMappingArgs);
|
|
|
|
+ if(!buffer) {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
}
|
|
}
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -652,7 +654,6 @@ UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
|
sscanf(p, "%d", &r);
|
|
sscanf(p, "%d", &r);
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(GetPortMappingArgs);
|
|
|
|
return r;
|
|
return r;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -728,10 +729,11 @@ UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
|
GetPortMappingArgs[1].val = extPort;
|
|
GetPortMappingArgs[1].val = extPort;
|
|
GetPortMappingArgs[2].elt = "NewProtocol";
|
|
GetPortMappingArgs[2].elt = "NewProtocol";
|
|
GetPortMappingArgs[2].val = proto;
|
|
GetPortMappingArgs[2].val = proto;
|
|
- if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
- "GetSpecificPortMappingEntry",
|
|
|
|
- GetPortMappingArgs, &bufsize))) {
|
|
|
|
- free(GetPortMappingArgs);
|
|
|
|
|
|
+ buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
+ "GetSpecificPortMappingEntry",
|
|
|
|
+ GetPortMappingArgs, &bufsize);
|
|
|
|
+ free(GetPortMappingArgs);
|
|
|
|
+ if(!buffer) {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
}
|
|
}
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
@@ -779,7 +781,6 @@ UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
|
}
|
|
}
|
|
|
|
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(GetPortMappingArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -824,13 +825,13 @@ UPNP_GetListOfPortMappings(const char * controlURL,
|
|
GetListOfPortMappingsArgs[4].elt = "NewNumberOfPorts";
|
|
GetListOfPortMappingsArgs[4].elt = "NewNumberOfPorts";
|
|
GetListOfPortMappingsArgs[4].val = numberOfPorts?numberOfPorts:"1000";
|
|
GetListOfPortMappingsArgs[4].val = numberOfPorts?numberOfPorts:"1000";
|
|
|
|
|
|
- if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
- "GetListOfPortMappings",
|
|
|
|
- GetListOfPortMappingsArgs, &bufsize))) {
|
|
|
|
- free(GetListOfPortMappingsArgs);
|
|
|
|
|
|
+ buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
|
|
+ "GetListOfPortMappings",
|
|
|
|
+ GetListOfPortMappingsArgs, &bufsize);
|
|
|
|
+ free(GetListOfPortMappingsArgs);
|
|
|
|
+ if(!buffer) {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
}
|
|
}
|
|
- free(GetListOfPortMappingsArgs);
|
|
|
|
|
|
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -954,6 +955,7 @@ UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype
|
|
GetOutboundPinholeTimeoutArgs[4].val = intClient;
|
|
GetOutboundPinholeTimeoutArgs[4].val = intClient;
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
"GetOutboundPinholeTimeout", GetOutboundPinholeTimeoutArgs, &bufsize);
|
|
"GetOutboundPinholeTimeout", GetOutboundPinholeTimeoutArgs, &bufsize);
|
|
|
|
+ free(GetOutboundPinholeTimeoutArgs);
|
|
if(!buffer)
|
|
if(!buffer)
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -972,7 +974,6 @@ UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype
|
|
*opTimeout = my_atoui(p);
|
|
*opTimeout = my_atoui(p);
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(GetOutboundPinholeTimeoutArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1031,6 +1032,7 @@ UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
|
AddPinholeArgs[5].val = leaseTime;
|
|
AddPinholeArgs[5].val = leaseTime;
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
"AddPinhole", AddPinholeArgs, &bufsize);
|
|
"AddPinhole", AddPinholeArgs, &bufsize);
|
|
|
|
+ free(AddPinholeArgs);
|
|
if(!buffer)
|
|
if(!buffer)
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -1053,7 +1055,6 @@ UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(AddPinholeArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1081,6 +1082,7 @@ UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
|
|
UpdatePinholeArgs[1].val = leaseTime;
|
|
UpdatePinholeArgs[1].val = leaseTime;
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
"UpdatePinhole", UpdatePinholeArgs, &bufsize);
|
|
"UpdatePinhole", UpdatePinholeArgs, &bufsize);
|
|
|
|
+ free(UpdatePinholeArgs);
|
|
if(!buffer)
|
|
if(!buffer)
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -1097,7 +1099,6 @@ UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(UpdatePinholeArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1122,6 +1123,7 @@ UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char
|
|
DeletePinholeArgs[0].val = uniqueID;
|
|
DeletePinholeArgs[0].val = uniqueID;
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
"DeletePinhole", DeletePinholeArgs, &bufsize);
|
|
"DeletePinhole", DeletePinholeArgs, &bufsize);
|
|
|
|
+ free(DeletePinholeArgs);
|
|
if(!buffer)
|
|
if(!buffer)
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
/*DisplayNameValueList(buffer, bufsize);*/
|
|
@@ -1138,7 +1140,6 @@ UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
ret = UPNPCOMMAND_SUCCESS;
|
|
}
|
|
}
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(DeletePinholeArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1163,8 +1164,11 @@ UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
|
|
CheckPinholeWorkingArgs[0].val = uniqueID;
|
|
CheckPinholeWorkingArgs[0].val = uniqueID;
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
"CheckPinholeWorking", CheckPinholeWorkingArgs, &bufsize);
|
|
"CheckPinholeWorking", CheckPinholeWorkingArgs, &bufsize);
|
|
|
|
+ free(CheckPinholeWorkingArgs);
|
|
if(!buffer)
|
|
if(!buffer)
|
|
|
|
+ {
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
|
|
+ }
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
free(buffer); buffer = NULL;
|
|
free(buffer); buffer = NULL;
|
|
|
|
|
|
@@ -1185,7 +1189,6 @@ UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
|
|
}
|
|
}
|
|
|
|
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(CheckPinholeWorkingArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1210,6 +1213,7 @@ UPNP_GetPinholePackets(const char * controlURL, const char * servicetype,
|
|
GetPinholePacketsArgs[0].val = uniqueID;
|
|
GetPinholePacketsArgs[0].val = uniqueID;
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
|
"GetPinholePackets", GetPinholePacketsArgs, &bufsize);
|
|
"GetPinholePackets", GetPinholePacketsArgs, &bufsize);
|
|
|
|
+ free(GetPinholePacketsArgs);
|
|
if(!buffer)
|
|
if(!buffer)
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
return UPNPCOMMAND_HTTP_ERROR;
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
ParseNameValue(buffer, bufsize, &pdata);
|
|
@@ -1230,7 +1234,6 @@ UPNP_GetPinholePackets(const char * controlURL, const char * servicetype,
|
|
}
|
|
}
|
|
|
|
|
|
ClearNameValueList(&pdata);
|
|
ClearNameValueList(&pdata);
|
|
- free(GetPinholePacketsArgs);
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|