Home | History | Annotate | Download | only in channel_transport
      1 /*
      2  *  Copyright (c) 2011 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 #ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_POSIX_H_
     12 #define WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_POSIX_H_
     13 
     14 #include <arpa/inet.h>
     15 #include <netinet/in.h>
     16 #include <sys/socket.h>
     17 #include <sys/types.h>
     18 
     19 #include "webrtc/system_wrappers/include/condition_variable_wrapper.h"
     20 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
     21 #include "webrtc/test/channel_transport/udp_socket_wrapper.h"
     22 
     23 namespace webrtc {
     24 namespace test {
     25 
     26 #define SOCKET_ERROR -1
     27 
     28 class UdpSocketPosix : public UdpSocketWrapper
     29 {
     30 public:
     31     UdpSocketPosix(const int32_t id, UdpSocketManager* mgr,
     32                    bool ipV6Enable = false);
     33 
     34     virtual ~UdpSocketPosix();
     35 
     36     bool SetCallback(CallbackObj obj, IncomingSocketCallback cb) override;
     37 
     38     bool Bind(const SocketAddress& name) override;
     39 
     40     bool SetSockopt(int32_t level,
     41                     int32_t optname,
     42                     const int8_t* optval,
     43                     int32_t optlen) override;
     44 
     45     int32_t SetTOS(const int32_t serviceType) override;
     46 
     47     int32_t SendTo(const int8_t* buf,
     48                    size_t len,
     49                    const SocketAddress& to) override;
     50 
     51     // Deletes socket in addition to closing it.
     52     // TODO (hellner): make destructor protected.
     53     void CloseBlocking() override;
     54 
     55     SOCKET GetFd();
     56 
     57     bool ValidHandle() override;
     58 
     59     bool SetQos(int32_t /*serviceType*/,
     60                 int32_t /*tokenRate*/,
     61                 int32_t /*bucketSize*/,
     62                 int32_t /*peekBandwith*/,
     63                 int32_t /*minPolicedSize*/,
     64                 int32_t /*maxSduSize*/,
     65                 const SocketAddress& /*stRemName*/,
     66                 int32_t /*overrideDSCP*/) override;
     67 
     68     bool CleanUp();
     69     void HasIncoming();
     70     bool WantsIncoming();
     71     void ReadyForDeletion();
     72 private:
     73     friend class UdpSocketManagerPosix;
     74 
     75     const int32_t _id;
     76     IncomingSocketCallback _incomingCb;
     77     CallbackObj _obj;
     78 
     79     SOCKET _socket;
     80     UdpSocketManager* _mgr;
     81     ConditionVariableWrapper* _closeBlockingCompletedCond;
     82     ConditionVariableWrapper* _readyForDeletionCond;
     83 
     84     bool _closeBlockingActive;
     85     bool _closeBlockingCompleted;
     86     bool _readyForDeletion;
     87 
     88     CriticalSectionWrapper* _cs;
     89 };
     90 
     91 }  // namespace test
     92 }  // namespace webrtc
     93 
     94 #endif  // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_POSIX_H_
     95