1 /* $Id: upnpcommands.h,v 1.23 2011/04/11 09:14:00 nanard Exp $ */
2 /* Miniupnp project : http://miniupnp.free.fr/
3  * Author : Thomas Bernard
4  * Copyright (c) 2005-2011 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 "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 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 LIBSPEC UNSIGNED_INTEGER
26 UPNP_GetTotalBytesSent(const char * controlURL,
27 					const char * servicetype);
28 
29 LIBSPEC UNSIGNED_INTEGER
30 UPNP_GetTotalBytesReceived(const char * controlURL,
31 						const char * servicetype);
32 
33 LIBSPEC UNSIGNED_INTEGER
34 UPNP_GetTotalPacketsSent(const char * controlURL,
35 					const char * servicetype);
36 
37 LIBSPEC UNSIGNED_INTEGER
38 UPNP_GetTotalPacketsReceived(const char * controlURL,
39 					const char * servicetype);
40 
41 /* UPNP_GetStatusInfo()
42  * status and lastconnerror are 64 byte buffers
43  * Return values :
44  * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
45  * or a UPnP Error code */
46 LIBSPEC int
47 UPNP_GetStatusInfo(const char * controlURL,
48 			       const char * servicetype,
49 				   char * status,
50 				   unsigned int * uptime,
51                    char * lastconnerror);
52 
53 /* UPNP_GetConnectionTypeInfo()
54  * argument connectionType is a 64 character buffer
55  * Return Values :
56  * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
57  * or a UPnP Error code */
58 LIBSPEC int
59 UPNP_GetConnectionTypeInfo(const char * controlURL,
60                            const char * servicetype,
61 						   char * connectionType);
62 
63 /* UPNP_GetExternalIPAddress() call the corresponding UPNP method.
64  * if the third arg is not null the value is copied to it.
65  * at least 16 bytes must be available
66  *
67  * Return values :
68  * 0 : SUCCESS
69  * NON ZERO : ERROR Either an UPnP error code or an unknown error.
70  *
71  * possible UPnP Errors :
72  * 402 Invalid Args - See UPnP Device Architecture section on Control.
73  * 501 Action Failed - See UPnP Device Architecture section on Control. */
74 LIBSPEC int
75 UPNP_GetExternalIPAddress(const char * controlURL,
76                           const char * servicetype,
77                           char * extIpAdd);
78 
79 /* UPNP_GetLinkLayerMaxBitRates()
80  * call WANCommonInterfaceConfig:1#GetCommonLinkProperties
81  *
82  * return values :
83  * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
84  * or a UPnP Error Code. */
85 LIBSPEC int
86 UPNP_GetLinkLayerMaxBitRates(const char* controlURL,
87 							const char* servicetype,
88 							unsigned int * bitrateDown,
89 							unsigned int * bitrateUp);
90 
91 /* UPNP_AddPortMapping()
92  * if desc is NULL, it will be defaulted to "libminiupnpc"
93  * remoteHost is usually NULL because IGD don't support it.
94  *
95  * Return values :
96  * 0 : SUCCESS
97  * NON ZERO : ERROR. Either an UPnP error code or an unknown error.
98  *
99  * List of possible UPnP errors for AddPortMapping :
100  * errorCode errorDescription (short) - Description (long)
101  * 402 Invalid Args - See UPnP Device Architecture section on Control.
102  * 501 Action Failed - See UPnP Device Architecture section on Control.
103  * 715 WildCardNotPermittedInSrcIP - The source IP address cannot be
104  *                                   wild-carded
105  * 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded
106  * 718 ConflictInMappingEntry - The port mapping entry specified conflicts
107  *                     with a mapping assigned previously to another client
108  * 724 SamePortValuesRequired - Internal and External port values
109  *                              must be the same
110  * 725 OnlyPermanentLeasesSupported - The NAT implementation only supports
111  *                  permanent lease times on port mappings
112  * 726 RemoteHostOnlySupportsWildcard - RemoteHost must be a wildcard
113  *                             and cannot be a specific IP address or DNS name
114  * 727 ExternalPortOnlySupportsWildcard - ExternalPort must be a wildcard and
115  *                                        cannot be a specific port value */
116 LIBSPEC int
117 UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
118                     const char * extPort,
119 				    const char * inPort,
120 					const char * inClient,
121 					const char * desc,
122                     const char * proto,
123                     const char * remoteHost,
124                     const char * leaseDuration);
125 
126 /* UPNP_DeletePortMapping()
127  * Use same argument values as what was used for AddPortMapping().
128  * remoteHost is usually NULL because IGD don't support it.
129  * Return Values :
130  * 0 : SUCCESS
131  * NON ZERO : error. Either an UPnP error code or an undefined error.
132  *
133  * List of possible UPnP errors for DeletePortMapping :
134  * 402 Invalid Args - See UPnP Device Architecture section on Control.
135  * 714 NoSuchEntryInArray - The specified value does not exist in the array */
136 LIBSPEC int
137 UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
138                        const char * extPort, const char * proto,
139                        const char * remoteHost);
140 
141 /* UPNP_GetPortMappingNumberOfEntries()
142  * not supported by all routers */
143 LIBSPEC int
144 UPNP_GetPortMappingNumberOfEntries(const char* controlURL,
145                                    const char* servicetype,
146                                    unsigned int * num);
147 
148 /* UPNP_GetSpecificPortMappingEntry()
149  *    retrieves an existing port mapping
150  * params :
151  *  in   extPort
152  *  in   proto
153  *  out  intClient (16 bytes)
154  *  out  intPort (6 bytes)
155  *  out  desc (80 bytes)
156  *  out  enabled (4 bytes)
157  *  out  leaseDuration (16 bytes)
158  *
159  * return value :
160  * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
161  * or a UPnP Error Code. */
162 LIBSPEC int
163 UPNP_GetSpecificPortMappingEntry(const char * controlURL,
164                                  const char * servicetype,
165                                  const char * extPort,
166                                  const char * proto,
167                                  char * intClient,
168                                  char * intPort,
169                                  char * desc,
170                                  char * enabled,
171                                  char * leaseDuration);
172 
173 /* UPNP_GetGenericPortMappingEntry()
174  * params :
175  *  in   index
176  *  out  extPort (6 bytes)
177  *  out  intClient (16 bytes)
178  *  out  intPort (6 bytes)
179  *  out  protocol (4 bytes)
180  *  out  desc (80 bytes)
181  *  out  enabled (4 bytes)
182  *  out  rHost (64 bytes)
183  *  out  duration (16 bytes)
184  *
185  * return value :
186  * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
187  * or a UPnP Error Code.
188  *
189  * Possible UPNP Error codes :
190  * 402 Invalid Args - See UPnP Device Architecture section on Control.
191  * 713 SpecifiedArrayIndexInvalid - The specified array index is out of bounds
192  */
193 LIBSPEC int
194 UPNP_GetGenericPortMappingEntry(const char * controlURL,
195                                 const char * servicetype,
196 								const char * index,
197 								char * extPort,
198 								char * intClient,
199 								char * intPort,
200 								char * protocol,
201 								char * desc,
202 								char * enabled,
203 								char * rHost,
204 								char * duration);
205 
206 /* UPNP_GetListOfPortMappings()      Available in IGD v2
207  *
208  *
209  * Possible UPNP Error codes :
210  * 606 Action not Authorized
211  * 730 PortMappingNotFound - no port mapping is found in the specified range.
212  * 733 InconsistantParameters - NewStartPort and NewEndPort values are not
213  *                              consistent.
214  */
215 LIBSPEC int
216 UPNP_GetListOfPortMappings(const char * controlURL,
217                            const char * servicetype,
218                            const char * startPort,
219                            const char * endPort,
220                            const char * protocol,
221                            const char * numberOfPorts,
222                            struct PortMappingParserData * data);
223 
224 /* IGD:2, functions for service WANIPv6FirewallControl:1 */
225 LIBSPEC int
226 UPNP_GetFirewallStatus(const char * controlURL,
227 				const char * servicetype,
228 				int * firewallEnabled,
229 				int * inboundPinholeAllowed);
230 
231 LIBSPEC int
232 UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype,
233                     const char * remoteHost,
234                     const char * remotePort,
235                     const char * intClient,
236                     const char * intPort,
237                     const char * proto,
238                     int * opTimeout);
239 
240 LIBSPEC int
241 UPNP_AddPinhole(const char * controlURL, const char * servicetype,
242                     const char * remoteHost,
243                     const char * remotePort,
244                     const char * intClient,
245                     const char * intPort,
246                     const char * proto,
247                     const char * leaseTime,
248                     char * uniqueID);
249 
250 LIBSPEC int
251 UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
252                     const char * uniqueID,
253                     const char * leaseTime);
254 
255 LIBSPEC int
256 UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID);
257 
258 LIBSPEC int
259 UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
260                                  const char * uniqueID, int * isWorking);
261 
262 LIBSPEC int
263 UPNP_GetPinholePackets(const char * controlURL, const char * servicetype,
264                                  const char * uniqueID, int * packets);
265 
266 #ifdef __cplusplus
267 }
268 #endif
269 
270 #endif
271 
272