| 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
 | 
| 
 |