| OLD | NEW | 
| (Empty) |  | 
 |    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  | 
 |   39 UdpSocketWrapper::UdpSocketWrapper() | 
 |   40     : _wantsIncoming(false), | 
 |   41       _deleteEvent(NULL) | 
 |   42 { | 
 |   43 } | 
 |   44  | 
 |   45 UdpSocketWrapper::~UdpSocketWrapper() | 
 |   46 { | 
 |   47     if(_deleteEvent) | 
 |   48     { | 
 |   49       _deleteEvent->Set(); | 
 |   50       _deleteEvent = NULL; | 
 |   51     } | 
 |   52 } | 
 |   53  | 
 |   54 void UdpSocketWrapper::SetEventToNull() | 
 |   55 { | 
 |   56     if (_deleteEvent) | 
 |   57     { | 
 |   58         _deleteEvent = NULL; | 
 |   59     } | 
 |   60 } | 
 |   61  | 
 |   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  | 
 |  138 bool UdpSocketWrapper::StartReceiving() | 
 |  139 { | 
 |  140     _wantsIncoming = true; | 
 |  141     return true; | 
 |  142 } | 
 |  143  | 
 |  144 bool UdpSocketWrapper::StartReceiving(const uint32_t /*receiveBuffers*/) { | 
 |  145   return StartReceiving(); | 
 |  146 } | 
 |  147  | 
 |  148 bool UdpSocketWrapper::StopReceiving() | 
 |  149 { | 
 |  150     _wantsIncoming = false; | 
 |  151     return true; | 
 |  152 } | 
 |  153  | 
 |  154 int32_t UdpSocketWrapper::SetPCP(const int32_t /*pcp*/) { return -1; } | 
 |  155  | 
 |  156 uint32_t UdpSocketWrapper::ReceiveBuffers() { return 0; } | 
 |  157  | 
 |  158 }  // namespace test | 
 |  159 }  // namespace webrtc | 
| OLD | NEW |