Index: webrtc/test/channel_transport/udp_socket_wrapper.cc |
diff --git a/webrtc/test/channel_transport/udp_socket_wrapper.cc b/webrtc/test/channel_transport/udp_socket_wrapper.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f4fa3e950b80c9575ddaf7a77c94e4c5db3ca69d |
--- /dev/null |
+++ b/webrtc/test/channel_transport/udp_socket_wrapper.cc |
@@ -0,0 +1,159 @@ |
+/* |
+ * Copyright (c) 2012 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/udp_socket_wrapper.h" |
+ |
+#include <stdlib.h> |
+#include <string.h> |
+ |
+#include "webrtc/system_wrappers/include/event_wrapper.h" |
+#include "webrtc/system_wrappers/include/trace.h" |
+#include "webrtc/test/channel_transport/udp_socket_manager_wrapper.h" |
+ |
+#if defined(_WIN32) |
+ #include "webrtc/test/channel_transport/udp_socket2_win.h" |
+#else |
+ #include "webrtc/test/channel_transport/udp_socket_posix.h" |
+#endif |
+ |
+ |
+namespace webrtc { |
+namespace test { |
+ |
+bool UdpSocketWrapper::_initiated = false; |
+ |
+// Temporary Android hack. The value 1024 is taken from |
+// <ndk>/build/platforms/android-1.5/arch-arm/usr/include/linux/posix_types.h |
+// TODO (tomasl): can we remove this now? |
+#ifndef FD_SETSIZE |
+#define FD_SETSIZE 1024 |
+#endif |
+ |
+UdpSocketWrapper::UdpSocketWrapper() |
+ : _wantsIncoming(false), |
+ _deleteEvent(NULL) |
+{ |
+} |
+ |
+UdpSocketWrapper::~UdpSocketWrapper() |
+{ |
+ if(_deleteEvent) |
+ { |
+ _deleteEvent->Set(); |
+ _deleteEvent = NULL; |
+ } |
+} |
+ |
+void UdpSocketWrapper::SetEventToNull() |
+{ |
+ if (_deleteEvent) |
+ { |
+ _deleteEvent = NULL; |
+ } |
+} |
+ |
+UdpSocketWrapper* UdpSocketWrapper::CreateSocket(const int32_t id, |
+ UdpSocketManager* mgr, |
+ CallbackObj obj, |
+ IncomingSocketCallback cb, |
+ bool ipV6Enable, |
+ bool disableGQOS) |
+ |
+{ |
+ WEBRTC_TRACE(kTraceMemory, kTraceTransport, id, |
+ "UdpSocketWrapper::CreateSocket"); |
+ |
+ UdpSocketWrapper* s = 0; |
+ |
+#ifdef _WIN32 |
+ if (!_initiated) |
+ { |
+ WSADATA wsaData; |
+ WORD wVersionRequested = MAKEWORD( 2, 2 ); |
+ int32_t err = WSAStartup( wVersionRequested, &wsaData); |
+ if (err != 0) |
+ { |
+ WEBRTC_TRACE( |
+ kTraceError, |
+ kTraceTransport, |
+ id, |
+ "UdpSocketWrapper::CreateSocket failed to initialize sockets\ |
+ WSAStartup error:%d", |
+ err); |
+ return NULL; |
+ } |
+ |
+ _initiated = true; |
+ } |
+ |
+ s = new UdpSocket2Windows(id, mgr, ipV6Enable, disableGQOS); |
+ |
+#else |
+ if (!_initiated) |
+ { |
+ _initiated = true; |
+ } |
+ s = new UdpSocketPosix(id, mgr, ipV6Enable); |
+ if (s) |
+ { |
+ UdpSocketPosix* sl = static_cast<UdpSocketPosix*>(s); |
+ if (sl->GetFd() != INVALID_SOCKET && sl->GetFd() < FD_SETSIZE) |
+ { |
+ // ok |
+ } else |
+ { |
+ WEBRTC_TRACE( |
+ kTraceError, |
+ kTraceTransport, |
+ id, |
+ "UdpSocketWrapper::CreateSocket failed to initialize socket"); |
+ delete s; |
+ s = NULL; |
+ } |
+ } |
+#endif |
+ if (s) |
+ { |
+ s->_deleteEvent = NULL; |
+ if (!s->SetCallback(obj, cb)) |
+ { |
+ WEBRTC_TRACE( |
+ kTraceError, |
+ kTraceTransport, |
+ id, |
+ "UdpSocketWrapper::CreateSocket failed to ser callback"); |
+ return(NULL); |
+ } |
+ } |
+ return s; |
+} |
+ |
+bool UdpSocketWrapper::StartReceiving() |
+{ |
+ _wantsIncoming = true; |
+ return true; |
+} |
+ |
+bool UdpSocketWrapper::StartReceiving(const uint32_t /*receiveBuffers*/) { |
+ return StartReceiving(); |
+} |
+ |
+bool UdpSocketWrapper::StopReceiving() |
+{ |
+ _wantsIncoming = false; |
+ return true; |
+} |
+ |
+int32_t UdpSocketWrapper::SetPCP(const int32_t /*pcp*/) { return -1; } |
+ |
+uint32_t UdpSocketWrapper::ReceiveBuffers() { return 0; } |
+ |
+} // namespace test |
+} // namespace webrtc |