libUPnP  1.14.22
upnpapi.h
Go to the documentation of this file.
1 /*******************************************************************************
2  *
3  * Copyright (c) 2000-2003 Intel Corporation
4  * All rights reserved.
5  * Copyright (C) 2011-2012 France Telecom All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * * Redistributions of source code must retain the above copyright notice,
11  * this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright notice,
13  * this list of conditions and the following disclaimer in the documentation
14  * and/or other materials provided with the distribution.
15  * * Neither name of Intel Corporation nor the names of its contributors
16  * may be used to endorse or promote products derived from this software
17  * without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  ******************************************************************************/
32 
33 #ifndef UPNPAPI_H
34 #define UPNPAPI_H
35 
41 #include "TimerThread.h"
42 #include "VirtualDir.h" /* for struct VirtualDirCallbacks */
43 #include "service_table.h"
44 
45 #define MAX_INTERFACES 256
46 
47 #define DEV_LIMIT 200
48 
49 #define DEFAULT_MX 5
50 
51 #define DEFAULT_MAXAGE 1800
52 
53 #define DEFAULT_SOAP_CONTENT_LENGTH 16000
54 #define MAX_SOAP_CONTENT_LENGTH (size_t)32000
55 
56 #define NUM_HANDLE 200
57 
58 extern size_t g_maxContentLength;
59 extern int g_UpnpSdkEQMaxLen;
60 extern int g_UpnpSdkEQMaxAge;
61 
62 /* 30-second timeout */
63 #define UPNP_TIMEOUT 30
64 
65 typedef enum
66 {
67  HND_INVALID = -1,
68  HND_CLIENT,
69  HND_DEVICE
70 } Upnp_Handle_Type;
71 
72 /* Data to be stored in handle table for */
74 {
76  Upnp_Handle_Type HType;
80  char *Cookie;
83 
84  /* Device Only */
85 #ifdef INCLUDE_DEVICE_APIS
86 
87  char DescURL[LINE_SIZE];
90  char LowerDescURL[LINE_SIZE];
92  char DescXML[LINE_SIZE];
93  /* Advertisement timeout */
94  int MaxAge;
95  /* Power State as defined by UPnP Low Power. */
96  int PowerState;
97  /* Sleep Period as defined by UPnP Low Power. */
98  int SleepPeriod;
99  /* Registration State as defined by UPnP Low Power. */
100  int RegistrationState;
114  int DeviceAf;
115 #endif
116 
117  /* Client only */
118 #ifdef INCLUDE_CLIENT_APIS
119 
123 #endif
124 };
125 
126 extern ithread_rwlock_t GlobalHndRWLock;
127 
133 static enum Upnp_LogLevel_e debug_handle = UPNP_NEVER;
134 #pragma GCC diagnostic push
135 #pragma GCC diagnostic ignored "-Wunused-function"
136 Upnp_Handle_Type GetHandleInfo(
138  int Hnd,
140  struct Handle_Info **HndInfo);
141 
142 static void HandleUnlock(const char *file, int line)
143 {
144  UpnpPrintf(debug_handle, API, file, line, "Trying Unlock\n");
145  ithread_rwlock_unlock(&GlobalHndRWLock);
146  UpnpPrintf(debug_handle, API, file, line, "Unlocked rwlock\n");
147 }
148 
149 static void HandleReadLock(const char *file, int line)
150 {
151  UpnpPrintf(debug_handle, API, file, line, "Trying a read lock\n");
152  ithread_rwlock_rdlock(&GlobalHndRWLock);
153  UpnpPrintf(debug_handle, API, file, line, "Read lock acquired\n");
154 }
155 
156 static void HandleWriteLock(const char *file, int line)
157 {
158  UpnpPrintf(debug_handle, API, file, line, "Trying a write lock\n");
159  ithread_rwlock_wrlock(&GlobalHndRWLock);
160  UpnpPrintf(debug_handle, API, file, line, "Write lock acquired\n");
161 }
162 
163 static void HandleLock(const char *file, int line)
164 {
165  HandleWriteLock(file, line);
166 }
167 #pragma GCC diagnostic pop
168 
176 Upnp_Handle_Type GetClientHandleInfo(
178  int *client_handle_out,
180  struct Handle_Info **HndInfo);
189 Upnp_Handle_Type GetDeviceHandleInfo(
191  UpnpDevice_Handle start,
193  int AddressFamily,
195  int *device_handle_out,
197  struct Handle_Info **HndInfo);
198 
206 Upnp_Handle_Type GetDeviceHandleInfoForPath(
208  const char *path,
210  int AddressFamily,
212  int *device_handle_out,
214  struct Handle_Info **HndInfo,
216  service_info **serv_info);
217 
218 extern char gIF_NAME[LINE_SIZE];
219 extern char gIF_IPV4[INET_ADDRSTRLEN];
220 extern char gIF_IPV4_NETMASK[INET_ADDRSTRLEN];
221 extern char gIF_IPV6[INET6_ADDRSTRLEN];
222 extern unsigned gIF_IPV6_PREFIX_LENGTH;
223 
224 extern char gIF_IPV6_ULA_GUA[INET6_ADDRSTRLEN];
225 extern unsigned gIF_IPV6_ULA_GUA_PREFIX_LENGTH;
226 
227 extern unsigned gIF_INDEX;
228 
229 extern unsigned short LOCAL_PORT_V4;
230 extern unsigned short LOCAL_PORT_V6;
231 extern unsigned short LOCAL_PORT_V6_ULA_GUA;
232 
235 
240 
241 typedef enum
242 {
243  SUBSCRIBE,
244  UNSUBSCRIBE,
245  DK_NOTIFY,
246  QUERY,
247  ACTION,
248  STATUS,
249  DEVDESCRIPTION,
250  SERVDESCRIPTION,
251  MINI,
252  RENEW
253 } UpnpFunName;
254 
256 {
257  UpnpFunName FunName;
258  int Handle;
259  int TimeOut;
260  char VarName[NAME_SIZE];
261  char NewVal[NAME_SIZE];
262  char DevType[NAME_SIZE];
263  char DevId[NAME_SIZE];
264  char ServiceType[NAME_SIZE];
265  char ServiceVer[NAME_SIZE];
266  char Url[NAME_SIZE];
267  Upnp_SID SubsId;
268  char *Cookie;
269  Upnp_FunPtr Fun;
270  IXML_Document *Header;
271  IXML_Document *Act;
272  struct DevDesc *Devdesc;
273 };
274 
277 
278 typedef enum
279 {
280  WEB_SERVER_DISABLED,
281  WEB_SERVER_ENABLED
282 } WebServerState;
283 
284 #define E_HTTP_SYNTAX -6
285 
305 int UpnpGetIfInfo(
307  const char *IfName);
308 
309 void UpnpThreadDistribution(struct UpnpNonblockParam *Param);
310 
315 void AutoAdvertise(
317  void *input);
318 
324 int PrintHandleInfo(
326  UpnpClient_Handle Hnd);
327 
329 extern WebServerState bWebServerState;
330 
332 extern WebCallback_HostValidate gWebCallback_HostValidate;
333 
336 
339 
340 #endif /* UPNPAPI_H */
Upnp_FunPtr Callback
Definition: upnpapi.h:78
int UpnpClient_Handle
Returned when a control point application registers with UpnpRegisterClient.
Definition: upnp.h:429
int(* Upnp_FunPtr)(Upnp_EventType EventType, const void *Event, void *Cookie)
Definition: Callback.h:145
IXML_Document * DescDocument
Definition: upnpapi.h:102
size_t g_maxContentLength
Definition: upnpapi.c:198
char DescURL[LINE_SIZE]
Definition: upnpapi.h:87
Definition: service_table.h:70
Definition: TimerThread.h:68
unsigned gIF_IPV6_PREFIX_LENGTH
Definition: upnpapi.c:165
Upnp_Handle_Type GetDeviceHandleInfo(UpnpDevice_Handle start, int AddressFamily, int *device_handle_out, struct Handle_Info **HndInfo)
Retrieves the device handle and information of the first device of the address family specified...
Definition: upnpapi.c:4160
void UpnpPrintf(Upnp_LogLevel DLevel, Dbg_Module Module, const char *DbgFileName, int DbgLineNo, const char *FmtStr,...)
Prints the debug statement either on the standard output or log file along with the information from ...
Definition: upnpdebug.c:259
Definition: upnpapi.h:255
IXML_NodeList * DeviceList
Definition: upnpapi.h:104
Upnp_Handle_Type GetHandleInfo(int Hnd, struct Handle_Info **HndInfo)
Definition: upnpapi.c:4237
int gAllowLiteralHostRedirection
Definition: upnpapi.c:149
char LowerDescURL[LINE_SIZE]
Definition: upnpapi.h:90
int g_UpnpSdkEQMaxAge
Definition: upnpapi.c:214
Upnp_Handle_Type HType
Definition: upnpapi.h:76
LinkedList SsdpSearchList
Definition: upnpapi.h:122
Definition: VirtualDir.h:10
ThreadPool gSendThreadPool
Definition: upnpapi.c:131
IXML_NodeList * ServiceList
Definition: upnpapi.h:106
WebServerState bWebServerState
Definition: upnpapi.c:140
GenlibClientSubscription * ClientSubList
Definition: upnpapi.h:120
Upnp_SID gUpnpSdkNLSuuid
int PrintHandleInfo(UpnpClient_Handle Hnd)
Print handle info.
Definition: upnpapi.c:4278
char gIF_IPV6[INET6_ADDRSTRLEN]
Definition: upnpapi.c:162
Upnp_Handle_Type GetDeviceHandleInfoForPath(const char *path, int AddressFamily, int *device_handle_out, struct Handle_Info **HndInfo, service_info **serv_info)
Retrieves the device handle and information of the first device of the address family specified...
Definition: upnpapi.c:4197
int MaxSubscriptionTimeOut
Definition: upnpapi.h:112
A thread pool similar to the thread pool in the UPnP SDK.
Definition: ThreadPool.h:217
unsigned short LOCAL_PORT_V6
Definition: upnpapi.c:181
TimerThread gTimerThread
Definition: upnpapi.c:128
int aliasInstalled
Definition: upnpapi.h:82
static enum Upnp_LogLevel_e debug_handle
Get handle information.
Definition: upnpapi.h:133
Definition: service_table.h:88
char gIF_IPV4_NETMASK[INET_ADDRSTRLEN]
Definition: upnpapi.c:158
void AutoAdvertise(void *input)
This function is a timer thread scheduled by UpnpSendAdvertisement to the send advetisement again...
Definition: upnpapi.c:4317
unsigned short LOCAL_PORT_V4
Definition: upnpapi.c:178
unsigned gIF_IPV6_ULA_GUA_PREFIX_LENGTH
Definition: upnpapi.c:172
void UpnpThreadDistribution(struct UpnpNonblockParam *Param)
Schedule async functions in threadpool.
Definition: upnpapi.c:4018
char gIF_NAME[LINE_SIZE]
Definition: upnpapi.c:152
char gIF_IPV4[INET_ADDRSTRLEN]
Definition: upnpapi.c:155
int UpnpDevice_Handle
Returned when a device application registers with UpnpRegisterRootDevice, UpnpRegisterRootDevice2, UpnpRegisterRootDevice3 or UpnpRegisterRootDevice4.
Definition: upnp.h:439
ithread_rwlock_t GlobalHndRWLock
Definition: upnpapi.c:119
void * gWebCallback_HostValidateCookie
Definition: upnpapi.c:146
Upnp_Handle_Type GetClientHandleInfo(int *client_handle_out, struct Handle_Info **HndInfo)
Get client handle info.
Definition: upnpapi.c:4140
service_table ServiceTable
Definition: upnpapi.h:108
Header file for GenlibClientSubscription methods.
Data structure representing a list of nodes.
Definition: ixml.h:202
virtualDirList * pVirtualDirList
Definition: upnpapi.c:111
unsigned gIF_INDEX
Definition: upnpapi.c:175
struct VirtualDirCallbacks virtualDirCallback
Definition: upnpapi.c:108
unsigned short LOCAL_PORT_V6_ULA_GUA
Definition: upnpapi.c:184
WebCallback_HostValidate gWebCallback_HostValidate
Definition: upnpapi.c:143
char * Cookie
Definition: upnpapi.h:80
int MaxSubscriptions
Definition: upnpapi.h:110
int DeviceAf
Definition: upnpapi.h:114
int UpnpGetIfInfo(const char *IfName)
Retrieve interface information and keep it in global variables. If NULL, we'll find the first suitabl...
Definition: upnpapi.c:3656
int g_UpnpSdkEQMaxLen
Definition: upnpapi.c:204
Data structure representing the DOM Document.
Definition: ixml.h:159
ThreadPool gRecvThreadPool
Definition: upnpapi.c:134
Definition: VirtualDir.h:60
char Upnp_SID[44]
Holds the subscription identifier for a subscription between a client and a device.
Definition: upnp.h:448
char gIF_IPV6_ULA_GUA[INET6_ADDRSTRLEN]
Definition: upnpapi.c:169
ThreadPool gMiniServerThreadPool
Definition: upnpapi.c:137
char DescXML[LINE_SIZE]
Definition: upnpapi.h:92
Definition: GenlibClientSubscription.c:18
Definition: upnpapi.h:73
Definition: LinkedList.h:83