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#ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_ 12#define WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_ 13 14#include "webrtc/test/channel_transport/udp_transport.h" 15 16namespace webrtc { 17 18class EventWrapper; 19 20namespace test { 21 22class UdpSocketManager; 23 24#define SOCKET_ERROR_NO_QOS -1000 25 26#ifndef _WIN32 27typedef int SOCKET; 28#endif 29 30#ifndef INVALID_SOCKET 31#define INVALID_SOCKET (SOCKET)(~0) 32 33#ifndef AF_INET 34#define AF_INET 2 35#endif 36 37#endif 38 39typedef void* CallbackObj; 40typedef void(*IncomingSocketCallback)(CallbackObj obj, const int8_t* buf, 41 int32_t len, const SocketAddress* from); 42 43class UdpSocketWrapper 44{ 45public: 46 static UdpSocketWrapper* CreateSocket(const int32_t id, 47 UdpSocketManager* mgr, 48 CallbackObj obj, 49 IncomingSocketCallback cb, 50 bool ipV6Enable = false, 51 bool disableGQOS = false); 52 53 // Set the unique identifier of this class to id. 54 virtual int32_t ChangeUniqueId(const int32_t id) = 0; 55 56 // Register cb for receiving callbacks when there are incoming packets. 57 // Register obj so that it will be passed in calls to cb. 58 virtual bool SetCallback(CallbackObj obj, IncomingSocketCallback cb) = 0; 59 60 // Socket to local address specified by name. 61 virtual bool Bind(const SocketAddress& name) = 0; 62 63 // Start receiving UDP data. 64 virtual bool StartReceiving(); 65 virtual bool StartReceiving(const uint32_t /*receiveBuffers*/); 66 // Stop receiving UDP data. 67 virtual bool StopReceiving(); 68 69 virtual bool ValidHandle() = 0; 70 71 // Set socket options. 72 virtual bool SetSockopt(int32_t level, int32_t optname, 73 const int8_t* optval, int32_t optlen) = 0; 74 75 // Set TOS for outgoing packets. 76 virtual int32_t SetTOS(const int32_t serviceType) = 0; 77 78 // Set 802.1Q PCP field (802.1p) for outgoing VLAN traffic. 79 virtual int32_t SetPCP(const int32_t /*pcp*/); 80 81 // Send buf of length len to the address specified by to. 82 virtual int32_t SendTo(const int8_t* buf, int32_t len, 83 const SocketAddress& to) = 0; 84 85 virtual void SetEventToNull(); 86 87 // Close socket and don't return until completed. 88 virtual void CloseBlocking() {} 89 90 // tokenRate is in bit/s. peakBandwidt is in byte/s 91 virtual bool SetQos(int32_t serviceType, int32_t tokenRate, 92 int32_t bucketSize, int32_t peekBandwith, 93 int32_t minPolicedSize, int32_t maxSduSize, 94 const SocketAddress &stRemName, 95 int32_t overrideDSCP = 0) = 0; 96 97 virtual uint32_t ReceiveBuffers(); 98 99protected: 100 // Creating the socket is done via CreateSocket(). 101 UdpSocketWrapper(); 102 // Destroying the socket is done via CloseBlocking(). 103 virtual ~UdpSocketWrapper(); 104 105 bool _wantsIncoming; 106 EventWrapper* _deleteEvent; 107 108private: 109 static bool _initiated; 110}; 111 112} // namespac test 113} // namespace webrtc 114 115#endif // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_ 116