GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_with_padding)
+{
+ /* Compound packet with padding in the last packet. Padding is included in
+ * the length of the last packet. */
+ guint8 rtcp_pkt[] = {
+ 0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x4d, 0x16, 0xaf, 0x14,
+ 0x10, 0x1f, 0xd9, 0x91,
+ 0x0f, 0xb7, 0x50, 0x88,
+ 0x3b, 0x79, 0x31, 0x50,
+ 0xbe, 0x19, 0x12, 0xa8,
+ 0xbb, 0xce, 0x9e, 0x3e,
+ 0xA0, 0xCA, 0x00, 0x0A, /* P=1, Type SDES, length = 10 (includes padding) */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+ 0x00, 0x00, 0x00, 0x04 /* RTCP padding */
+ };
+
+ fail_unless (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_with_padding_wrong_padlength)
+{
+ /* Compound packet with padding in the last packet. Padding is included in
+ * the length of the last packet. */
+ guint8 rtcp_pkt[] = {
+ 0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x4d, 0x16, 0xaf, 0x14,
+ 0x10, 0x1f, 0xd9, 0x91,
+ 0x0f, 0xb7, 0x50, 0x88,
+ 0x3b, 0x79, 0x31, 0x50,
+ 0xbe, 0x19, 0x12, 0xa8,
+ 0xbb, 0xce, 0x9e, 0x3e,
+ 0xA0, 0xCA, 0x00, 0x0A, /* P=1, Type SDES, length = 10 (includes padding) */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+ 0x00, 0x00, 0x00, 0x03 /* RTCP padding (wrong length) */
+ };
+
+ fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_with_padding_excluded_from_length)
+{
+ /* Compound packet with padding in the last packet. Padding is not included
+ * in the length. */
+ guint8 rtcp_pkt[] = {
+ 0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x4d, 0x16, 0xaf, 0x14,
+ 0x10, 0x1f, 0xd9, 0x91,
+ 0x0f, 0xb7, 0x50, 0x88,
+ 0x3b, 0x79, 0x31, 0x50,
+ 0xbe, 0x19, 0x12, 0xa8,
+ 0xbb, 0xce, 0x9e, 0x3e,
+ 0xA0, 0xCA, 0x00, 0x09, /* P=1, Type SDES, length = 9 (excludes padding) */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+ 0x00, 0x00, 0x00, 0x04 /* RTCP padding */
+ };
+
+ fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_with_padding_set_in_first_packet)
+{
+ /* Compound packet with padding in the last packet but with the pad
+ bit set on first packet */
+ guint8 rtcp_pkt[] = {
+ 0xA0, 0xC9, 0x00, 0x07, /* P=1, Type RR, length = 7 */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x4d, 0x16, 0xaf, 0x14,
+ 0x10, 0x1f, 0xd9, 0x91,
+ 0x0f, 0xb7, 0x50, 0x88,
+ 0x3b, 0x79, 0x31, 0x50,
+ 0xbe, 0x19, 0x12, 0xa8,
+ 0xbb, 0xce, 0x9e, 0x3e,
+ 0x80, 0xCA, 0x00, 0x0a, /* Type SDES, length = 10 (include padding) */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+ 0x00, 0x00, 0x00, 0x04 /* RTCP padding */
+ };
+
+ fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_reduced_without_padding)
+{
+ /* Reduced size packet without padding */
+ guint8 rtcp_pkt[] = {
+ 0x80, 0xcd, 0x00, 0x07, /* Type FB, length = 8 */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x4d, 0x16, 0xaf, 0x14,
+ 0x10, 0x1f, 0xd9, 0x91,
+ 0x0f, 0xb7, 0x50, 0x88,
+ 0x3b, 0x79, 0x31, 0x50,
+ 0xbe, 0x19, 0x12, 0xa8,
+ 0xbb, 0xce, 0x9e, 0x3e,
+ };
+
+ fail_unless (gst_rtcp_buffer_validate_data_reduced (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_reduced_with_padding)
+{
+ /* Reduced size packet with padding. */
+ guint8 rtcp_pkt[] = {
+ 0xA0, 0xcd, 0x00, 0x08, /* P=1, Type FB, length = 8 */
+ 0x97, 0x6d, 0x21, 0x6a,
+ 0x4d, 0x16, 0xaf, 0x14,
+ 0x10, 0x1f, 0xd9, 0x91,
+ 0x0f, 0xb7, 0x50, 0x88,
+ 0x3b, 0x79, 0x31, 0x50,
+ 0xbe, 0x19, 0x12, 0xa8,
+ 0xbb, 0xce, 0x9e, 0x3e,
+ 0x00, 0x00, 0x00, 0x04 /* RTCP padding */
+ };
+
+ fail_if (gst_rtcp_buffer_validate_data_reduced (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
GST_START_TEST (test_rtp_ntp64_extension)
{
GstBuffer *buf;
tcase_add_test (tc_chain, test_rtcp_buffer);
tcase_add_test (tc_chain, test_rtcp_reduced_buffer);
+ tcase_add_test (tc_chain, test_rtcp_validate_with_padding);
+ tcase_add_test (tc_chain, test_rtcp_validate_with_padding_wrong_padlength);
+ tcase_add_test (tc_chain, test_rtcp_validate_with_padding_excluded_from_length);
+ tcase_add_test (tc_chain, test_rtcp_validate_with_padding_set_in_first_packet);
+ tcase_add_test (tc_chain, test_rtcp_validate_reduced_without_padding);
+ tcase_add_test (tc_chain, test_rtcp_validate_reduced_with_padding);
tcase_add_test (tc_chain, test_rtp_ntp64_extension);
tcase_add_test (tc_chain, test_rtp_ntp56_extension);