| Index: webrtc/test/channel_transport/traffic_control_win.cc
|
| diff --git a/webrtc/test/channel_transport/traffic_control_win.cc b/webrtc/test/channel_transport/traffic_control_win.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3584359758994eca7bc313b7bfb1c6f9a8c26610
|
| --- /dev/null
|
| +++ b/webrtc/test/channel_transport/traffic_control_win.cc
|
| @@ -0,0 +1,252 @@
|
| +/*
|
| + * 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.
|
| + */
|
| +
|
| +#include "webrtc/test/channel_transport/traffic_control_win.h"
|
| +
|
| +#include <assert.h>
|
| +
|
| +#include "webrtc/system_wrappers/include/trace.h"
|
| +
|
| +namespace webrtc {
|
| +namespace test {
|
| +
|
| +TrafficControlWindows* TrafficControlWindows::instance = NULL;
|
| +uint32_t TrafficControlWindows::refCounter = 0;
|
| +
|
| +TrafficControlWindows::TrafficControlWindows(const int32_t id)
|
| +{
|
| +}
|
| +
|
| +TrafficControlWindows* TrafficControlWindows::GetInstance(
|
| + const int32_t id)
|
| +{
|
| + if(instance != NULL)
|
| + {
|
| + WEBRTC_TRACE(
|
| + kTraceDebug,
|
| + kTraceTransport,
|
| + id,
|
| + "TrafficControlWindows - Returning already created object");
|
| + refCounter++;
|
| + return instance;
|
| + }
|
| +
|
| + WEBRTC_TRACE(kTraceMemory, kTraceTransport, id,
|
| + "TrafficControlWindows - Creating new object");
|
| + instance = new TrafficControlWindows(id);
|
| + if(instance == NULL)
|
| + {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceTransport, id,
|
| + "TrafficControlWindows - Error allocating memory");
|
| + return NULL;
|
| + }
|
| +
|
| + instance->tcRegister = NULL;
|
| + instance->tcDeregister = NULL;
|
| +
|
| + instance->tcEnumerate = NULL;
|
| + instance->tcOpenInterface = NULL;
|
| + instance->tcCloseInterface = NULL;
|
| +
|
| + instance->tcAddFlow = NULL;
|
| + instance->tcDeleteFlow = NULL;
|
| +
|
| + instance->tcAddFilter = NULL;
|
| + instance->tcDeleteFilter = NULL;
|
| +
|
| + HMODULE trafficLib = LoadLibrary(TEXT("traffic.dll"));
|
| + if(trafficLib == NULL)
|
| + {
|
| + WEBRTC_TRACE(
|
| + kTraceWarning,
|
| + kTraceTransport,
|
| + id,
|
| + "TrafficControlWindows - No QOS support, LoadLibrary returned NULL,\
|
| + last error: %d\n",
|
| + GetLastError());
|
| + delete instance;
|
| + instance = NULL;
|
| + return NULL;
|
| + }
|
| +
|
| + instance->tcRegister = (registerFn)GetProcAddress(trafficLib,
|
| + "TcRegisterClient");
|
| + instance->tcDeregister = (deregisterFn)GetProcAddress(trafficLib,
|
| + "TcDeregisterClient");
|
| + instance->tcEnumerate = (enumerateFn)GetProcAddress(
|
| + trafficLib,
|
| + "TcEnumerateInterfaces");
|
| + instance->tcOpenInterface = (openInterfaceFn)GetProcAddress(
|
| + trafficLib,
|
| + "TcOpenInterfaceW");
|
| + instance->tcCloseInterface = (closeInterfaceFn)GetProcAddress(
|
| + trafficLib,
|
| + "TcCloseInterface");
|
| + instance->tcAddFlow = (flowAddFn)GetProcAddress(trafficLib,
|
| + "TcAddFlow");
|
| + instance->tcDeleteFlow = (flowDeleteFn)GetProcAddress(trafficLib,
|
| + "TcDeleteFlow");
|
| +
|
| + instance->tcAddFilter = (filterAddFn)GetProcAddress(trafficLib,
|
| + "TcAddFilter");
|
| + instance->tcDeleteFilter = (filterDeleteFn)GetProcAddress(trafficLib,
|
| + "TcDeleteFilter");
|
| +
|
| + if(instance->tcRegister == NULL ||
|
| + instance->tcDeregister == NULL ||
|
| + instance->tcEnumerate == NULL ||
|
| + instance->tcOpenInterface == NULL ||
|
| + instance->tcCloseInterface == NULL ||
|
| + instance->tcAddFlow == NULL ||
|
| + instance->tcAddFilter == NULL ||
|
| + instance->tcDeleteFlow == NULL ||
|
| + instance->tcDeleteFilter == NULL)
|
| + {
|
| + delete instance;
|
| + instance = NULL;
|
| + WEBRTC_TRACE(
|
| + kTraceError,
|
| + kTraceTransport,
|
| + id,
|
| + "TrafficControlWindows - Could not find function pointer for\
|
| + traffic control functions");
|
| + WEBRTC_TRACE(
|
| + kTraceError,
|
| + kTraceTransport,
|
| + id,
|
| + "Tcregister : %x, tcDeregister: %x, tcEnumerate: %x,\
|
| + tcOpenInterface: %x, tcCloseInterface: %x, tcAddFlow: %x, tcAddFilter: %x,\
|
| + tcDeleteFlow: %x, tcDeleteFilter: %x",
|
| + instance->tcRegister,
|
| + instance->tcDeregister,
|
| + instance->tcEnumerate,
|
| + instance->tcOpenInterface,
|
| + instance->tcCloseInterface,
|
| + instance->tcAddFlow,
|
| + instance->tcAddFilter,
|
| + instance->tcDeleteFlow,
|
| + instance->tcDeleteFilter );
|
| + return NULL;
|
| + }
|
| + refCounter++;
|
| + return instance;
|
| +}
|
| +
|
| +void TrafficControlWindows::Release(TrafficControlWindows* gtc)
|
| +{
|
| + if (0 == refCounter)
|
| + {
|
| + WEBRTC_TRACE(kTraceError, kTraceTransport, -1,
|
| + "TrafficControlWindows - Cannot release, refCounter is 0");
|
| + return;
|
| + }
|
| + if (NULL == gtc)
|
| + {
|
| + WEBRTC_TRACE(kTraceDebug, kTraceTransport, -1,
|
| + "TrafficControlWindows - Not releasing, gtc is NULL");
|
| + return;
|
| + }
|
| +
|
| + WEBRTC_TRACE(kTraceDebug, kTraceTransport, -1,
|
| + "TrafficControlWindows - Releasing object");
|
| + refCounter--;
|
| + if ((0 == refCounter) && instance)
|
| + {
|
| + WEBRTC_TRACE(kTraceMemory, kTraceTransport, -1,
|
| + "TrafficControlWindows - Deleting object");
|
| + delete instance;
|
| + instance = NULL;
|
| + }
|
| +}
|
| +
|
| +ULONG TrafficControlWindows::TcRegisterClient(
|
| + ULONG TciVersion,
|
| + HANDLE ClRegCtx,
|
| + PTCI_CLIENT_FUNC_LIST ClientHandlerList,
|
| + PHANDLE pClientHandle)
|
| +{
|
| + assert(tcRegister != NULL);
|
| +
|
| + return tcRegister(TciVersion, ClRegCtx, ClientHandlerList, pClientHandle);
|
| +}
|
| +
|
| +ULONG TrafficControlWindows::TcDeregisterClient(HANDLE clientHandle)
|
| +{
|
| + assert(tcDeregister != NULL);
|
| +
|
| + return tcDeregister(clientHandle);
|
| +}
|
| +
|
| +
|
| +ULONG TrafficControlWindows::TcEnumerateInterfaces(
|
| + HANDLE ClientHandle,
|
| + PULONG pBufferSize,
|
| + PTC_IFC_DESCRIPTOR interfaceBuffer)
|
| +{
|
| + assert(tcEnumerate != NULL);
|
| +
|
| + return tcEnumerate(ClientHandle, pBufferSize, interfaceBuffer);
|
| +}
|
| +
|
| +
|
| +ULONG TrafficControlWindows::TcOpenInterfaceW(LPWSTR pInterfaceName,
|
| + HANDLE ClientHandle,
|
| + HANDLE ClIfcCtx,
|
| + PHANDLE pIfcHandle)
|
| +{
|
| + assert(tcOpenInterface != NULL);
|
| +
|
| + return tcOpenInterface(pInterfaceName, ClientHandle, ClIfcCtx, pIfcHandle);
|
| +
|
| +}
|
| +
|
| +ULONG TrafficControlWindows::TcCloseInterface(HANDLE IfcHandle)
|
| +{
|
| + assert(tcCloseInterface != NULL);
|
| +
|
| + return tcCloseInterface(IfcHandle);
|
| +}
|
| +
|
| +ULONG TrafficControlWindows::TcAddFlow(HANDLE IfcHandle, HANDLE ClFlowCtx,
|
| + ULONG Flags, PTC_GEN_FLOW pGenericFlow,
|
| + PHANDLE pFlowHandle)
|
| +{
|
| + assert(tcAddFlow != NULL);
|
| + return tcAddFlow(IfcHandle, ClFlowCtx, Flags, pGenericFlow, pFlowHandle);
|
| +}
|
| +
|
| +ULONG TrafficControlWindows::TcAddFilter(HANDLE FlowHandle,
|
| + PTC_GEN_FILTER pGenericFilter,
|
| + PHANDLE pFilterHandle)
|
| +{
|
| + assert(tcAddFilter != NULL);
|
| + return tcAddFilter(FlowHandle, pGenericFilter, pFilterHandle);
|
| +}
|
| +
|
| +ULONG TrafficControlWindows::TcDeleteFlow(HANDLE FlowHandle)
|
| +{
|
| + assert(tcDeleteFlow != NULL);
|
| + return tcDeleteFlow(FlowHandle);
|
| +
|
| +}
|
| +
|
| +ULONG TrafficControlWindows::TcDeleteFilter(HANDLE FilterHandle)
|
| +{
|
| + assert(tcDeleteFilter != NULL);
|
| + return tcDeleteFilter(FilterHandle);
|
| +}
|
| +
|
| +void MyClNotifyHandler(HANDLE ClRegCtx, HANDLE ClIfcCtx, ULONG Event,
|
| + HANDLE SubCode, ULONG BufSize, PVOID Buffer)
|
| +{
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace webrtc
|
|
|