Files
webrtc/webrtc/test/channel_transport/traffic_control_win.h
pbos@webrtc.org a5f1787f63 WebRtc_Word32 -> int32_t in test/
BUG=314

Review URL: https://webrtc-codereview.appspot.com/1302004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@3794 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-04-09 11:10:21 +00:00

103 lines
3.3 KiB
C++

/*
* 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/interface/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);
int32_t ChangeUniqueId(const int32_t id);
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);
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_