/*
 *  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_MODULES_RTP_RTCP_SOURCE_RTCP_RECEIVER_H_
#define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_RECEIVER_H_

#include <map>
#include <vector>

#include "typedefs.h"
#include "rtp_utility.h"
#include "rtcp_utility.h"
#include "rtp_rtcp_defines.h"
#include "rtcp_receiver_help.h"

namespace webrtc {
class ModuleRtpRtcpImpl;

class RTCPReceiver
{
public:
    RTCPReceiver(const WebRtc_Word32 id, RtpRtcpClock* clock,
                 ModuleRtpRtcpImpl* owner);
    virtual ~RTCPReceiver();

    void ChangeUniqueId(const WebRtc_Word32 id);

    RTCPMethod Status() const;
    WebRtc_Word32 SetRTCPStatus(const RTCPMethod method);

    WebRtc_UWord32 LastReceived();

    void SetSSRC( const WebRtc_UWord32 ssrc);
    void SetRelaySSRC( const WebRtc_UWord32 ssrc);
    WebRtc_Word32 SetRemoteSSRC( const WebRtc_UWord32 ssrc);

    WebRtc_UWord32 RelaySSRC() const;

    WebRtc_Word32 RegisterIncomingRTCPCallback(RtcpFeedback* incomingMessagesCallback);

    WebRtc_Word32 RegisterIncomingVideoCallback(RtpVideoFeedback* incomingMessagesCallback);

    WebRtc_Word32 IncomingRTCPPacket(RTCPHelp::RTCPPacketInformation& rtcpPacketInformation,
                                   RTCPUtility::RTCPParserV2 *rtcpParser);

    void TriggerCallbacksFromRTCPPacket(RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    // get received cname
    WebRtc_Word32 CNAME(const WebRtc_UWord32 remoteSSRC,
                        char cName[RTCP_CNAME_SIZE]) const;

    // get received NTP
    WebRtc_Word32 NTP(WebRtc_UWord32 *ReceivedNTPsecs,
                      WebRtc_UWord32 *ReceivedNTPfrac,
                      WebRtc_UWord32 *RTCPArrivalTimeSecs,
                      WebRtc_UWord32 *RTCPArrivalTimeFrac) const;

    // get rtt
    WebRtc_Word32 RTT(const WebRtc_UWord32 remoteSSRC,
                      WebRtc_UWord16* RTT,
                      WebRtc_UWord16* avgRTT,
                      WebRtc_UWord16* minRTT,
                      WebRtc_UWord16* maxRTT) const;

    WebRtc_UWord16 RTT() const;

    int SetRTT(WebRtc_UWord16 rtt);

    WebRtc_Word32 ResetRTT(const WebRtc_UWord32 remoteSSRC);

    void UpdateLipSync(const WebRtc_Word32 audioVideoOffset) const;

    WebRtc_Word32 SenderInfoReceived(RTCPSenderInfo* senderInfo) const;

    void OnReceivedIntraFrameRequest(const FrameType frameType,
                                     const WebRtc_UWord8 streamIdx) const;

    void OnReceivedSliceLossIndication(const WebRtc_UWord8 pitureID) const;
    void OnReceivedReferencePictureSelectionIndication(
        const WebRtc_UWord64 pitureID) const;

    // get statistics
    WebRtc_Word32 StatisticsReceived(
        std::vector<RTCPReportBlock>* receiveBlocks) const;

    // Get TMMBR
    WebRtc_Word32 TMMBRReceived(const WebRtc_UWord32 size,
                                const WebRtc_UWord32 accNumCandidates,
                                TMMBRSet* candidateSet) const;

    bool UpdateRTCPReceiveInformationTimers();

    void UpdateBandwidthEstimate(const WebRtc_UWord16 bwEstimateKbit);

    WebRtc_Word32 BoundingSet(bool &tmmbrOwner,
                              TMMBRSet*& boundingSetRec);

    WebRtc_Word32 SetPacketTimeout(const WebRtc_UWord32 timeoutMS);
    void PacketTimeout();

protected:
    RTCPHelp::RTCPReportBlockInformation* CreateReportBlockInformation(const WebRtc_UWord32 remoteSSRC);
    RTCPHelp::RTCPReportBlockInformation* GetReportBlockInformation(const WebRtc_UWord32 remoteSSRC) const;

    RTCPUtility::RTCPCnameInformation* CreateCnameInformation(const WebRtc_UWord32 remoteSSRC);
    RTCPUtility::RTCPCnameInformation* GetCnameInformation(const WebRtc_UWord32 remoteSSRC) const;

    RTCPHelp::RTCPReceiveInformation* CreateReceiveInformation(const WebRtc_UWord32 remoteSSRC);
    RTCPHelp::RTCPReceiveInformation* GetReceiveInformation(const WebRtc_UWord32 remoteSSRC);

    void UpdateReceiveInformation( RTCPHelp::RTCPReceiveInformation& receiveInformation);

    void HandleSenderReceiverReport(RTCPUtility::RTCPParserV2& rtcpParser,
                                    RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleReportBlock(const RTCPUtility::RTCPPacket& rtcpPacket,
                           RTCPHelp::RTCPPacketInformation& rtcpPacketInformation,
                           const WebRtc_UWord32 remoteSSRC,
                           const WebRtc_UWord8 numberOfReportBlocks);

    void HandleSDES(RTCPUtility::RTCPParserV2& rtcpParser);

    void HandleSDESChunk(RTCPUtility::RTCPParserV2& rtcpParser);

    void HandleXRVOIPMetric(RTCPUtility::RTCPParserV2& rtcpParser,
                            RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleNACK(RTCPUtility::RTCPParserV2& rtcpParser,
                    RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleNACKItem(const RTCPUtility::RTCPPacket& rtcpPacket,
                        RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleBYE(RTCPUtility::RTCPParserV2& rtcpParser);

    void HandlePLI(RTCPUtility::RTCPParserV2& rtcpParser,
                   RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleSLI(RTCPUtility::RTCPParserV2& rtcpParser,
                   RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleSLIItem(const RTCPUtility::RTCPPacket& rtcpPacket,
                       RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleRPSI(RTCPUtility::RTCPParserV2& rtcpParser,
                    RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandlePsfbApp(RTCPUtility::RTCPParserV2& rtcpParser,
                       RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleREMBItem(RTCPUtility::RTCPParserV2& rtcpParser,
                        RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleIJ(RTCPUtility::RTCPParserV2& rtcpParser,
                  RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleIJItem(const RTCPUtility::RTCPPacket& rtcpPacket,
                      RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleTMMBR(RTCPUtility::RTCPParserV2& rtcpParser,
                     RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleTMMBRItem(RTCPHelp::RTCPReceiveInformation& receiveInfo,
                         const RTCPUtility::RTCPPacket& rtcpPacket,
                         RTCPHelp::RTCPPacketInformation& rtcpPacketInformation,
                         const WebRtc_UWord32 senderSSRC);

    void HandleTMMBN(RTCPUtility::RTCPParserV2& rtcpParser);

    void HandleSR_REQ(RTCPUtility::RTCPParserV2& rtcpParser,
                      RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleTMMBNItem(RTCPHelp::RTCPReceiveInformation& receiveInfo,
                         const RTCPUtility::RTCPPacket& rtcpPacket);

    void HandleFIR(RTCPUtility::RTCPParserV2& rtcpParser,
                   RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleFIRItem(RTCPHelp::RTCPReceiveInformation& receiveInfo,
                       const RTCPUtility::RTCPPacket& rtcpPacket,
                       RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleAPP(RTCPUtility::RTCPParserV2& rtcpParser,
                   RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

    void HandleAPPItem(RTCPUtility::RTCPParserV2& rtcpParser,
                       RTCPHelp::RTCPPacketInformation& rtcpPacketInformation);

 private:
  WebRtc_Word32           _id;
  RtpRtcpClock&           _clock;
  RTCPMethod              _method;
  WebRtc_UWord32          _lastReceived;
  ModuleRtpRtcpImpl&      _rtpRtcp;

  CriticalSectionWrapper* _criticalSectionFeedbacks;
  RtcpFeedback*           _cbRtcpFeedback;
  RtpVideoFeedback*       _cbVideoFeedback;

  CriticalSectionWrapper* _criticalSectionRTCPReceiver;
  WebRtc_UWord32          _SSRC;
  WebRtc_UWord32          _remoteSSRC;

  // Received send report
  RTCPSenderInfo _remoteSenderInfo;
  // when did we receive the last send report
  WebRtc_UWord32 _lastReceivedSRNTPsecs;
  WebRtc_UWord32 _lastReceivedSRNTPfrac;

  // Received report blocks.
  std::map<WebRtc_UWord32, RTCPHelp::RTCPReportBlockInformation*>
      _receivedReportBlockMap;
  std::map<WebRtc_UWord32, RTCPHelp::RTCPReceiveInformation*>
      _receivedInfoMap;
  std::map<WebRtc_UWord32, RTCPUtility::RTCPCnameInformation*>
      _receivedCnameMap;

  WebRtc_UWord32            _packetTimeOutMS;

  // Externally set RTT. This value can only be used if there are no valid
  // RTT estimates.
  WebRtc_UWord16 _rtt;

};
} // namespace webrtc
#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_RECEIVER_H_
