1/* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_TRAFFIC_CONTROL_WINDOWS_H_ 12#define WEBRTC_TEST_CHANNEL_TRANSPORT_TRAFFIC_CONTROL_WINDOWS_H_ 13 14#ifndef WIN32_LEAN_AND_MEAN 15#define WIN32_LEAN_AND_MEAN 16#endif 17 18// Disable deprication warning from traffic.h 19#pragma warning(disable : 4995) 20 21#include <windows.h> 22#include <qos.h> 23#include <ntddndis.h> 24#include <traffic.h> 25 26#include "webrtc/system_wrappers/interface/trace.h" 27 28namespace webrtc { 29namespace test { 30void MyClNotifyHandler(HANDLE ClRegCtx, HANDLE ClIfcCtx, ULONG Event, 31 HANDLE SubCode, ULONG BufSize, PVOID Buffer); 32 33 34typedef ULONG (WINAPI *registerFn)(ULONG, HANDLE, PTCI_CLIENT_FUNC_LIST, 35 PHANDLE); 36typedef ULONG (WINAPI *deregisterFn)(HANDLE); 37typedef ULONG (WINAPI *enumerateFn)(HANDLE, PULONG, PTC_IFC_DESCRIPTOR); 38typedef ULONG (WINAPI *openInterfaceFn)(LPWSTR, HANDLE, HANDLE, PHANDLE); 39typedef ULONG (WINAPI *closeInterfaceFn)(HANDLE); 40typedef ULONG (WINAPI *flowAddFn)(HANDLE, HANDLE, ULONG, PTC_GEN_FLOW, PHANDLE); 41typedef ULONG (WINAPI *filterAddFn)(HANDLE, PTC_GEN_FILTER, PHANDLE); 42typedef ULONG (WINAPI *flowDeleteFn)(HANDLE); 43typedef ULONG (WINAPI *filterDeleteFn)(HANDLE); 44 45class TrafficControlWindows 46{ 47 public: 48 // Factory method. Constructor disabled. 49 static TrafficControlWindows* GetInstance(const int32_t id); 50 static void Release(TrafficControlWindows* gtc); 51 52 int32_t ChangeUniqueId(const int32_t id); 53 54 ULONG TcRegisterClient(ULONG TciVersion, HANDLE ClRegCtx, 55 PTCI_CLIENT_FUNC_LIST ClientHandlerList, 56 PHANDLE pClientHandle); 57 58 ULONG TcDeregisterClient(HANDLE clientHandle); 59 60 ULONG TcEnumerateInterfaces(HANDLE ClientHandle, PULONG pBufferSize, 61 PTC_IFC_DESCRIPTOR interfaceBuffer); 62 63 ULONG TcOpenInterfaceW(LPWSTR pInterfaceName, HANDLE ClientHandle, 64 HANDLE ClIfcCtx, PHANDLE pIfcHandle); 65 66 ULONG TcCloseInterface(HANDLE IfcHandle); 67 68 ULONG TcAddFlow(HANDLE IfcHandle, HANDLE ClFlowCtx, ULONG Flags, 69 PTC_GEN_FLOW pGenericFlow, PHANDLE pFlowHandle); 70 71 ULONG TcAddFilter(HANDLE FlowHandle, PTC_GEN_FILTER pGenericFilter, 72 PHANDLE pFilterHandle); 73 74 ULONG TcDeleteFlow(HANDLE FlowHandle); 75 ULONG TcDeleteFilter(HANDLE FilterHandle); 76private: 77 TrafficControlWindows(const int32_t id); 78 int32_t _id; 79 TCI_CLIENT_FUNC_LIST QoSFunctions; 80 81 static TrafficControlWindows* instance; 82 83 registerFn tcRegister; 84 deregisterFn tcDeregister; 85 86 enumerateFn tcEnumerate; 87 openInterfaceFn tcOpenInterface; 88 closeInterfaceFn tcCloseInterface; 89 90 flowAddFn tcAddFlow; 91 flowDeleteFn tcDeleteFlow; 92 93 filterAddFn tcAddFilter; 94 filterDeleteFn tcDeleteFilter; 95 96 static uint32_t refCounter; 97}; 98 99} // namespace test 100} // namespace webrtc 101 102#endif // WEBRTC_TEST_CHANNEL_TRANSPORT_TRAFFIC_CONTROL_WINDOWS_H_ 103