111 lines
3.6 KiB
C
111 lines
3.6 KiB
C
|
/*
|
||
|
* Copyright (c) 2011 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_MODULES_UDP_TRANSPORT_SOURCE_UDP_SOCKET_WRAPPER_H_
|
||
|
#define WEBRTC_MODULES_UDP_TRANSPORT_SOURCE_UDP_SOCKET_WRAPPER_H_
|
||
|
|
||
|
#include "udp_transport.h"
|
||
|
|
||
|
namespace webrtc {
|
||
|
class EventWrapper;
|
||
|
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 WebRtc_Word8* buf,
|
||
|
WebRtc_Word32 len,
|
||
|
const SocketAddress* from);
|
||
|
|
||
|
class UdpSocketWrapper
|
||
|
{
|
||
|
public:
|
||
|
virtual ~UdpSocketWrapper();
|
||
|
static UdpSocketWrapper* CreateSocket(const WebRtc_Word32 id,
|
||
|
UdpSocketManager* mgr,
|
||
|
CallbackObj obj,
|
||
|
IncomingSocketCallback cb,
|
||
|
bool ipV6Enable = false,
|
||
|
bool disableGQOS = false);
|
||
|
|
||
|
// Set the unique identifier of this class to id.
|
||
|
virtual WebRtc_Word32 ChangeUniqueId(const WebRtc_Word32 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 inline bool StartReceiving(const WebRtc_UWord32 /*receiveBuffers*/)
|
||
|
{return StartReceiving();}
|
||
|
// Stop receiving UDP data.
|
||
|
virtual bool StopReceiving();
|
||
|
|
||
|
virtual bool ValidHandle() = 0;
|
||
|
|
||
|
// Set socket options.
|
||
|
virtual bool SetSockopt(WebRtc_Word32 level, WebRtc_Word32 optname,
|
||
|
const WebRtc_Word8* optval,
|
||
|
WebRtc_Word32 optlen) = 0;
|
||
|
|
||
|
// Set TOS for outgoing packets.
|
||
|
virtual WebRtc_Word32 SetTOS(const WebRtc_Word32 serviceType) = 0;
|
||
|
|
||
|
// Set 802.1Q PCP field (802.1p) for outgoing VLAN traffic.
|
||
|
virtual WebRtc_Word32 SetPCP(const WebRtc_Word32 /*pcp*/) {return -1;}
|
||
|
|
||
|
// Send buf of length len to the address specified by to.
|
||
|
virtual WebRtc_Word32 SendTo(const WebRtc_Word8* buf, WebRtc_Word32 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(WebRtc_Word32 serviceType, WebRtc_Word32 tokenRate,
|
||
|
WebRtc_Word32 bucketSize, WebRtc_Word32 peekBandwith,
|
||
|
WebRtc_Word32 minPolicedSize, WebRtc_Word32 maxSduSize,
|
||
|
const SocketAddress &stRemName,
|
||
|
WebRtc_Word32 overrideDSCP = 0) = 0;
|
||
|
|
||
|
virtual WebRtc_UWord32 ReceiveBuffers() {return 0;};
|
||
|
|
||
|
protected:
|
||
|
UdpSocketWrapper();
|
||
|
|
||
|
bool _wantsIncoming;
|
||
|
EventWrapper* _deleteEvent;
|
||
|
|
||
|
private:
|
||
|
static bool _initiated;
|
||
|
};
|
||
|
} // namespace webrtc
|
||
|
|
||
|
#endif // WEBRTC_MODULES_UDP_TRANSPORT_SOURCE_UDP_SOCKET_WRAPPER_H_
|