| Index: webrtc/test/channel_transport/udp_socket2_win.h
|
| diff --git a/webrtc/test/channel_transport/udp_socket2_win.h b/webrtc/test/channel_transport/udp_socket2_win.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b41be9727d2beac302aa38f7dab387e437b41202
|
| --- /dev/null
|
| +++ b/webrtc/test/channel_transport/udp_socket2_win.h
|
| @@ -0,0 +1,174 @@
|
| +/*
|
| + * 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_SOCKET2_WINDOWS_H_
|
| +#define WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET2_WINDOWS_H_
|
| +
|
| +// Disable deprication warning from traffic.h
|
| +#pragma warning(disable : 4995)
|
| +
|
| +// Don't change include order for these header files.
|
| +#include <Winsock2.h>
|
| +#include <Ntddndis.h>
|
| +#include <traffic.h>
|
| +
|
| +#include "webrtc/base/event.h"
|
| +#include "webrtc/system_wrappers/include/atomic32.h"
|
| +#include "webrtc/system_wrappers/include/event_wrapper.h"
|
| +#include "webrtc/system_wrappers/include/rw_lock_wrapper.h"
|
| +#include "webrtc/system_wrappers/include/trace.h"
|
| +#include "webrtc/test/channel_transport/udp_socket2_manager_win.h"
|
| +#include "webrtc/test/channel_transport/udp_socket_wrapper.h"
|
| +
|
| +namespace webrtc {
|
| +namespace test {
|
| +
|
| +class UdpSocket2ManagerWindows;
|
| +class TrafficControlWindows;
|
| +struct PerIoContext;
|
| +
|
| +class UdpSocket2Windows : public UdpSocketWrapper
|
| +{
|
| +public:
|
| + UdpSocket2Windows(const int32_t id, UdpSocketManager* mgr,
|
| + bool ipV6Enable = false, bool disableGQOS = false);
|
| + virtual ~UdpSocket2Windows();
|
| +
|
| + bool ValidHandle() override;
|
| +
|
| + bool SetCallback(CallbackObj, IncomingSocketCallback) override;
|
| +
|
| + bool Bind(const SocketAddress& name) override;
|
| + bool SetSockopt(int32_t level,
|
| + int32_t optname,
|
| + const int8_t* optval,
|
| + int32_t optlen) override;
|
| +
|
| + bool StartReceiving(const uint32_t receiveBuffers) override;
|
| + inline bool StartReceiving() override { return StartReceiving(8); }
|
| + bool StopReceiving() override;
|
| +
|
| + int32_t SendTo(const int8_t* buf,
|
| + size_t len,
|
| + const SocketAddress& to) override;
|
| +
|
| + void CloseBlocking() override;
|
| +
|
| + SOCKET GetFd() { return _socket;}
|
| +
|
| + 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) override;
|
| +
|
| + int32_t SetTOS(const int32_t serviceType) override;
|
| + int32_t SetPCP(const int32_t pcp) override;
|
| +
|
| + uint32_t ReceiveBuffers() override { return _receiveBuffers.Value(); }
|
| +
|
| +protected:
|
| + void IOCompleted(PerIoContext* pIOContext, uint32_t ioSize, uint32_t error);
|
| +
|
| + int32_t PostRecv();
|
| + // Use pIoContext to post a new WSARecvFrom(..).
|
| + int32_t PostRecv(PerIoContext* pIoContext);
|
| +
|
| +private:
|
| + friend class UdpSocket2WorkerWindows;
|
| +
|
| + // Set traffic control (TC) flow adding it the interface that matches this
|
| + // sockets address.
|
| + // A filter is created and added to the flow.
|
| + // The flow consists of:
|
| + // (1) QoS send and receive information (flow specifications).
|
| + // (2) A DS object (for specifying exact DSCP value).
|
| + // (3) Possibly a traffic object (for specifying exact 802.1p priority (PCP)
|
| + // value).
|
| + //
|
| + // dscp values:
|
| + // -1 don't change the current dscp value.
|
| + // 0 don't add any flow to TC, unless pcp is specified.
|
| + // 1-63 Add a flow to TC with the specified dscp value.
|
| + // pcp values:
|
| + // -2 Don't add pcp info to the flow, (3) will not be added.
|
| + // -1 Don't change the current value.
|
| + // 0-7 Add pcp info to the flow with the specified value,
|
| + // (3) will be added.
|
| + //
|
| + // If both dscp and pcp are -1 no flow will be created or added to TC.
|
| + // If dscp is 0 and pcp is 0-7 (1), (2) and (3) will be created.
|
| + // Note: input parameter values are assumed to be in valid range, checks
|
| + // must be done by caller.
|
| + int32_t SetTrafficControl(int32_t dscp, int32_t pcp,
|
| + const struct sockaddr_in* name,
|
| + FLOWSPEC* send = NULL,
|
| + FLOWSPEC* recv = NULL);
|
| + int32_t CreateFlowSpec(int32_t serviceType,
|
| + int32_t tokenRate,
|
| + int32_t bucketSize,
|
| + int32_t peekBandwith,
|
| + int32_t minPolicedSize,
|
| + int32_t maxSduSize, FLOWSPEC *f);
|
| +
|
| + int32_t _id;
|
| + RWLockWrapper* _ptrCbRWLock;
|
| + IncomingSocketCallback _incomingCb;
|
| + CallbackObj _obj;
|
| + bool _qos;
|
| +
|
| + SocketAddress _remoteAddr;
|
| + SOCKET _socket;
|
| + int32_t _iProtocol;
|
| + UdpSocket2ManagerWindows* _mgr;
|
| +
|
| + Atomic32 _outstandingCalls;
|
| + Atomic32 _outstandingCallComplete;
|
| + volatile bool _terminate;
|
| + volatile bool _addedToMgr;
|
| +
|
| + rtc::Event delete_event_;
|
| +
|
| + RWLockWrapper* _ptrDestRWLock;
|
| + bool _outstandingCallsDisabled;
|
| + bool NewOutstandingCall();
|
| + void OutstandingCallCompleted();
|
| + void DisableNewOutstandingCalls();
|
| +
|
| + void RemoveSocketFromManager();
|
| +
|
| + // RWLockWrapper is used as a reference counter for the socket. Write lock
|
| + // is used for creating and deleting socket. Read lock is used for
|
| + // accessing the socket.
|
| + RWLockWrapper* _ptrSocketRWLock;
|
| + bool AquireSocket();
|
| + void ReleaseSocket();
|
| + bool InvalidateSocket();
|
| +
|
| + // Traffic control handles and structure pointers.
|
| + HANDLE _clientHandle;
|
| + HANDLE _flowHandle;
|
| + HANDLE _filterHandle;
|
| + PTC_GEN_FLOW _flow;
|
| + // TrafficControlWindows implements TOS and PCP.
|
| + TrafficControlWindows* _gtc;
|
| + // Holds the current pcp value. Can be -2 or 0 - 7.
|
| + int _pcp;
|
| +
|
| + Atomic32 _receiveBuffers;
|
| +};
|
| +
|
| +} // namespace test
|
| +} // namespace webrtc
|
| +
|
| +#endif // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET2_WINDOWS_H_
|
|
|