winlin

add utest for bug #98

@@ -564,3 +564,96 @@ VOID TEST(ProtocolStackTest, ProtocolBytes) @@ -564,3 +564,96 @@ VOID TEST(ProtocolStackTest, ProtocolBytes)
564 EXPECT_TRUE(0 < proto.get_send_bytes()); 564 EXPECT_TRUE(0 < proto.get_send_bytes());
565 } 565 }
566 566
  567 +VOID TEST(ProtocolStackTest, ProtocolRecvMessage)
  568 +{
  569 + MockBufferIO bio;
  570 + SrsProtocol proto(&bio);
  571 +
  572 + // packet is SrsConnectAppPacket
  573 + char data[] = {
  574 + // 12bytes header, 1byts chunk header, 11bytes msg heder
  575 + (char)0x03, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x01, (char)0xa1, (char)0x14, (char)0x00, (char)0x00, (char)0x00, (char)0x00,
  576 + // msg payload start
  577 + (char)0x02, (char)0x00, (char)0x07, (char)0x63,
  578 + (char)0x6f, (char)0x6e, (char)0x6e, (char)0x65, (char)0x63, (char)0x74, (char)0x00, (char)0x3f, (char)0xf0, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x03,
  579 + (char)0x00, (char)0x03, (char)0x61, (char)0x70, (char)0x70, (char)0x02, (char)0x00, (char)0x04, (char)0x6c, (char)0x69, (char)0x76, (char)0x65, (char)0x00, (char)0x08, (char)0x66, (char)0x6c,
  580 + (char)0x61, (char)0x73, (char)0x68, (char)0x56, (char)0x65, (char)0x72, (char)0x02, (char)0x00, (char)0x0d, (char)0x57, (char)0x49, (char)0x4e, (char)0x20, (char)0x31, (char)0x32, (char)0x2c,
  581 + (char)0x30, (char)0x2c, (char)0x30, (char)0x2c, (char)0x34, (char)0x31, (char)0x00, (char)0x06, (char)0x73, (char)0x77, (char)0x66, (char)0x55, (char)0x72, (char)0x6c, (char)0x02, (char)0x00,
  582 + (char)0x51, (char)0x68, (char)0x74, (char)0x74, (char)0x70, (char)0x3a, (char)0x2f, (char)0x2f, (char)0x77, (char)0x77, (char)0x77, (char)0x2e, (char)0x6f, (char)0x73, (char)0x73, (char)0x72,
  583 + (char)0x73, (char)0x2e, (char)0x6e, (char)0x65, (char)0x74, (char)0x3a, (char)0x38, (char)0x30, (char)0x38, (char)0x35, (char)0x2f, (char)0x70, (char)0x6c, (char)0x61, (char)0x79, (char)0x65,
  584 + (char)0x72, (char)0x73, (char)0x2f, (char)0x73, (char)0x72, (char)0x73, (char)0x5f, (char)0x70, (char)0x6c, (char)0x61, (char)0x79, (char)0x65, (char)0x72, (char)0x2f, (char)0x72, (char)0x65,
  585 + (char)0x6c, (char)0x65, (char)0x61, (char)0x73, (char)0x65, (char)0x2f, (char)0x73, (char)0x72, (char)0x73, (char)0x5f, (char)0x70, (char)0x6c,
  586 + (char)0xC3, /*next chunk.*/ (char)0x61, (char)0x79, (char)0x65, (char)0x72,
  587 + (char)0x2e, (char)0x73, (char)0x77, (char)0x66, (char)0x3f, (char)0x5f, (char)0x76, (char)0x65, (char)0x72, (char)0x73, (char)0x69, (char)0x6f, (char)0x6e, (char)0x3d, (char)0x31, (char)0x2e,
  588 + (char)0x32, (char)0x33, (char)0x00, (char)0x05, (char)0x74, (char)0x63, (char)0x55, (char)0x72, (char)0x6c, (char)0x02, (char)0x00, (char)0x14, (char)0x72, (char)0x74, (char)0x6d, (char)0x70,
  589 + (char)0x3a, (char)0x2f, (char)0x2f, (char)0x64, (char)0x65, (char)0x76, (char)0x3a, (char)0x31, (char)0x39, (char)0x33, (char)0x35, (char)0x2f, (char)0x6c, (char)0x69, (char)0x76, (char)0x65,
  590 + (char)0x00, (char)0x04, (char)0x66, (char)0x70, (char)0x61, (char)0x64, (char)0x01, (char)0x00, (char)0x00, (char)0x0c, (char)0x63, (char)0x61, (char)0x70, (char)0x61, (char)0x62, (char)0x69,
  591 + (char)0x6c, (char)0x69, (char)0x74, (char)0x69, (char)0x65, (char)0x73, (char)0x00, (char)0x40, (char)0x6d, (char)0xe0, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00,
  592 + (char)0x0b, (char)0x61, (char)0x75, (char)0x64, (char)0x69, (char)0x6f, (char)0x43, (char)0x6f, (char)0x64, (char)0x65, (char)0x63, (char)0x73, (char)0x00, (char)0x40, (char)0xab, (char)0xee,
  593 + (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x0b, (char)0x76, (char)0x69, (char)0x64, (char)0x65, (char)0x6f, (char)0x43, (char)0x6f, (char)0x64, (char)0x65,
  594 + (char)0x63, (char)0x73, (char)0x00, (char)0x40, (char)0x6f, (char)0x80, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00,
  595 + (char)0xC3, /*next chunk.*/ (char)0x0d, (char)0x76, (char)0x69, (char)0x64,
  596 + (char)0x65, (char)0x6f, (char)0x46, (char)0x75, (char)0x6e, (char)0x63, (char)0x74, (char)0x69, (char)0x6f, (char)0x6e, (char)0x00, (char)0x3f, (char)0xf0, (char)0x00, (char)0x00, (char)0x00,
  597 + (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x07, (char)0x70, (char)0x61, (char)0x67, (char)0x65, (char)0x55, (char)0x72, (char)0x6c, (char)0x02, (char)0x00, (char)0x62, (char)0x68,
  598 + (char)0x74, (char)0x74, (char)0x70, (char)0x3a, (char)0x2f, (char)0x2f, (char)0x77, (char)0x77, (char)0x77, (char)0x2e, (char)0x6f, (char)0x73, (char)0x73, (char)0x72, (char)0x73, (char)0x2e,
  599 + (char)0x6e, (char)0x65, (char)0x74, (char)0x3a, (char)0x38, (char)0x30, (char)0x38, (char)0x35, (char)0x2f, (char)0x70, (char)0x6c, (char)0x61, (char)0x79, (char)0x65, (char)0x72, (char)0x73,
  600 + (char)0x2f, (char)0x73, (char)0x72, (char)0x73, (char)0x5f, (char)0x70, (char)0x6c, (char)0x61, (char)0x79, (char)0x65, (char)0x72, (char)0x2e, (char)0x68, (char)0x74, (char)0x6d, (char)0x6c,
  601 + (char)0x3f, (char)0x76, (char)0x68, (char)0x6f, (char)0x73, (char)0x74, (char)0x3d, (char)0x64, (char)0x65, (char)0x76, (char)0x26, (char)0x73, (char)0x74, (char)0x72, (char)0x65, (char)0x61,
  602 + (char)0x6d, (char)0x3d, (char)0x6c, (char)0x69, (char)0x76, (char)0x65, (char)0x73, (char)0x74, (char)0x72, (char)0x65, (char)0x61, (char)0x6d, (char)0x26, (char)0x73, (char)0x65, (char)0x72,
  603 + (char)0x76, (char)0x65, (char)0x72, (char)0x3d, (char)0x64, (char)0x65, (char)0x76, (char)0x26, (char)0x70, (char)0x6f, (char)0x72, (char)0x74,
  604 + (char)0xC3, /*next chunk.*/ (char)0x3d, (char)0x31, (char)0x39, (char)0x33,
  605 + (char)0x35, (char)0x00, (char)0x0e, (char)0x6f, (char)0x62, (char)0x6a, (char)0x65, (char)0x63, (char)0x74, (char)0x45, (char)0x6e, (char)0x63, (char)0x6f, (char)0x64, (char)0x69, (char)0x6e,
  606 + (char)0x67, (char)0x00, (char)0x40, (char)0x08, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x09
  607 + };
  608 + bio.in_buffer.append(data, sizeof(data));
  609 +
  610 + SrsMessage* msg = NULL;
  611 + ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg));
  612 + SrsAutoFree(SrsMessage, msg);
  613 +
  614 + SrsPacket* pkt = NULL;
  615 + EXPECT_TRUE(ERROR_SUCCESS == proto.decode_message(msg, &pkt));
  616 + SrsAutoFree(SrsPacket, pkt);
  617 +
  618 + SrsConnectAppPacket* spkt = dynamic_cast<SrsConnectAppPacket*>(pkt);
  619 + ASSERT_TRUE(NULL != spkt);
  620 +}
  621 +
  622 +// for librtmp, if ping, it will send a fresh stream with fmt=1,
  623 +// 0x42 where: fmt=1, cid=2, protocol contorl user-control message
  624 +// 0x00 0x00 0x00 where: timestamp=0
  625 +// 0x00 0x00 0x06 where: payload_length=6
  626 +// 0x04 where: message_type=4(protocol control user-control message)
  627 +// 0x00 0x06 where: event Ping(0x06)
  628 +// 0x00 0x00 0x0d 0x0f where: event data 4bytes ping timestamp.
  629 +// @see: https://github.com/winlinvip/simple-rtmp-server/issues/98
  630 +VOID TEST(ProtocolStackTest, ProtocolRecvMessageBug98)
  631 +{
  632 + MockBufferIO bio;
  633 + SrsProtocol proto(&bio);
  634 +
  635 + // packet is SrsConnectAppPacket
  636 + char data[] = {
  637 + (char)0x42, // 1bytes chunk header
  638 + (char)0x00, (char)0x00, (char)0x00, // timestamp=0
  639 + (char)0x00, (char)0x00, (char)0x06, // payload_length=6
  640 + (char)0x04, // message_type=4(protocol control user-control message)
  641 + (char)0x00, (char)0x06, // event Ping(0x06)
  642 + (char)0x00, (char)0x00, (char)0x0d, (char)0x0f // event data 4bytes ping timestamp.
  643 + };
  644 + bio.in_buffer.append(data, sizeof(data));
  645 +
  646 + SrsMessage* msg = NULL;
  647 + ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg));
  648 + SrsAutoFree(SrsMessage, msg);
  649 +
  650 + SrsPacket* pkt = NULL;
  651 + EXPECT_TRUE(ERROR_SUCCESS == proto.decode_message(msg, &pkt));
  652 + SrsAutoFree(SrsPacket, pkt);
  653 +
  654 + SrsUserControlPacket* spkt = dynamic_cast<SrsUserControlPacket*>(pkt);
  655 + ASSERT_TRUE(NULL != spkt);
  656 + EXPECT_EQ(SrcPCUCPingRequest, spkt->event_type);
  657 + EXPECT_EQ(0x0d0f, spkt->event_data);
  658 +}
  659 +