1999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org/* 2999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * 4999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * Use of this source code is governed by a BSD-style license 5999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * that can be found in the LICENSE file in the root of the source 6999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * tree. An additional intellectual property rights grant can be found 7999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * in the file PATENTS. All contributing project authors may 8999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org */ 10999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 11999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_ 12999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#define WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_ 13999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 14999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#include "webrtc/test/channel_transport/udp_transport.h" 15999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 16999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgnamespace webrtc { 17999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 18999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgclass EventWrapper; 19999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 20999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgnamespace test { 21999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 22999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgclass UdpSocketManager; 23999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 24999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#define SOCKET_ERROR_NO_QOS -1000 25999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 26999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#ifndef _WIN32 27999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgtypedef int SOCKET; 28999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#endif 29999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 30999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#ifndef INVALID_SOCKET 31999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#define INVALID_SOCKET (SOCKET)(~0) 32999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 33999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#ifndef AF_INET 34999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#define AF_INET 2 35999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#endif 36999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 37999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#endif 38999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 39999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgtypedef void* CallbackObj; 40a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.orgtypedef void(*IncomingSocketCallback)(CallbackObj obj, const int8_t* buf, 414591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t len, const SocketAddress* from); 42999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 43999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgclass UdpSocketWrapper 44999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org{ 45999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgpublic: 46a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org static UdpSocketWrapper* CreateSocket(const int32_t id, 47999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketManager* mgr, 48999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org CallbackObj obj, 49999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org IncomingSocketCallback cb, 50999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool ipV6Enable = false, 51999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool disableGQOS = false); 52999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 53999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Register cb for receiving callbacks when there are incoming packets. 54999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Register obj so that it will be passed in calls to cb. 55999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual bool SetCallback(CallbackObj obj, IncomingSocketCallback cb) = 0; 56999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 57999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Socket to local address specified by name. 58999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual bool Bind(const SocketAddress& name) = 0; 59999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 60999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Start receiving UDP data. 61999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual bool StartReceiving(); 62e6c3966530ecc24fc1a3734e4310c9bd2aaead07pbos@webrtc.org virtual bool StartReceiving(const uint32_t /*receiveBuffers*/); 63999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Stop receiving UDP data. 64999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual bool StopReceiving(); 65999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 66999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual bool ValidHandle() = 0; 67999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 68999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Set socket options. 69a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org virtual bool SetSockopt(int32_t level, int32_t optname, 70a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org const int8_t* optval, int32_t optlen) = 0; 71999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 72999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Set TOS for outgoing packets. 73a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org virtual int32_t SetTOS(const int32_t serviceType) = 0; 74999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 75999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Set 802.1Q PCP field (802.1p) for outgoing VLAN traffic. 76e6c3966530ecc24fc1a3734e4310c9bd2aaead07pbos@webrtc.org virtual int32_t SetPCP(const int32_t /*pcp*/); 77999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 78999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Send buf of length len to the address specified by to. 794591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org virtual int32_t SendTo(const int8_t* buf, size_t len, 80a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org const SocketAddress& to) = 0; 81999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 82999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual void SetEventToNull(); 83999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 84999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Close socket and don't return until completed. 85999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual void CloseBlocking() {} 86999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 87999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // tokenRate is in bit/s. peakBandwidt is in byte/s 88a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org virtual bool SetQos(int32_t serviceType, int32_t tokenRate, 89a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t bucketSize, int32_t peekBandwith, 90a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t minPolicedSize, int32_t maxSduSize, 91999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org const SocketAddress &stRemName, 92a5f1787f63cb580a50f5a7be98600102454594e2pbos@webrtc.org int32_t overrideDSCP = 0) = 0; 93999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 94e6c3966530ecc24fc1a3734e4310c9bd2aaead07pbos@webrtc.org virtual uint32_t ReceiveBuffers(); 95999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 96999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgprotected: 97999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Creating the socket is done via CreateSocket(). 98999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org UdpSocketWrapper(); 99999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org // Destroying the socket is done via CloseBlocking(). 100999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org virtual ~UdpSocketWrapper(); 101999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 102999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org bool _wantsIncoming; 103999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org EventWrapper* _deleteEvent; 104999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 105999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.orgprivate: 106999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org static bool _initiated; 107999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org}; 108999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 109999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org} // namespac test 110999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org} // namespace webrtc 111999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org 112999e900fb6ed324bad5cb59b856936257824f43fpwestin@webrtc.org#endif // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_ 113