|
|
[ 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();
}
|