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.
252 lines
7.4 KiB
252 lines
7.4 KiB
/*
|
|
- QOS.H
|
|
-
|
|
* Microsoft NetMeeting
|
|
* Quality of Service DLL
|
|
* Header file
|
|
*
|
|
* Revision History:
|
|
*
|
|
* When Who What
|
|
* -------- ------------------ ---------------------------------------
|
|
* 10.23.96 Yoram Yaacovi Created
|
|
*
|
|
*/
|
|
|
|
#ifndef _NMQOS_H_
|
|
#define _NMQOS_H_
|
|
|
|
#include <pshpack8.h> /* Assume 8 byte packing throughout */
|
|
|
|
/*
|
|
* Constants
|
|
*/
|
|
|
|
// Properties stuff
|
|
// Property types
|
|
#define PT_NULL ((ULONG) 1) /* NULL property value */
|
|
#define PT_I2 ((ULONG) 2) /* Signed 16-bit value */
|
|
#define PT_LONG ((ULONG) 3) /* Signed 32-bit value */
|
|
#define PT_BOOLEAN ((ULONG) 11) /* 16-bit boolean (non-zero true) */
|
|
#define PT_STRING8 ((ULONG) 30) /* Null terminated 8-bit character string */
|
|
#define PT_UNICODE ((ULONG) 31) /* Null terminated Unicode string */
|
|
#define PT_CLSID ((ULONG) 72) /* OLE GUID */
|
|
#define PT_BINARY ((ULONG) 258) /* Uninterpreted (counted byte array) */
|
|
|
|
// Property IDs
|
|
#define QOS_PROPERTY_BASE 0x3000
|
|
#define PR_QOS_WINDOW_HANDLE PROPERTY_TAG( PT_LONG, QOS_PROPERTY_BASE+1)
|
|
|
|
// hresult codes, facility QOS = 0x300
|
|
#define QOS_E_RES_NOT_ENOUGH_UNITS 0x83000001
|
|
#define QOS_E_RES_NOT_AVAILABLE 0x83000002
|
|
#define QOS_E_NO_SUCH_REQUEST 0x83000003
|
|
#define QOS_E_NO_SUCH_RESOURCE 0x83000004
|
|
#define QOS_E_NO_SUCH_CLIENT 0x83000005
|
|
#define QOS_E_REQ_ERRORS 0x83000006
|
|
#define QOS_W_MAX_UNITS_EXCEEDED 0x03000007
|
|
#define QOS_E_INTERNAL_ERROR 0x83000008
|
|
#define QOS_E_NO_SUCH_PROPERTY 0x83000100
|
|
|
|
// Resource IDs
|
|
#define RESOURCE_NULL 0
|
|
#define RESOURCE_OUTGOING_BANDWIDTH 1 /* units: bps */
|
|
#define RESOURCE_INCOMING_BANDWIDTH 2 /* units: bps */
|
|
#define RESOURCE_OUTGOING_LATENCY 3 /* units: */
|
|
#define RESOURCE_INCOMING_LATENCY 4 /* units: */
|
|
#define RESOURCE_CPU_CYCLES 10 /* units: */
|
|
|
|
#define QOS_CLIENT_NAME_ZISE 20
|
|
|
|
// For use as dimension for variable size arrays
|
|
#define VARIABLE_DIM 1
|
|
|
|
|
|
/*
|
|
* Macros
|
|
*/
|
|
#define PROPERTY_TYPE_MASK ((ULONG)0x0000FFFF) /* Mask for Property type */
|
|
#define PROPERTY_TYPE(ulPropTag) (((ULONG)(ulPropTag))&PROPERTY_TYPE_MASK)
|
|
#define PROPERTY_ID(ulPropTag) (((ULONG)(ulPropTag))>>16)
|
|
#define PROPERTY_TAG(ulPropType,ulPropID) ((((ULONG)(ulPropID))<<16)|((ULONG)(ulPropType)))
|
|
|
|
#ifndef GUARANTEE
|
|
// this used to be defined in the original winsock2.h
|
|
typedef enum
|
|
{
|
|
BestEffortService,
|
|
ControlledLoadService,
|
|
PredictiveService,
|
|
GuaranteedDelayService,
|
|
GuaranteedService
|
|
} GUARANTEE;
|
|
#endif
|
|
/*
|
|
* Data Structures
|
|
*/
|
|
|
|
// Properties part
|
|
typedef struct _binaryvalue
|
|
{
|
|
ULONG cb;
|
|
LPBYTE lpb;
|
|
} BINARYVALUE, *PBINARYVALUE;
|
|
|
|
typedef union _propvalue
|
|
{
|
|
short int i; /* case PT_I2 */
|
|
LONG l; /* case PT_LONG */
|
|
ULONG_PTR ul; /* alias for PT_LONG */
|
|
unsigned short int b; /* case PT_BOOLEAN */
|
|
LPSTR lpszA; /* case PT_STRING8 */
|
|
BINARYVALUE bin; /* case PT_BINARY */
|
|
LPWSTR lpszW; /* case PT_UNICODE */
|
|
LPGUID lpguid; /* case PT_CLSID */
|
|
} PROPVALUE;
|
|
|
|
typedef struct _property
|
|
{
|
|
ULONG ulPropTag;
|
|
ULONG hResult;
|
|
union _propvalue Value;
|
|
} PROPERTY, *PPROPERTY;
|
|
|
|
|
|
typedef struct _proptagarray
|
|
{
|
|
ULONG cValues;
|
|
ULONG aulPropTag[VARIABLE_DIM];
|
|
} PROPTAGARRAY, *PPROPTAGARRAY;
|
|
|
|
|
|
// QoS part
|
|
typedef struct _resource
|
|
{
|
|
DWORD resourceID;
|
|
DWORD ulResourceFlags; /* 0 in NetMeeting 2.0 */
|
|
int nUnits; /* Total units of the resource */
|
|
DWORD reserved; /* Must be 0 */
|
|
} RESOURCE, *LPRESOURCE;
|
|
|
|
typedef struct _resourcerequest
|
|
{
|
|
DWORD resourceID;
|
|
DWORD ulRequestFlags; /* 0 in NetMeeting 2.0 */
|
|
GUARANTEE levelOfGuarantee; /* Guaranteed, Predictive */
|
|
int nUnitsMin; /* # of units to reserve */
|
|
int nUnitsMax; /* 0 in NetMeeting 2.0 */
|
|
SOCKET socket; /* Socket where the */
|
|
/* reservation will be used */
|
|
HRESULT hResult; /* result code for this resource */
|
|
DWORD reserved; /* Must be 0 */
|
|
} RESOURCEREQUEST, *LPRESOURCEREQUEST;
|
|
|
|
typedef struct _resourcelist
|
|
{
|
|
ULONG cResources;
|
|
RESOURCE aResources[VARIABLE_DIM];
|
|
} RESOURCELIST, *LPRESOURCELIST;
|
|
|
|
typedef struct _resourcerequestlist
|
|
{
|
|
ULONG cRequests;
|
|
RESOURCEREQUEST aRequests[VARIABLE_DIM];
|
|
} RESOURCEREQUESTLIST, *LPRESOURCEREQUESTLIST;
|
|
|
|
typedef struct _client
|
|
{
|
|
GUID guidClientGUID;
|
|
int priority; /* 1 highest, 9 lowest, 0 invalid */
|
|
WCHAR wszName[QOS_CLIENT_NAME_ZISE]; /* name of the client */
|
|
DWORD reserved; /* Must be 0 */
|
|
} CLIENT, *LPCLIENT;
|
|
|
|
typedef struct _clientlist
|
|
{
|
|
ULONG cClients;
|
|
CLIENT aClients[VARIABLE_DIM];
|
|
} CLIENTLIST, *LPCLIENTLIST;
|
|
|
|
/*
|
|
* Functions
|
|
*/
|
|
typedef HRESULT (CALLBACK *LPFNQOSNOTIFY)
|
|
(LPRESOURCEREQUESTLIST lpResourceRequestList,
|
|
DWORD_PTR dwParam);
|
|
|
|
/*
|
|
* Interfaces
|
|
*/
|
|
|
|
#ifndef DECLARE_INTERFACE_PTR
|
|
#ifdef __cplusplus
|
|
#define DECLARE_INTERFACE_PTR(iface, piface) \
|
|
interface iface; typedef iface FAR * piface
|
|
#else
|
|
#define DECLARE_INTERFACE_PTR(iface, piface) \
|
|
typedef interface iface iface, FAR * piface
|
|
#endif
|
|
#endif /* DECLARE_INTERFACE_PTR */
|
|
|
|
|
|
#define IUNKNOWN_METHODS(IPURE) \
|
|
STDMETHOD (QueryInterface) \
|
|
(THIS_ REFIID riid, LPVOID FAR * ppvObj) IPURE; \
|
|
STDMETHOD_(ULONG,AddRef) (THIS) IPURE; \
|
|
STDMETHOD_(ULONG,Release) (THIS) IPURE; \
|
|
|
|
#define IQOS_METHODS(IPURE) \
|
|
STDMETHOD(RequestResources) \
|
|
(THIS_ LPGUID lpStreamGUID, \
|
|
LPRESOURCEREQUESTLIST lpResourceRequestList, \
|
|
LPFNQOSNOTIFY lpfnQoSNotify, \
|
|
DWORD_PTR dwParam) IPURE; \
|
|
STDMETHOD (ReleaseResources) \
|
|
(THIS_ LPGUID lpStreamGUID, \
|
|
LPRESOURCEREQUESTLIST lpResourceRequestList) IPURE; \
|
|
STDMETHOD (SetResources) (THIS_ LPRESOURCELIST lpResourceList) IPURE; \
|
|
STDMETHOD (GetResources) (THIS_ LPRESOURCELIST *lppResourceList) IPURE; \
|
|
STDMETHOD (SetClients) (THIS_ LPCLIENTLIST lpClientList) IPURE; \
|
|
STDMETHOD (NotifyNow) (THIS) IPURE; \
|
|
STDMETHOD (FreeBuffer) (THIS_ LPVOID lpBuffer) IPURE; \
|
|
|
|
#define IPROP_METHODS(IPURE) \
|
|
STDMETHOD (SetProps) \
|
|
(THIS_ ULONG cValues, \
|
|
PPROPERTY pPropArray) IPURE; \
|
|
STDMETHOD (GetProps) \
|
|
(THIS_ PPROPTAGARRAY pPropTagArray, \
|
|
ULONG ulFlags, \
|
|
ULONG *pcValues, \
|
|
PPROPERTY *ppPropArray) IPURE; \
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IQoS
|
|
DECLARE_INTERFACE_(IQoS, IUnknown)
|
|
{
|
|
IUNKNOWN_METHODS(PURE)
|
|
IQOS_METHODS(PURE)
|
|
IPROP_METHODS(PURE)
|
|
};
|
|
|
|
DECLARE_INTERFACE_PTR(IQoS, LPIQOS);
|
|
|
|
EXTERN_C HRESULT WINAPI CreateQoS ( IUnknown *punkOuter,
|
|
REFIID riid,
|
|
void **ppv);
|
|
|
|
typedef HRESULT (WINAPI *PFNCREATEQOS)
|
|
(IUnknown *punkOuter, REFIID riid, void **ppv);
|
|
|
|
|
|
// QoS Class GUID
|
|
// {085C06A0-3CAA-11d0-A00E-00A024A85A2C}
|
|
DEFINE_GUID(CLSID_QoS, 0x085c06a0, 0x3caa, 0x11d0, 0xa0, 0x0e, 0x0, 0xa0, 0x24, 0xa8, 0x5a, 0x2c);
|
|
// QoS Interface GUID
|
|
// {DFC1F900-2DCE-11d0-92DD-00A0C922E6B2}
|
|
DEFINE_GUID(IID_IQoS, 0xdfc1f900, 0x2dce, 0x11d0, 0x92, 0xdd, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xb2);
|
|
|
|
#include <poppack.h> /* End byte packing */
|
|
|
|
#endif // _NMQOS_H_
|
|
|