正在显示
1 个修改的文件
包含
93 行增加
和
0 行删除
| @@ -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 | + |
-
请 注册 或 登录 后发表评论