/* - 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 /* 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 /* End byte packing */ #endif // _NMQOS_H_