| /* |
| * 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_ |