1 | /* $Id: upnpcommands.h,v 1.32 2018/03/13 23:34:47 nanard Exp $ */ |
2 | /* Miniupnp project : http://miniupnp.free.fr/ |
3 | * Author : Thomas Bernard |
4 | * Copyright (c) 2005-2018 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 "miniupnpc_declspec.h" |
11 | #include "miniupnpctypes.h" |
12 | |
13 | /* MiniUPnPc return codes : */ |
14 | #define UPNPCOMMAND_SUCCESS (0) |
15 | #define UPNPCOMMAND_UNKNOWN_ERROR (-1) |
16 | #define UPNPCOMMAND_INVALID_ARGS (-2) |
17 | #define UPNPCOMMAND_HTTP_ERROR (-3) |
18 | #define UPNPCOMMAND_INVALID_RESPONSE (-4) |
19 | #define UPNPCOMMAND_MEM_ALLOC_ERROR (-5) |
20 | |
21 | #ifdef __cplusplus |
22 | extern "C" { |
23 | #endif |
24 | |
25 | struct PortMappingParserData; |
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 * numEntries); |
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 | |