1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-13 03:41:55 +00:00

for bug #251, remove the SrsMessage, use SrsCommonMessage or SrsSharedPtrMessage. 2.0.60

This commit is contained in:
winlin 2014-12-05 23:03:52 +08:00
parent 528ae1e9b1
commit f9b9a60de7
21 changed files with 502 additions and 509 deletions

View file

@ -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<SrsBandwidthPacket>(&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<SrsBandwidthPacket>(&msg, &pkt)) != ERROR_SUCCESS) {
return ret;
}
SrsAutoFree(SrsMessage, msg);
SrsAutoFree(SrsCommonMessage, msg);
SrsAutoFree(SrsBandwidthPacket, pkt);
srs_info("get publish message success.");

View file

@ -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);
}

View file

@ -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.
*/

View file

@ -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);

View file

@ -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<SrsMessage*>::iterator it;
std::vector<SrsCommonMessage*>::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;

View file

@ -38,7 +38,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_app_reload.hpp>
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<SrsMessage*> queue;
std::vector<SrsCommonMessage*> 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:

View file

@ -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.");

View file

@ -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();

View file

@ -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);
}

View file

@ -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:

View file

@ -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"

View file

@ -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<SrsBandwidthPacket>(&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<SrsBandwidthPacket>(&msg, &pkt)) != ERROR_SUCCESS) {
return ret;
}
SrsAutoFree(SrsMessage, msg);
SrsAutoFree(SrsCommonMessage, msg);
srs_info("get final message success.");
if (pfn(pkt)) {

View file

@ -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;

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.1.1, 2014-12-04T22:24:26. -->
<!-- Written by QtCreator 3.1.1, 2014-12-05T22:32:09. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>

View file

@ -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;

View file

@ -30,7 +30,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_core.hpp>
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:
/**

View file

@ -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<SrsConnectAppResPacket>(&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<SrsCreateStreamResPacket>(&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<SrsCreateStreamResPacket>(&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<SrsConnectAppPacket>(&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<SrsFMLEStartPacket>(&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<SrsCreateStreamPacket>(&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<SrsPublishPacket>(&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()) {

View file

@ -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<class T>
int expect_message(SrsMessage** pmsg, T** ppacket)
int expect_message(SrsCommonMessage** pmsg, T** ppacket)
{
return protocol->expect_message<T>(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<class T>
int expect_message(SrsMessage** pmsg, T** ppacket)
int expect_message(SrsCommonMessage** pmsg, T** ppacket)
{
return protocol->expect_message<T>(pmsg, ppacket);
}

View file

@ -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();
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();
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();
// donot use the auto free to free the msg,
// for performance issue.
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.
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()
{
}

View file

@ -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<class T>
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
{

View file

@ -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<SrsConnectAppPacket>(&msg, &pkt));
SrsAutoFree(SrsMessage, msg);
SrsAutoFree(SrsCommonMessage, msg);
SrsAutoFree(SrsConnectAppPacket, pkt);
ASSERT_TRUE(NULL != pkt);
}