| /* |
| * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_TRAFFIC_CONTROL_WINDOWS_H_ |
| #define WEBRTC_TEST_CHANNEL_TRANSPORT_TRAFFIC_CONTROL_WINDOWS_H_ |
| |
| #ifndef WIN32_LEAN_AND_MEAN |
| #define WIN32_LEAN_AND_MEAN |
| #endif |
| |
| // Disable deprication warning from traffic.h |
| #pragma warning(disable : 4995) |
| |
| #include <windows.h> |
| #include <qos.h> |
| #include <ntddndis.h> |
| #include <traffic.h> |
| |
| #include "webrtc/system_wrappers/include/trace.h" |
| |
| namespace webrtc { |
| namespace test { |
| void MyClNotifyHandler(HANDLE ClRegCtx, HANDLE ClIfcCtx, ULONG Event, |
| HANDLE SubCode, ULONG BufSize, PVOID Buffer); |
| |
| |
| typedef ULONG (WINAPI *registerFn)(ULONG, HANDLE, PTCI_CLIENT_FUNC_LIST, |
| PHANDLE); |
| typedef ULONG (WINAPI *deregisterFn)(HANDLE); |
| typedef ULONG (WINAPI *enumerateFn)(HANDLE, PULONG, PTC_IFC_DESCRIPTOR); |
| typedef ULONG (WINAPI *openInterfaceFn)(LPWSTR, HANDLE, HANDLE, PHANDLE); |
| typedef ULONG (WINAPI *closeInterfaceFn)(HANDLE); |
| typedef ULONG (WINAPI *flowAddFn)(HANDLE, HANDLE, ULONG, PTC_GEN_FLOW, PHANDLE); |
| typedef ULONG (WINAPI *filterAddFn)(HANDLE, PTC_GEN_FILTER, PHANDLE); |
| typedef ULONG (WINAPI *flowDeleteFn)(HANDLE); |
| typedef ULONG (WINAPI *filterDeleteFn)(HANDLE); |
| |
| class TrafficControlWindows |
| { |
| public: |
| // Factory method. Constructor disabled. |
| static TrafficControlWindows* GetInstance(const int32_t id); |
| static void Release(TrafficControlWindows* gtc); |
| |
| ULONG TcRegisterClient(ULONG TciVersion, HANDLE ClRegCtx, |
| PTCI_CLIENT_FUNC_LIST ClientHandlerList, |
| PHANDLE pClientHandle); |
| |
| ULONG TcDeregisterClient(HANDLE clientHandle); |
| |
| ULONG TcEnumerateInterfaces(HANDLE ClientHandle, PULONG pBufferSize, |
| PTC_IFC_DESCRIPTOR interfaceBuffer); |
| |
| ULONG TcOpenInterfaceW(LPWSTR pInterfaceName, HANDLE ClientHandle, |
| HANDLE ClIfcCtx, PHANDLE pIfcHandle); |
| |
| ULONG TcCloseInterface(HANDLE IfcHandle); |
| |
| ULONG TcAddFlow(HANDLE IfcHandle, HANDLE ClFlowCtx, ULONG Flags, |
| PTC_GEN_FLOW pGenericFlow, PHANDLE pFlowHandle); |
| |
| ULONG TcAddFilter(HANDLE FlowHandle, PTC_GEN_FILTER pGenericFilter, |
| PHANDLE pFilterHandle); |
| |
| ULONG TcDeleteFlow(HANDLE FlowHandle); |
| ULONG TcDeleteFilter(HANDLE FilterHandle); |
| private: |
| TrafficControlWindows(const int32_t id); |
| TCI_CLIENT_FUNC_LIST QoSFunctions; |
| |
| static TrafficControlWindows* instance; |
| |
| registerFn tcRegister; |
| deregisterFn tcDeregister; |
| |
| enumerateFn tcEnumerate; |
| openInterfaceFn tcOpenInterface; |
| closeInterfaceFn tcCloseInterface; |
| |
| flowAddFn tcAddFlow; |
| flowDeleteFn tcDeleteFlow; |
| |
| filterAddFn tcAddFilter; |
| filterDeleteFn tcDeleteFilter; |
| |
| static uint32_t refCounter; |
| }; |
| |
| } // namespace test |
| } // namespace webrtc |
| |
| #endif // WEBRTC_TEST_CHANNEL_TRANSPORT_TRAFFIC_CONTROL_WINDOWS_H_ |