1 /* $Id: upnpcommands.h,v 1.30 2015/07/15 12:21:28 nanard Exp $ */ 2 /* Miniupnp project : http://miniupnp.free.fr/ 3 * Author : Thomas Bernard 4 * Copyright (c) 2005-2015 Thomas Bernard 5 * This software is subject to the conditions detailed in the 6 * LICENCE file provided within this distribution */ 7 #ifndef UPNPCOMMANDS_H_INCLUDED 8 #define UPNPCOMMANDS_H_INCLUDED 9 10 #include "upnpreplyparse.h" 11 #include "portlistingparse.h" 12 #include "miniupnpc_declspec.h" 13 #include "miniupnpctypes.h" 14 15 /* MiniUPnPc return codes : */ 16 #define UPNPCOMMAND_SUCCESS (0) 17 #define UPNPCOMMAND_UNKNOWN_ERROR (-1) 18 #define UPNPCOMMAND_INVALID_ARGS (-2) 19 #define UPNPCOMMAND_HTTP_ERROR (-3) 20 #define UPNPCOMMAND_INVALID_RESPONSE (-4) 21 #define UPNPCOMMAND_MEM_ALLOC_ERROR (-5) 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 MINIUPNP_LIBSPEC UNSIGNED_INTEGER 28 UPNP_GetTotalBytesSent(const char * controlURL, 29 const char * servicetype); 30 31 MINIUPNP_LIBSPEC UNSIGNED_INTEGER 32 UPNP_GetTotalBytesReceived(const char * controlURL, 33 const char * servicetype); 34 35 MINIUPNP_LIBSPEC UNSIGNED_INTEGER 36 UPNP_GetTotalPacketsSent(const char * controlURL, 37 const char * servicetype); 38 39 MINIUPNP_LIBSPEC UNSIGNED_INTEGER 40 UPNP_GetTotalPacketsReceived(const char * controlURL, 41 const char * servicetype); 42 43 /* UPNP_GetStatusInfo() 44 * status and lastconnerror are 64 byte buffers 45 * Return values : 46 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR 47 * or a UPnP Error code */ 48 MINIUPNP_LIBSPEC int 49 UPNP_GetStatusInfo(const char * controlURL, 50 const char * servicetype, 51 char * status, 52 unsigned int * uptime, 53 char * lastconnerror); 54 55 /* UPNP_GetConnectionTypeInfo() 56 * argument connectionType is a 64 character buffer 57 * Return Values : 58 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR 59 * or a UPnP Error code */ 60 MINIUPNP_LIBSPEC int 61 UPNP_GetConnectionTypeInfo(const char * controlURL, 62 const char * servicetype, 63 char * connectionType); 64 65 /* UPNP_GetExternalIPAddress() call the corresponding UPNP method. 66 * if the third arg is not null the value is copied to it. 67 * at least 16 bytes must be available 68 * 69 * Return values : 70 * 0 : SUCCESS 71 * NON ZERO : ERROR Either an UPnP error code or an unknown error. 72 * 73 * possible UPnP Errors : 74 * 402 Invalid Args - See UPnP Device Architecture section on Control. 75 * 501 Action Failed - See UPnP Device Architecture section on Control. */ 76 MINIUPNP_LIBSPEC int 77 UPNP_GetExternalIPAddress(const char * controlURL, 78 const char * servicetype, 79 char * extIpAdd); 80 81 /* UPNP_GetLinkLayerMaxBitRates() 82 * call WANCommonInterfaceConfig:1#GetCommonLinkProperties 83 * 84 * return values : 85 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR 86 * or a UPnP Error Code. */ 87 MINIUPNP_LIBSPEC int 88 UPNP_GetLinkLayerMaxBitRates(const char* controlURL, 89 const char* servicetype, 90 unsigned int * bitrateDown, 91 unsigned int * bitrateUp); 92 93 /* UPNP_AddPortMapping() 94 * if desc is NULL, it will be defaulted to "libminiupnpc" 95 * remoteHost is usually NULL because IGD don't support it. 96 * 97 * Return values : 98 * 0 : SUCCESS 99 * NON ZERO : ERROR. Either an UPnP error code or an unknown error. 100 * 101 * List of possible UPnP errors for AddPortMapping : 102 * errorCode errorDescription (short) - Description (long) 103 * 402 Invalid Args - See UPnP Device Architecture section on Control. 104 * 501 Action Failed - See UPnP Device Architecture section on Control. 105 * 606 Action not authorized - The action requested REQUIRES authorization and 106 * the sender was not authorized. 107 * 715 WildCardNotPermittedInSrcIP - The source IP address cannot be 108 * wild-carded 109 * 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded 110 * 718 ConflictInMappingEntry - The port mapping entry specified conflicts 111 * with a mapping assigned previously to another client 112 * 724 SamePortValuesRequired - Internal and External port values 113 * must be the same 114 * 725 OnlyPermanentLeasesSupported - The NAT implementation only supports 115 * permanent lease times on port mappings 116 * 726 RemoteHostOnlySupportsWildcard - RemoteHost must be a wildcard 117 * and cannot be a specific IP address or DNS name 118 * 727 ExternalPortOnlySupportsWildcard - ExternalPort must be a wildcard and 119 * cannot be a specific port value 120 * 728 NoPortMapsAvailable - There are not enough free ports available to 121 * complete port mapping. 122 * 729 ConflictWithOtherMechanisms - Attempted port mapping is not allowed 123 * due to conflict with other mechanisms. 124 * 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded 125 */ 126 MINIUPNP_LIBSPEC int 127 UPNP_AddPortMapping(const char * controlURL, const char * servicetype, 128 const char * extPort, 129 const char * inPort, 130 const char * inClient, 131 const char * desc, 132 const char * proto, 133 const char * remoteHost, 134 const char * leaseDuration); 135 136 /* UPNP_AddAnyPortMapping() 137 * if desc is NULL, it will be defaulted to "libminiupnpc" 138 * remoteHost is usually NULL because IGD don't support it. 139 * 140 * Return values : 141 * 0 : SUCCESS 142 * NON ZERO : ERROR. Either an UPnP error code or an unknown error. 143 * 144 * List of possible UPnP errors for AddPortMapping : 145 * errorCode errorDescription (short) - Description (long) 146 * 402 Invalid Args - See UPnP Device Architecture section on Control. 147 * 501 Action Failed - See UPnP Device Architecture section on Control. 148 * 606 Action not authorized - The action requested REQUIRES authorization and 149 * the sender was not authorized. 150 * 715 WildCardNotPermittedInSrcIP - The source IP address cannot be 151 * wild-carded 152 * 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded 153 * 728 NoPortMapsAvailable - There are not enough free ports available to 154 * complete port mapping. 155 * 729 ConflictWithOtherMechanisms - Attempted port mapping is not allowed 156 * due to conflict with other mechanisms. 157 * 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded 158 */ 159 MINIUPNP_LIBSPEC int 160 UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype, 161 const char * extPort, 162 const char * inPort, 163 const char * inClient, 164 const char * desc, 165 const char * proto, 166 const char * remoteHost, 167 const char * leaseDuration, 168 char * reservedPort); 169 170 /* UPNP_DeletePortMapping() 171 * Use same argument values as what was used for AddPortMapping(). 172 * remoteHost is usually NULL because IGD don't support it. 173 * Return Values : 174 * 0 : SUCCESS 175 * NON ZERO : error. Either an UPnP error code or an undefined error. 176 * 177 * List of possible UPnP errors for DeletePortMapping : 178 * 402 Invalid Args - See UPnP Device Architecture section on Control. 179 * 606 Action not authorized - The action requested REQUIRES authorization 180 * and the sender was not authorized. 181 * 714 NoSuchEntryInArray - The specified value does not exist in the array */ 182 MINIUPNP_LIBSPEC int 183 UPNP_DeletePortMapping(const char * controlURL, const char * servicetype, 184 const char * extPort, const char * proto, 185 const char * remoteHost); 186 187 /* UPNP_DeletePortRangeMapping() 188 * Use same argument values as what was used for AddPortMapping(). 189 * remoteHost is usually NULL because IGD don't support it. 190 * Return Values : 191 * 0 : SUCCESS 192 * NON ZERO : error. Either an UPnP error code or an undefined error. 193 * 194 * List of possible UPnP errors for DeletePortMapping : 195 * 606 Action not authorized - The action requested REQUIRES authorization 196 * and the sender was not authorized. 197 * 730 PortMappingNotFound - This error message is returned if no port 198 * mapping is found in the specified range. 199 * 733 InconsistentParameters - NewStartPort and NewEndPort values are not consistent. */ 200 MINIUPNP_LIBSPEC int 201 UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype, 202 const char * extPortStart, const char * extPortEnd, 203 const char * proto, 204 const char * manage); 205 206 /* UPNP_GetPortMappingNumberOfEntries() 207 * not supported by all routers */ 208 MINIUPNP_LIBSPEC int 209 UPNP_GetPortMappingNumberOfEntries(const char* controlURL, 210 const char* servicetype, 211 unsigned int * num); 212 213 /* UPNP_GetSpecificPortMappingEntry() 214 * retrieves an existing port mapping 215 * params : 216 * in extPort 217 * in proto 218 * in remoteHost 219 * out intClient (16 bytes) 220 * out intPort (6 bytes) 221 * out desc (80 bytes) 222 * out enabled (4 bytes) 223 * out leaseDuration (16 bytes) 224 * 225 * return value : 226 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR 227 * or a UPnP Error Code. 228 * 229 * List of possible UPnP errors for _GetSpecificPortMappingEntry : 230 * 402 Invalid Args - See UPnP Device Architecture section on Control. 231 * 501 Action Failed - See UPnP Device Architecture section on Control. 232 * 606 Action not authorized - The action requested REQUIRES authorization 233 * and the sender was not authorized. 234 * 714 NoSuchEntryInArray - The specified value does not exist in the array. 235 */ 236 MINIUPNP_LIBSPEC int 237 UPNP_GetSpecificPortMappingEntry(const char * controlURL, 238 const char * servicetype, 239 const char * extPort, 240 const char * proto, 241 const char * remoteHost, 242 char * intClient, 243 char * intPort, 244 char * desc, 245 char * enabled, 246 char * leaseDuration); 247 248 /* UPNP_GetGenericPortMappingEntry() 249 * params : 250 * in index 251 * out extPort (6 bytes) 252 * out intClient (16 bytes) 253 * out intPort (6 bytes) 254 * out protocol (4 bytes) 255 * out desc (80 bytes) 256 * out enabled (4 bytes) 257 * out rHost (64 bytes) 258 * out duration (16 bytes) 259 * 260 * return value : 261 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR 262 * or a UPnP Error Code. 263 * 264 * Possible UPNP Error codes : 265 * 402 Invalid Args - See UPnP Device Architecture section on Control. 266 * 606 Action not authorized - The action requested REQUIRES authorization 267 * and the sender was not authorized. 268 * 713 SpecifiedArrayIndexInvalid - The specified array index is out of bounds 269 */ 270 MINIUPNP_LIBSPEC int 271 UPNP_GetGenericPortMappingEntry(const char * controlURL, 272 const char * servicetype, 273 const char * index, 274 char * extPort, 275 char * intClient, 276 char * intPort, 277 char * protocol, 278 char * desc, 279 char * enabled, 280 char * rHost, 281 char * duration); 282 283 /* UPNP_GetListOfPortMappings() Available in IGD v2 284 * 285 * 286 * Possible UPNP Error codes : 287 * 606 Action not Authorized 288 * 730 PortMappingNotFound - no port mapping is found in the specified range. 289 * 733 InconsistantParameters - NewStartPort and NewEndPort values are not 290 * consistent. 291 */ 292 MINIUPNP_LIBSPEC int 293 UPNP_GetListOfPortMappings(const char * controlURL, 294 const char * servicetype, 295 const char * startPort, 296 const char * endPort, 297 const char * protocol, 298 const char * numberOfPorts, 299 struct PortMappingParserData * data); 300 301 /* IGD:2, functions for service WANIPv6FirewallControl:1 */ 302 MINIUPNP_LIBSPEC int 303 UPNP_GetFirewallStatus(const char * controlURL, 304 const char * servicetype, 305 int * firewallEnabled, 306 int * inboundPinholeAllowed); 307 308 MINIUPNP_LIBSPEC int 309 UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype, 310 const char * remoteHost, 311 const char * remotePort, 312 const char * intClient, 313 const char * intPort, 314 const char * proto, 315 int * opTimeout); 316 317 MINIUPNP_LIBSPEC int 318 UPNP_AddPinhole(const char * controlURL, const char * servicetype, 319 const char * remoteHost, 320 const char * remotePort, 321 const char * intClient, 322 const char * intPort, 323 const char * proto, 324 const char * leaseTime, 325 char * uniqueID); 326 327 MINIUPNP_LIBSPEC int 328 UPNP_UpdatePinhole(const char * controlURL, const char * servicetype, 329 const char * uniqueID, 330 const char * leaseTime); 331 332 MINIUPNP_LIBSPEC int 333 UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID); 334 335 MINIUPNP_LIBSPEC int 336 UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype, 337 const char * uniqueID, int * isWorking); 338 339 MINIUPNP_LIBSPEC int 340 UPNP_GetPinholePackets(const char * controlURL, const char * servicetype, 341 const char * uniqueID, int * packets); 342 343 #ifdef __cplusplus 344 } 345 #endif 346 347 #endif 348 349