BUG=163 R=phoglund@webrtc.org Review URL: https://webrtc-codereview.appspot.com/1907004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4428 4adac7df-926f-26a2-2b94-8c16560cd09d
116 lines
3.5 KiB
C++
116 lines
3.5 KiB
C++
/*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_
|
|
#define WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_
|
|
|
|
#include "webrtc/test/channel_transport/udp_transport.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class EventWrapper;
|
|
|
|
namespace test {
|
|
|
|
class UdpSocketManager;
|
|
|
|
#define SOCKET_ERROR_NO_QOS -1000
|
|
|
|
#ifndef _WIN32
|
|
typedef int SOCKET;
|
|
#endif
|
|
|
|
#ifndef INVALID_SOCKET
|
|
#define INVALID_SOCKET (SOCKET)(~0)
|
|
|
|
#ifndef AF_INET
|
|
#define AF_INET 2
|
|
#endif
|
|
|
|
#endif
|
|
|
|
typedef void* CallbackObj;
|
|
typedef void(*IncomingSocketCallback)(CallbackObj obj, const int8_t* buf,
|
|
int32_t len, const SocketAddress* from);
|
|
|
|
class UdpSocketWrapper
|
|
{
|
|
public:
|
|
static UdpSocketWrapper* CreateSocket(const int32_t id,
|
|
UdpSocketManager* mgr,
|
|
CallbackObj obj,
|
|
IncomingSocketCallback cb,
|
|
bool ipV6Enable = false,
|
|
bool disableGQOS = false);
|
|
|
|
// Set the unique identifier of this class to id.
|
|
virtual int32_t ChangeUniqueId(const int32_t id) = 0;
|
|
|
|
// Register cb for receiving callbacks when there are incoming packets.
|
|
// Register obj so that it will be passed in calls to cb.
|
|
virtual bool SetCallback(CallbackObj obj, IncomingSocketCallback cb) = 0;
|
|
|
|
// Socket to local address specified by name.
|
|
virtual bool Bind(const SocketAddress& name) = 0;
|
|
|
|
// Start receiving UDP data.
|
|
virtual bool StartReceiving();
|
|
virtual bool StartReceiving(const uint32_t /*receiveBuffers*/);
|
|
// Stop receiving UDP data.
|
|
virtual bool StopReceiving();
|
|
|
|
virtual bool ValidHandle() = 0;
|
|
|
|
// Set socket options.
|
|
virtual bool SetSockopt(int32_t level, int32_t optname,
|
|
const int8_t* optval, int32_t optlen) = 0;
|
|
|
|
// Set TOS for outgoing packets.
|
|
virtual int32_t SetTOS(const int32_t serviceType) = 0;
|
|
|
|
// Set 802.1Q PCP field (802.1p) for outgoing VLAN traffic.
|
|
virtual int32_t SetPCP(const int32_t /*pcp*/);
|
|
|
|
// Send buf of length len to the address specified by to.
|
|
virtual int32_t SendTo(const int8_t* buf, int32_t len,
|
|
const SocketAddress& to) = 0;
|
|
|
|
virtual void SetEventToNull();
|
|
|
|
// Close socket and don't return until completed.
|
|
virtual void CloseBlocking() {}
|
|
|
|
// tokenRate is in bit/s. peakBandwidt is in byte/s
|
|
virtual bool SetQos(int32_t serviceType, int32_t tokenRate,
|
|
int32_t bucketSize, int32_t peekBandwith,
|
|
int32_t minPolicedSize, int32_t maxSduSize,
|
|
const SocketAddress &stRemName,
|
|
int32_t overrideDSCP = 0) = 0;
|
|
|
|
virtual uint32_t ReceiveBuffers();
|
|
|
|
protected:
|
|
// Creating the socket is done via CreateSocket().
|
|
UdpSocketWrapper();
|
|
// Destroying the socket is done via CloseBlocking().
|
|
virtual ~UdpSocketWrapper();
|
|
|
|
bool _wantsIncoming;
|
|
EventWrapper* _deleteEvent;
|
|
|
|
private:
|
|
static bool _initiated;
|
|
};
|
|
|
|
} // namespac test
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_WRAPPER_H_
|