diff --git a/trunk/src/kernel/srs_kernel_stream.cpp b/trunk/src/kernel/srs_kernel_stream.cpp index 9873ced63..cec9f3d9a 100755 --- a/trunk/src/kernel/srs_kernel_stream.cpp +++ b/trunk/src/kernel/srs_kernel_stream.cpp @@ -68,3 +68,8 @@ void SrsSimpleStream::append(const char* bytes, int size) data.insert(data.end(), bytes, bytes + size); } + +void SrsSimpleStream::append(SrsSimpleStream* src) +{ + append(src->bytes(), src->length()); +} diff --git a/trunk/src/kernel/srs_kernel_stream.hpp b/trunk/src/kernel/srs_kernel_stream.hpp index 699673076..67e57ccb5 100644 --- a/trunk/src/kernel/srs_kernel_stream.hpp +++ b/trunk/src/kernel/srs_kernel_stream.hpp @@ -63,6 +63,7 @@ public: * @remark assert size is positive. */ virtual void append(const char* bytes, int size); + virtual void append(SrsSimpleStream* src); }; #endif diff --git a/trunk/src/utest/srs_utest_protostack.cpp b/trunk/src/utest/srs_utest_protostack.cpp index 0f0b8021a..64a0ce711 100644 --- a/trunk/src/utest/srs_utest_protostack.cpp +++ b/trunk/src/utest/srs_utest_protostack.cpp @@ -418,7 +418,7 @@ VOID TEST(ProtoStackTest, OnDecodeMessages) { srs_error_t err; - vector bytes; + SrsSimpleStream bytes; if (true) { MockBufferIO io; @@ -428,7 +428,7 @@ VOID TEST(ProtoStackTest, OnDecodeMessages) pkt->chunk_size = 0; HELPER_EXPECT_SUCCESS(p.send_and_free_packet(pkt, 1)); - bytes.assign(io.out_buffer.bytes(), io.out_buffer.bytes() + io.out_buffer.length()); + bytes.append(&io.out_buffer); } if (true) { @@ -439,7 +439,7 @@ VOID TEST(ProtoStackTest, OnDecodeMessages) HELPER_EXPECT_SUCCESS(p.set_in_window_ack_size(1)); SrsCommonMessage* msg; - io.in_buffer.append(bytes.data(), bytes.size()); + io.in_buffer.append(&bytes); HELPER_EXPECT_FAILED(p.recv_message(&msg)); srs_freep(msg); } @@ -1225,3 +1225,43 @@ VOID TEST(ProtoStackTest, RecvMessage3) } } +VOID TEST(ProtoStackTest, RecvMessage4) +{ + srs_error_t err; + + if (true) { + MockBufferIO io; + SrsProtocol p(&io); + + SrsSetChunkSizePacket* pkt = new SrsSetChunkSizePacket(); + pkt->chunk_size = 256; + HELPER_EXPECT_SUCCESS(p.send_and_free_packet(pkt, 0)); + + io.in_buffer.append(&io.out_buffer); + + SrsCommonMessage* msg; + SrsAutoFree(SrsCommonMessage, msg); + HELPER_EXPECT_SUCCESS(p.recv_message(&msg)); + + EXPECT_EQ(256, p.out_chunk_size); + } + + if (true) { + MockBufferIO io; + SrsProtocol p(&io); + + SrsUserControlPacket* pkt = new SrsUserControlPacket(); + pkt->event_type = SrcPCUCSetBufferLength; + pkt->extra_data = 256; + HELPER_EXPECT_SUCCESS(p.send_and_free_packet(pkt, 0)); + + io.in_buffer.append(&io.out_buffer); + + SrsCommonMessage* msg; + SrsAutoFree(SrsCommonMessage, msg); + HELPER_EXPECT_SUCCESS(p.recv_message(&msg)); + + EXPECT_EQ(256, p.in_buffer_length); + } +} +