• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2012 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/test/channel_transport/udp_socket_wrapper.h"
12 
13 #include <stdlib.h>
14 #include <string.h>
15 
16 #include "webrtc/system_wrappers/include/event_wrapper.h"
17 #include "webrtc/system_wrappers/include/trace.h"
18 #include "webrtc/test/channel_transport/udp_socket_manager_wrapper.h"
19 
20 #if defined(_WIN32)
21     #include "webrtc/test/channel_transport/udp_socket2_win.h"
22 #else
23     #include "webrtc/test/channel_transport/udp_socket_posix.h"
24 #endif
25 
26 
27 namespace webrtc {
28 namespace test {
29 
30 bool UdpSocketWrapper::_initiated = false;
31 
32 // Temporary Android hack. The value 1024 is taken from
33 // <ndk>/build/platforms/android-1.5/arch-arm/usr/include/linux/posix_types.h
34 // TODO (tomasl): can we remove this now?
35 #ifndef FD_SETSIZE
36 #define FD_SETSIZE 1024
37 #endif
38 
UdpSocketWrapper()39 UdpSocketWrapper::UdpSocketWrapper()
40     : _wantsIncoming(false),
41       _deleteEvent(NULL)
42 {
43 }
44 
~UdpSocketWrapper()45 UdpSocketWrapper::~UdpSocketWrapper()
46 {
47     if(_deleteEvent)
48     {
49       _deleteEvent->Set();
50       _deleteEvent = NULL;
51     }
52 }
53 
SetEventToNull()54 void UdpSocketWrapper::SetEventToNull()
55 {
56     if (_deleteEvent)
57     {
58         _deleteEvent = NULL;
59     }
60 }
61 
CreateSocket(const int32_t id,UdpSocketManager * mgr,CallbackObj obj,IncomingSocketCallback cb,bool ipV6Enable,bool disableGQOS)62 UdpSocketWrapper* UdpSocketWrapper::CreateSocket(const int32_t id,
63                                                  UdpSocketManager* mgr,
64                                                  CallbackObj obj,
65                                                  IncomingSocketCallback cb,
66                                                  bool ipV6Enable,
67                                                  bool disableGQOS)
68 
69 {
70     WEBRTC_TRACE(kTraceMemory, kTraceTransport, id,
71                  "UdpSocketWrapper::CreateSocket");
72 
73     UdpSocketWrapper* s = 0;
74 
75 #ifdef _WIN32
76     if (!_initiated)
77     {
78         WSADATA wsaData;
79         WORD wVersionRequested = MAKEWORD( 2, 2 );
80         int32_t err = WSAStartup( wVersionRequested, &wsaData);
81         if (err != 0)
82         {
83             WEBRTC_TRACE(
84                 kTraceError,
85                 kTraceTransport,
86                 id,
87                 "UdpSocketWrapper::CreateSocket failed to initialize sockets\
88  WSAStartup error:%d",
89                 err);
90             return NULL;
91         }
92 
93         _initiated = true;
94     }
95 
96     s = new UdpSocket2Windows(id, mgr, ipV6Enable, disableGQOS);
97 
98 #else
99     if (!_initiated)
100     {
101         _initiated = true;
102     }
103     s = new UdpSocketPosix(id, mgr, ipV6Enable);
104     if (s)
105     {
106         UdpSocketPosix* sl = static_cast<UdpSocketPosix*>(s);
107         if (sl->GetFd() != INVALID_SOCKET && sl->GetFd() < FD_SETSIZE)
108         {
109             // ok
110         } else
111         {
112             WEBRTC_TRACE(
113                 kTraceError,
114                 kTraceTransport,
115                 id,
116                 "UdpSocketWrapper::CreateSocket failed to initialize socket");
117             delete s;
118             s = NULL;
119         }
120     }
121 #endif
122     if (s)
123     {
124         s->_deleteEvent = NULL;
125         if (!s->SetCallback(obj, cb))
126         {
127             WEBRTC_TRACE(
128                 kTraceError,
129                 kTraceTransport,
130                 id,
131                 "UdpSocketWrapper::CreateSocket failed to ser callback");
132             return(NULL);
133         }
134     }
135     return s;
136 }
137 
StartReceiving()138 bool UdpSocketWrapper::StartReceiving()
139 {
140     _wantsIncoming = true;
141     return true;
142 }
143 
StartReceiving(const uint32_t)144 bool UdpSocketWrapper::StartReceiving(const uint32_t /*receiveBuffers*/) {
145   return StartReceiving();
146 }
147 
StopReceiving()148 bool UdpSocketWrapper::StopReceiving()
149 {
150     _wantsIncoming = false;
151     return true;
152 }
153 
SetPCP(const int32_t)154 int32_t UdpSocketWrapper::SetPCP(const int32_t /*pcp*/) { return -1; }
155 
ReceiveBuffers()156 uint32_t UdpSocketWrapper::ReceiveBuffers() { return 0; }
157 
158 }  // namespace test
159 }  // namespace webrtc
160