Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

183 lines
4.3 KiB

[
uuid(4b112204-0e19-11d3-b42b-0000f81feb9f),
version(1.0),
pointer_default(unique)
]
interface ssdpsrv
{
import "wtypes.idl";
#define SSDP_SERVICE_PERSISTENT 0x00000001
cpp_quote("#define SSDP_SERVICE_PERSISTENT 0x00000001")
#define NUM_OF_HEADERS 19
cpp_quote("#define NUM_OF_HEADERS 19")
#define NUM_OF_METHODS 4
cpp_quote("#define NUM_OF_METHODS 4")
typedef enum _NOTIFY_TYPE {
NOTIFY_ALIVE,
NOTIFY_PROP_CHANGE
} NOTIFY_TYPE;
// make sure values matches array index to SsdpMethodStr in ssdp.idl
typedef enum _SSDP_METHOD {
SSDP_NOTIFY = 0,
SSDP_M_SEARCH = 1,
GENA_SUBSCRIBE = 2,
GENA_UNSUBSCRIBE =3,
SSDP_INVALID = 4 // Must be qual to NUM_OF_METHODS
} SSDP_METHOD, *PSSDP_METHOD;
// make sure values matches array index to SsdpHeaderStr in ssdp.idl
typedef enum _SSDP_HEADER {
SSDP_HOST = 0,
SSDP_NT,
SSDP_NTS,
SSDP_ST,
SSDP_MAN,
SSDP_MX,
SSDP_LOCATION,
SSDP_AL,
SSDP_USN,
SSDP_CACHECONTROL,
GENA_CALLBACK,
GENA_TIMEOUT,
GENA_SCOPE,
GENA_SID,
GENA_SEQ,
CONTENT_LENGTH,
CONTENT_TYPE,
SSDP_SERVER,
SSDP_EXT,
} SSDP_HEADER, *PSSDP_HEADER;
typedef [string] LPSTR MIDL_SZ;
typedef struct _SSDP_REQUEST {
SSDP_METHOD Method;
[string] LPSTR RequestUri;
MIDL_SZ Headers[NUM_OF_HEADERS];
[string] LPSTR ContentType;
[string] LPSTR Content;
GUID guidInterface;
} SSDP_REQUEST, *PSSDP_REQUEST;
typedef struct _SSDP_MESSAGE{
// Message type
[string] LPSTR szType;
// location header
[string] LPSTR szLocHeader;
// alt location headers
[string] LPSTR szAltHeaders;
// unique service name
[string] LPSTR szUSN;
// Subscription identifier
[string] LPSTR szSid;
// sequence # for event notifications
DWORD iSeq;
// cache interval
UINT iLifeTime;
// optional content body
[string] LPSTR szContent;
// network interface on which received
GUID guidInterface;
} SSDP_MESSAGE, *PSSDP_MESSAGE;
typedef struct _SSDP_REGISTER_INFO
{
[string] LPSTR szSid;
DWORD csecTimeout;
} SSDP_REGISTER_INFO;
typedef struct _MessageList {
long size;
[size_is(size)] SSDP_REQUEST *list;
} MessageList;
typedef enum _UPNP_PROPERTY_FLAG {
UPF_NON_EVENTED = 0x00000001,
} UPNP_PROPERTY_FLAG;
typedef struct _UPNP_PROPERTY {
// property name
[string] LPSTR szName;
DWORD dwFlags;
// property value
[string] LPSTR szValue;
} UPNP_PROPERTY;
typedef struct _SUBSCRIBER_INFO {
[string] LPSTR szDestUrl;
FILETIME ftTimeout;
DWORD csecTimeout;
DWORD iSeq;
[string] LPSTR szSid;
} SUBSCRIBER_INFO;
typedef struct _EVTSRC_INFO {
DWORD cSubs;
[size_is(cSubs)] SUBSCRIBER_INFO *rgSubs;
} EVTSRC_INFO;
typedef [context_handle] void *PCONTEXT_HANDLE_TYPE;
typedef [context_handle] void *PSYNC_HANDLE_TYPE;
// Publication
int RegisterServiceRpc([out] PCONTEXT_HANDLE_TYPE *pphContext, [in] SSDP_MESSAGE svc, [in] DWORD flags);
int DeregisterServiceRpcByUSN([in, string] LPSTR szUSN, [in] BOOL fByebye);
int DeregisterServiceRpc([in, out] PCONTEXT_HANDLE_TYPE *pphContext, [in] BOOL fByebye);
// Cache
void UpdateCacheRpc([in, unique] PSSDP_REQUEST SsdpRequest);
int LookupCacheRpc([in, string] LPSTR szType, [out] MessageList **svcList);
void CleanupCacheRpc();
// Notification
// Initialize the synchronization handle
int InitializeSyncHandle([out] PSYNC_HANDLE_TYPE *pphContextSync);
void RemoveSyncHandle( [in, out] PSYNC_HANDLE_TYPE *pphContextSync);
int RegisterNotificationRpc(
[out] PCONTEXT_HANDLE_TYPE *pphContext,
[in] PSYNC_HANDLE_TYPE phContextSync,
[in] NOTIFY_TYPE nt,
[in, unique, string] LPSTR szType,
[in, unique, string] LPSTR szEventUrl,
[out] SSDP_REGISTER_INFO **ppinfo);
int GetNotificationRpc([in] PSYNC_HANDLE_TYPE pphContextSync, [out] MessageList **svcList);
int WakeupGetNotificationRpc([in] PSYNC_HANDLE_TYPE pphContextSync);
int DeregisterNotificationRpc([in, out] PCONTEXT_HANDLE_TYPE *pphContext, [in] BOOL fLast);
// Device Host ICS Support
void EnableDeviceHost();
void DisableDeviceHost();
void SetICSInterfaces([in] long nCount, [in, size_is(nCount)] GUID * arInterfaces);
void SetICSOff();
}