Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Side by Side Diff: webrtc/voice_engine/test/channel_transport/udp_socket2_win.cc

Issue 2685783014: Replace NULL with nullptr in all C++ files. (Closed)
Patch Set: Fixing android. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 23 matching lines...) Expand all
34 typedef const QOS_DESTADDR* LPCQOS_DESTADDR; 34 typedef const QOS_DESTADDR* LPCQOS_DESTADDR;
35 35
36 // TODO (patrikw): seems to be defined in ws2ipdef.h as 3. How come it's 36 // TODO (patrikw): seems to be defined in ws2ipdef.h as 3. How come it's
37 // redefined here (as a different value)? 37 // redefined here (as a different value)?
38 #define IP_TOS 8 38 #define IP_TOS 8
39 39
40 #define QOS_GENERAL_ID_BASE 2000 40 #define QOS_GENERAL_ID_BASE 2000
41 #define QOS_OBJECT_DESTADDR (0x00000004 + QOS_GENERAL_ID_BASE) 41 #define QOS_OBJECT_DESTADDR (0x00000004 + QOS_GENERAL_ID_BASE)
42 42
43 UdpSocket2Windows::UdpSocket2Windows(const int32_t id, 43 UdpSocket2Windows::UdpSocket2Windows(const int32_t id,
44 UdpSocketManager* mgr, bool ipV6Enable, 44 UdpSocketManager* mgr,
45 bool ipV6Enable,
45 bool disableGQOS) 46 bool disableGQOS)
46 : _id(id), 47 : _id(id),
47 _qos(true), 48 _qos(true),
48 _iProtocol(0), 49 _iProtocol(0),
49 _outstandingCalls(0), 50 _outstandingCalls(0),
50 _outstandingCallComplete(0), 51 _outstandingCallComplete(0),
51 _terminate(false), 52 _terminate(false),
52 _addedToMgr(false), 53 _addedToMgr(false),
53 delete_event_(true, false), 54 delete_event_(true, false),
54 _outstandingCallsDisabled(false), 55 _outstandingCallsDisabled(false),
55 _clientHandle(NULL), 56 _clientHandle(nullptr),
56 _flowHandle(NULL), 57 _flowHandle(nullptr),
57 _filterHandle(NULL), 58 _filterHandle(nullptr),
58 _flow(NULL), 59 _flow(nullptr),
59 _gtc(NULL), 60 _gtc(nullptr),
60 _pcp(-2), 61 _pcp(-2),
61 _receiveBuffers(0) 62 _receiveBuffers(0) {
62 { 63 WEBRTC_TRACE(kTraceMemory, kTraceTransport, _id,
63 WEBRTC_TRACE(kTraceMemory, kTraceTransport, _id, 64 "UdpSocket2Windows::UdpSocket2Windows()");
64 "UdpSocket2Windows::UdpSocket2Windows()");
65 65
66 _wantsIncoming = false; 66 _wantsIncoming = false;
67 _mgr = static_cast<UdpSocket2ManagerWindows *>(mgr); 67 _mgr = static_cast<UdpSocket2ManagerWindows*>(mgr);
68 68
69 _obj = NULL; 69 _obj = nullptr;
70 _incomingCb = NULL; 70 _incomingCb = nullptr;
71 _socket = INVALID_SOCKET; 71 _socket = INVALID_SOCKET;
72 _ptrCbRWLock = RWLockWrapper::CreateRWLock(); 72 _ptrCbRWLock = RWLockWrapper::CreateRWLock();
73 _ptrDestRWLock = RWLockWrapper::CreateRWLock(); 73 _ptrDestRWLock = RWLockWrapper::CreateRWLock();
74 _ptrSocketRWLock = RWLockWrapper::CreateRWLock(); 74 _ptrSocketRWLock = RWLockWrapper::CreateRWLock();
75 75
76 // Check if QoS is supported. 76 // Check if QoS is supported.
77 BOOL bProtocolFound = FALSE; 77 BOOL bProtocolFound = FALSE;
78 WSAPROTOCOL_INFO *lpProtocolBuf = NULL; 78 WSAPROTOCOL_INFO* lpProtocolBuf = nullptr;
79 WSAPROTOCOL_INFO pProtocolInfo; 79 WSAPROTOCOL_INFO pProtocolInfo;
80 80
81 if(!disableGQOS) 81 if (!disableGQOS) {
82 { 82 DWORD dwBufLen = 0;
83 DWORD dwBufLen = 0; 83 // Set dwBufLen to the size needed to retreive all the requested
84 // Set dwBufLen to the size needed to retreive all the requested 84 // information from WSAEnumProtocols.
85 // information from WSAEnumProtocols. 85 int32_t nRet = WSAEnumProtocols(nullptr, lpProtocolBuf, &dwBufLen);
86 int32_t nRet = WSAEnumProtocols(NULL, lpProtocolBuf, &dwBufLen); 86 lpProtocolBuf = (WSAPROTOCOL_INFO*)malloc(dwBufLen);
87 lpProtocolBuf = (WSAPROTOCOL_INFO*)malloc(dwBufLen); 87 nRet = WSAEnumProtocols(nullptr, lpProtocolBuf, &dwBufLen);
88 nRet = WSAEnumProtocols(NULL, lpProtocolBuf, &dwBufLen);
89 88
90 if (ipV6Enable) 89 if (ipV6Enable) {
91 { 90 _iProtocol = AF_INET6;
92 _iProtocol=AF_INET6; 91 } else {
93 } else { 92 _iProtocol = AF_INET;
94 _iProtocol=AF_INET;
95 }
96
97 for (int32_t i=0; i<nRet; i++)
98 {
99 if (_iProtocol == lpProtocolBuf[i].iAddressFamily &&
100 IPPROTO_UDP == lpProtocolBuf[i].iProtocol)
101 {
102 if ((XP1_QOS_SUPPORTED ==
103 (XP1_QOS_SUPPORTED & lpProtocolBuf[i].dwServiceFlags1)))
104 {
105 pProtocolInfo = lpProtocolBuf[i];
106 bProtocolFound = TRUE;
107 break;
108 }
109 }
110 }
111 } 93 }
112 94
113 if(!bProtocolFound) 95 for (int32_t i = 0; i < nRet; i++) {
114 { 96 if (_iProtocol == lpProtocolBuf[i].iAddressFamily &&
115 free(lpProtocolBuf); 97 IPPROTO_UDP == lpProtocolBuf[i].iProtocol) {
116 _qos=false; 98 if ((XP1_QOS_SUPPORTED ==
117 WEBRTC_TRACE( 99 (XP1_QOS_SUPPORTED & lpProtocolBuf[i].dwServiceFlags1))) {
118 kTraceError, 100 pProtocolInfo = lpProtocolBuf[i];
119 kTraceTransport, 101 bProtocolFound = TRUE;
120 _id, 102 break;
121 "UdpSocket2Windows::UdpSocket2Windows(), SOCKET_ERROR_NO_QOS,\ 103 }
104 }
105 }
106 }
107
108 if (!bProtocolFound) {
109 free(lpProtocolBuf);
110 _qos = false;
111 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
112 "UdpSocket2Windows::UdpSocket2Windows(), SOCKET_ERROR_NO_QOS,\
122 !bProtocolFound"); 113 !bProtocolFound");
114 } else {
115 _socket =
116 WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
117 &pProtocolInfo, 0, WSA_FLAG_OVERLAPPED);
118 free(lpProtocolBuf);
119
120 if (_socket != INVALID_SOCKET) {
121 return;
123 } else { 122 } else {
123 _qos = false;
124 WEBRTC_TRACE(
125 kTraceError, kTraceTransport, _id,
126 "UdpSocket2Windows::UdpSocket2Windows(), SOCKET_ERROR_NO_QOS");
127 }
128 }
129 // QoS not supported.
130 if (ipV6Enable) {
131 _socket =
132 WSASocket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP, 0, 0, WSA_FLAG_OVERLAPPED);
133 } else {
134 _socket =
135 WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, 0, WSA_FLAG_OVERLAPPED);
136 }
137 if (_socket == INVALID_SOCKET) {
138 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
139 "UdpSocket2Windows::UdpSocket2Windows(), INVALID_SOCKET,\
140 WSAerror: %d",
141 WSAGetLastError());
142 }
124 143
125 _socket = WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, 144 // Disable send buffering on the socket to improve CPU usage.
126 FROM_PROTOCOL_INFO,&pProtocolInfo, 0, 145 // This is done by setting SO_SNDBUF to 0.
127 WSA_FLAG_OVERLAPPED); 146 int32_t nZero = 0;
128 free(lpProtocolBuf); 147 int32_t nRet =
129 148 setsockopt(_socket, SOL_SOCKET, SO_SNDBUF, (char*)&nZero, sizeof(nZero));
130 if (_socket != INVALID_SOCKET) 149 if (nRet == SOCKET_ERROR) {
131 { 150 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
132 return; 151 "UdpSocket2Windows::UdpSocket2Windows(), SOCKET_ERROR,\
133 } else {
134 _qos = false;
135 WEBRTC_TRACE(
136 kTraceError,
137 kTraceTransport,
138 _id,
139 "UdpSocket2Windows::UdpSocket2Windows(), SOCKET_ERROR_NO_QOS");
140 }
141 }
142 // QoS not supported.
143 if(ipV6Enable)
144 {
145 _socket = WSASocket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP, 0 , 0,
146 WSA_FLAG_OVERLAPPED);
147 }else
148 {
149 _socket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, 0 , 0,
150 WSA_FLAG_OVERLAPPED);
151 }
152 if (_socket == INVALID_SOCKET)
153 {
154 WEBRTC_TRACE(
155 kTraceError,
156 kTraceTransport,
157 _id,
158 "UdpSocket2Windows::UdpSocket2Windows(), INVALID_SOCKET,\
159 WSAerror: %d", 152 WSAerror: %d",
160 WSAGetLastError()); 153 WSAGetLastError());
161 } 154 }
162
163 // Disable send buffering on the socket to improve CPU usage.
164 // This is done by setting SO_SNDBUF to 0.
165 int32_t nZero = 0;
166 int32_t nRet = setsockopt(_socket, SOL_SOCKET, SO_SNDBUF,
167 (char*)&nZero, sizeof(nZero));
168 if( nRet == SOCKET_ERROR )
169 {
170 WEBRTC_TRACE(
171 kTraceError,
172 kTraceTransport,
173 _id,
174 "UdpSocket2Windows::UdpSocket2Windows(), SOCKET_ERROR,\
175 WSAerror: %d",
176 WSAGetLastError());
177 }
178 } 155 }
179 156
180 UdpSocket2Windows::~UdpSocket2Windows() 157 UdpSocket2Windows::~UdpSocket2Windows()
181 { 158 {
182 WEBRTC_TRACE(kTraceMemory, kTraceTransport, _id, 159 WEBRTC_TRACE(kTraceMemory, kTraceTransport, _id,
183 "UdpSocket2Windows::~UdpSocket2Windows()"); 160 "UdpSocket2Windows::~UdpSocket2Windows()");
184 161
185 delete_event_.Wait(rtc::Event::kForever); 162 delete_event_.Wait(rtc::Event::kForever);
186 163
187 164
188 delete _ptrCbRWLock; 165 delete _ptrCbRWLock;
189 delete _ptrDestRWLock; 166 delete _ptrDestRWLock;
190 delete _ptrSocketRWLock; 167 delete _ptrSocketRWLock;
191 168
192 if (_flow) 169 if (_flow)
193 { 170 {
194 free(_flow); 171 free(_flow);
195 _flow = NULL; 172 _flow = nullptr;
196 } 173 }
197 174
198 if (_gtc) 175 if (_gtc)
199 { 176 {
200 if(_filterHandle) 177 if(_filterHandle)
201 { 178 {
202 _gtc->TcDeleteFilter(_filterHandle); 179 _gtc->TcDeleteFilter(_filterHandle);
203 } 180 }
204 if(_flowHandle) 181 if(_flowHandle)
205 { 182 {
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 } 392 }
416 393
417 // Roll back. 394 // Roll back.
418 OutstandingCallCompleted(); 395 OutstandingCallCompleted();
419 return -1; 396 return -1;
420 } 397 }
421 398
422 void UdpSocket2Windows::IOCompleted(PerIoContext* pIOContext, 399 void UdpSocket2Windows::IOCompleted(PerIoContext* pIOContext,
423 uint32_t ioSize, uint32_t error) 400 uint32_t ioSize, uint32_t error)
424 { 401 {
425 if(pIOContext == NULL || error == ERROR_OPERATION_ABORTED) 402 if (pIOContext == nullptr || error == ERROR_OPERATION_ABORTED) {
426 { 403 if ((pIOContext != nullptr) && !pIOContext->ioInitiatedByPlatformThread &&
427 if ((pIOContext != NULL) && 404 (error == ERROR_OPERATION_ABORTED) &&
428 !pIOContext->ioInitiatedByPlatformThread && 405 (pIOContext->ioOperation == OP_READ) && _outstandingCallsDisabled) {
429 (error == ERROR_OPERATION_ABORTED) && 406 // !pIOContext->initiatedIOByPlatformThread indicate that the I/O
430 (pIOContext->ioOperation == OP_READ) && 407 // was not initiated by a PlatformThread thread.
431 _outstandingCallsDisabled) 408 // This may happen if the thread that initiated receiving (e.g.
432 { 409 // by calling StartListen())) is deleted before any packets have
433 // !pIOContext->initiatedIOByPlatformThread indicate that the I/O 410 // been received.
434 // was not initiated by a PlatformThread thread. 411 // In this case there is no packet in the PerIoContext. Re-use it
435 // This may happen if the thread that initiated receiving (e.g. 412 // to post a new PostRecv(..).
436 // by calling StartListen())) is deleted before any packets have 413 // Note 1: the PerIoContext will henceforth be posted by a thread
437 // been received. 414 // that is controlled by the socket implementation.
438 // In this case there is no packet in the PerIoContext. Re-use it 415 // Note 2: This is more likely to happen to RTCP packets as
439 // to post a new PostRecv(..). 416 // they are less frequent than RTP packets.
440 // Note 1: the PerIoContext will henceforth be posted by a thread 417 // Note 3: _outstandingCallsDisabled being false indicates
441 // that is controlled by the socket implementation. 418 // that the socket isn't being shut down.
442 // Note 2: This is more likely to happen to RTCP packets as 419 // Note 4: This should only happen buffers set to receive packets
443 // they are less frequent than RTP packets. 420 // (OP_READ).
444 // Note 3: _outstandingCallsDisabled being false indicates 421 } else {
445 // that the socket isn't being shut down. 422 if (pIOContext == nullptr) {
446 // Note 4: This should only happen buffers set to receive packets 423 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
447 // (OP_READ). 424 "UdpSocket2Windows::IOCompleted(%d,%d,%d), %d",
448 } else { 425 (int32_t)pIOContext, ioSize, error,
449 if(pIOContext == NULL) 426 pIOContext ? (int32_t)pIOContext->ioOperation : -1);
450 { 427 } else {
451 WEBRTC_TRACE( 428 WEBRTC_TRACE(kTraceDebug, kTraceTransport, _id,
452 kTraceError, 429 "UdpSocket2Windows::IOCompleted() Operation aborted");
453 kTraceTransport, 430 }
454 _id, 431 if (pIOContext) {
455 "UdpSocket2Windows::IOCompleted(%d,%d,%d), %d", 432 int32_t remainingReceiveBuffers = --_receiveBuffers;
456 (int32_t)pIOContext, 433 if (remainingReceiveBuffers < 0) {
457 ioSize, 434 assert(false);
458 error, 435 }
459 pIOContext ? (int32_t)pIOContext->ioOperation : -1); 436 int32_t err = _mgr->PushIoContext(pIOContext);
460 } else { 437 if (err) {
461 WEBRTC_TRACE( 438 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
462 kTraceDebug, 439 "UdpSocket2Windows::IOCompleted(), err = %d, when\
463 kTraceTransport,
464 _id,
465 "UdpSocket2Windows::IOCompleted() Operation aborted");
466 }
467 if(pIOContext)
468 {
469 int32_t remainingReceiveBuffers = --_receiveBuffers;
470 if(remainingReceiveBuffers < 0)
471 {
472 assert(false);
473 }
474 int32_t err = _mgr->PushIoContext(pIOContext);
475 if(err)
476 {
477 WEBRTC_TRACE(
478 kTraceError,
479 kTraceTransport,
480 _id,
481 "UdpSocket2Windows::IOCompleted(), err = %d, when\
482 pushing ioContext after error", 440 pushing ioContext after error",
483 err); 441 err);
484 }
485 }
486 OutstandingCallCompleted();
487 return;
488 } 442 }
489 } // if (pIOContext == NULL || error == ERROR_OPERATION_ABORTED) 443 }
444 OutstandingCallCompleted();
445 return;
446 }
447 } // if (pIOContext == nullptr || error == ERROR_OPERATION_ABORTED)
490 448
491 if(pIOContext->ioOperation == OP_WRITE) 449 if (pIOContext->ioOperation == OP_WRITE) {
492 { 450 _mgr->PushIoContext(pIOContext);
493 _mgr->PushIoContext(pIOContext);
494 } 451 }
495 else if(pIOContext->ioOperation == OP_READ) 452 else if(pIOContext->ioOperation == OP_READ)
496 { 453 {
497 if(!error && ioSize != 0) 454 if(!error && ioSize != 0)
498 { 455 {
499 _ptrCbRWLock->AcquireLockShared(); 456 _ptrCbRWLock->AcquireLockShared();
500 if(_wantsIncoming && _incomingCb) 457 if(_wantsIncoming && _incomingCb)
501 { 458 {
502 _incomingCb(_obj, 459 _incomingCb(_obj,
503 reinterpret_cast<const int8_t*>( 460 reinterpret_cast<const int8_t*>(
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 Qos.ReceivingFlowspec.TokenRate = QOS_NOT_SPECIFIED; 684 Qos.ReceivingFlowspec.TokenRate = QOS_NOT_SPECIFIED;
728 Qos.ReceivingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED; 685 Qos.ReceivingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
729 Qos.ReceivingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED; 686 Qos.ReceivingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED;
730 Qos.ReceivingFlowspec.Latency = QOS_NOT_SPECIFIED; 687 Qos.ReceivingFlowspec.Latency = QOS_NOT_SPECIFIED;
731 Qos.ReceivingFlowspec.DelayVariation = QOS_NOT_SPECIFIED; 688 Qos.ReceivingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
732 Qos.ReceivingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED; 689 Qos.ReceivingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
733 Qos.ReceivingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED; 690 Qos.ReceivingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
734 691
735 Qos.ProviderSpecific.len = 0; 692 Qos.ProviderSpecific.len = 0;
736 693
737 Qos.ProviderSpecific.buf = NULL; 694 Qos.ProviderSpecific.buf = nullptr;
738 695
739 ZeroMemory((int8_t *)&QosDestaddr, sizeof(QosDestaddr)); 696 ZeroMemory((int8_t *)&QosDestaddr, sizeof(QosDestaddr));
740 697
741 OSVERSIONINFOEX osvie; 698 OSVERSIONINFOEX osvie;
742 osvie.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 699 osvie.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
743 GetVersionEx((LPOSVERSIONINFO)&osvie); 700 GetVersionEx((LPOSVERSIONINFO)&osvie);
744 701
745 // Operating system Version number dwMajorVersion dwMinorVersion 702 // Operating system Version number dwMajorVersion dwMinorVersion
746 // Windows 7 6.1 6 1 703 // Windows 7 6.1 6 1
747 // Windows Server 2008 R2 6.1 6 1 704 // Windows Server 2008 R2 6.1 6 1
(...skipping 29 matching lines...) Expand all
777 734
778 Qos.ProviderSpecific.len = QosDestaddr.ObjectHdr.ObjectLength; 735 Qos.ProviderSpecific.len = QosDestaddr.ObjectHdr.ObjectLength;
779 Qos.ProviderSpecific.buf = (char*)&QosDestaddr; 736 Qos.ProviderSpecific.buf = (char*)&QosDestaddr;
780 } 737 }
781 738
782 if(!AquireSocket()) { 739 if(!AquireSocket()) {
783 return false; 740 return false;
784 } 741 }
785 // To set QoS with SIO_SET_QOS the socket must be locally bound first 742 // To set QoS with SIO_SET_QOS the socket must be locally bound first
786 // or the call will fail with error code 10022. 743 // or the call will fail with error code 10022.
787 int32_t result = WSAIoctl(GetFd(), SIO_SET_QOS, &Qos, sizeof(QOS), 744 int32_t result = WSAIoctl(GetFd(), SIO_SET_QOS, &Qos, sizeof(QOS), nullptr,
788 NULL, 0, &BytesRet, NULL,NULL); 745 0, &BytesRet, nullptr, nullptr);
789 ReleaseSocket(); 746 ReleaseSocket();
790 if (result == SOCKET_ERROR) 747 if (result == SOCKET_ERROR)
791 { 748 {
792 WEBRTC_TRACE(kTraceError, kTraceTransport, _id, 749 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
793 "UdpSocket2Windows::SetQos() WSAerror : %d", 750 "UdpSocket2Windows::SetQos() WSAerror : %d",
794 WSAGetLastError()); 751 WSAGetLastError());
795 return false; 752 return false;
796 } 753 }
797 return true; 754 return true;
798 } 755 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 { 819 {
863 _gtc = TrafficControlWindows::GetInstance(_id); 820 _gtc = TrafficControlWindows::GetInstance(_id);
864 } 821 }
865 if (!_gtc) 822 if (!_gtc)
866 { 823 {
867 return -1; 824 return -1;
868 } 825 }
869 if(_filterHandle) 826 if(_filterHandle)
870 { 827 {
871 _gtc->TcDeleteFilter(_filterHandle); 828 _gtc->TcDeleteFilter(_filterHandle);
872 _filterHandle = NULL; 829 _filterHandle = nullptr;
873 } 830 }
874 if(_flowHandle) 831 if(_flowHandle)
875 { 832 {
876 _gtc->TcDeleteFlow(_flowHandle); 833 _gtc->TcDeleteFlow(_flowHandle);
877 _flowHandle = NULL; 834 _flowHandle = nullptr;
878 } 835 }
879 if(_clientHandle) 836 if(_clientHandle)
880 { 837 {
881 _gtc->TcDeregisterClient(_clientHandle); 838 _gtc->TcDeregisterClient(_clientHandle);
882 _clientHandle = NULL; 839 _clientHandle = nullptr;
883 } 840 }
884 if ((0 == dscp) && (-2 == _pcp) && (-1 == pcp)) 841 if ((0 == dscp) && (-2 == _pcp) && (-1 == pcp))
885 { 842 {
886 // TODO (pwestin): why is this not done before deleting old filter and 843 // TODO (pwestin): why is this not done before deleting old filter and
887 // flow? This scenario should probably be documented in 844 // flow? This scenario should probably be documented in
888 // the function declaration. 845 // the function declaration.
889 return 0; 846 return 0;
890 } 847 }
891 848
892 TCI_CLIENT_FUNC_LIST QoSFunctions; 849 TCI_CLIENT_FUNC_LIST QoSFunctions;
893 QoSFunctions.ClAddFlowCompleteHandler = NULL; 850 QoSFunctions.ClAddFlowCompleteHandler = nullptr;
894 QoSFunctions.ClDeleteFlowCompleteHandler = NULL; 851 QoSFunctions.ClDeleteFlowCompleteHandler = nullptr;
895 QoSFunctions.ClModifyFlowCompleteHandler = NULL; 852 QoSFunctions.ClModifyFlowCompleteHandler = nullptr;
896 QoSFunctions.ClNotifyHandler = (TCI_NOTIFY_HANDLER)MyClNotifyHandler; 853 QoSFunctions.ClNotifyHandler = (TCI_NOTIFY_HANDLER)MyClNotifyHandler;
897 // Register the client with Traffic control interface. 854 // Register the client with Traffic control interface.
898 HANDLE ClientHandle; 855 HANDLE ClientHandle;
899 ULONG result = _gtc->TcRegisterClient(CURRENT_TCI_VERSION, NULL, 856 ULONG result = _gtc->TcRegisterClient(CURRENT_TCI_VERSION, nullptr,
900 &QoSFunctions,&ClientHandle); 857 &QoSFunctions, &ClientHandle);
901 if(result != NO_ERROR) 858 if(result != NO_ERROR)
902 { 859 {
903 // This is likely caused by the application not being run as 860 // This is likely caused by the application not being run as
904 // administrator. 861 // administrator.
905 WEBRTC_TRACE(kTraceError, kTraceTransport, _id, 862 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
906 "TcRegisterClient returned %d", result); 863 "TcRegisterClient returned %d", result);
907 return result; 864 return result;
908 } 865 }
909 866
910 // Find traffic control-enabled network interfaces that matches this 867 // Find traffic control-enabled network interfaces that matches this
911 // socket's IP address. 868 // socket's IP address.
912 ULONG BufferSize = 0; 869 ULONG BufferSize = 0;
913 result = _gtc->TcEnumerateInterfaces(ClientHandle, &BufferSize, NULL); 870 result = _gtc->TcEnumerateInterfaces(ClientHandle, &BufferSize, nullptr);
914 871
915 if(result != NO_ERROR && result != ERROR_INSUFFICIENT_BUFFER) 872 if(result != NO_ERROR && result != ERROR_INSUFFICIENT_BUFFER)
916 { 873 {
917 _gtc->TcDeregisterClient(ClientHandle); 874 _gtc->TcDeregisterClient(ClientHandle);
918 return result; 875 return result;
919 } 876 }
920 877
921 if(result != ERROR_INSUFFICIENT_BUFFER) 878 if(result != ERROR_INSUFFICIENT_BUFFER)
922 { 879 {
923 // Empty buffer contains all control-enabled network interfaces. I.e. 880 // Empty buffer contains all control-enabled network interfaces. I.e.
924 // QoS is not enabled. 881 // QoS is not enabled.
925 WEBRTC_TRACE(kTraceError, kTraceTransport, _id, 882 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
926 "QOS faild since QOS is not installed on the interface"); 883 "QOS faild since QOS is not installed on the interface");
927 884
928 _gtc->TcDeregisterClient(ClientHandle); 885 _gtc->TcDeregisterClient(ClientHandle);
929 return -1; 886 return -1;
930 } 887 }
931 888
932 PTC_IFC_DESCRIPTOR pInterfaceBuffer = 889 PTC_IFC_DESCRIPTOR pInterfaceBuffer =
933 (PTC_IFC_DESCRIPTOR)malloc(BufferSize); 890 (PTC_IFC_DESCRIPTOR)malloc(BufferSize);
934 if(pInterfaceBuffer == NULL) 891 if (pInterfaceBuffer == nullptr) {
935 { 892 WEBRTC_TRACE(kTraceError, kTraceTransport, _id, "Out ot memory failure");
936 WEBRTC_TRACE(kTraceError, kTraceTransport, _id, 893 _gtc->TcDeregisterClient(ClientHandle);
937 "Out ot memory failure"); 894 return ERROR_NOT_ENOUGH_MEMORY;
938 _gtc->TcDeregisterClient(ClientHandle);
939 return ERROR_NOT_ENOUGH_MEMORY;
940 } 895 }
941 896
942 result = _gtc->TcEnumerateInterfaces(ClientHandle, &BufferSize, 897 result = _gtc->TcEnumerateInterfaces(ClientHandle, &BufferSize,
943 pInterfaceBuffer); 898 pInterfaceBuffer);
944 899
945 if(result != NO_ERROR) 900 if(result != NO_ERROR)
946 { 901 {
947 WEBRTC_TRACE( 902 WEBRTC_TRACE(
948 kTraceError, 903 kTraceError,
949 kTraceTransport, 904 kTraceTransport,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 } 957 }
1003 if(!addrFound) 958 if(!addrFound)
1004 { 959 {
1005 WEBRTC_TRACE(kTraceError, kTraceTransport, _id, 960 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
1006 "QOS faild since address is not found"); 961 "QOS faild since address is not found");
1007 _gtc->TcDeregisterClient(ClientHandle); 962 _gtc->TcDeregisterClient(ClientHandle);
1008 free(pInterfaceBuffer); 963 free(pInterfaceBuffer);
1009 return -1; 964 return -1;
1010 } 965 }
1011 result = _gtc->TcOpenInterfaceW(oneinterface->pInterfaceName, ClientHandle, 966 result = _gtc->TcOpenInterfaceW(oneinterface->pInterfaceName, ClientHandle,
1012 NULL, &ifcHandle); 967 nullptr, &ifcHandle);
1013 if(result != NO_ERROR) 968 if(result != NO_ERROR)
1014 { 969 {
1015 WEBRTC_TRACE(kTraceError, kTraceTransport, _id, 970 WEBRTC_TRACE(kTraceError, kTraceTransport, _id,
1016 "Error opening interface: %d", result); 971 "Error opening interface: %d", result);
1017 _gtc->TcDeregisterClient(ClientHandle); 972 _gtc->TcDeregisterClient(ClientHandle);
1018 free(pInterfaceBuffer); 973 free(pInterfaceBuffer);
1019 return result; 974 return result;
1020 } 975 }
1021 976
1022 // Create flow if one doesn't exist. 977 // Create flow if one doesn't exist.
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1158 1113
1159 // Setup PCP (802.1p priority in 802.1Q/VLAN tagging) 1114 // Setup PCP (802.1p priority in 802.1Q/VLAN tagging)
1160 if (pcp >= 0) 1115 if (pcp >= 0)
1161 { 1116 {
1162 // DS is always first object. 1117 // DS is always first object.
1163 QOS_DS_CLASS* dsClass = (QOS_DS_CLASS*)_flow->TcObjects; 1118 QOS_DS_CLASS* dsClass = (QOS_DS_CLASS*)_flow->TcObjects;
1164 QOS_TRAFFIC_CLASS* trafficClass = (QOS_TRAFFIC_CLASS*)(dsClass + 1); 1119 QOS_TRAFFIC_CLASS* trafficClass = (QOS_TRAFFIC_CLASS*)(dsClass + 1);
1165 trafficClass->TrafficClass = pcp; 1120 trafficClass->TrafficClass = pcp;
1166 } 1121 }
1167 1122
1168 result = _gtc->TcAddFlow(ifcHandle, NULL, 0, _flow, &iflowHandle); 1123 result = _gtc->TcAddFlow(ifcHandle, nullptr, 0, _flow, &iflowHandle);
1169 if(result != NO_ERROR) 1124 if(result != NO_ERROR)
1170 { 1125 {
1171 _gtc->TcCloseInterface(ifcHandle); 1126 _gtc->TcCloseInterface(ifcHandle);
1172 _gtc->TcDeregisterClient(ClientHandle); 1127 _gtc->TcDeregisterClient(ClientHandle);
1173 free(pInterfaceBuffer); 1128 free(pInterfaceBuffer);
1174 return -1; 1129 return -1;
1175 } 1130 }
1176 1131
1177 IP_PATTERN filterPattern, mask; 1132 IP_PATTERN filterPattern, mask;
1178 1133
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1344 "UdpSocket2Windows(%d)::InvalidateSocket() WSAerror: %d", 1299 "UdpSocket2Windows(%d)::InvalidateSocket() WSAerror: %d",
1345 (int32_t)this, WSAGetLastError()); 1300 (int32_t)this, WSAGetLastError());
1346 } 1301 }
1347 _socket = INVALID_SOCKET; 1302 _socket = INVALID_SOCKET;
1348 _ptrSocketRWLock->ReleaseLockExclusive(); 1303 _ptrSocketRWLock->ReleaseLockExclusive();
1349 return true; 1304 return true;
1350 } 1305 }
1351 1306
1352 } // namespace test 1307 } // namespace test
1353 } // namespace webrtc 1308 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698