From f9b9a60de701bf80c1caeeb2e542210d12b62500 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 5 Dec 2014 23:03:52 +0800 Subject: [PATCH] for bug #251, remove the SrsMessage, use SrsCommonMessage or SrsSharedPtrMessage. 2.0.60 --- trunk/src/app/srs_app_bandwidth.cpp | 8 +- trunk/src/app/srs_app_edge.cpp | 12 +- trunk/src/app/srs_app_edge.hpp | 8 +- trunk/src/app/srs_app_forward.cpp | 2 +- trunk/src/app/srs_app_recv_thread.cpp | 14 +- trunk/src/app/srs_app_recv_thread.hpp | 12 +- trunk/src/app/srs_app_rtmp_conn.cpp | 12 +- trunk/src/app/srs_app_rtmp_conn.hpp | 8 +- trunk/src/app/srs_app_source.cpp | 14 +- trunk/src/app/srs_app_source.hpp | 16 +- trunk/src/core/srs_core.hpp | 2 +- trunk/src/libs/srs_lib_bandwidth.cpp | 8 +- trunk/src/libs/srs_librtmp.cpp | 4 +- trunk/src/qt/srs/srs-qt.pro.user | 2 +- trunk/src/rtmp/srs_protocol_msg_array.cpp | 4 +- trunk/src/rtmp/srs_protocol_msg_array.hpp | 4 +- trunk/src/rtmp/srs_protocol_rtmp.cpp | 52 ++-- trunk/src/rtmp/srs_protocol_rtmp.hpp | 24 +- trunk/src/rtmp/srs_protocol_stack.cpp | 263 ++++++++-------- trunk/src/rtmp/srs_protocol_stack.hpp | 194 ++++++------ trunk/src/utest/srs_utest_protocol.cpp | 348 +++++++++++----------- 21 files changed, 502 insertions(+), 509 deletions(-) diff --git a/trunk/src/app/srs_app_bandwidth.cpp b/trunk/src/app/srs_app_bandwidth.cpp index c065f64eb..db90787e4 100644 --- a/trunk/src/app/srs_app_bandwidth.cpp +++ b/trunk/src/app/srs_app_bandwidth.cpp @@ -94,12 +94,12 @@ int _srs_expect_bandwidth_packet(SrsRtmpServer* rtmp, _CheckPacketType pfn) int ret = ERROR_SUCCESS; while (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsBandwidthPacket* pkt = NULL; if ((ret = rtmp->expect_message(&msg, &pkt)) != ERROR_SUCCESS) { return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsBandwidthPacket, pkt); srs_info("get bwtc message success."); @@ -380,12 +380,12 @@ int SrsBandwidth::publish_checking(SrsBandwidthSample* sample, SrsKbpsLimit* lim srs_update_system_time_ms(); int64_t starttime = srs_get_system_time_ms(); while ((srs_get_system_time_ms() - starttime) < sample->duration_ms) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsBandwidthPacket* pkt = NULL; if ((ret = _rtmp->expect_message(&msg, &pkt)) != ERROR_SUCCESS) { return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsBandwidthPacket, pkt); srs_info("get publish message success."); diff --git a/trunk/src/app/srs_app_edge.cpp b/trunk/src/app/srs_app_edge.cpp index 37d9ef941..587c8d499 100644 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -183,7 +183,7 @@ int SrsEdgeIngester::ingest() } // read from client. - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; if ((ret = client->recv_message(&msg)) != ERROR_SUCCESS) { if (!srs_is_client_gracefully_close(ret)) { srs_error("pull origin server message failed. ret=%d", ret); @@ -193,7 +193,7 @@ int SrsEdgeIngester::ingest() srs_verbose("edge loop recv message. ret=%d", ret); srs_assert(msg); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); if ((ret = process_publish_message(msg)) != ERROR_SUCCESS) { return ret; @@ -256,7 +256,7 @@ int SrsEdgeIngester::connect_app(string ep_server, string ep_port) return ret; } -int SrsEdgeIngester::process_publish_message(SrsMessage* msg) +int SrsEdgeIngester::process_publish_message(SrsCommonMessage* msg) { int ret = ERROR_SUCCESS; @@ -485,7 +485,7 @@ int SrsEdgeForwarder::cycle() // read from client. if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ret = client->recv_message(&msg); srs_verbose("edge loop recv message. ret=%d", ret); @@ -534,7 +534,7 @@ int SrsEdgeForwarder::cycle() return ret; } -int SrsEdgeForwarder::proxy(SrsMessage* msg) +int SrsEdgeForwarder::proxy(SrsCommonMessage* msg) { int ret = ERROR_SUCCESS; @@ -825,7 +825,7 @@ int SrsPublishEdge::on_client_publish() return ret; } -int SrsPublishEdge::on_proxy_publish(SrsMessage* msg) +int SrsPublishEdge::on_proxy_publish(SrsCommonMessage* msg) { return forwarder->proxy(msg); } diff --git a/trunk/src/app/srs_app_edge.hpp b/trunk/src/app/srs_app_edge.hpp index d81e09723..ee2278f36 100644 --- a/trunk/src/app/srs_app_edge.hpp +++ b/trunk/src/app/srs_app_edge.hpp @@ -42,7 +42,7 @@ class SrsRequest; class SrsPlayEdge; class SrsPublishEdge; class SrsRtmpClient; -class SrsMessage; +class SrsCommonMessage; class SrsMessageQueue; class ISrsProtocolReaderWriter; class SrsKbps; @@ -104,7 +104,7 @@ private: virtual void close_underlayer_socket(); virtual int connect_server(std::string& ep_server, std::string& ep_port); virtual int connect_app(std::string ep_server, std::string ep_port); - virtual int process_publish_message(SrsMessage* msg); + virtual int process_publish_message(SrsCommonMessage* msg); }; /** @@ -148,7 +148,7 @@ public: public: virtual int cycle(); public: - virtual int proxy(SrsMessage* msg); + virtual int proxy(SrsCommonMessage* msg); private: virtual void close_underlayer_socket(); virtual int connect_server(std::string& ep_server, std::string& ep_port); @@ -214,7 +214,7 @@ public: /** * proxy publish stream to edge */ - virtual int on_proxy_publish(SrsMessage* msg); + virtual int on_proxy_publish(SrsCommonMessage* msg); /** * proxy unpublish stream to edge. */ diff --git a/trunk/src/app/srs_app_forward.cpp b/trunk/src/app/srs_app_forward.cpp index 52b62256b..134fc083b 100644 --- a/trunk/src/app/srs_app_forward.cpp +++ b/trunk/src/app/srs_app_forward.cpp @@ -404,7 +404,7 @@ int SrsForwarder::forward() // read from client. if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ret = client->recv_message(&msg); srs_verbose("play loop recv message. ret=%d", ret); diff --git a/trunk/src/app/srs_app_recv_thread.cpp b/trunk/src/app/srs_app_recv_thread.cpp index 5ff6de528..10b482f53 100644 --- a/trunk/src/app/srs_app_recv_thread.cpp +++ b/trunk/src/app/srs_app_recv_thread.cpp @@ -81,7 +81,7 @@ int SrsRecvThread::cycle() continue; } - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; // recv and handle message ret = rtmp->recv_message(&msg); @@ -145,9 +145,9 @@ SrsQueueRecvThread::~SrsQueueRecvThread() trd.stop(); // clear all messages. - std::vector::iterator it; + std::vector::iterator it; for (it = queue.begin(); it != queue.end(); ++it) { - SrsMessage* msg = *it; + SrsCommonMessage* msg = *it; srs_freep(msg); } queue.clear(); @@ -173,11 +173,11 @@ int SrsQueueRecvThread::size() return (int)queue.size(); } -SrsMessage* SrsQueueRecvThread::pump() +SrsCommonMessage* SrsQueueRecvThread::pump() { srs_assert(!queue.empty()); - SrsMessage* msg = *queue.begin(); + SrsCommonMessage* msg = *queue.begin(); queue.erase(queue.begin()); @@ -198,7 +198,7 @@ bool SrsQueueRecvThread::can_handle() return empty(); } -int SrsQueueRecvThread::handle(SrsMessage* msg) +int SrsQueueRecvThread::handle(SrsCommonMessage* msg) { // put into queue, the send thread will get and process it, // @see SrsRtmpConn::process_play_control_msg @@ -335,7 +335,7 @@ bool SrsPublishRecvThread::can_handle() return true; } -int SrsPublishRecvThread::handle(SrsMessage* msg) +int SrsPublishRecvThread::handle(SrsCommonMessage* msg) { int ret = ERROR_SUCCESS; diff --git a/trunk/src/app/srs_app_recv_thread.hpp b/trunk/src/app/srs_app_recv_thread.hpp index 125a16e67..957c8d85b 100644 --- a/trunk/src/app/srs_app_recv_thread.hpp +++ b/trunk/src/app/srs_app_recv_thread.hpp @@ -38,7 +38,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include class SrsRtmpServer; -class SrsMessage; +class SrsCommonMessage; class SrsRtmpConn; class SrsSource; class SrsRequest; @@ -62,7 +62,7 @@ public: /** * process the received message. */ - virtual int handle(SrsMessage* msg) = 0; + virtual int handle(SrsCommonMessage* msg) = 0; /** * when recv message error. */ @@ -107,7 +107,7 @@ public: class SrsQueueRecvThread : public ISrsMessageHandler { private: - std::vector queue; + std::vector queue; SrsRecvThread trd; SrsRtmpServer* rtmp; // the recv thread error code. @@ -121,11 +121,11 @@ public: public: virtual bool empty(); virtual int size(); - virtual SrsMessage* pump(); + virtual SrsCommonMessage* pump(); virtual int error_code(); public: virtual bool can_handle(); - virtual int handle(SrsMessage* msg); + virtual int handle(SrsCommonMessage* msg); virtual void on_recv_error(int ret); public: virtual void on_thread_start(); @@ -183,7 +183,7 @@ public: // interface ISrsMessageHandler public: virtual bool can_handle(); - virtual int handle(SrsMessage* msg); + virtual int handle(SrsCommonMessage* msg); virtual void on_recv_error(int ret); // interface IMergeReadHandler public: diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index 263e1a3f2..3e5424ba4 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -576,7 +576,7 @@ int SrsRtmpConn::do_playing(SrsSource* source, SrsQueueRecvThread* trd) // @see: https://github.com/winlinvip/simple-rtmp-server/issues/196 // @see: https://github.com/winlinvip/simple-rtmp-server/issues/217 while (!trd->empty()) { - SrsMessage* msg = trd->pump(); + SrsCommonMessage* msg = trd->pump(); srs_verbose("pump client message to process."); if ((ret = process_play_control_msg(consumer, msg)) != ERROR_SUCCESS) { @@ -628,7 +628,7 @@ int SrsRtmpConn::do_playing(SrsSource* source, SrsQueueRecvThread* trd) // we start to collect the durations for each message. if (user_specified_duration_to_stop) { for (int i = 0; i < count; i++) { - SrsMessage* msg = msgs.msgs[i]; + SrsSharedPtrMessage* msg = msgs.msgs[i]; // foreach msg, collect the duration. // @remark: never use msg when sent it, for the protocol sdk will free it. @@ -806,7 +806,7 @@ int SrsRtmpConn::do_publishing(SrsSource* source, SrsPublishRecvThread* trd) return ret; } -int SrsRtmpConn::handle_publish_message(SrsSource* source, SrsMessage* msg, bool is_fmle, bool vhost_is_edge) +int SrsRtmpConn::handle_publish_message(SrsSource* source, SrsCommonMessage* msg, bool is_fmle, bool vhost_is_edge) { int ret = ERROR_SUCCESS; @@ -850,7 +850,7 @@ int SrsRtmpConn::handle_publish_message(SrsSource* source, SrsMessage* msg, bool return ret; } -int SrsRtmpConn::process_publish_message(SrsSource* source, SrsMessage* msg, bool vhost_is_edge) +int SrsRtmpConn::process_publish_message(SrsSource* source, SrsCommonMessage* msg, bool vhost_is_edge) { int ret = ERROR_SUCCESS; @@ -915,7 +915,7 @@ int SrsRtmpConn::process_publish_message(SrsSource* source, SrsMessage* msg, boo return ret; } -int SrsRtmpConn::process_play_control_msg(SrsConsumer* consumer, SrsMessage* msg) +int SrsRtmpConn::process_play_control_msg(SrsConsumer* consumer, SrsCommonMessage* msg) { int ret = ERROR_SUCCESS; @@ -923,7 +923,7 @@ int SrsRtmpConn::process_play_control_msg(SrsConsumer* consumer, SrsMessage* msg srs_verbose("ignore all empty message."); return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); if (!msg->header.is_amf0_command() && !msg->header.is_amf3_command()) { srs_info("ignore all message except amf0/amf3 command."); diff --git a/trunk/src/app/srs_app_rtmp_conn.hpp b/trunk/src/app/srs_app_rtmp_conn.hpp index 3ecaf82ca..07c77e14d 100644 --- a/trunk/src/app/srs_app_rtmp_conn.hpp +++ b/trunk/src/app/srs_app_rtmp_conn.hpp @@ -40,7 +40,7 @@ class SrsResponse; class SrsSource; class SrsRefer; class SrsConsumer; -class SrsMessage; +class SrsCommonMessage; class SrsStSocket; #ifdef SRS_AUTO_HTTP_CALLBACK class SrsHttpHooks; @@ -101,9 +101,9 @@ private: virtual int fmle_publishing(SrsSource* source); virtual int flash_publishing(SrsSource* source); virtual int do_publishing(SrsSource* source, SrsPublishRecvThread* trd); - virtual int handle_publish_message(SrsSource* source, SrsMessage* msg, bool is_fmle, bool vhost_is_edge); - virtual int process_publish_message(SrsSource* source, SrsMessage* msg, bool vhost_is_edge); - virtual int process_play_control_msg(SrsConsumer* consumer, SrsMessage* msg); + virtual int handle_publish_message(SrsSource* source, SrsCommonMessage* msg, bool is_fmle, bool vhost_is_edge); + virtual int process_publish_message(SrsSource* source, SrsCommonMessage* msg, bool vhost_is_edge); + virtual int process_play_control_msg(SrsConsumer* consumer, SrsCommonMessage* msg); virtual void change_mw_sleep(int sleep_ms); private: virtual int check_edge_token_traverse_auth(); diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 549a3bde0..cec809e64 100644 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -208,7 +208,7 @@ int SrsMessageQueue::enqueue(SrsSharedPtrMessage* msg, bool* is_overflow) return ret; } -int SrsMessageQueue::dump_packets(int max_count, SrsMessage** pmsgs, int& count) +int SrsMessageQueue::dump_packets(int max_count, SrsSharedPtrMessage** pmsgs, int& count) { int ret = ERROR_SUCCESS; @@ -951,7 +951,7 @@ bool SrsSource::can_publish() return _can_publish; } -int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata) +int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata) { int ret = ERROR_SUCCESS; @@ -1072,7 +1072,7 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata) return ret; } -int SrsSource::on_audio(SrsMessage* __audio) +int SrsSource::on_audio(SrsCommonMessage* __audio) { int ret = ERROR_SUCCESS; @@ -1183,7 +1183,7 @@ int SrsSource::on_audio(SrsMessage* __audio) return ret; } -int SrsSource::on_video(SrsMessage* __video) +int SrsSource::on_video(SrsCommonMessage* __video) { int ret = ERROR_SUCCESS; @@ -1287,7 +1287,7 @@ int SrsSource::on_video(SrsMessage* __video) return ret; } -int SrsSource::on_aggregate(SrsMessage* msg) +int SrsSource::on_aggregate(SrsCommonMessage* msg) { int ret = ERROR_SUCCESS; @@ -1349,7 +1349,7 @@ int SrsSource::on_aggregate(SrsMessage* msg) // to common message. SrsCommonMessage __o; - SrsMessage& o = __o; + SrsCommonMessage& o = __o; o.header.message_type = type; o.header.payload_length = data_size; @@ -1570,7 +1570,7 @@ int SrsSource::on_edge_start_publish() return publish_edge->on_client_publish(); } -int SrsSource::on_edge_proxy_publish(SrsMessage* msg) +int SrsSource::on_edge_proxy_publish(SrsCommonMessage* msg) { return publish_edge->on_proxy_publish(msg); } diff --git a/trunk/src/app/srs_app_source.hpp b/trunk/src/app/srs_app_source.hpp index 023f6d388..ea135f683 100644 --- a/trunk/src/app/srs_app_source.hpp +++ b/trunk/src/app/srs_app_source.hpp @@ -41,7 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. class SrsPlayEdge; class SrsPublishEdge; class SrsSource; -class SrsMessage; +class SrsCommonMessage; class SrsOnMetaDataPacket; class SrsSharedPtrMessage; class SrsForwarder; @@ -139,11 +139,11 @@ public: virtual int enqueue(SrsSharedPtrMessage* msg, bool* is_overflow = NULL); /** * get packets in consumer queue. - * @pmsgs SrsMessages*[], used to store the msgs, user must alloc it. + * @pmsgs SrsCommonMessages*[], used to store the msgs, user must alloc it. * @count the count in array, output param. * @max_count the max count to dequeue, must be positive. */ - virtual int dump_packets(int max_count, SrsMessage** pmsgs, int& count); + virtual int dump_packets(int max_count, SrsSharedPtrMessage** pmsgs, int& count); private: /** * remove a gop from the front. @@ -395,10 +395,10 @@ public: // logic data methods public: virtual bool can_publish(); - virtual int on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata); - virtual int on_audio(SrsMessage* audio); - virtual int on_video(SrsMessage* video); - virtual int on_aggregate(SrsMessage* msg); + virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata); + virtual int on_audio(SrsCommonMessage* audio); + virtual int on_video(SrsCommonMessage* video); + virtual int on_aggregate(SrsCommonMessage* msg); /** * the pre-publish is we are very sure we are * trying to publish stream, please lock the resource, @@ -425,7 +425,7 @@ public: // for edge, when publish edge stream, check the state virtual int on_edge_start_publish(); // for edge, proxy the publish - virtual int on_edge_proxy_publish(SrsMessage* msg); + virtual int on_edge_proxy_publish(SrsCommonMessage* msg); // for edge, proxy stop publish virtual void on_edge_proxy_unpublish(); private: diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 14036f94a..214b49472 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 59 +#define VERSION_REVISION 60 // server info. #define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_ROLE "origin/edge server" diff --git a/trunk/src/libs/srs_lib_bandwidth.cpp b/trunk/src/libs/srs_lib_bandwidth.cpp index c3816293d..9bfb57064 100644 --- a/trunk/src/libs/srs_lib_bandwidth.cpp +++ b/trunk/src/libs/srs_lib_bandwidth.cpp @@ -67,12 +67,12 @@ int _srs_expect_bandwidth_packet(SrsRtmpClient* rtmp, _CheckPacketType pfn) int ret = ERROR_SUCCESS; while (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsBandwidthPacket* pkt = NULL; if ((ret = rtmp->expect_message(&msg, &pkt)) != ERROR_SUCCESS) { return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsBandwidthPacket, pkt); srs_info("get final message success."); @@ -88,12 +88,12 @@ int _srs_expect_bandwidth_packet2(SrsRtmpClient* rtmp, _CheckPacketType pfn, Srs int ret = ERROR_SUCCESS; while (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsBandwidthPacket* pkt = NULL; if ((ret = rtmp->expect_message(&msg, &pkt)) != ERROR_SUCCESS) { return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); srs_info("get final message success."); if (pfn(pkt)) { diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index 17fdb269c..a5c18e0ca 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -755,7 +755,7 @@ int srs_rtmp_read_packet(srs_rtmp_t rtmp, char* type, u_int32_t* timestamp, char Context* context = (Context*)rtmp; for (;;) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; if ((ret = context->rtmp->recv_message(&msg)) != ERROR_SUCCESS) { return ret; } @@ -763,7 +763,7 @@ int srs_rtmp_read_packet(srs_rtmp_t rtmp, char* type, u_int32_t* timestamp, char continue; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); if (msg->header.is_audio()) { *type = SRS_RTMP_TYPE_AUDIO; diff --git a/trunk/src/qt/srs/srs-qt.pro.user b/trunk/src/qt/srs/srs-qt.pro.user index ffd773f84..101e5889a 100755 --- a/trunk/src/qt/srs/srs-qt.pro.user +++ b/trunk/src/qt/srs/srs-qt.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/trunk/src/rtmp/srs_protocol_msg_array.cpp b/trunk/src/rtmp/srs_protocol_msg_array.cpp index 699603be4..adda6dd15 100644 --- a/trunk/src/rtmp/srs_protocol_msg_array.cpp +++ b/trunk/src/rtmp/srs_protocol_msg_array.cpp @@ -29,7 +29,7 @@ SrsMessageArray::SrsMessageArray(int max_msgs) { srs_assert(max_msgs > 0); - msgs = new SrsMessage*[max_msgs]; + msgs = new SrsSharedPtrMessage*[max_msgs]; max = max_msgs; zero(max_msgs); @@ -47,7 +47,7 @@ void SrsMessageArray::free(int count) { // initialize for (int i = 0; i < count; i++) { - SrsMessage* msg = msgs[i]; + SrsSharedPtrMessage* msg = msgs[i]; srs_freep(msg); msgs[i] = NULL; diff --git a/trunk/src/rtmp/srs_protocol_msg_array.hpp b/trunk/src/rtmp/srs_protocol_msg_array.hpp index aff10def7..6eea3112b 100644 --- a/trunk/src/rtmp/srs_protocol_msg_array.hpp +++ b/trunk/src/rtmp/srs_protocol_msg_array.hpp @@ -30,7 +30,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include -class SrsMessage; +class SrsSharedPtrMessage; /** * the class to auto free the shared ptr message array. @@ -49,7 +49,7 @@ public: * for instance, msg= msgs.msgs[i], msgs.msgs[i]=NULL, send(msg), * where send(msg) will always send and free it. */ - SrsMessage** msgs; + SrsSharedPtrMessage** msgs; int max; public: /** diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp index 2b6525dbd..9cbe655d1 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.cpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp @@ -360,22 +360,22 @@ int64_t SrsRtmpClient::get_send_bytes() return protocol->get_send_bytes(); } -int SrsRtmpClient::recv_message(SrsMessage** pmsg) +int SrsRtmpClient::recv_message(SrsCommonMessage** pmsg) { return protocol->recv_message(pmsg); } -int SrsRtmpClient::decode_message(SrsMessage* msg, SrsPacket** ppacket) +int SrsRtmpClient::decode_message(SrsCommonMessage* msg, SrsPacket** ppacket) { return protocol->decode_message(msg, ppacket); } -int SrsRtmpClient::send_and_free_message(SrsMessage* msg, int stream_id) +int SrsRtmpClient::send_and_free_message(SrsSharedPtrMessage* msg, int stream_id) { return protocol->send_and_free_message(msg, stream_id); } -int SrsRtmpClient::send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stream_id) +int SrsRtmpClient::send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id) { return protocol->send_and_free_messages(msgs, nb_msgs, stream_id); } @@ -509,13 +509,13 @@ int SrsRtmpClient::connect_app2( } // expect connect _result - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsConnectAppResPacket* pkt = NULL; if ((ret = expect_message(&msg, &pkt)) != ERROR_SUCCESS) { srs_error("expect connect app response message failed. ret=%d", ret); return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsConnectAppResPacket, pkt); // server info @@ -566,13 +566,13 @@ int SrsRtmpClient::create_stream(int& stream_id) // CreateStream _result. if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsCreateStreamResPacket* pkt = NULL; if ((ret = expect_message(&msg, &pkt)) != ERROR_SUCCESS) { srs_error("expect create stream response message failed. ret=%d", ret); return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsCreateStreamResPacket, pkt); srs_info("get create stream response message"); @@ -700,13 +700,13 @@ int SrsRtmpClient::fmle_publish(string stream, int& stream_id) // expect result of CreateStream if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsCreateStreamResPacket* pkt = NULL; if ((ret = expect_message(&msg, &pkt)) != ERROR_SUCCESS) { srs_error("expect create stream response message failed. ret=%d", ret); return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsCreateStreamResPacket, pkt); srs_info("get create stream response message"); @@ -787,22 +787,22 @@ int64_t SrsRtmpServer::get_send_bytes() return protocol->get_send_bytes(); } -int SrsRtmpServer::recv_message(SrsMessage** pmsg) +int SrsRtmpServer::recv_message(SrsCommonMessage** pmsg) { return protocol->recv_message(pmsg); } -int SrsRtmpServer::decode_message(SrsMessage* msg, SrsPacket** ppacket) +int SrsRtmpServer::decode_message(SrsCommonMessage* msg, SrsPacket** ppacket) { return protocol->decode_message(msg, ppacket); } -int SrsRtmpServer::send_and_free_message(SrsMessage* msg, int stream_id) +int SrsRtmpServer::send_and_free_message(SrsSharedPtrMessage* msg, int stream_id) { return protocol->send_and_free_message(msg, stream_id); } -int SrsRtmpServer::send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stream_id) +int SrsRtmpServer::send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id) { return protocol->send_and_free_messages(msgs, nb_msgs, stream_id); } @@ -838,13 +838,13 @@ int SrsRtmpServer::connect_app(SrsRequest* req) { int ret = ERROR_SUCCESS; - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsConnectAppPacket* pkt = NULL; if ((ret = expect_message(&msg, &pkt)) != ERROR_SUCCESS) { srs_error("expect connect app message failed. ret=%d", ret); return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsConnectAppPacket, pkt); srs_info("get connect app message"); @@ -1001,7 +1001,7 @@ int SrsRtmpServer::identify_client(int stream_id, SrsRtmpConnType& type, string& int ret = ERROR_SUCCESS; while (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; if ((ret = protocol->recv_message(&msg)) != ERROR_SUCCESS) { if (!srs_is_client_gracefully_close(ret)) { srs_error("recv identify client message failed. ret=%d", ret); @@ -1009,7 +1009,7 @@ int SrsRtmpServer::identify_client(int stream_id, SrsRtmpConnType& type, string& return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsMessageHeader& h = msg->header; if (h.is_ackledgement() || h.is_set_chunk_size() || h.is_window_ackledgement_size() || h.is_user_control_message()) { @@ -1233,7 +1233,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id) // FCPublish double fc_publish_tid = 0; if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsFMLEStartPacket* pkt = NULL; if ((ret = expect_message(&msg, &pkt)) != ERROR_SUCCESS) { srs_error("recv FCPublish message failed. ret=%d", ret); @@ -1241,7 +1241,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id) } srs_info("recv FCPublish request message success."); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsFMLEStartPacket, pkt); fc_publish_tid = pkt->transaction_id; @@ -1259,7 +1259,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id) // createStream double create_stream_tid = 0; if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsCreateStreamPacket* pkt = NULL; if ((ret = expect_message(&msg, &pkt)) != ERROR_SUCCESS) { srs_error("recv createStream message failed. ret=%d", ret); @@ -1267,7 +1267,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id) } srs_info("recv createStream request message success."); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsCreateStreamPacket, pkt); create_stream_tid = pkt->transaction_id; @@ -1284,7 +1284,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id) // publish if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsPublishPacket* pkt = NULL; if ((ret = expect_message(&msg, &pkt)) != ERROR_SUCCESS) { srs_error("recv publish message failed. ret=%d", ret); @@ -1292,7 +1292,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id) } srs_info("recv publish request message success."); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsPublishPacket, pkt); } // publish response onFCPublish(NetStream.Publish.Start) @@ -1417,7 +1417,7 @@ int SrsRtmpServer::identify_create_stream_client(SrsCreateStreamPacket* req, int } while (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; if ((ret = protocol->recv_message(&msg)) != ERROR_SUCCESS) { if (!srs_is_client_gracefully_close(ret)) { srs_error("recv identify client message failed. ret=%d", ret); @@ -1425,7 +1425,7 @@ int SrsRtmpServer::identify_create_stream_client(SrsCreateStreamPacket* req, int return ret; } - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsMessageHeader& h = msg->header; if (h.is_ackledgement() || h.is_set_chunk_size() || h.is_window_ackledgement_size() || h.is_user_control_message()) { diff --git a/trunk/src/rtmp/srs_protocol_rtmp.hpp b/trunk/src/rtmp/srs_protocol_rtmp.hpp index f4fb0aea9..09b45e30e 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.hpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.hpp @@ -37,14 +37,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. class SrsProtocol; class ISrsProtocolReaderWriter; -class ISrsMessage; +class ISrsCommonMessage; class SrsCommonMessage; class SrsCreateStreamPacket; class SrsFMLEStartPacket; class SrsPublishPacket; class SrsOnMetaDataPacket; class SrsPlayPacket; -class SrsMessage; +class SrsCommonMessage; class SrsPacket; class SrsAmf0Object; class IMergeReadHandler; @@ -207,14 +207,14 @@ public: * never NULL if decode success. * @remark, drop message when msg is empty or payload length is empty. */ - virtual int recv_message(SrsMessage** pmsg); + virtual int recv_message(SrsCommonMessage** pmsg); /** * decode bytes oriented RTMP message to RTMP packet, * @param ppacket, output decoded packet, * always NULL if error, never NULL if success. * @return error when unknown packet, error when decode failed. */ - virtual int decode_message(SrsMessage* msg, SrsPacket** ppacket); + virtual int decode_message(SrsCommonMessage* msg, SrsPacket** ppacket); /** * send the RTMP message and always free it. * user must never free or use the msg after this method, @@ -222,7 +222,7 @@ public: * @param msg, the msg to send out, never be NULL. * @param stream_id, the stream id of packet to send over, 0 for control message. */ - virtual int send_and_free_message(SrsMessage* msg, int stream_id); + virtual int send_and_free_message(SrsSharedPtrMessage* msg, int stream_id); /** * send the RTMP message and always free it. * user must never free or use the msg after this method, @@ -231,7 +231,7 @@ public: * @param nb_msgs, the size of msgs to send out. * @param stream_id, the stream id of packet to send over, 0 for control message. */ - virtual int send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stream_id); + virtual int send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id); /** * send the RTMP packet and always free it. * user must never free or use the packet after this method, @@ -316,7 +316,7 @@ public: * if need to set timeout, use set timeout of SrsProtocol. */ template - int expect_message(SrsMessage** pmsg, T** ppacket) + int expect_message(SrsCommonMessage** pmsg, T** ppacket) { return protocol->expect_message(pmsg, ppacket); } @@ -389,14 +389,14 @@ public: * never NULL if decode success. * @remark, drop message when msg is empty or payload length is empty. */ - virtual int recv_message(SrsMessage** pmsg); + virtual int recv_message(SrsCommonMessage** pmsg); /** * decode bytes oriented RTMP message to RTMP packet, * @param ppacket, output decoded packet, * always NULL if error, never NULL if success. * @return error when unknown packet, error when decode failed. */ - virtual int decode_message(SrsMessage* msg, SrsPacket** ppacket); + virtual int decode_message(SrsCommonMessage* msg, SrsPacket** ppacket); /** * send the RTMP message and always free it. * user must never free or use the msg after this method, @@ -404,7 +404,7 @@ public: * @param msg, the msg to send out, never be NULL. * @param stream_id, the stream id of packet to send over, 0 for control message. */ - virtual int send_and_free_message(SrsMessage* msg, int stream_id); + virtual int send_and_free_message(SrsSharedPtrMessage* msg, int stream_id); /** * send the RTMP message and always free it. * user must never free or use the msg after this method, @@ -416,7 +416,7 @@ public: * @remark performance issue, to support 6k+ 250kbps client, * @see https://github.com/winlinvip/simple-rtmp-server/issues/194 */ - virtual int send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stream_id); + virtual int send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id); /** * send the RTMP packet and always free it. * user must never free or use the packet after this method, @@ -523,7 +523,7 @@ public: * if need to set timeout, use set timeout of SrsProtocol. */ template - int expect_message(SrsMessage** pmsg, T** ppacket) + int expect_message(SrsCommonMessage** pmsg, T** ppacket) { return protocol->expect_message(pmsg, ppacket); } diff --git a/trunk/src/rtmp/srs_protocol_stack.cpp b/trunk/src/rtmp/srs_protocol_stack.cpp index 70ed47f43..128253474 100644 --- a/trunk/src/rtmp/srs_protocol_stack.cpp +++ b/trunk/src/rtmp/srs_protocol_stack.cpp @@ -386,14 +386,112 @@ void SrsMessageHeader::initialize_video(int size, u_int32_t time, int stream) perfer_cid = RTMP_CID_Video; } -SrsMessage::SrsMessage() +SrsCommonMessage::SrsCommonMessage() { payload = NULL; size = 0; } -SrsMessage::~SrsMessage() +SrsCommonMessage::~SrsCommonMessage() { + srs_freep(payload); +} + +SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr() +{ + payload = NULL; + size = 0; + shared_count = 0; +} + +SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr() +{ + srs_freep(payload); +} + +SrsSharedPtrMessage::SrsSharedPtrMessage() +{ + ptr = NULL; +} + +SrsSharedPtrMessage::~SrsSharedPtrMessage() +{ + if (ptr) { + if (ptr->shared_count == 0) { + srs_freep(ptr); + } else { + ptr->shared_count--; + } + } +} + +int SrsSharedPtrMessage::create(SrsCommonMessage* msg) +{ + int ret = ERROR_SUCCESS; + + if ((ret = create(&msg->header, msg->payload, msg->size)) != ERROR_SUCCESS) { + return ret; + } + + // to prevent double free of payload: + // initialize already attach the payload of msg, + // detach the payload to transfer the owner to shared ptr. + msg->payload = NULL; + msg->size = 0; + + return ret; +} + +int SrsSharedPtrMessage::create(SrsMessageHeader* pheader, char* payload, int size) +{ + int ret = ERROR_SUCCESS; + + srs_assert(pheader != NULL); + if (ptr) { + ret = ERROR_SYSTEM_ASSERT_FAILED; + srs_error("should not set the payload twice. ret=%d", ret); + srs_assert(false); + + return ret; + } + + header = *pheader; + header.payload_length = size; + + ptr = new __SrsSharedPtr(); + + // direct attach the data. + ptr->payload = payload; + ptr->size = size; + + // message can access it. + this->payload = ptr->payload; + this->size = ptr->size; + + return ret; +} + +int SrsSharedPtrMessage::count() +{ + srs_assert(ptr); + return ptr->shared_count; +} + +SrsSharedPtrMessage* SrsSharedPtrMessage::copy() +{ + srs_assert(ptr); + + SrsSharedPtrMessage* copy = new SrsSharedPtrMessage(); + + copy->header = header; + + copy->ptr = ptr; + ptr->shared_count++; + + copy->payload = ptr->payload; + copy->size = ptr->size; + + return copy; } SrsProtocol::AckWindowSize::AckWindowSize() @@ -541,14 +639,14 @@ int64_t SrsProtocol::get_send_bytes() return skt->get_send_bytes(); } -int SrsProtocol::recv_message(SrsMessage** pmsg) +int SrsProtocol::recv_message(SrsCommonMessage** pmsg) { *pmsg = NULL; int ret = ERROR_SUCCESS; while (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; if ((ret = recv_interlaced_message(&msg)) != ERROR_SUCCESS) { if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) { @@ -587,7 +685,7 @@ int SrsProtocol::recv_message(SrsMessage** pmsg) return ret; } -int SrsProtocol::decode_message(SrsMessage* msg, SrsPacket** ppacket) +int SrsProtocol::decode_message(SrsCommonMessage* msg, SrsPacket** ppacket) { *ppacket = NULL; @@ -620,7 +718,7 @@ int SrsProtocol::decode_message(SrsMessage* msg, SrsPacket** ppacket) return ret; } -int SrsProtocol::do_send_messages(SrsMessage** msgs, int nb_msgs) +int SrsProtocol::do_send_messages(SrsSharedPtrMessage** msgs, int nb_msgs) { int ret = ERROR_SUCCESS; @@ -634,7 +732,7 @@ int SrsProtocol::do_send_messages(SrsMessage** msgs, int nb_msgs) // try to send use the c0c3 header cache, // if cache is consumed, try another loop. for (int i = 0; i < nb_msgs; i++) { - SrsMessage* msg = msgs[i]; + SrsSharedPtrMessage* msg = msgs[i]; // ignore empty message. if (!msg->payload || msg->size <= 0) { @@ -785,22 +883,23 @@ int SrsProtocol::do_send_and_free_packet(SrsPacket* packet, int stream_id) } // to message - SrsMessage* msg = new SrsCommonMessage(); - - msg->payload = payload; - msg->size = size; - - msg->header.payload_length = size; - msg->header.message_type = packet->get_message_type(); - msg->header.stream_id = stream_id; - msg->header.perfer_cid = packet->get_prefer_cid(); + SrsMessageHeader header; + header.payload_length = size; + header.message_type = packet->get_message_type(); + header.stream_id = stream_id; + header.perfer_cid = packet->get_prefer_cid(); + + SrsSharedPtrMessage* msg = new SrsSharedPtrMessage(); + ret = msg->create(&header, payload, size); + if (ret == ERROR_SUCCESS) { + ret = do_send_messages(&msg, 1); + if (ret == ERROR_SUCCESS) { + ret = on_send_packet(msg, packet); + } + } // donot use the auto free to free the msg, // for performance issue. - ret = do_send_messages(&msg, 1); - if (ret == ERROR_SUCCESS) { - ret = on_send_packet(msg, packet); - } srs_freep(msg); return ret; @@ -1054,12 +1153,12 @@ int SrsProtocol::do_decode_message(SrsMessageHeader& header, SrsStream* stream, return ret; } -int SrsProtocol::send_and_free_message(SrsMessage* msg, int stream_id) +int SrsProtocol::send_and_free_message(SrsSharedPtrMessage* msg, int stream_id) { return send_and_free_messages(&msg, 1, stream_id); } -int SrsProtocol::send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stream_id) +int SrsProtocol::send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id) { // always not NULL msg. srs_assert(msgs); @@ -1067,7 +1166,7 @@ int SrsProtocol::send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stre // update the stream id in header. for (int i = 0; i < nb_msgs; i++) { - SrsMessage* msg = msgs[i]; + SrsSharedPtrMessage* msg = msgs[i]; // we assume that the stream_id in a group must be the same. if (msg->header.stream_id == stream_id) { break; @@ -1080,7 +1179,7 @@ int SrsProtocol::send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stre int ret = do_send_messages(msgs, nb_msgs); for (int i = 0; i < nb_msgs; i++) { - SrsMessage* msg = msgs[i]; + SrsSharedPtrMessage* msg = msgs[i]; srs_freep(msg); } @@ -1113,7 +1212,7 @@ int SrsProtocol::send_and_free_packet(SrsPacket* packet, int stream_id) return ret; } -int SrsProtocol::recv_interlaced_message(SrsMessage** pmsg) +int SrsProtocol::recv_interlaced_message(SrsCommonMessage** pmsg) { int ret = ERROR_SUCCESS; @@ -1173,7 +1272,7 @@ int SrsProtocol::recv_interlaced_message(SrsMessage** pmsg) chunk->header.payload_length, chunk->header.timestamp, chunk->header.stream_id); // read msg payload from chunk stream. - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; if ((ret = read_message_payload(chunk, &msg)) != ERROR_SUCCESS) { if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) { srs_error("read message payload failed. ret=%d", ret); @@ -1591,7 +1690,7 @@ int SrsProtocol::read_message_header(SrsChunkStream* chunk, char fmt) return ret; } -int SrsProtocol::read_message_payload(SrsChunkStream* chunk, SrsMessage** pmsg) +int SrsProtocol::read_message_payload(SrsChunkStream* chunk, SrsCommonMessage** pmsg) { int ret = ERROR_SUCCESS; @@ -1650,7 +1749,7 @@ int SrsProtocol::read_message_payload(SrsChunkStream* chunk, SrsMessage** pmsg) return ret; } -int SrsProtocol::on_recv_message(SrsMessage* msg) +int SrsProtocol::on_recv_message(SrsCommonMessage* msg) { int ret = ERROR_SUCCESS; @@ -1743,7 +1842,7 @@ int SrsProtocol::on_recv_message(SrsMessage* msg) return ret; } -int SrsProtocol::on_send_packet(SrsMessage* msg, SrsPacket* packet) +int SrsProtocol::on_send_packet(SrsSharedPtrMessage* msg, SrsPacket* packet) { int ret = ERROR_SUCCESS; @@ -1859,112 +1958,6 @@ SrsChunkStream::~SrsChunkStream() srs_freep(msg); } -SrsCommonMessage::SrsCommonMessage() -{ -} - -SrsCommonMessage::~SrsCommonMessage() -{ - srs_freep(payload); -} - -SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr() -{ - payload = NULL; - size = 0; - shared_count = 0; -} - -SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr() -{ - srs_freep(payload); -} - -SrsSharedPtrMessage::SrsSharedPtrMessage() -{ - ptr = NULL; -} - -SrsSharedPtrMessage::~SrsSharedPtrMessage() -{ - if (ptr) { - if (ptr->shared_count == 0) { - srs_freep(ptr); - } else { - ptr->shared_count--; - } - } -} - -int SrsSharedPtrMessage::create(SrsMessage* msg) -{ - int ret = ERROR_SUCCESS; - - if ((ret = create(&msg->header, msg->payload, msg->size)) != ERROR_SUCCESS) { - return ret; - } - - // to prevent double free of payload: - // initialize already attach the payload of msg, - // detach the payload to transfer the owner to shared ptr. - msg->payload = NULL; - msg->size = 0; - - return ret; -} - -int SrsSharedPtrMessage::create(SrsMessageHeader* pheader, char* payload, int size) -{ - int ret = ERROR_SUCCESS; - - srs_assert(pheader != NULL); - if (ptr) { - ret = ERROR_SYSTEM_ASSERT_FAILED; - srs_error("should not set the payload twice. ret=%d", ret); - srs_assert(false); - - return ret; - } - - header = *pheader; - header.payload_length = size; - - ptr = new __SrsSharedPtr(); - - // direct attach the data. - ptr->payload = payload; - ptr->size = size; - - // message can access it. - SrsMessage::payload = ptr->payload; - SrsMessage::size = ptr->size; - - return ret; -} - -int SrsSharedPtrMessage::count() -{ - srs_assert(ptr); - return ptr->shared_count; -} - -SrsSharedPtrMessage* SrsSharedPtrMessage::copy() -{ - srs_assert(ptr); - - SrsSharedPtrMessage* copy = new SrsSharedPtrMessage(); - - copy->header = header; - - copy->ptr = ptr; - ptr->shared_count++; - - copy->payload = ptr->payload; - copy->size = ptr->size; - - return copy; -} - SrsPacket::SrsPacket() { } diff --git a/trunk/src/rtmp/srs_protocol_stack.hpp b/trunk/src/rtmp/srs_protocol_stack.hpp index 72d30a11d..b99f359c3 100644 --- a/trunk/src/rtmp/srs_protocol_stack.hpp +++ b/trunk/src/rtmp/srs_protocol_stack.hpp @@ -51,7 +51,7 @@ class SrsStream; class SrsAmf0Object; class SrsAmf0Any; class SrsMessageHeader; -class SrsMessage; +class SrsCommonMessage; class SrsChunkStream; class SrsSharedPtrMessage; class IMergeReadHandler; @@ -136,15 +136,10 @@ public: /** * message is raw data RTMP message, bytes oriented, * protcol always recv RTMP message, and can send RTMP message or RTMP packet. -* the shared-ptr message is a special RTMP message, use ref-count for performance issue. -* -* @remark, never directly new SrsMessage, the constructor is protected, -* for in the SrsMessage, we never know whether we should free the message, -* for SrsCommonMessage, we should free the payload, -* while for SrsSharedPtrMessage, we should use ref-count to free it. -* so, use these two concrete message, SrsCommonMessage or SrsSharedPtrMessage instread. +* the common message is read from underlay protocol sdk. +* while the shared ptr message used to copy and send. */ -class SrsMessage +class SrsCommonMessage { // 4.1. Message Header public: @@ -158,16 +153,90 @@ public: */ int size; /** - * the payload of message, the SrsMessage never know about the detail of payload, + * the payload of message, the SrsCommonMessage never know about the detail of payload, * user must use SrsProtocol.decode_message to get concrete packet. * @remark, not all message payload can be decoded to packet. for example, * video/audio packet use raw bytes, no video/audio packet. */ char* payload; -protected: - SrsMessage(); public: - virtual ~SrsMessage(); + SrsCommonMessage(); +public: + virtual ~SrsCommonMessage(); +}; + +/** +* shared ptr message. +* for audio/video/data message that need less memory copy. +* and only for output. +* +* create first object by constructor and create(), +* use copy if need reference count message. +* +*/ +class SrsSharedPtrMessage +{ +// 4.1. Message Header +public: + SrsMessageHeader header; +// 4.2. Message Payload +public: + /** + * current message parsed size, + * size <= header.payload_length + * for the payload maybe sent in multiple chunks. + */ + int size; + /** + * the payload of message, the SrsCommonMessage never know about the detail of payload, + * user must use SrsProtocol.decode_message to get concrete packet. + * @remark, not all message payload can be decoded to packet. for example, + * video/audio packet use raw bytes, no video/audio packet. + */ + char* payload; +private: + class __SrsSharedPtr + { + public: + char* payload; + int size; + int shared_count; + + __SrsSharedPtr(); + virtual ~__SrsSharedPtr(); + }; + __SrsSharedPtr* ptr; +public: + SrsSharedPtrMessage(); + virtual ~SrsSharedPtrMessage(); +public: + /** + * create shared ptr message, + * copy header, manage the payload of msg, + * set the payload to NULL to prevent double free. + * @remark payload of msg set to NULL if success. + */ + virtual int create(SrsCommonMessage* msg); + /** + * create shared ptr message, + * from the header and payload. + * @remark user should never free the payload. + */ + virtual int create(SrsMessageHeader* pheader, char* payload, int size); + /** + * get current reference count. + * when this object created, count set to 0. + * if copy() this object, count increase 1. + * if this or copy deleted, free payload when count is 0, or count--. + * @remark, assert object is created. + */ + virtual int count(); +public: + /** + * copy current shared ptr message, use ref-count. + * @remark, assert object is created. + */ + virtual SrsSharedPtrMessage* copy(); }; /** @@ -321,14 +390,14 @@ public: * never NULL if decode success. * @remark, drop message when msg is empty or payload length is empty. */ - virtual int recv_message(SrsMessage** pmsg); + virtual int recv_message(SrsCommonMessage** pmsg); /** * decode bytes oriented RTMP message to RTMP packet, * @param ppacket, output decoded packet, * always NULL if error, never NULL if success. * @return error when unknown packet, error when decode failed. */ - virtual int decode_message(SrsMessage* msg, SrsPacket** ppacket); + virtual int decode_message(SrsCommonMessage* msg, SrsPacket** ppacket); /** * send the RTMP message and always free it. * user must never free or use the msg after this method, @@ -336,7 +405,7 @@ public: * @param msg, the msg to send out, never be NULL. * @param stream_id, the stream id of packet to send over, 0 for control message. */ - virtual int send_and_free_message(SrsMessage* msg, int stream_id); + virtual int send_and_free_message(SrsSharedPtrMessage* msg, int stream_id); /** * send the RTMP message and always free it. * user must never free or use the msg after this method, @@ -345,7 +414,7 @@ public: * @param nb_msgs, the size of msgs to send out. * @param stream_id, the stream id of packet to send over, 0 for control message. */ - virtual int send_and_free_messages(SrsMessage** msgs, int nb_msgs, int stream_id); + virtual int send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id); /** * send the RTMP packet and always free it. * user must never free or use the packet after this method, @@ -371,7 +440,7 @@ public: * if need to set timeout, use set timeout of SrsProtocol. */ template - int expect_message(SrsMessage** pmsg, T** ppacket) + int expect_message(SrsCommonMessage** pmsg, T** ppacket) { *pmsg = NULL; *ppacket = NULL; @@ -379,7 +448,7 @@ public: int ret = ERROR_SUCCESS; while (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; if ((ret = recv_message(&msg)) != ERROR_SUCCESS) { if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) { srs_error("recv message failed. ret=%d", ret); @@ -418,7 +487,7 @@ private: * send out the messages, donot free it, * the caller must free the param msgs. */ - virtual int do_send_messages(SrsMessage** msgs, int nb_msgs); + virtual int do_send_messages(SrsSharedPtrMessage** msgs, int nb_msgs); /** * underlayer api for send and free packet. */ @@ -442,7 +511,7 @@ private: * return success and pmsg set to NULL if no entire message got, * return success and pmsg set to entire message if got one. */ - virtual int recv_interlaced_message(SrsMessage** pmsg); + virtual int recv_interlaced_message(SrsCommonMessage** pmsg); /** * read the chunk basic header(fmt, cid) from chunk stream. * user can discovery a SrsChunkStream by cid. @@ -457,15 +526,15 @@ private: * read the chunk payload, remove the used bytes in buffer, * if got entire message, set the pmsg. */ - virtual int read_message_payload(SrsChunkStream* chunk, SrsMessage** pmsg); + virtual int read_message_payload(SrsChunkStream* chunk, SrsCommonMessage** pmsg); /** * when recv message, update the context. */ - virtual int on_recv_message(SrsMessage* msg); + virtual int on_recv_message(SrsCommonMessage* msg); /** * when message sentout, update the context. */ - virtual int on_send_packet(SrsMessage* msg, SrsPacket* packet); + virtual int on_send_packet(SrsSharedPtrMessage* msg, SrsPacket* packet); private: /** * auto response the ack message. @@ -505,7 +574,7 @@ public: /** * partially read message. */ - SrsMessage* msg; + SrsCommonMessage* msg; /** * decoded msg count, to identify whether the chunk stream is fresh. */ @@ -515,75 +584,6 @@ public: virtual ~SrsChunkStream(); }; -/** -* the common message used free the payload in common way. -*/ -class SrsCommonMessage : public SrsMessage -{ -public: - SrsCommonMessage(); - virtual ~SrsCommonMessage(); -}; - -/** -* shared ptr message. -* for audio/video/data message that need less memory copy. -* and only for output. -* -* create first object by constructor and create(), -* use copy if need reference count message. -* -* Usage: -* SrsSharedPtrMessage msg; -* -*/ -class SrsSharedPtrMessage : public SrsMessage -{ -private: - class __SrsSharedPtr - { - public: - char* payload; - int size; - int shared_count; - - __SrsSharedPtr(); - virtual ~__SrsSharedPtr(); - }; - __SrsSharedPtr* ptr; -public: - SrsSharedPtrMessage(); - virtual ~SrsSharedPtrMessage(); -public: - /** - * create shared ptr message, - * copy header, manage the payload of msg, - * set the payload to NULL to prevent double free. - * @remark payload of msg set to NULL if success. - */ - virtual int create(SrsMessage* msg); - /** - * create shared ptr message, - * from the header and payload. - * @remark user should never free the payload. - */ - virtual int create(SrsMessageHeader* pheader, char* payload, int size); - /** - * get current reference count. - * when this object created, count set to 0. - * if copy() this object, count increase 1. - * if this or copy deleted, free payload when count is 0, or count--. - * @remark, assert object is created. - */ - virtual int count(); -public: - /** - * copy current shared ptr message, use ref-count. - * @remark, assert object is created. - */ - virtual SrsSharedPtrMessage* copy(); -}; - /** * the decoded message payload. * @remark we seperate the packet from message, @@ -1227,7 +1227,7 @@ protected: /** * onStatus command, AMF0 Call -* @remark, user must set the stream_id by SrsMessage.set_packet(). +* @remark, user must set the stream_id by SrsCommonMessage.set_packet(). */ class SrsOnStatusCallPacket : public SrsPacket { @@ -1336,7 +1336,7 @@ private: /** * onStatus data, AMF0 Data -* @remark, user must set the stream_id by SrsMessage.set_packet(). +* @remark, user must set the stream_id by SrsCommonMessage.set_packet(). */ class SrsOnStatusDataPacket : public SrsPacket { @@ -1365,7 +1365,7 @@ protected: /** * AMF0Data RtmpSampleAccess -* @remark, user must set the stream_id by SrsMessage.set_packet(). +* @remark, user must set the stream_id by SrsCommonMessage.set_packet(). */ class SrsSampleAccessPacket : public SrsPacket { diff --git a/trunk/src/utest/srs_utest_protocol.cpp b/trunk/src/utest/srs_utest_protocol.cpp index 98907684b..10afb87f4 100644 --- a/trunk/src/utest/srs_utest_protocol.cpp +++ b/trunk/src/utest/srs_utest_protocol.cpp @@ -635,9 +635,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvMessage) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsPacket* pkt = NULL; EXPECT_TRUE(ERROR_SUCCESS == proto.decode_message(msg, &pkt)); @@ -671,9 +671,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvMessageBug98) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsPacket* pkt = NULL; EXPECT_TRUE(ERROR_SUCCESS == proto.decode_message(msg, &pkt)); @@ -706,9 +706,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvAckSizeMessage) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsPacket* pkt = NULL; EXPECT_TRUE(ERROR_SUCCESS == proto.decode_message(msg, &pkt)); @@ -740,9 +740,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVMessage) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); } @@ -767,9 +767,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvAMessage) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); } @@ -813,9 +813,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVMessage2Trunk) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); } @@ -904,15 +904,15 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAMessage) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); } } @@ -1022,15 +1022,15 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAFmt1) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); } } @@ -1138,15 +1138,15 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAFmt2) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); } } @@ -1253,15 +1253,15 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAFmt3) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); } } @@ -1396,25 +1396,25 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVMessage) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -1564,25 +1564,25 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVFmt1) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x22, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -1730,25 +1730,25 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVFmt2) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x22, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -1895,25 +1895,25 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVFmt3) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -2095,33 +2095,33 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVMessage) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x30, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -2315,33 +2315,33 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVFmt1) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x30, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -2531,33 +2531,33 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVFmt2) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x30, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -2745,33 +2745,33 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVFmt3) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x30, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -2965,33 +2965,33 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVFmt11) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x40, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -3187,33 +3187,33 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVFmt11Length) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x40, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -3405,33 +3405,33 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVFmt12) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x40, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -3626,35 +3626,35 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVAVVFmt12Length) } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); EXPECT_EQ(0x110, msg->header.payload_length); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_audio()); EXPECT_EQ(0x15, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x20, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); EXPECT_EQ(0x120, msg->header.payload_length); } if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x40, msg->header.timestamp); EXPECT_EQ(0x01, msg->header.stream_id); @@ -3697,9 +3697,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvExtTimeMessage) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x10, msg->header.timestamp); } @@ -3739,9 +3739,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvExtTimeMessage2) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); EXPECT_EQ(0x7f010203, msg->header.timestamp); } @@ -3783,9 +3783,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvExtTimeMessage3) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // always use 31bits timestamp EXPECT_EQ(0x7f010203, msg->header.timestamp); @@ -3856,9 +3856,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVExtTime2Trunk) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 0xCX with extended timestamp. EXPECT_EQ(0x00010203, msg->header.timestamp); @@ -3911,9 +3911,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVExtTime2Trunk2) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 0xCX without extended timestamp. EXPECT_EQ(0x00010203, msg->header.timestamp); @@ -3962,9 +3962,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid1BMin) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 1B cid(6bits), min is 2 EXPECT_EQ(0x02, msg->header.perfer_cid); @@ -4013,9 +4013,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid1BNormal) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 1B cid(6bits), cid in 2-63 EXPECT_EQ(0x09, msg->header.perfer_cid); @@ -4064,9 +4064,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid1BMax) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 1B cid(6bits), max is 63 EXPECT_EQ(0x3F, msg->header.perfer_cid); @@ -4115,9 +4115,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid2BMin) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 2B cid(8bits), min is 64 EXPECT_EQ(64, msg->header.perfer_cid); @@ -4166,9 +4166,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid2BNormal) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 2B cid(8bits), cid in 64-319 EXPECT_EQ(0x10+64, msg->header.perfer_cid); @@ -4217,9 +4217,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid2BNormal2) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 2B cid(8bits), cid in 64-319 EXPECT_EQ(0x11+64, msg->header.perfer_cid); @@ -4268,9 +4268,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid2BMax) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 2B cid(68bits), max is 319 EXPECT_EQ(319, msg->header.perfer_cid); @@ -4319,9 +4319,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid3BMin) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 3B cid(16bits), min is 64 EXPECT_EQ(64, msg->header.perfer_cid); @@ -4370,9 +4370,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid3BNormal) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 3B cid(16bits), cid in 64-65599 EXPECT_EQ(0x10*256+64, msg->header.perfer_cid); @@ -4421,9 +4421,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid3BNormal2) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 3B cid(16bits), cid in 64-65599 EXPECT_EQ(0x01 + (0x10*256) + 64, msg->header.perfer_cid); @@ -4472,9 +4472,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid3BNormal3) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 3B cid(16bits), cid in 64-65599 EXPECT_EQ(0xFF + (0x10*256) + 64, msg->header.perfer_cid); @@ -4523,9 +4523,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid3BNormal4) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 3B cid(16bits), cid in 64-65599 EXPECT_EQ(0x02 + (0x10*256) + 64, msg->header.perfer_cid); @@ -4574,9 +4574,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVCid3BMax) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // 2B cid(16bits), max is 65599 EXPECT_EQ(65599, msg->header.perfer_cid); @@ -4612,9 +4612,9 @@ VOID TEST(ProtocolStackTest, ProtocolRecvV0LenMessage) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_video()); // protocol stack will ignore the empty video message. EXPECT_EQ(4, msg->header.payload_length); @@ -4630,7 +4630,7 @@ VOID TEST(ProtocolStackTest, ProtocolSendVMessage) char data[] = {0x01, 0x02, 0x03, 0x04}; - SrsMessage* msg = new SrsCommonMessage(); + SrsCommonMessage* msg = new SrsCommonMessage(); msg->size = sizeof(data); msg->payload = new char[msg->size]; memcpy(msg->payload, data, msg->size); @@ -5320,7 +5320,7 @@ VOID TEST(ProtocolStackTest, ProtocolRecvVMessageFmtInvalid) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; EXPECT_FALSE(ERROR_SUCCESS == proto.recv_message(&msg)); } @@ -5340,7 +5340,7 @@ VOID TEST(ProtocolStackTest, ProtocolAckSizeFlow) } if (true) { - SrsMessage* msg = new SrsCommonMessage(); + SrsCommonMessage* msg = new SrsCommonMessage(); msg->header.payload_length = msg->size = 4096; msg->payload = new char[msg->size]; @@ -5358,16 +5358,16 @@ VOID TEST(ProtocolStackTest, ProtocolAckSizeFlow) // recv SrsSetWindowAckSizePacket if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); ASSERT_TRUE(msg->header.is_window_ackledgement_size()); } // recv video if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); ASSERT_TRUE(msg->header.is_video()); } @@ -5378,15 +5378,15 @@ VOID TEST(ProtocolStackTest, ProtocolAckSizeFlow) } // recv auto send acked size. #1 if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); ASSERT_TRUE(msg->header.is_ackledgement()); } // send again if (true) { - SrsMessage* msg = new SrsCommonMessage(); + SrsCommonMessage* msg = new SrsCommonMessage(); msg->header.payload_length = msg->size = 4096; msg->payload = new char[msg->size]; @@ -5402,9 +5402,9 @@ VOID TEST(ProtocolStackTest, ProtocolAckSizeFlow) } // recv video if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); ASSERT_TRUE(msg->header.is_video()); } @@ -5415,9 +5415,9 @@ VOID TEST(ProtocolStackTest, ProtocolAckSizeFlow) } // recv auto send acked size. #2 if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); ASSERT_TRUE(msg->header.is_ackledgement()); } } @@ -5444,9 +5444,9 @@ VOID TEST(ProtocolStackTest, ProtocolPingFlow) } // recv ping if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); EXPECT_TRUE(msg->header.is_user_control_message()); } @@ -5458,9 +5458,9 @@ VOID TEST(ProtocolStackTest, ProtocolPingFlow) } // recv ping if (true) { - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.recv_message(&msg)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); ASSERT_TRUE(msg->header.is_user_control_message()); SrsPacket* pkt = NULL; @@ -5519,10 +5519,10 @@ VOID TEST(ProtocolStackTest, ProtocolExcpectMessage) }; bio.in_buffer.append(data, sizeof(data)); - SrsMessage* msg = NULL; + SrsCommonMessage* msg = NULL; SrsConnectAppPacket* pkt = NULL; ASSERT_TRUE(ERROR_SUCCESS == proto.expect_message(&msg, &pkt)); - SrsAutoFree(SrsMessage, msg); + SrsAutoFree(SrsCommonMessage, msg); SrsAutoFree(SrsConnectAppPacket, pkt); ASSERT_TRUE(NULL != pkt); }