// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_CAST_NET_RTP_RTP_PARSER_H_
#define MEDIA_CAST_NET_RTP_RTP_PARSER_H_

#include <stddef.h>
#include <stdint.h>

#include "base/macros.h"
#include "media/cast/net/cast_transport_defines.h"
#include "media/cast/net/rtp/rtp_defines.h"

namespace media {
namespace cast {

// TODO(miu): RtpParser and RtpPacketizer should be consolidated into a single
// module that handles all RTP/Cast packet serialization and deserialization
// throughout the media/cast library.
class RtpParser {
 public:
  RtpParser(uint32_t expected_sender_ssrc, uint8_t expected_payload_type);

  RtpParser(const RtpParser&) = delete;
  RtpParser& operator=(const RtpParser&) = delete;

  virtual ~RtpParser();

  // Parses the |packet|, expecting an RTP header along with a Cast header at
  // the beginning of the the RTP payload.  This method populates the structure
  // pointed to by |rtp_header| and sets the |payload_data| pointer and
  // |payload_size| to the memory region within |packet| containing the Cast
  // payload data.  Returns false if the data appears to be invalid, is not from
  // the expected sender (as identified by the SSRC field), or is not the
  // expected payload type.
  bool ParsePacket(const uint8_t* packet,
                   size_t length,
                   RtpCastHeader* rtp_header,
                   const uint8_t** payload_data,
                   size_t* payload_size);

  static bool ParseSsrc(const uint8_t* packet, size_t length, uint32_t* ssrc);

 private:
  const uint32_t expected_sender_ssrc_;
  const uint8_t expected_payload_type_;

  // Tracks recently-parsed values so that the truncated values can be
  // re-expanded into full-form.
  RtpTimeTicks last_parsed_rtp_timestamp_;
  FrameId last_parsed_frame_id_;
};

}  // namespace cast
}  // namespace media

#endif  // MEDIA_CAST_NET_RTP_RTP_PARSER_H_
