OLD | NEW |
| (Empty) |
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 #include "webrtc/voice_engine/test/channel_transport/traffic_control_win.h" | |
12 | |
13 #include <assert.h> | |
14 | |
15 #include "webrtc/system_wrappers/include/trace.h" | |
16 | |
17 namespace webrtc { | |
18 namespace test { | |
19 | |
20 TrafficControlWindows* TrafficControlWindows::instance = NULL; | |
21 uint32_t TrafficControlWindows::refCounter = 0; | |
22 | |
23 TrafficControlWindows::TrafficControlWindows(const int32_t id) | |
24 { | |
25 } | |
26 | |
27 TrafficControlWindows* TrafficControlWindows::GetInstance( | |
28 const int32_t id) | |
29 { | |
30 if(instance != NULL) | |
31 { | |
32 WEBRTC_TRACE( | |
33 kTraceDebug, | |
34 kTraceTransport, | |
35 id, | |
36 "TrafficControlWindows - Returning already created object"); | |
37 refCounter++; | |
38 return instance; | |
39 } | |
40 | |
41 WEBRTC_TRACE(kTraceMemory, kTraceTransport, id, | |
42 "TrafficControlWindows - Creating new object"); | |
43 instance = new TrafficControlWindows(id); | |
44 if(instance == NULL) | |
45 { | |
46 WEBRTC_TRACE(kTraceMemory, kTraceTransport, id, | |
47 "TrafficControlWindows - Error allocating memory"); | |
48 return NULL; | |
49 } | |
50 | |
51 instance->tcRegister = NULL; | |
52 instance->tcDeregister = NULL; | |
53 | |
54 instance->tcEnumerate = NULL; | |
55 instance->tcOpenInterface = NULL; | |
56 instance->tcCloseInterface = NULL; | |
57 | |
58 instance->tcAddFlow = NULL; | |
59 instance->tcDeleteFlow = NULL; | |
60 | |
61 instance->tcAddFilter = NULL; | |
62 instance->tcDeleteFilter = NULL; | |
63 | |
64 HMODULE trafficLib = LoadLibrary(TEXT("traffic.dll")); | |
65 if(trafficLib == NULL) | |
66 { | |
67 WEBRTC_TRACE( | |
68 kTraceWarning, | |
69 kTraceTransport, | |
70 id, | |
71 "TrafficControlWindows - No QOS support, LoadLibrary returned NULL,\ | |
72 last error: %d\n", | |
73 GetLastError()); | |
74 delete instance; | |
75 instance = NULL; | |
76 return NULL; | |
77 } | |
78 | |
79 instance->tcRegister = (registerFn)GetProcAddress(trafficLib, | |
80 "TcRegisterClient"); | |
81 instance->tcDeregister = (deregisterFn)GetProcAddress(trafficLib, | |
82 "TcDeregisterClient"); | |
83 instance->tcEnumerate = (enumerateFn)GetProcAddress( | |
84 trafficLib, | |
85 "TcEnumerateInterfaces"); | |
86 instance->tcOpenInterface = (openInterfaceFn)GetProcAddress( | |
87 trafficLib, | |
88 "TcOpenInterfaceW"); | |
89 instance->tcCloseInterface = (closeInterfaceFn)GetProcAddress( | |
90 trafficLib, | |
91 "TcCloseInterface"); | |
92 instance->tcAddFlow = (flowAddFn)GetProcAddress(trafficLib, | |
93 "TcAddFlow"); | |
94 instance->tcDeleteFlow = (flowDeleteFn)GetProcAddress(trafficLib, | |
95 "TcDeleteFlow"); | |
96 | |
97 instance->tcAddFilter = (filterAddFn)GetProcAddress(trafficLib, | |
98 "TcAddFilter"); | |
99 instance->tcDeleteFilter = (filterDeleteFn)GetProcAddress(trafficLib, | |
100 "TcDeleteFilter"); | |
101 | |
102 if(instance->tcRegister == NULL || | |
103 instance->tcDeregister == NULL || | |
104 instance->tcEnumerate == NULL || | |
105 instance->tcOpenInterface == NULL || | |
106 instance->tcCloseInterface == NULL || | |
107 instance->tcAddFlow == NULL || | |
108 instance->tcAddFilter == NULL || | |
109 instance->tcDeleteFlow == NULL || | |
110 instance->tcDeleteFilter == NULL) | |
111 { | |
112 delete instance; | |
113 instance = NULL; | |
114 WEBRTC_TRACE( | |
115 kTraceError, | |
116 kTraceTransport, | |
117 id, | |
118 "TrafficControlWindows - Could not find function pointer for\ | |
119 traffic control functions"); | |
120 WEBRTC_TRACE( | |
121 kTraceError, | |
122 kTraceTransport, | |
123 id, | |
124 "Tcregister : %x, tcDeregister: %x, tcEnumerate: %x,\ | |
125 tcOpenInterface: %x, tcCloseInterface: %x, tcAddFlow: %x, tcAddFilter: %x,\ | |
126 tcDeleteFlow: %x, tcDeleteFilter: %x", | |
127 instance->tcRegister, | |
128 instance->tcDeregister, | |
129 instance->tcEnumerate, | |
130 instance->tcOpenInterface, | |
131 instance->tcCloseInterface, | |
132 instance->tcAddFlow, | |
133 instance->tcAddFilter, | |
134 instance->tcDeleteFlow, | |
135 instance->tcDeleteFilter ); | |
136 return NULL; | |
137 } | |
138 refCounter++; | |
139 return instance; | |
140 } | |
141 | |
142 void TrafficControlWindows::Release(TrafficControlWindows* gtc) | |
143 { | |
144 if (0 == refCounter) | |
145 { | |
146 WEBRTC_TRACE(kTraceError, kTraceTransport, -1, | |
147 "TrafficControlWindows - Cannot release, refCounter is 0"); | |
148 return; | |
149 } | |
150 if (NULL == gtc) | |
151 { | |
152 WEBRTC_TRACE(kTraceDebug, kTraceTransport, -1, | |
153 "TrafficControlWindows - Not releasing, gtc is NULL"); | |
154 return; | |
155 } | |
156 | |
157 WEBRTC_TRACE(kTraceDebug, kTraceTransport, -1, | |
158 "TrafficControlWindows - Releasing object"); | |
159 refCounter--; | |
160 if ((0 == refCounter) && instance) | |
161 { | |
162 WEBRTC_TRACE(kTraceMemory, kTraceTransport, -1, | |
163 "TrafficControlWindows - Deleting object"); | |
164 delete instance; | |
165 instance = NULL; | |
166 } | |
167 } | |
168 | |
169 ULONG TrafficControlWindows::TcRegisterClient( | |
170 ULONG TciVersion, | |
171 HANDLE ClRegCtx, | |
172 PTCI_CLIENT_FUNC_LIST ClientHandlerList, | |
173 PHANDLE pClientHandle) | |
174 { | |
175 assert(tcRegister != NULL); | |
176 | |
177 return tcRegister(TciVersion, ClRegCtx, ClientHandlerList, pClientHandle); | |
178 } | |
179 | |
180 ULONG TrafficControlWindows::TcDeregisterClient(HANDLE clientHandle) | |
181 { | |
182 assert(tcDeregister != NULL); | |
183 | |
184 return tcDeregister(clientHandle); | |
185 } | |
186 | |
187 | |
188 ULONG TrafficControlWindows::TcEnumerateInterfaces( | |
189 HANDLE ClientHandle, | |
190 PULONG pBufferSize, | |
191 PTC_IFC_DESCRIPTOR interfaceBuffer) | |
192 { | |
193 assert(tcEnumerate != NULL); | |
194 | |
195 return tcEnumerate(ClientHandle, pBufferSize, interfaceBuffer); | |
196 } | |
197 | |
198 | |
199 ULONG TrafficControlWindows::TcOpenInterfaceW(LPWSTR pInterfaceName, | |
200 HANDLE ClientHandle, | |
201 HANDLE ClIfcCtx, | |
202 PHANDLE pIfcHandle) | |
203 { | |
204 assert(tcOpenInterface != NULL); | |
205 | |
206 return tcOpenInterface(pInterfaceName, ClientHandle, ClIfcCtx, pIfcHandle); | |
207 | |
208 } | |
209 | |
210 ULONG TrafficControlWindows::TcCloseInterface(HANDLE IfcHandle) | |
211 { | |
212 assert(tcCloseInterface != NULL); | |
213 | |
214 return tcCloseInterface(IfcHandle); | |
215 } | |
216 | |
217 ULONG TrafficControlWindows::TcAddFlow(HANDLE IfcHandle, HANDLE ClFlowCtx, | |
218 ULONG Flags, PTC_GEN_FLOW pGenericFlow, | |
219 PHANDLE pFlowHandle) | |
220 { | |
221 assert(tcAddFlow != NULL); | |
222 return tcAddFlow(IfcHandle, ClFlowCtx, Flags, pGenericFlow, pFlowHandle); | |
223 } | |
224 | |
225 ULONG TrafficControlWindows::TcAddFilter(HANDLE FlowHandle, | |
226 PTC_GEN_FILTER pGenericFilter, | |
227 PHANDLE pFilterHandle) | |
228 { | |
229 assert(tcAddFilter != NULL); | |
230 return tcAddFilter(FlowHandle, pGenericFilter, pFilterHandle); | |
231 } | |
232 | |
233 ULONG TrafficControlWindows::TcDeleteFlow(HANDLE FlowHandle) | |
234 { | |
235 assert(tcDeleteFlow != NULL); | |
236 return tcDeleteFlow(FlowHandle); | |
237 | |
238 } | |
239 | |
240 ULONG TrafficControlWindows::TcDeleteFilter(HANDLE FilterHandle) | |
241 { | |
242 assert(tcDeleteFilter != NULL); | |
243 return tcDeleteFilter(FilterHandle); | |
244 } | |
245 | |
246 void MyClNotifyHandler(HANDLE ClRegCtx, HANDLE ClIfcCtx, ULONG Event, | |
247 HANDLE SubCode, ULONG BufSize, PVOID Buffer) | |
248 { | |
249 } | |
250 | |
251 } // namespace test | |
252 } // namespace webrtc | |
OLD | NEW |