00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 #ifndef UPNPDK_H
00056 #define UPNPDK_H
00057
00058 #include "upnp.h"
00059 #include "client_table.h"
00060 #include "membuffer.h"
00061
00062
00063
00064
00065
00066
00067 #define MAX_INTERFACES 256
00068
00069 #define DEFAULT_INTERFACE 1
00070
00071 #define DEV_LIMIT 200
00072
00073 #define NUM_HANDLE 200
00074
00075 #define DEFAULT_MX 5
00076
00077 #define DEFAULT_MAXAGE 1800
00078
00079 #define DEFAULT_SOAP_CONTENT_LENGTH 16000
00080 #define MAX_SOAP_CONTENT_LENGTH 32000
00081
00082
00083 #if SIZEOF_OFF_T > 4
00084 #define OFF_T_SPRINTF "%ll"
00085 #else
00086 #define OFF_T_SPRINTF "%l"
00087 #endif
00088
00089 extern off_t g_maxContentLength;
00090
00091
00092 #define UPNP_TIMEOUT 30
00093
00094 typedef enum {HND_INVALID=-1,HND_CLIENT,HND_DEVICE} Upnp_Handle_Type;
00095
00096
00097 struct Handle_Info
00098 {
00099 Upnp_Handle_Type HType;
00100 Upnp_FunPtr Callback;
00101 char * Cookie;
00102
00103 DEVICEONLY(char DescURL[LINE_SIZE];)
00104 DEVICEONLY(char DescXML[LINE_SIZE];)
00105
00106
00107 DEVICEONLY(int MaxAge;)
00108 DEVICEONLY(IXML_Document *DescDocument;)
00109
00110 DEVICEONLY(IXML_NodeList *DeviceList;)
00111
00112 DEVICEONLY(IXML_NodeList *ServiceList;)
00113
00114 DEVICEONLY(service_table ServiceTable;)
00115
00116 DEVICEONLY(int MaxSubscriptions;)
00117 DEVICEONLY(int MaxSubscriptionTimeOut;)
00118
00119
00120 CLIENTONLY(client_subscription * ClientSubList;)
00121 CLIENTONLY(LinkedList SsdpSearchList;)
00122 int aliasInstalled;
00123 } ;
00124
00125 extern ithread_mutex_t GlobalHndMutex;
00126 Upnp_Handle_Type GetHandleInfo(int Hnd, struct Handle_Info **HndInfo);
00127
00128 #define HandleLock() DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"Trying Lock")); ithread_mutex_lock(&GlobalHndMutex); DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"LOCK"));
00129 #define HandleUnlock() DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"Trying Unlock")); ithread_mutex_unlock(&GlobalHndMutex); DBGONLY(UpnpPrintf(UPNP_INFO,API,__FILE__,__LINE__,"Unlock"));
00130 Upnp_Handle_Type GetClientHandleInfo(int *client_handle_out,
00131 struct Handle_Info **HndInfo);
00132 Upnp_Handle_Type GetDeviceHandleInfo(int *device_handle_out,
00133 struct Handle_Info **HndInfo);
00134
00135
00136 extern char LOCAL_HOST[LINE_SIZE];
00137
00138 extern unsigned short LOCAL_PORT;
00139
00140 extern TimerThread gTimerThread;
00141 extern ThreadPool gRecvThreadPool;
00142 extern ThreadPool gSendThreadPool;
00143
00144
00145 typedef enum {
00146 SUBSCRIBE,
00147 UNSUBSCRIBE,
00148 DK_NOTIFY,
00149 QUERY,
00150 ACTION,
00151 STATUS,
00152 DEVDESCRIPTION,
00153 SERVDESCRIPTION,
00154 MINI,
00155 RENEW} UpnpFunName;
00156
00157 struct UpnpNonblockParam
00158 {
00159 UpnpFunName FunName;
00160 int Handle;
00161 int TimeOut;
00162 char VarName[NAME_SIZE];
00163 char NewVal[NAME_SIZE];
00164 char DevType[NAME_SIZE];
00165 char DevId[NAME_SIZE];
00166 char ServiceType[NAME_SIZE];
00167 char ServiceVer[NAME_SIZE];
00168 char Url[NAME_SIZE];
00169 Upnp_SID SubsId;
00170 char *Cookie;
00171 Upnp_FunPtr Fun;
00172 IXML_Document *Header;
00173 IXML_Document *Act;
00174 struct DevDesc *Devdesc;
00175 };
00176
00177
00178 extern virtualDirList *pVirtualDirList;
00179 extern struct UpnpVirtualDirCallbacks virtualDirCallback;
00180
00181
00182 typedef enum { WEB_SERVER_DISABLED, WEB_SERVER_ENABLED } WebServerState;
00183
00184 #define E_HTTP_SYNTAX -6
00185
00186 void InitHandleList();
00187 int GetFreeHandle();
00188 int FreeHandle(int Handle);
00189 void UpnpThreadDistribution(struct UpnpNonblockParam * Param);
00190
00191
00192 void AutoAdvertise(void *input);
00193 int getlocalhostname(char *out);
00194
00195 virtualDirList *pVirtualDirList;
00196 userHTTPHeaderList *pUserHTTPHeaderList;
00197
00198 membuffer gUserHTTPHeaders;
00199
00200
00201 extern WebServerState bWebServerState;
00202
00203 int gUpnpSdkShutdown;
00204
00205 int gMaxHTTPTimeoutRetries;
00206 #endif
00207
00208
00209
00210