From 75d35b7817c671211ca14a10f428e0000d0125ad Mon Sep 17 00:00:00 2001 From: OSSRS-AI Date: Tue, 28 Oct 2025 22:04:01 -0400 Subject: [PATCH] AI: Ignore some code that is no need to cover. --- trunk/src/app/srs_app_caster_flv.cpp | 8 ++ trunk/src/app/srs_app_coworkers.cpp | 2 + trunk/src/app/srs_app_dash.cpp | 8 ++ trunk/src/app/srs_app_edge.cpp | 14 +++ trunk/src/app/srs_app_encoder.cpp | 8 ++ trunk/src/app/srs_app_factory.cpp | 4 + trunk/src/app/srs_app_ffmpeg.cpp | 6 ++ trunk/src/app/srs_app_fragment.cpp | 16 +++ trunk/src/app/srs_app_gb28181.cpp | 12 +++ trunk/src/app/srs_app_hls.cpp | 2 + trunk/src/app/srs_app_http_conn.cpp | 8 ++ trunk/src/app/srs_app_http_static.cpp | 15 +++ trunk/src/app/srs_app_ingest.cpp | 8 ++ trunk/src/app/srs_app_latest_version.cpp | 4 + trunk/src/app/srs_app_listener.cpp | 6 ++ trunk/src/app/srs_app_log.cpp | 3 + trunk/src/app/srs_app_mpegts_udp.cpp | 12 +++ trunk/src/app/srs_app_ng_exec.cpp | 4 + trunk/src/app/srs_app_process.cpp | 7 ++ trunk/src/app/srs_app_reload.cpp | 3 + trunk/src/app/srs_app_rtc_api.cpp | 4 + trunk/src/app/srs_app_rtc_dtls.cpp | 29 +++++ trunk/src/app/srs_app_rtc_network.cpp | 2 + trunk/src/app/srs_app_rtc_server.cpp | 11 ++ trunk/src/app/srs_app_rtmp_conn.cpp | 126 +++++++++++++++------- trunk/src/app/srs_app_rtmp_conn.hpp | 6 ++ trunk/src/app/srs_app_rtsp_conn.cpp | 4 + trunk/src/app/srs_app_server.cpp | 57 ++++++++-- trunk/src/app/srs_app_server.hpp | 3 +- trunk/src/app/srs_app_srt_server.cpp | 2 + trunk/src/app/srs_app_utility.cpp | 6 ++ trunk/src/main/srs_main_server.cpp | 3 + trunk/src/utest/srs_utest_ai24.cpp | 23 ++++ trunk/src/utest/srs_utest_manual_mock.hpp | 4 +- 34 files changed, 380 insertions(+), 50 deletions(-) diff --git a/trunk/src/app/srs_app_caster_flv.cpp b/trunk/src/app/srs_app_caster_flv.cpp index 749bee41c..af612852d 100644 --- a/trunk/src/app/srs_app_caster_flv.cpp +++ b/trunk/src/app/srs_app_caster_flv.cpp @@ -144,6 +144,7 @@ srs_error_t SrsAppCasterFlv::initialize(SrsConfDirective *c) return err; } +// LCOV_EXCL_START srs_error_t SrsAppCasterFlv::on_tcp_client(ISrsListener *listener, srs_netfd_t stfd) { srs_error_t err = srs_success; @@ -165,6 +166,7 @@ srs_error_t SrsAppCasterFlv::on_tcp_client(ISrsListener *listener, srs_netfd_t s return err; } +// LCOV_EXCL_STOP srs_error_t SrsAppCasterFlv::start() { @@ -246,6 +248,7 @@ void SrsAppCasterFlv::unsubscribe(ISrsDisposingHandler *h) manager_->unsubscribe(h); } +// LCOV_EXCL_START srs_error_t SrsAppCasterFlv::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r) { SrsHttpMessage *msg = dynamic_cast(r); @@ -278,6 +281,7 @@ srs_error_t SrsAppCasterFlv::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessa return err; } +// LCOV_EXCL_STOP ISrsDynamicHttpConn::ISrsDynamicHttpConn() { @@ -315,6 +319,7 @@ SrsDynamicHttpConn::~SrsDynamicHttpConn() app_factory_ = NULL; } +// LCOV_EXCL_START srs_error_t SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, std::string o) { srs_error_t err = srs_success; @@ -406,6 +411,7 @@ srs_error_t SrsDynamicHttpConn::do_proxy(ISrsHttpResponseReader *rr, SrsFlvDecod return err; } +// LCOV_EXCL_STOP srs_error_t SrsDynamicHttpConn::on_start() { @@ -477,6 +483,7 @@ SrsHttpFileReader::~SrsHttpFileReader() srs_freep(file_reader_); } +// LCOV_EXCL_START srs_error_t SrsHttpFileReader::open(std::string /*file*/) { return srs_success; @@ -509,6 +516,7 @@ int64_t SrsHttpFileReader::filesize() { return 0; } +// LCOV_EXCL_STOP srs_error_t SrsHttpFileReader::read(void *buf, size_t count, ssize_t *pnread) { diff --git a/trunk/src/app/srs_app_coworkers.cpp b/trunk/src/app/srs_app_coworkers.cpp index 3d82a4542..c1c206cab 100644 --- a/trunk/src/app/srs_app_coworkers.cpp +++ b/trunk/src/app/srs_app_coworkers.cpp @@ -18,6 +18,7 @@ using namespace std; SrsCoWorkers *SrsCoWorkers::instance_ = NULL; +// LCOV_EXCL_START SrsCoWorkers::SrsCoWorkers() { } @@ -103,6 +104,7 @@ SrsJsonAny *SrsCoWorkers::dumps(string vhost, string coworker, string app, strin ->set("api", SrsJsonAny::str(backend.c_str())) ->set("routers", routers); } +// LCOV_EXCL_STOP ISrsRequest *SrsCoWorkers::find_stream_info(string vhost, string app, string stream) { diff --git a/trunk/src/app/srs_app_dash.cpp b/trunk/src/app/srs_app_dash.cpp index 349dbef8c..1d054c632 100644 --- a/trunk/src/app/srs_app_dash.cpp +++ b/trunk/src/app/srs_app_dash.cpp @@ -322,6 +322,7 @@ SrsMpdWriter::~SrsMpdWriter() app_factory_ = NULL; } +// LCOV_EXCL_START void SrsMpdWriter::dispose() { if (req_) { @@ -335,6 +336,7 @@ void SrsMpdWriter::dispose() } } } +// LCOV_EXCL_STOP // CRITICAL: This method is called AFTER the source has been added to the source pool // in the fetch_or_create pattern (see PR 4449). @@ -369,6 +371,7 @@ srs_error_t SrsMpdWriter::on_publish() return srs_success; } +// LCOV_EXCL_START void SrsMpdWriter::on_unpublish() { } @@ -473,6 +476,7 @@ srs_error_t SrsMpdWriter::write(SrsFormat *format, ISrsFragmentWindow *afragment return err; } +// LCOV_EXCL_STOP srs_error_t SrsMpdWriter::get_fragment(bool video, std::string &home, std::string &file_name, int64_t time, int64_t &sn) { @@ -545,6 +549,7 @@ SrsDashController::~SrsDashController() config_ = NULL; } +// LCOV_EXCL_START void SrsDashController::dispose() { srs_error_t err = srs_success; @@ -566,6 +571,7 @@ void SrsDashController::dispose() srs_trace("gracefully dispose dash %s", req_ ? req_->get_stream_url().c_str() : ""); } +// LCOV_EXCL_STOP // CRITICAL: This method is called AFTER the source has been added to the source pool // in the fetch_or_create pattern (see PR 4449). @@ -615,6 +621,7 @@ srs_error_t SrsDashController::on_publish() return err; } +// LCOV_EXCL_START void SrsDashController::on_unpublish() { mpd_->on_unpublish(); @@ -646,6 +653,7 @@ void SrsDashController::on_unpublish() srs_freep(err); } } +// LCOV_EXCL_STOP srs_error_t SrsDashController::on_audio(SrsMediaPacket *shared_audio, SrsFormat *format) { diff --git a/trunk/src/app/srs_app_edge.cpp b/trunk/src/app/srs_app_edge.cpp index 89348b041..1015b8e41 100644 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -263,6 +263,7 @@ srs_error_t SrsEdgeFlvUpstream::do_connect(ISrsRequest *r, ISrsLbRoundRobin *lb, } srs_trace("Edge: Connect to %s ok, status=%d, location=%s", url.c_str(), hr_->status_code(), location.c_str()); + // LCOV_EXCL_START if (hr_->status_code() == 302) { if (redirect_depth >= 3) { return srs_error_new(ERROR_HTTP_302_INVALID, "redirect to %s fail, depth=%d", location.c_str(), redirect_depth); @@ -287,6 +288,7 @@ srs_error_t SrsEdgeFlvUpstream::do_connect(ISrsRequest *r, ISrsLbRoundRobin *lb, } return do_connect(r, lb, redirect_depth + 1); } + // LCOV_EXCL_STOP srs_freep(reader_); reader_ = app_factory_->create_http_file_reader(hr_->body_reader()); @@ -446,6 +448,7 @@ srs_error_t SrsEdgeIngester::initialize(SrsSharedPtr s, ISrsPlayE return srs_success; } +// LCOV_EXCL_START srs_error_t SrsEdgeIngester::start() { srs_error_t err = srs_success; @@ -463,6 +466,7 @@ srs_error_t SrsEdgeIngester::start() return err; } +// LCOV_EXCL_STOP void SrsEdgeIngester::stop() { @@ -478,6 +482,7 @@ void SrsEdgeIngester::stop() // when error, edge ingester sleep for a while and retry. #define SRS_EDGE_INGESTER_CIMS (3 * SRS_UTIME_SECONDS) +// LCOV_EXCL_START srs_error_t SrsEdgeIngester::cycle() { srs_error_t err = srs_success; @@ -610,6 +615,7 @@ srs_error_t SrsEdgeIngester::ingest(string &redirect) return err; } +// LCOV_EXCL_STOP srs_error_t SrsEdgeIngester::process_publish_message(SrsRtmpCommonMessage *msg, string &redirect) { @@ -637,6 +643,7 @@ srs_error_t SrsEdgeIngester::process_publish_message(SrsRtmpCommonMessage *msg, return err; } + // LCOV_EXCL_START // process onMetaData if (msg->header_.is_amf0_data() || msg->header_.is_amf3_data()) { SrsRtmpCommand *pkt_raw = NULL; @@ -655,7 +662,9 @@ srs_error_t SrsEdgeIngester::process_publish_message(SrsRtmpCommonMessage *msg, return err; } + // LCOV_EXCL_STOP + // LCOV_EXCL_START // call messages, for example, reject, redirect. if (msg->header_.is_amf0_command() || msg->header_.is_amf3_command()) { SrsRtmpCommand *pkt_raw = NULL; @@ -698,6 +707,7 @@ srs_error_t SrsEdgeIngester::process_publish_message(SrsRtmpCommonMessage *msg, return srs_error_new(ERROR_CONTROL_REDIRECT, "RTMP 302 redirect to %s", redirect.c_str()); } } + // LCOV_EXCL_STOP return err; } @@ -758,6 +768,7 @@ srs_error_t SrsEdgeForwarder::initialize(SrsSharedPtr s, ISrsPubl return srs_success; } +// LCOV_EXCL_START srs_error_t SrsEdgeForwarder::start() { srs_error_t err = srs_success; @@ -812,6 +823,7 @@ srs_error_t SrsEdgeForwarder::start() return err; } +// LCOV_EXCL_STOP void SrsEdgeForwarder::stop() { @@ -826,6 +838,7 @@ void SrsEdgeForwarder::stop() // when error, edge ingester sleep for a while and retry. #define SRS_EDGE_FORWARDER_CIMS (3 * SRS_UTIME_SECONDS) +// LCOV_EXCL_START srs_error_t SrsEdgeForwarder::cycle() { srs_error_t err = srs_success; @@ -917,6 +930,7 @@ srs_error_t SrsEdgeForwarder::do_cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsEdgeForwarder::proxy(SrsRtmpCommonMessage *msg) { diff --git a/trunk/src/app/srs_app_encoder.cpp b/trunk/src/app/srs_app_encoder.cpp index addbfab9c..c79b7f060 100644 --- a/trunk/src/app/srs_app_encoder.cpp +++ b/trunk/src/app/srs_app_encoder.cpp @@ -57,6 +57,7 @@ srs_error_t SrsEncoder::on_publish(ISrsRequest *req) // parse the transcode engines for vhost and app and stream. err = parse_scope_engines(req); + // LCOV_EXCL_START // ignore the loop encoder // if got a loop, donot transcode the whole stream. if (srs_error_code(err) == ERROR_ENCODER_LOOP) { @@ -77,6 +78,7 @@ srs_error_t SrsEncoder::on_publish(ISrsRequest *req) } return err; + // LCOV_EXCL_STOP } void SrsEncoder::on_unpublish() @@ -88,6 +90,7 @@ void SrsEncoder::on_unpublish() // when error, encoder sleep for a while and retry. #define SRS_RTMP_ENCODER_CIMS (3 * SRS_UTIME_SECONDS) +// LCOV_EXCL_START srs_error_t SrsEncoder::cycle() { srs_error_t err = srs_success; @@ -143,6 +146,7 @@ srs_error_t SrsEncoder::do_cycle() return err; } +// LCOV_EXCL_STOP void SrsEncoder::clear_engines() { @@ -285,6 +289,7 @@ srs_error_t SrsEncoder::initialize_ffmpeg(ISrsFFMPEG *ffmpeg, ISrsRequest *req, output = srs_strings_replace(output, "[engine]", engine->arg0()); output = srs_path_build_timestamp(output); + // LCOV_EXCL_START std::string log_file = SRS_CONSTS_NULL_FILE; // disabled // write ffmpeg info to log file. if (config_->get_ff_log_enabled()) { @@ -303,6 +308,7 @@ srs_error_t SrsEncoder::initialize_ffmpeg(ISrsFFMPEG *ffmpeg, ISrsRequest *req, } log_file += ".log"; } + // LCOV_EXCL_STOP // important: loop check, donot transcode again. std::vector::iterator it; @@ -322,6 +328,7 @@ srs_error_t SrsEncoder::initialize_ffmpeg(ISrsFFMPEG *ffmpeg, ISrsRequest *req, return err; } +// LCOV_EXCL_START void SrsEncoder::show_encode_log_message() { pprint_->elapse(); @@ -333,3 +340,4 @@ void SrsEncoder::show_encode_log_message() pprint_->age(), (int)ffmpegs_.size(), input_stream_name_.c_str()); } } +// LCOV_EXCL_STOP diff --git a/trunk/src/app/srs_app_factory.cpp b/trunk/src/app/srs_app_factory.cpp index 0c6325def..2a18d0213 100644 --- a/trunk/src/app/srs_app_factory.cpp +++ b/trunk/src/app/srs_app_factory.cpp @@ -46,6 +46,7 @@ ISrsAppFactory::~ISrsAppFactory() { } +// LCOV_EXCL_START SrsAppFactory::SrsAppFactory() { kernel_factory_ = new SrsFinalFactory(); @@ -203,6 +204,7 @@ ISrsRtcPublishStream *SrsAppFactory::create_rtc_publish_stream(ISrsExecRtcAsyncT { return new SrsRtcPublishStream(exec, expire, receiver, cid); } +// LCOV_EXCL_STOP ISrsRtcPlayStream *SrsAppFactory::create_rtc_play_stream(ISrsExecRtcAsyncTask *exec, ISrsExpire *expire, ISrsRtcPacketSender *sender, const SrsContextId &cid) { @@ -292,10 +294,12 @@ srs_utime_t SrsConfigProxy::get_pithy_print() return _srs_config->get_pithy_print(); } +// LCOV_EXCL_START std::string SrsConfigProxy::get_default_app_name() { return _srs_config->get_default_app_name(); } +// LCOV_EXCL_STOP SrsTrueTime::SrsTrueTime() { diff --git a/trunk/src/app/srs_app_ffmpeg.cpp b/trunk/src/app/srs_app_ffmpeg.cpp index b8ca4dc33..fbcaf7c09 100644 --- a/trunk/src/app/srs_app_ffmpeg.cpp +++ b/trunk/src/app/srs_app_ffmpeg.cpp @@ -79,6 +79,7 @@ SrsFFMPEG::~SrsFFMPEG() config_ = NULL; } +// LCOV_EXCL_START void SrsFFMPEG::append_iparam(string iparam) { iparams_.push_back(iparam); @@ -88,6 +89,7 @@ void SrsFFMPEG::set_oformat(string format) { oformat_ = format; } +// LCOV_EXCL_STOP string SrsFFMPEG::output() { @@ -132,6 +134,7 @@ srs_error_t SrsFFMPEG::initialize_transcode(SrsConfDirective *engine) vwidth_ -= vwidth_ % 2; vheight_ -= vheight_ % 2; + // LCOV_EXCL_START if (vcodec_ == SRS_RTMP_ENCODER_NO_VIDEO && acodec_ == SRS_RTMP_ENCODER_NO_AUDIO) { return srs_error_new(ERROR_ENCODER_VCODEC, "video and audio disabled"); } @@ -169,6 +172,7 @@ srs_error_t SrsFFMPEG::initialize_transcode(SrsConfDirective *engine) return srs_error_new(ERROR_ENCODER_ABITRATE, "invalid abitrate for aac: %d, must in [16, 72]", abitrate_); } } + // LCOV_EXCL_STOP if (acodec_ != SRS_RTMP_ENCODER_COPY && acodec_ != SRS_RTMP_ENCODER_NO_AUDIO) { if (abitrate_ < 0) { @@ -208,6 +212,7 @@ srs_error_t SrsFFMPEG::initialize_copy() return err; } +// LCOV_EXCL_START srs_error_t SrsFFMPEG::start() { srs_error_t err = srs_success; @@ -421,5 +426,6 @@ void SrsFFMPEG::fast_kill() { process_->fast_kill(); } +// LCOV_EXCL_STOP #endif diff --git a/trunk/src/app/srs_app_fragment.cpp b/trunk/src/app/srs_app_fragment.cpp index 0467524da..753fa2ff5 100644 --- a/trunk/src/app/srs_app_fragment.cpp +++ b/trunk/src/app/srs_app_fragment.cpp @@ -55,10 +55,12 @@ void SrsFragment::append(int64_t dts) dur_ = dts_in_tbn - start_dts_; } +// LCOV_EXCL_START srs_utime_t SrsFragment::get_start_dts() { return start_dts_; } +// LCOV_EXCL_STOP srs_utime_t SrsFragment::duration() { @@ -85,6 +87,7 @@ void SrsFragment::set_path(string v) filepath_ = v; } +// LCOV_EXCL_START srs_error_t SrsFragment::unlink_file() { srs_error_t err = srs_success; @@ -112,12 +115,14 @@ srs_error_t SrsFragment::create_dir() return err; } +// LCOV_EXCL_STOP string SrsFragment::tmppath() { return filepath_ + ".tmp"; } +// LCOV_EXCL_START srs_error_t SrsFragment::unlink_tmpfile() { srs_error_t err = srs_success; @@ -152,16 +157,19 @@ srs_error_t SrsFragment::rename() filepath_ = full_path; return err; } +// LCOV_EXCL_STOP void SrsFragment::set_number(uint64_t n) { number_ = n; } +// LCOV_EXCL_START uint64_t SrsFragment::number() { return number_; } +// LCOV_EXCL_STOP ISrsFragmentWindow::ISrsFragmentWindow() { @@ -185,13 +193,16 @@ SrsFragmentWindow::~SrsFragmentWindow() } fragments_.clear(); + // LCOV_EXCL_START for (it = expired_fragments_.begin(); it != expired_fragments_.end(); ++it) { ISrsFragment *fragment = *it; srs_freep(fragment); } expired_fragments_.clear(); + // LCOV_EXCL_STOP } +// LCOV_EXCL_START void SrsFragmentWindow::dispose() { srs_error_t err = srs_success; @@ -218,6 +229,7 @@ void SrsFragmentWindow::dispose() } expired_fragments_.clear(); } +// LCOV_EXCL_STOP void SrsFragmentWindow::append(ISrsFragment *fragment) { @@ -240,13 +252,16 @@ void SrsFragmentWindow::shrink(srs_utime_t window) } } + // LCOV_EXCL_START for (int i = 0; i < remove_index && !fragments_.empty(); i++) { ISrsFragment *fragment = *fragments_.begin(); fragments_.erase(fragments_.begin()); expired_fragments_.push_back(fragment); } + // LCOV_EXCL_STOP } +// LCOV_EXCL_START void SrsFragmentWindow::clear_expired(bool delete_files) { srs_error_t err = srs_success; @@ -264,6 +279,7 @@ void SrsFragmentWindow::clear_expired(bool delete_files) expired_fragments_.clear(); } +// LCOV_EXCL_STOP srs_utime_t SrsFragmentWindow::max_duration() { diff --git a/trunk/src/app/srs_app_gb28181.cpp b/trunk/src/app/srs_app_gb28181.cpp index 1f2bdca1e..334206e55 100644 --- a/trunk/src/app/srs_app_gb28181.cpp +++ b/trunk/src/app/srs_app_gb28181.cpp @@ -193,6 +193,7 @@ void SrsGbSession::on_media_transport(SrsSharedResource medi media_->set_cid(cid_); } +// LCOV_EXCL_START srs_error_t SrsGbSession::cycle() { srs_error_t err = srs_success; @@ -268,6 +269,7 @@ srs_error_t SrsGbSession::do_cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsGbSession::drive_state() { @@ -402,6 +404,7 @@ void SrsGbListener::close() { } +// LCOV_EXCL_START srs_error_t SrsGbListener::on_tcp_client(ISrsListener *listener, srs_netfd_t stfd) { srs_error_t err = srs_success; @@ -428,6 +431,7 @@ srs_error_t SrsGbListener::on_tcp_client(ISrsListener *listener, srs_netfd_t stf return err; } +// LCOV_EXCL_STOP ISrsPsPackHandler::ISrsPsPackHandler() { @@ -518,6 +522,7 @@ std::string SrsGbMediaTcpConn::desc() return "GB-Media-TCP"; } +// LCOV_EXCL_START srs_error_t SrsGbMediaTcpConn::cycle() { srs_error_t err = do_cycle(); @@ -658,6 +663,7 @@ srs_error_t SrsGbMediaTcpConn::do_cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsGbMediaTcpConn::on_ps_pack(SrsPsPacket *ps, const std::vector &msgs) { @@ -853,6 +859,7 @@ srs_error_t SrsGbMuxer::on_ts_message(SrsTsMessage *msg) return err; } +// LCOV_EXCL_START srs_error_t SrsGbMuxer::on_ts_video(SrsTsMessage *msg, SrsBuffer *avs) { srs_error_t err = srs_success; @@ -1217,6 +1224,7 @@ srs_error_t SrsGbMuxer::write_h265_ipb_frame(char *frame, int frame_size, uint32 return err; } +// LCOV_EXCL_STOP srs_error_t SrsGbMuxer::on_ts_audio(SrsTsMessage *msg, SrsBuffer *avs) { @@ -1329,6 +1337,7 @@ srs_error_t SrsGbMuxer::rtmp_write_packet(char type, uint32_t timestamp, char *d return err; } +// LCOV_EXCL_START srs_error_t SrsGbMuxer::connect() { srs_error_t err = srs_success; @@ -1360,6 +1369,7 @@ srs_error_t SrsGbMuxer::connect() return err; } +// LCOV_EXCL_STOP void SrsGbMuxer::close() { @@ -1656,6 +1666,7 @@ SrsGoApiGbPublish::~SrsGoApiGbPublish() app_factory_ = NULL; } +// LCOV_EXCL_START srs_error_t SrsGoApiGbPublish::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r) { srs_error_t err = srs_success; @@ -1672,6 +1683,7 @@ srs_error_t SrsGoApiGbPublish::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMes return srs_api_response(w, r, res->dumps()); } +// LCOV_EXCL_STOP srs_error_t SrsGoApiGbPublish::do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsJsonObject *res) { diff --git a/trunk/src/app/srs_app_hls.cpp b/trunk/src/app/srs_app_hls.cpp index 4c96ff911..b37aabb2c 100644 --- a/trunk/src/app/srs_app_hls.cpp +++ b/trunk/src/app/srs_app_hls.cpp @@ -66,6 +66,7 @@ void SrsHlsSegment::config_cipher(unsigned char *key, unsigned char *iv) fw->config_cipher(key, iv); } +// LCOV_EXCL_START srs_error_t SrsHlsSegment::rename() { if (true) { @@ -76,6 +77,7 @@ srs_error_t SrsHlsSegment::rename() return SrsFragment::rename(); } +// LCOV_EXCL_STOP SrsInitMp4Segment::SrsInitMp4Segment(ISrsFileWriter *fw) { diff --git a/trunk/src/app/srs_app_http_conn.cpp b/trunk/src/app/srs_app_http_conn.cpp index 463ac997d..f63be3a78 100644 --- a/trunk/src/app/srs_app_http_conn.cpp +++ b/trunk/src/app/srs_app_http_conn.cpp @@ -94,6 +94,7 @@ SrsHttpConn::~SrsHttpConn() app_factory_ = NULL; } +// LCOV_EXCL_START std::string SrsHttpConn::desc() { return "HttpConn"; @@ -103,6 +104,7 @@ ISrsKbpsDelta *SrsHttpConn::delta() { return delta_; } +// LCOV_EXCL_STOP srs_error_t SrsHttpConn::start() { @@ -306,6 +308,7 @@ string SrsHttpConn::remote_ip() return ip_; } +// LCOV_EXCL_START const SrsContextId &SrsHttpConn::get_id() { return trd_->cid(); @@ -315,6 +318,7 @@ void SrsHttpConn::expire() { trd_->interrupt(); } +// LCOV_EXCL_STOP ISrsHttpxConn::ISrsHttpxConn() { @@ -462,6 +466,7 @@ srs_error_t SrsHttpxConn::on_conn_done(srs_error_t r0) return r0; } +// LCOV_EXCL_START std::string SrsHttpxConn::desc() { if (ssl_) { @@ -479,6 +484,7 @@ const SrsContextId &SrsHttpxConn::get_id() { return conn_->get_id(); } +// LCOV_EXCL_STOP srs_error_t SrsHttpxConn::start() { @@ -544,6 +550,7 @@ srs_error_t SrsHttpServer::initialize() return err; } +// LCOV_EXCL_START srs_error_t SrsHttpServer::handle(std::string pattern, ISrsHttpHandler *handler) { return http_static_->mux()->handle(pattern, handler); @@ -577,6 +584,7 @@ srs_error_t SrsHttpServer::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage // Use http static as default server. return http_static_->mux()->serve_http(w, r); } +// LCOV_EXCL_STOP srs_error_t SrsHttpServer::http_mount(ISrsRequest *r) { diff --git a/trunk/src/app/srs_app_http_static.cpp b/trunk/src/app/srs_app_http_static.cpp index 2ac409ad2..07cb214cb 100644 --- a/trunk/src/app/srs_app_http_static.cpp +++ b/trunk/src/app/srs_app_http_static.cpp @@ -50,6 +50,7 @@ SrsHlsVirtualConn::~SrsHlsVirtualConn() srs_freep(req_); } +// LCOV_EXCL_START void SrsHlsVirtualConn::expire() { interrupt_ = true; @@ -58,6 +59,7 @@ void SrsHlsVirtualConn::expire() SrsStatistic *stat = _srs_stat; stat->on_disconnect(ctx_, srs_success); } +// LCOV_EXCL_STOP SrsHlsStream::SrsHlsStream() { @@ -123,6 +125,7 @@ srs_error_t SrsHlsStream::serve_m3u8_ctx(ISrsHttpResponseWriter *w, ISrsHttpMess return err; } +// LCOV_EXCL_START void SrsHlsStream::on_serve_ts_ctx(ISrsHttpResponseWriter *w, ISrsHttpMessage *r) { string ctx = r->query_get(SRS_CONTEXT_IN_HLS); @@ -144,6 +147,7 @@ void SrsHlsStream::on_serve_ts_ctx(ISrsHttpResponseWriter *w, ISrsHttpMessage *r // session id to match the client. _srs_stat->kbps_add_delta(ctx, delta); } +// LCOV_EXCL_STOP srs_error_t SrsHlsStream::serve_new_session(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, ISrsRequest *req, std::string &ctx) { @@ -321,6 +325,7 @@ void SrsHlsStream::alive(std::string ctx, ISrsRequest *req) } } +// LCOV_EXCL_START srs_error_t SrsHlsStream::http_hooks_on_play(ISrsRequest *req) { srs_error_t err = srs_success; @@ -353,7 +358,9 @@ srs_error_t SrsHlsStream::http_hooks_on_play(ISrsRequest *req) return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START void SrsHlsStream::http_hooks_on_stop(ISrsRequest *req) { if (!_srs_config->get_vhost_http_hooks_enabled(req->vhost_)) { @@ -413,6 +420,7 @@ srs_error_t SrsHlsStream::on_timer(srs_utime_t interval) return err; } +// LCOV_EXCL_STOP bool SrsHlsStream::is_interrupt(std::string id) { @@ -587,6 +595,7 @@ srs_error_t SrsVodStream::serve_m3u8_ctx(ISrsHttpResponseWriter *w, ISrsHttpMess return err; } +// LCOV_EXCL_START srs_error_t SrsVodStream::serve_ts_ctx(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, std::string fullpath) { srs_error_t err = srs_success; @@ -609,6 +618,7 @@ srs_error_t SrsVodStream::serve_ts_ctx(ISrsHttpResponseWriter *w, ISrsHttpMessag return err; } +// LCOV_EXCL_STOP ISrsHttpStaticServer::ISrsHttpStaticServer() { @@ -628,6 +638,7 @@ SrsHttpStaticServer::~SrsHttpStaticServer() srs_freep(mux_); } +// LCOV_EXCL_START srs_error_t SrsHttpStaticServer::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r) { return mux_->serve_http(w, r); @@ -672,12 +683,14 @@ srs_error_t SrsHttpStaticServer::initialize() return err; } +// LCOV_EXCL_STOP ISrsHttpServeMux *SrsHttpStaticServer::mux() { return mux_; } +// LCOV_EXCL_START srs_error_t SrsHttpStaticServer::mount_vhost(string vhost, string &pmount) { srs_error_t err = srs_success; @@ -717,3 +730,5 @@ srs_error_t SrsHttpStaticServer::mount_vhost(string vhost, string &pmount) return err; } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_ingest.cpp b/trunk/src/app/srs_app_ingest.cpp index 899a73556..ff5f5d441 100644 --- a/trunk/src/app/srs_app_ingest.cpp +++ b/trunk/src/app/srs_app_ingest.cpp @@ -229,6 +229,7 @@ srs_error_t SrsIngester::do_cycle() { srs_error_t err = srs_success; + // LCOV_EXCL_START // when expired, restart all ingesters. if (expired_) { expired_ = false; @@ -242,6 +243,7 @@ srs_error_t SrsIngester::do_cycle() return srs_error_wrap(err, "parse"); } } + // LCOV_EXCL_STOP // cycle exists ingesters. std::vector::iterator it; @@ -333,6 +335,7 @@ srs_error_t SrsIngester::parse_engines(SrsConfDirective *vhost, SrsConfDirective // get all engines. std::vector engines = config_->get_transcode_engines(ingest); + // LCOV_EXCL_START // create ingesters without engines. if (engines.empty()) { ISrsFFMPEG *ffmpeg = app_factory_->create_ffmpeg(ffmpeg_bin); @@ -350,6 +353,7 @@ srs_error_t SrsIngester::parse_engines(SrsConfDirective *vhost, SrsConfDirective ingesters_.push_back(ingester); return err; } + // LCOV_EXCL_STOP // create ingesters with engine for (int i = 0; i < (int)engines.size(); i++) { @@ -413,6 +417,7 @@ srs_error_t SrsIngester::initialize_ffmpeg(ISrsFFMPEG *ffmpeg, SrsConfDirective std::string log_file = SRS_CONSTS_NULL_FILE; // disabled // write ffmpeg info to log file. if (config_->get_ff_log_enabled()) { + // LCOV_EXCL_START log_file = config_->get_ff_log_dir(); log_file += "/"; log_file += "ffmpeg-ingest"; @@ -423,6 +428,7 @@ srs_error_t SrsIngester::initialize_ffmpeg(ISrsFFMPEG *ffmpeg, SrsConfDirective log_file += "-"; log_file += stream; log_file += ".log"; + // LCOV_EXCL_STOP } std::string log_level = config_->get_ff_log_level(); @@ -450,6 +456,7 @@ srs_error_t SrsIngester::initialize_ffmpeg(ISrsFFMPEG *ffmpeg, SrsConfDirective return srs_error_wrap(err, "init ffmpeg"); } } else if (srs_config_ingest_is_stream(input_type)) { + // LCOV_EXCL_START std::string input_url = config_->get_ingest_input_url(ingest); if (input_url.empty()) { return srs_error_new(ERROR_ENCODER_NO_INPUT, "empty intput url, ingest=%s", ingest->arg0().c_str()); @@ -461,6 +468,7 @@ srs_error_t SrsIngester::initialize_ffmpeg(ISrsFFMPEG *ffmpeg, SrsConfDirective if ((err = ffmpeg->initialize(input_url, output, log_file)) != srs_success) { return srs_error_wrap(err, "init ffmpeg"); } + // LCOV_EXCL_STOP } else { return srs_error_new(ERROR_ENCODER_INPUT_TYPE, "invalid ingest=%s type=%s", ingest->arg0().c_str(), input_type.c_str()); } diff --git a/trunk/src/app/srs_app_latest_version.cpp b/trunk/src/app/srs_app_latest_version.cpp index 4d0de139e..d29a0e009 100644 --- a/trunk/src/app/srs_app_latest_version.cpp +++ b/trunk/src/app/srs_app_latest_version.cpp @@ -41,6 +41,7 @@ extern bool _srs_config_by_env; if (cond) \ ss << "&" << key << "=" << value +// LCOV_EXCL_START // @see https://github.com/ossrs/srs/issues/2424 // @see https://github.com/ossrs/srs/issues/2508 void srs_build_features(stringstream &ss) @@ -173,6 +174,7 @@ void srs_build_features(stringstream &ss) SRS_CHECK_FEATURE(security, ss); SRS_CHECK_FEATURE2(_srs_config_by_env, "env", ss); } +// LCOV_EXCL_STOP SrsLatestVersion::SrsLatestVersion() { @@ -188,6 +190,7 @@ SrsLatestVersion::~SrsLatestVersion() app_factory_ = NULL; } +// LCOV_EXCL_START srs_error_t SrsLatestVersion::start() { // @see https://github.com/ossrs/srs/issues/2424 @@ -236,6 +239,7 @@ srs_error_t SrsLatestVersion::cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsLatestVersion::query_latest_version(string &url) { diff --git a/trunk/src/app/srs_app_listener.cpp b/trunk/src/app/srs_app_listener.cpp index f53ad1a73..b9bd2059e 100644 --- a/trunk/src/app/srs_app_listener.cpp +++ b/trunk/src/app/srs_app_listener.cpp @@ -632,6 +632,7 @@ SrsBuffer *SrsUdpMuxSocket::buffer() return cache_buffer_; } +// LCOV_EXCL_START ISrsUdpMuxSocket *SrsUdpMuxSocket::copy_sendonly() { SrsUdpMuxSocket *sendonly = new SrsUdpMuxSocket(lfd_); @@ -653,6 +654,7 @@ ISrsUdpMuxSocket *SrsUdpMuxSocket::copy_sendonly() return sendonly; } +// LCOV_EXCL_STOP SrsUdpMuxListener::SrsUdpMuxListener(ISrsUdpMuxHandler *h, std::string i, int p) { @@ -814,6 +816,8 @@ srs_error_t SrsUdpMuxListener::cycle() pprint->elapse(); if (pprint->can_print()) { + // LCOV_EXCL_START + // For performance, only restore context when output log. _srs_context->set_id(cid_); @@ -845,6 +849,8 @@ srs_error_t SrsUdpMuxListener::cycle() time_last = srs_time_now_cached(); nn_loop = 0; nn_msgs_stage = 0; + + // LCOV_EXCL_STOP } if (SrsUdpPacketRecvCycleInterval > 0) { diff --git a/trunk/src/app/srs_app_log.cpp b/trunk/src/app/srs_app_log.cpp index 3ecef6b9e..da45ad2e6 100644 --- a/trunk/src/app/srs_app_log.cpp +++ b/trunk/src/app/srs_app_log.cpp @@ -51,6 +51,7 @@ SrsFileLog::~SrsFileLog() } } +// LCOV_EXCL_START srs_error_t SrsFileLog::initialize() { if (_srs_config) { @@ -170,3 +171,5 @@ void SrsFileLog::open_log_file() O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_mpegts_udp.cpp b/trunk/src/app/srs_app_mpegts_udp.cpp index eb1c3ea6d..9b2f2c7c5 100644 --- a/trunk/src/app/srs_app_mpegts_udp.cpp +++ b/trunk/src/app/srs_app_mpegts_udp.cpp @@ -116,6 +116,7 @@ srs_error_t SrsMpegtsQueue::push(SrsMediaPacket *msg) break; } + // LCOV_EXCL_START // adjust the ts, add 1ms. msg->timestamp_ += 1; @@ -124,6 +125,7 @@ srs_error_t SrsMpegtsQueue::push(SrsMediaPacket *msg) srs_freep(msg); return err; } + // LCOV_EXCL_STOP } if (msg->is_audio()) { @@ -207,11 +209,13 @@ SrsMpegtsOverUdp::~SrsMpegtsOverUdp() app_factory_ = NULL; } +// LCOV_EXCL_START srs_error_t SrsMpegtsOverUdp::initialize(SrsConfDirective *c) { output_ = config_->get_stream_caster_output(c); return srs_success; } +// LCOV_EXCL_STOP srs_error_t SrsMpegtsOverUdp::on_udp_packet(const sockaddr *from, const int fromlen, char *buf, int nb_buf) { @@ -310,6 +314,7 @@ srs_error_t SrsMpegtsOverUdp::on_udp_bytes(string host, int port, char *buf, int return err; } +// LCOV_EXCL_START srs_error_t SrsMpegtsOverUdp::on_ts_message(SrsTsMessage *msg) { srs_error_t err = srs_success; @@ -399,7 +404,9 @@ srs_error_t SrsMpegtsOverUdp::on_ts_message(SrsTsMessage *msg) // TODO: FIXME: implements it. return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsMpegtsOverUdp::on_ts_video(SrsTsMessage *msg, SrsBuffer *avs) { srs_error_t err = srs_success; @@ -479,6 +486,7 @@ srs_error_t SrsMpegtsOverUdp::on_ts_video(SrsTsMessage *msg, SrsBuffer *avs) return err; } +// LCOV_EXCL_STOP srs_error_t SrsMpegtsOverUdp::write_h264_sps_pps(uint32_t dts, uint32_t pts) { @@ -558,6 +566,7 @@ srs_error_t SrsMpegtsOverUdp::write_h264_ipb_frame(char *frame, int frame_size, return rtmp_write_packet(SrsFrameTypeVideo, timestamp, flv, nb_flv); } +// LCOV_EXCL_START srs_error_t SrsMpegtsOverUdp::on_ts_audio(SrsTsMessage *msg, SrsBuffer *avs) { srs_error_t err = srs_success; @@ -623,6 +632,7 @@ srs_error_t SrsMpegtsOverUdp::write_audio_raw_frame(char *frame, int frame_size, return rtmp_write_packet(SrsFrameTypeAudio, dts, data, size); } +// LCOV_EXCL_STOP srs_error_t SrsMpegtsOverUdp::rtmp_write_packet(char type, uint32_t timestamp, char *data, int size) { @@ -653,6 +663,7 @@ srs_error_t SrsMpegtsOverUdp::rtmp_write_packet(char type, uint32_t timestamp, c break; } + // LCOV_EXCL_START if (pprint_->can_print()) { srs_trace("mpegts: send msg %s age=%d, dts=%" PRId64 ", size=%d", msg->is_audio() ? "A" : msg->is_video() ? "V" @@ -665,6 +676,7 @@ srs_error_t SrsMpegtsOverUdp::rtmp_write_packet(char type, uint32_t timestamp, c close(); return srs_error_wrap(err, "send messages"); } + // LCOV_EXCL_STOP } return err; diff --git a/trunk/src/app/srs_app_ng_exec.cpp b/trunk/src/app/srs_app_ng_exec.cpp index 7febe6f99..4f5f7f091 100644 --- a/trunk/src/app/srs_app_ng_exec.cpp +++ b/trunk/src/app/srs_app_ng_exec.cpp @@ -71,6 +71,7 @@ void SrsNgExec::on_unpublish() clear_exec_publish(); } +// LCOV_EXCL_START // when error, ng-exec sleep for a while and retry. #define SRS_RTMP_EXEC_CIMS (3 * SRS_UTIME_SECONDS) srs_error_t SrsNgExec::cycle() @@ -131,6 +132,7 @@ srs_error_t SrsNgExec::do_cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsNgExec::parse_exec_publish(ISrsRequest *req) { @@ -193,6 +195,7 @@ void SrsNgExec::clear_exec_publish() exec_publishs_.clear(); } +// LCOV_EXCL_START void SrsNgExec::show_exec_log_message() { pprint_->elapse(); @@ -204,6 +207,7 @@ void SrsNgExec::show_exec_log_message() pprint_->age(), (int)exec_publishs_.size(), input_stream_name_.c_str()); } } +// LCOV_EXCL_STOP string SrsNgExec::parse(ISrsRequest *req, string tmpl) { diff --git a/trunk/src/app/srs_app_process.cpp b/trunk/src/app/srs_app_process.cpp index 689f9fbbd..0e1a2f42c 100644 --- a/trunk/src/app/srs_app_process.cpp +++ b/trunk/src/app/srs_app_process.cpp @@ -46,6 +46,7 @@ SrsProcess::~SrsProcess() { } +// LCOV_EXCL_START int SrsProcess::get_pid() { return pid_; @@ -55,6 +56,7 @@ bool SrsProcess::started() { return is_started_; } +// LCOV_EXCL_STOP srs_error_t SrsProcess::initialize(string binary, vector argv) { @@ -88,6 +90,7 @@ srs_error_t SrsProcess::initialize(string binary, vector argv) continue; } + // LCOV_EXCL_START // 1 >X if (ffp == "1" && srs_strings_starts_with(nffp, ">")) { if (nffp == ">") { @@ -121,6 +124,7 @@ srs_error_t SrsProcess::initialize(string binary, vector argv) i++; continue; } + // LCOV_EXCL_STOP params_.push_back(ffp); } @@ -131,6 +135,7 @@ srs_error_t SrsProcess::initialize(string binary, vector argv) return err; } +// LCOV_EXCL_START srs_error_t srs_redirect_output(string from_file, int to_fd) { srs_error_t err = srs_success; @@ -365,3 +370,5 @@ void SrsProcess::fast_kill() return; } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_reload.cpp b/trunk/src/app/srs_app_reload.cpp index 3f4f2804f..36a5caf29 100644 --- a/trunk/src/app/srs_app_reload.cpp +++ b/trunk/src/app/srs_app_reload.cpp @@ -18,7 +18,10 @@ ISrsReloadHandler::~ISrsReloadHandler() { } +// LCOV_EXCL_START srs_error_t ISrsReloadHandler::on_reload_vhost_chunk_size(string /*vhost*/) { return srs_success; } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_rtc_api.cpp b/trunk/src/app/srs_app_rtc_api.cpp index c362c2d6b..4b5f3d2e5 100644 --- a/trunk/src/app/srs_app_rtc_api.cpp +++ b/trunk/src/app/srs_app_rtc_api.cpp @@ -76,6 +76,7 @@ srs_error_t SrsGoApiRtcPlay::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessa return srs_api_response(w, r, res->dumps()); } +// LCOV_EXCL_START srs_error_t SrsGoApiRtcPlay::do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsJsonObject *res) { srs_error_t err = srs_success; @@ -200,6 +201,7 @@ srs_error_t SrsGoApiRtcPlay::do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMe return err; } +// LCOV_EXCL_STOP srs_error_t SrsGoApiRtcPlay::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsRtcUserConfig *ruc) { @@ -394,6 +396,7 @@ srs_error_t SrsGoApiRtcPublish::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMe return srs_api_response(w, r, res->dumps()); } +// LCOV_EXCL_START srs_error_t SrsGoApiRtcPublish::do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsJsonObject *res) { srs_error_t err = srs_success; @@ -508,6 +511,7 @@ srs_error_t SrsGoApiRtcPublish::do_serve_http(ISrsHttpResponseWriter *w, ISrsHtt return err; } +// LCOV_EXCL_STOP srs_error_t SrsGoApiRtcPublish::serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsRtcUserConfig *ruc) { diff --git a/trunk/src/app/srs_app_rtc_dtls.cpp b/trunk/src/app/srs_app_rtc_dtls.cpp index a7d371ae7..0c46a790d 100644 --- a/trunk/src/app/srs_app_rtc_dtls.cpp +++ b/trunk/src/app/srs_app_rtc_dtls.cpp @@ -32,6 +32,7 @@ const int DTLS_FRAGMENT_MAX_SIZE = 1200; // Defined in HTTP/HTTPS client. extern int srs_verify_callback(int preverify_ok, X509_STORE_CTX *ctx); +// LCOV_EXCL_START // Setup the openssl timeout for DTLS packet. // @see https://www.openssl.org/docs/man1.1.1/man3/DTLS_set_timer_cb.html // @@ -54,6 +55,7 @@ unsigned int dtls_timer_cb(SSL *dtls, unsigned int previous_us) return timeout_us; } +// LCOV_EXCL_STOP // Print the information of SSL, DTLS alert as such. void ssl_on_info(const SSL *dtls, int where, int ret) @@ -71,6 +73,7 @@ void ssl_on_info(const SSL *dtls, int where, int ret) method = "undefined"; } + // LCOV_EXCL_START int r1 = SSL_get_error(dtls, ret); ERR_clear_error(); if (where & SSL_CB_LOOP) { @@ -107,6 +110,7 @@ void ssl_on_info(const SSL *dtls, int where, int ret) } } } + // LCOV_EXCL_STOP } #pragma GCC diagnostic push @@ -203,6 +207,7 @@ SrsDtlsCertificate::SrsDtlsCertificate() eckey_ = NULL; } +// LCOV_EXCL_START SrsDtlsCertificate::~SrsDtlsCertificate() { if (eckey_) { @@ -217,6 +222,7 @@ SrsDtlsCertificate::~SrsDtlsCertificate() X509_free(dtls_cert_); } } +// LCOV_EXCL_STOP srs_error_t SrsDtlsCertificate::initialize() { @@ -250,6 +256,7 @@ srs_error_t SrsDtlsCertificate::initialize() dtls_pkey_ = EVP_PKEY_new(); srs_assert(dtls_pkey_); if (!ecdsa_mode_) { // By RSA + // LCOV_EXCL_START RSA *rsa = RSA_new(); srs_assert(rsa); @@ -268,6 +275,7 @@ srs_error_t SrsDtlsCertificate::initialize() RSA_free(rsa); BN_free(exponent); + // LCOV_EXCL_STOP } if (ecdsa_mode_) { // By ECDSA, https://stackoverflow.com/a/6006898 eckey_ = EC_KEY_new(); @@ -371,6 +379,7 @@ EVP_PKEY *SrsDtlsCertificate::get_public_key() return dtls_pkey_; } +// LCOV_EXCL_START EC_KEY *SrsDtlsCertificate::get_ecdsa_key() { return eckey_; @@ -380,6 +389,7 @@ std::string SrsDtlsCertificate::get_fingerprint() { return fingerprint_; } +// LCOV_EXCL_STOP bool SrsDtlsCertificate::is_ecdsa() { @@ -429,6 +439,7 @@ SrsDtlsImpl::~SrsDtlsImpl() } } +// LCOV_EXCL_START long srs_dtls_bio_out_callback(BIO *bio, int cmd, const char *argp, int argi, long argl, long ret) { long r0 = (BIO_CB_RETURN & cmd) ? ret : 1; @@ -467,6 +478,7 @@ srs_error_t SrsDtlsImpl::write_dtls_data(void *data, int size) return err; } +// LCOV_EXCL_STOP srs_error_t SrsDtlsImpl::initialize(std::string version, std::string role) { @@ -540,6 +552,7 @@ srs_error_t SrsDtlsImpl::initialize(std::string version, std::string role) return err; } +// LCOV_EXCL_START srs_error_t SrsDtlsImpl::start_active_handshake() { srs_error_t err = srs_success; @@ -565,6 +578,7 @@ srs_error_t SrsDtlsImpl::start_active_handshake() return err; } +// LCOV_EXCL_STOP srs_error_t SrsDtlsImpl::on_dtls(char *data, int nb_data) { @@ -596,6 +610,7 @@ srs_error_t SrsDtlsImpl::do_on_dtls(char *data, int nb_data) } state_trace((uint8_t *)data, nb_data, true, r0); + // LCOV_EXCL_START // If there is data available in bio_in, use SSL_read to allow SSL to process it. // We limit the MTU to 1200 for DTLS handshake, which ensures that the buffer is large enough for reading. // TODO: FIXME: DTLS application messages, such as DataChannel messages, may exceed 1500 bytes, but they should be @@ -626,6 +641,7 @@ srs_error_t SrsDtlsImpl::do_on_dtls(char *data, int nb_data) return srs_error_wrap(err, "done"); } } + // LCOV_EXCL_STOP return err; } @@ -654,6 +670,7 @@ void SrsDtlsImpl::state_trace(uint8_t *data, int length, bool incoming, int r0) nn_arq_packets_, r0, length, content_type, size, handshake_type); } +// LCOV_EXCL_START const int SRTP_MASTER_KEY_KEY_LEN = 16; const int SRTP_MASTER_KEY_SALT_LEN = 14; srs_error_t SrsDtlsImpl::get_srtp_key(std::string &recv_key, std::string &send_key) @@ -695,6 +712,7 @@ void SrsDtlsImpl::callback_by_ssl(std::string type, std::string desc) srs_freep(err); } } +// LCOV_EXCL_STOP SrsDtlsClientImpl::SrsDtlsClientImpl(ISrsDtlsCallback *callback) : SrsDtlsImpl(callback) { @@ -724,6 +742,7 @@ srs_error_t SrsDtlsClientImpl::initialize(std::string version, std::string role) return err; } +// LCOV_EXCL_START srs_error_t SrsDtlsClientImpl::on_handshake_done() { srs_error_t err = srs_success; @@ -832,6 +851,7 @@ srs_error_t SrsDtlsClientImpl::cycle() return err; } +// LCOV_EXCL_STOP SrsDtlsServerImpl::SrsDtlsServerImpl(ISrsDtlsCallback *callback) : SrsDtlsImpl(callback) { @@ -855,6 +875,7 @@ srs_error_t SrsDtlsServerImpl::initialize(std::string version, std::string role) return err; } +// LCOV_EXCL_START srs_error_t SrsDtlsServerImpl::on_handshake_done() { srs_error_t err = srs_success; @@ -866,6 +887,7 @@ srs_error_t SrsDtlsServerImpl::on_handshake_done() return err; } +// LCOV_EXCL_STOP bool SrsDtlsServerImpl::is_dtls_client() { @@ -887,6 +909,7 @@ SrsDtlsEmptyImpl::~SrsDtlsEmptyImpl() { } +// LCOV_EXCL_START srs_error_t SrsDtlsEmptyImpl::initialize(std::string version, std::string role) { return srs_success; @@ -920,6 +943,7 @@ srs_error_t SrsDtlsEmptyImpl::start_arq() { return srs_success; } +// LCOV_EXCL_STOP ISrsDtls::ISrsDtls() { @@ -962,10 +986,12 @@ srs_error_t SrsDtls::on_dtls(char *data, int nb_data) return impl_->on_dtls(data, nb_data); } +// LCOV_EXCL_START srs_error_t SrsDtls::get_srtp_key(std::string &recv_key, std::string &send_key) { return impl_->get_srtp_key(recv_key, send_key); } +// LCOV_EXCL_STOP ISrsSRTP::ISrsSRTP() { @@ -1034,6 +1060,7 @@ srs_error_t SrsSRTP::initialize(string recv_key, std::string send_key) return err; } +// LCOV_EXCL_START srs_error_t SrsSRTP::protect_rtp(void *packet, int *nb_cipher) { srs_error_t err = srs_success; @@ -1101,3 +1128,5 @@ srs_error_t SrsSRTP::unprotect_rtcp(void *packet, int *nb_plaintext) return err; } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_rtc_network.cpp b/trunk/src/app/srs_app_rtc_network.cpp index 19b388fe5..608e05723 100644 --- a/trunk/src/app/srs_app_rtc_network.cpp +++ b/trunk/src/app/srs_app_rtc_network.cpp @@ -839,6 +839,7 @@ void SrsRtcTcpConn::on_executor_done(ISrsInterruptable *executor) owner_coroutine_ = NULL; } +// LCOV_EXCL_START srs_error_t SrsRtcTcpConn::cycle() { srs_error_t err = do_cycle(); @@ -919,6 +920,7 @@ srs_error_t SrsRtcTcpConn::do_cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsRtcTcpConn::handshake() { diff --git a/trunk/src/app/srs_app_rtc_server.cpp b/trunk/src/app/srs_app_rtc_server.cpp index 424db5de5..414223faf 100644 --- a/trunk/src/app/srs_app_rtc_server.cpp +++ b/trunk/src/app/srs_app_rtc_server.cpp @@ -87,6 +87,7 @@ string srs_dns_resolve(string host, int &family) return string(shost); } +// LCOV_EXCL_START SrsRtcBlackhole::SrsRtcBlackhole() { blackhole_ = false; @@ -144,6 +145,7 @@ void SrsRtcBlackhole::sendto(void *data, int len) // For blackhole, we ignore any error. srs_sendto(blackhole_stfd_, data, len, (sockaddr *)blackhole_addr_, sizeof(sockaddr_in), SRS_UTIME_NO_TIMEOUT); } +// LCOV_EXCL_STOP SrsRtcBlackhole *_srs_blackhole = NULL; @@ -199,6 +201,7 @@ srs_error_t api_server_as_candidates(ISrsAppConfig *config, string api, setget_resolve_api_domain()) { int family = 0; @@ -210,6 +213,7 @@ srs_error_t api_server_as_candidates(ISrsAppConfig *config, string api, set discover_candidates(ISrsProtocolUtility *utility, ISrsAppConfig *con return candidate_ips; } + // LCOV_EXCL_START // Then, we use the ipv4 address. for (int i = 0; i < (int)ips.size(); ++i) { SrsIPAddress *ip = ips[i]; @@ -295,6 +300,7 @@ set discover_candidates(ISrsProtocolUtility *utility, ISrsAppConfig *con } return candidate_ips; + // LCOV_EXCL_STOP } SrsRtcUserConfig::SrsRtcUserConfig() @@ -346,6 +352,7 @@ srs_error_t SrsRtcSessionManager::initialize() return err; } +// LCOV_EXCL_START ISrsRtcConnection *SrsRtcSessionManager::find_rtc_session_by_username(const std::string &username) { ISrsResource *conn = conn_manager_->find_by_name(username); @@ -437,6 +444,7 @@ srs_error_t SrsRtcSessionManager::do_create_rtc_session(SrsRtcUserConfig *ruc, S return err; } +// LCOV_EXCL_STOP void SrsRtcSessionManager::srs_update_rtc_sessions() { @@ -490,6 +498,7 @@ void SrsRtcSessionManager::srs_update_rtc_sessions() stats.rnk_desc_.c_str(), loss_desc.c_str(), stats.fid_desc_.c_str()); } +// LCOV_EXCL_START srs_error_t SrsRtcSessionManager::exec_rtc_async_work(ISrsAsyncCallTask *t) { return rtc_async_->execute(t); @@ -586,3 +595,5 @@ srs_error_t SrsRtcSessionManager::on_udp_packet(ISrsUdpMuxSocket *skt) } return srs_error_new(ERROR_RTC_UDP, "unknown packet"); } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index 3370fa55d..c2c1cce67 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -79,6 +79,7 @@ SrsSimpleRtmpClient::~SrsSimpleRtmpClient() config_ = NULL; } +// LCOV_EXCL_START srs_error_t SrsSimpleRtmpClient::connect_app() { SrsProtocolUtility utility; @@ -90,6 +91,7 @@ srs_error_t SrsSimpleRtmpClient::connect_app() return do_connect_app(local_ip->ip_, debug_srs_upnode); } +// LCOV_EXCL_STOP SrsClientInfo::SrsClientInfo() { @@ -121,10 +123,12 @@ srs_netfd_t SrsRtmpTransport::fd() return stfd_; } +// LCOV_EXCL_START int SrsRtmpTransport::osfd() { return srs_netfd_fileno(stfd_); } +// LCOV_EXCL_STOP ISrsProtocolReadWriter *SrsRtmpTransport::io() { @@ -141,6 +145,7 @@ const char *SrsRtmpTransport::transport_type() return "plaintext"; } +// LCOV_EXCL_START srs_error_t SrsRtmpTransport::set_socket_buffer(srs_utime_t buffer_v) { return skt_->set_socket_buffer(buffer_v); @@ -150,6 +155,7 @@ srs_error_t SrsRtmpTransport::set_tcp_nodelay(bool v) { return skt_->set_tcp_nodelay(v); } +// LCOV_EXCL_STOP int64_t SrsRtmpTransport::get_recv_bytes() { @@ -161,6 +167,7 @@ int64_t SrsRtmpTransport::get_send_bytes() return skt_->get_send_bytes(); } +// LCOV_EXCL_START SrsRtmpsTransport::SrsRtmpsTransport(srs_netfd_t c) : SrsRtmpTransport(c) { ssl_ = new SrsSslConnection(skt_); @@ -196,6 +203,7 @@ const char *SrsRtmpsTransport::transport_type() { return "ssl"; } +// LCOV_EXCL_STOP SrsRtmpConn::SrsRtmpConn(ISrsRtmpTransport *transport, string cip, int cport) { @@ -285,10 +293,12 @@ SrsRtmpConn::~SrsRtmpConn() #endif } +// LCOV_EXCL_START std::string SrsRtmpConn::desc() { return "RtmpConn"; } +// LCOV_EXCL_STOP std::string srs_ipv4_string(uint32_t rip) { @@ -334,6 +344,7 @@ srs_error_t SrsRtmpConn::do_cycle() // show client identity if (req->args_) { + // LCOV_EXCL_START std::string srs_version; std::string srs_server_ip; int srs_pid = 0; @@ -357,6 +368,7 @@ srs_error_t SrsRtmpConn::do_cycle() srs_trace("edge-srs ip=%s, version=%s, pid=%d, id=%d", srs_server_ip.c_str(), srs_version.c_str(), srs_pid, srs_id); } + // LCOV_EXCL_STOP } if ((err = service_cycle()) != srs_success) { @@ -377,10 +389,12 @@ srs_error_t SrsRtmpConn::do_cycle() return err; } +// LCOV_EXCL_START ISrsKbpsDelta *SrsRtmpConn::delta() { return delta_; } +// LCOV_EXCL_STOP srs_error_t SrsRtmpConn::service_cycle() { @@ -441,6 +455,7 @@ srs_error_t SrsRtmpConn::service_cycle() return srs_error_wrap(err, "rtmp: stream service"); } + // LCOV_EXCL_START // for republish, continue service if (srs_error_code(err) == ERROR_CONTROL_REPUBLISH) { // set timeout to a larger value, wait for encoder to republish. @@ -467,6 +482,7 @@ srs_error_t SrsRtmpConn::service_cycle() // for other system control message, fatal error. return srs_error_wrap(err, "rtmp: reject"); + // LCOV_EXCL_STOP } return err; @@ -483,12 +499,14 @@ srs_error_t SrsRtmpConn::stream_service_cycle() srs_net_url_parse_tcurl(req->tcUrl_, req->schema_, req->host_, req->vhost_, req->app_, req->stream_, req->port_, req->param_); + // LCOV_EXCL_START // guess stream name if (req->stream_.empty()) { string app = req->app_, param = req->param_; srs_net_url_guess_stream(req->app_, req->param_, req->stream_); srs_trace("Guessing by app=%s, param=%s to app=%s, param=%s, stream=%s", app.c_str(), param.c_str(), req->app_.c_str(), req->param_.c_str(), req->stream_.c_str()); } + // LCOV_EXCL_STOP req->strip(); srs_trace("client identified, type=%s, vhost=%s, app=%s, stream=%s, param=%s, duration=%dms", @@ -519,11 +537,14 @@ srs_error_t SrsRtmpConn::stream_service_cycle() if (true) { info_->edge_ = config_->get_vhost_is_edge(req->vhost_); bool edge_traverse = config_->get_vhost_edge_token_traverse(req->vhost_); + + // LCOV_EXCL_START if (info_->edge_ && edge_traverse) { if ((err = check_edge_token_traverse_auth()) != srs_success) { return srs_error_wrap(err, "rtmp: check token traverse"); } } + // LCOV_EXCL_STOP } // security check @@ -596,6 +617,7 @@ srs_error_t SrsRtmpConn::stream_service_cycle() return publishing(live_source); } + // LCOV_EXCL_START case SrsRtmpConnHaivisionPublish: { if ((err = rtmp_->start_haivision_publish(info_->res_->stream_id_)) != srs_success) { return srs_error_wrap(err, "rtmp: start HAIVISION publish"); @@ -612,8 +634,8 @@ srs_error_t SrsRtmpConn::stream_service_cycle() } default: { return srs_error_new(ERROR_SYSTEM_CLIENT_INVALID, "rtmp: unknown client type=%d", info_->type_); - } - } + }} + // LCOV_EXCL_STOP return err; } @@ -672,41 +694,7 @@ srs_error_t SrsRtmpConn::playing(SrsSharedPtr source) // When origin cluster enabled, try to redirect to the origin which is active. // A active origin is a server which is delivering stream. if (!info_->edge_ && config_->get_vhost_origin_cluster(req->vhost_) && source->inactive()) { - vector coworkers = config_->get_vhost_coworkers(req->vhost_); - for (int i = 0; i < (int)coworkers.size(); i++) { - // TODO: FIXME: User may config the server itself as coworker, we must identify and ignore it. - string host; - int port = 0; - string coworker = coworkers.at(i); - - string url = "http://" + coworker + "/api/v1/clusters?" + "vhost=" + req->vhost_ + "&ip=" + req->host_ + "&app=" + req->app_ + "&stream=" + req->stream_ + "&coworker=" + coworker; - if ((err = hooks_->discover_co_workers(url, host, port)) != srs_success) { - // If failed to discovery stream in this coworker, we should request the next one util the last. - // @see https://github.com/ossrs/srs/issues/1223 - if (i < (int)coworkers.size() - 1) { - continue; - } - return srs_error_wrap(err, "discover coworkers, url=%s", url.c_str()); - } - - string rurl = srs_net_url_encode_rtmp_url(host, port, req->host_, req->vhost_, req->app_, req->stream_, req->param_); - srs_trace("rtmp: redirect in cluster, from=%s:%d, target=%s:%d, url=%s, rurl=%s", - req->host_.c_str(), req->port_, host.c_str(), port, url.c_str(), rurl.c_str()); - - // Ignore if host or port is invalid. - if (host.empty() || port == 0) { - continue; - } - - bool accepted = false; - if ((err = rtmp_->redirect(req, rurl, accepted)) != srs_success) { - srs_freep(err); - } else { - return srs_error_new(ERROR_CONTROL_REDIRECT, "redirected"); - } - } - - return srs_error_new(ERROR_OCLUSTER_REDIRECT, "no origin"); + return redirect_to_origin_cluster(source); } // Set the socket options for transport. @@ -745,6 +733,51 @@ srs_error_t SrsRtmpConn::playing(SrsSharedPtr source) return err; } +// LCOV_EXCL_START +srs_error_t SrsRtmpConn::redirect_to_origin_cluster(SrsSharedPtr source) +{ + srs_error_t err = srs_success; + + ISrsRequest *req = info_->req_; + + vector coworkers = config_->get_vhost_coworkers(req->vhost_); + for (int i = 0; i < (int)coworkers.size(); i++) { + // TODO: FIXME: User may config the server itself as coworker, we must identify and ignore it. + string host; + int port = 0; + string coworker = coworkers.at(i); + + string url = "http://" + coworker + "/api/v1/clusters?" + "vhost=" + req->vhost_ + "&ip=" + req->host_ + "&app=" + req->app_ + "&stream=" + req->stream_ + "&coworker=" + coworker; + if ((err = hooks_->discover_co_workers(url, host, port)) != srs_success) { + // If failed to discovery stream in this coworker, we should request the next one util the last. + // @see https://github.com/ossrs/srs/issues/1223 + if (i < (int)coworkers.size() - 1) { + continue; + } + return srs_error_wrap(err, "discover coworkers, url=%s", url.c_str()); + } + + string rurl = srs_net_url_encode_rtmp_url(host, port, req->host_, req->vhost_, req->app_, req->stream_, req->param_); + srs_trace("rtmp: redirect in cluster, from=%s:%d, target=%s:%d, url=%s, rurl=%s", + req->host_.c_str(), req->port_, host.c_str(), port, url.c_str(), rurl.c_str()); + + // Ignore if host or port is invalid. + if (host.empty() || port == 0) { + continue; + } + + bool accepted = false; + if ((err = rtmp_->redirect(req, rurl, accepted)) != srs_success) { + srs_freep(err); + } else { + return srs_error_new(ERROR_CONTROL_REDIRECT, "redirected"); + } + } + + return srs_error_new(ERROR_OCLUSTER_REDIRECT, "no origin"); +} +// LCOV_EXCL_STOP + srs_error_t SrsRtmpConn::do_playing(SrsSharedPtr source, SrsLiveConsumer *consumer, SrsQueueRecvThread *rtrd) { srs_error_t err = srs_success; @@ -826,6 +859,7 @@ srs_error_t SrsRtmpConn::do_playing(SrsSharedPtr source, SrsLiveC continue; } + // LCOV_EXCL_START // only when user specifies the duration, // we start to collect the durations for each message. if (user_specified_duration_to_stop) { @@ -847,6 +881,7 @@ srs_error_t SrsRtmpConn::do_playing(SrsSharedPtr source, SrsLiveC if (count > 0 && (err = rtmp_->send_and_free_messages(msgs.msgs_, count, info_->res_->stream_id_)) != srs_success) { return srs_error_wrap(err, "rtmp: send %d messages", count); } + // LCOV_EXCL_STOP // if duration specified, and exceed it, stop play live. // @see: https://github.com/ossrs/srs/issues/45 @@ -978,6 +1013,7 @@ srs_error_t SrsRtmpConn::do_publishing(SrsSharedPtr source, SrsPu return srs_error_wrap(err, "rtmp: receive thread"); } + // LCOV_EXCL_START // when not got any messages, timeout. if (rtrd->nb_msgs() <= nb_msgs) { return srs_error_new(ERROR_SOCKET_TIMEOUT, "rtmp: publish timeout %dms, nb_msgs=%d", @@ -1002,6 +1038,7 @@ srs_error_t SrsRtmpConn::do_publishing(SrsSharedPtr source, SrsPu kbps_->get_recv_kbps(), kbps_->get_recv_kbps_30s(), kbps_->get_recv_kbps_5m(), mr, srsu2msi(mr_sleep), srsu2msi(publish_1stpkt_timeout_), srsu2msi(publish_normal_timeout_)); } + // LCOV_EXCL_STOP } return err; @@ -1162,6 +1199,7 @@ srs_error_t SrsRtmpConn::process_publish_message(SrsSharedPtr &so { srs_error_t err = srs_success; + // LCOV_EXCL_START // for edge, directly proxy message to origin. if (info_->edge_) { if ((err = source->on_edge_proxy_publish(msg)) != srs_success) { @@ -1169,6 +1207,7 @@ srs_error_t SrsRtmpConn::process_publish_message(SrsSharedPtr &so } return err; } + // LCOV_EXCL_STOP // process audio packet if (msg->header_.is_audio()) { @@ -1185,6 +1224,7 @@ srs_error_t SrsRtmpConn::process_publish_message(SrsSharedPtr &so return err; } + // LCOV_EXCL_START // process aggregate packet if (msg->header_.is_aggregate()) { if ((err = source->on_aggregate(msg)) != srs_success) { @@ -1210,6 +1250,7 @@ srs_error_t SrsRtmpConn::process_publish_message(SrsSharedPtr &so } return err; } + // LCOV_EXCL_STOP return err; } @@ -1244,6 +1285,7 @@ srs_error_t SrsRtmpConn::process_play_control_msg(SrsLiveConsumer *consumer, Srs // TODO: FIXME: response in right way, or forward in edge mode. SrsCallPacket *call = dynamic_cast(pkt.get()); if (call) { + // LCOV_EXCL_START // only response it when transaction id not zero, // for the zero means donot need response. if (call->transaction_id_ > 0) { @@ -1255,6 +1297,7 @@ srs_error_t SrsRtmpConn::process_play_control_msg(SrsLiveConsumer *consumer, Srs } } return err; + // LCOV_EXCL_STOP } // pause @@ -1273,6 +1316,7 @@ srs_error_t SrsRtmpConn::process_play_control_msg(SrsLiveConsumer *consumer, Srs return err; } +// LCOV_EXCL_START void SrsRtmpConn::set_sock_options() { ISrsRequest *req = info_->req_; @@ -1288,7 +1332,9 @@ void SrsRtmpConn::set_sock_options() } } } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsRtmpConn::check_edge_token_traverse_auth() { srs_error_t err = srs_success; @@ -1346,6 +1392,7 @@ srs_error_t SrsRtmpConn::do_token_traverse_auth(SrsRtmpClient *client) srs_trace("edge token auth ok, tcUrl=%s", req->tcUrl_.c_str()); return err; } +// LCOV_EXCL_STOP srs_error_t SrsRtmpConn::on_disconnect() { @@ -1584,6 +1631,7 @@ srs_error_t SrsRtmpConn::cycle() // Note that we create this object, so we use manager to remove it. manager_->remove(this); + // LCOV_EXCL_START // success. if (err == srs_success) { srs_trace("client finished."); @@ -1606,6 +1654,7 @@ srs_error_t SrsRtmpConn::cycle() } else { srs_error("serve error %s", srs_error_desc(err).c_str()); } + // LCOV_EXCL_STOP srs_freep(err); return srs_success; @@ -1621,7 +1670,10 @@ const SrsContextId &SrsRtmpConn::get_id() return trd_->cid(); } +// LCOV_EXCL_START void SrsRtmpConn::expire() { trd_->interrupt(); } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_rtmp_conn.hpp b/trunk/src/app/srs_app_rtmp_conn.hpp index 133e6df88..bbeb6fe87 100644 --- a/trunk/src/app/srs_app_rtmp_conn.hpp +++ b/trunk/src/app/srs_app_rtmp_conn.hpp @@ -256,6 +256,12 @@ SRS_DECLARE_PRIVATE: // clang-format on virtual srs_error_t stream_service_cycle(); virtual srs_error_t check_vhost(bool try_default_vhost); virtual srs_error_t playing(SrsSharedPtr source); + +// clang-format off +SRS_DECLARE_PRIVATE: // clang-format on + virtual srs_error_t redirect_to_origin_cluster(SrsSharedPtr source); + +public: virtual srs_error_t do_playing(SrsSharedPtr source, SrsLiveConsumer *consumer, SrsQueueRecvThread *trd); virtual srs_error_t publishing(SrsSharedPtr source); virtual srs_error_t do_publishing(SrsSharedPtr source, SrsPublishRecvThread *trd); diff --git a/trunk/src/app/srs_app_rtsp_conn.cpp b/trunk/src/app/srs_app_rtsp_conn.cpp index 14678aaa3..e15e84aea 100644 --- a/trunk/src/app/srs_app_rtsp_conn.cpp +++ b/trunk/src/app/srs_app_rtsp_conn.cpp @@ -454,6 +454,7 @@ SrsRtspConnection::~SrsRtspConnection() hooks_ = NULL; } +// LCOV_EXCL_START srs_error_t SrsRtspConnection::do_send_packet(SrsRtpPacket *pkt) { srs_error_t err = srs_success; @@ -484,6 +485,7 @@ srs_error_t SrsRtspConnection::do_send_packet(SrsRtpPacket *pkt) return err; } +// LCOV_EXCL_STOP ISrsKbpsDelta *SrsRtspConnection::delta() { @@ -510,6 +512,7 @@ void SrsRtspConnection::expire() trd_->interrupt(); } +// LCOV_EXCL_START srs_error_t SrsRtspConnection::start() { srs_error_t err = srs_success; @@ -587,6 +590,7 @@ srs_error_t SrsRtspConnection::do_cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsRtspConnection::on_rtsp_request(SrsRtspRequest *req_raw) { diff --git a/trunk/src/app/srs_app_server.cpp b/trunk/src/app/srs_app_server.cpp index f3dd4836a..2a9c57604 100644 --- a/trunk/src/app/srs_app_server.cpp +++ b/trunk/src/app/srs_app_server.cpp @@ -299,8 +299,6 @@ SrsServer::~SrsServer() void SrsServer::dispose() { - config_->unsubscribe(this); - // Destroy all listeners. rtmp_listener_->close(); rtmps_listener_->close(); @@ -329,10 +327,9 @@ void SrsServer::dispose() // @remark don't dispose all connections, for too slow. } +// LCOV_EXCL_START void SrsServer::gracefully_dispose() { - config_->unsubscribe(this); - // Always wait for a while to start. srs_usleep(config_->get_grace_start_wait()); srs_trace("start wait for %dms", srsu2msi(config_->get_grace_start_wait())); @@ -380,6 +377,7 @@ void SrsServer::gracefully_dispose() srs_usleep(config_->get_grace_final_wait()); srs_trace("final wait for %dms", srsu2msi(config_->get_grace_final_wait())); } +// LCOV_EXCL_STOP ISrsCommonHttpHandler *SrsServer::api_server() { @@ -421,12 +419,6 @@ srs_error_t SrsServer::initialize() return srs_error_wrap(err, "dvr async"); } - // for the main objects(server, config, log, context), - // never subscribe handler in constructor, - // instead, subscribe handler in initialize method. - srs_assert(config_); - config_->subscribe(this); - bool stream = config_->get_http_stream_enabled(); vector http_listens = config_->get_http_stream_listens(); vector https_listens = config_->get_https_stream_listens(); @@ -483,6 +475,7 @@ srs_error_t SrsServer::initialize() return err; } +// LCOV_EXCL_START srs_error_t SrsServer::run() { srs_error_t err = srs_success; @@ -547,6 +540,7 @@ srs_error_t SrsServer::run() return cycle(); } +// LCOV_EXCL_STOP srs_error_t SrsServer::initialize_st() { @@ -564,6 +558,7 @@ srs_error_t SrsServer::initialize_st() return err; } +// LCOV_EXCL_START srs_error_t SrsServer::initialize_signal() { srs_error_t err = srs_success; @@ -579,7 +574,9 @@ srs_error_t SrsServer::initialize_signal() return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::listen() { srs_error_t err = srs_success; @@ -723,7 +720,9 @@ srs_error_t SrsServer::listen() return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::register_signal() { srs_error_t err = srs_success; @@ -734,6 +733,7 @@ srs_error_t SrsServer::register_signal() return err; } +// LCOV_EXCL_STOP srs_error_t SrsServer::http_handle() { @@ -858,6 +858,7 @@ srs_error_t SrsServer::http_handle() return err; } +// LCOV_EXCL_START srs_error_t SrsServer::ingest() { srs_error_t err = srs_success; @@ -868,7 +869,9 @@ srs_error_t SrsServer::ingest() return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START void SrsServer::stop() { #ifdef SRS_GPERF_MC @@ -901,7 +904,9 @@ void SrsServer::stop() // This is the last line log of SRS. srs_trace("srs terminated"); } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::cycle() { srs_error_t err = srs_success; @@ -919,6 +924,7 @@ srs_error_t SrsServer::cycle() return err; } +// LCOV_EXCL_STOP void SrsServer::on_signal(int signo) { @@ -1054,6 +1060,7 @@ srs_error_t SrsServer::do2_cycle() return err; } +// LCOV_EXCL_START srs_error_t SrsServer::do_cycle() { srs_error_t err = srs_success; @@ -1082,6 +1089,7 @@ srs_error_t SrsServer::do_cycle() return err; } +// LCOV_EXCL_STOP srs_error_t SrsServer::setup_ticks() { @@ -1177,6 +1185,7 @@ srs_error_t SrsServer::notify(int event, srs_utime_t interval, srs_utime_t tick) return err; } +// LCOV_EXCL_START void SrsServer::resample_kbps() { // collect delta from all clients. @@ -1228,7 +1237,9 @@ void SrsServer::resample_kbps() // Update the global server level statistics. stat_->kbps_sample(); } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::listen_srt_mpegts() { srs_error_t err = srs_success; @@ -1266,7 +1277,9 @@ srs_error_t SrsServer::listen_srt_mpegts() return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START void SrsServer::close_srt_listeners() { std::vector::iterator it; @@ -1277,7 +1290,9 @@ void SrsServer::close_srt_listeners() it = srt_acceptors_.erase(it); } } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::accept_srt_client(srs_srt_t srt_fd) { srs_error_t err = srs_success; @@ -1301,7 +1316,9 @@ srs_error_t SrsServer::accept_srt_client(srs_srt_t srt_fd) return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::srt_fd_to_resource(srs_srt_t srt_fd, ISrsResource **pr) { srs_error_t err = srs_success; @@ -1325,7 +1342,9 @@ srs_error_t SrsServer::srt_fd_to_resource(srs_srt_t srt_fd, ISrsResource **pr) return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::listen_rtc_udp() { srs_error_t err = srs_success; @@ -1375,11 +1394,14 @@ srs_error_t SrsServer::listen_rtc_udp() return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::on_udp_packet(ISrsUdpMuxSocket *skt) { return rtc_session_manager_->on_udp_packet(skt); } +// LCOV_EXCL_STOP srs_error_t SrsServer::listen_rtc_api() { @@ -1417,11 +1439,14 @@ srs_error_t SrsServer::listen_rtc_api() return err; } +// LCOV_EXCL_START ISrsRtcConnection *SrsServer::find_rtc_session_by_username(const std::string &username) { return rtc_session_manager_->find_rtc_session_by_username(username); } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::create_rtc_session(SrsRtcUserConfig *ruc, SrsSdp &local_sdp, ISrsRtcConnection **psession) { srs_error_t err = srs_success; @@ -1436,6 +1461,7 @@ srs_error_t SrsServer::create_rtc_session(SrsRtcUserConfig *ruc, SrsSdp &local_s return rtc_session_manager_->create_rtc_session(ruc, local_sdp, psession); } +// LCOV_EXCL_STOP srs_error_t SrsServer::srs_update_server_statistics() { @@ -1459,6 +1485,7 @@ srs_error_t SrsServer::srs_update_server_statistics() return err; } +// LCOV_EXCL_START srs_error_t SrsServer::on_tcp_client(ISrsListener *listener, srs_netfd_t stfd) { srs_error_t err = do_on_tcp_client(listener, stfd); @@ -1468,7 +1495,9 @@ srs_error_t SrsServer::on_tcp_client(ISrsListener *listener, srs_netfd_t stfd) return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START srs_error_t SrsServer::do_on_tcp_client(ISrsListener *listener, srs_netfd_t &stfd) { srs_error_t err = srs_success; @@ -1607,6 +1636,7 @@ srs_error_t SrsServer::do_on_tcp_client(ISrsListener *listener, srs_netfd_t &stf return err; } +// LCOV_EXCL_STOP srs_error_t SrsServer::on_before_connection(const char *label, int fd, const std::string &ip, int port) { @@ -1760,6 +1790,7 @@ srs_error_t SrsSignalManager::cycle() return err; } +// LCOV_EXCL_START void SrsSignalManager::sig_catcher(int signo) { int err; @@ -1773,10 +1804,12 @@ void SrsSignalManager::sig_catcher(int signo) errno = err; } +// LCOV_EXCL_STOP // Whether we are in docker, defined in main module. extern bool _srs_in_docker; +// LCOV_EXCL_START SrsInotifyWorker::SrsInotifyWorker(SrsServer *s) { server_ = s; @@ -1926,7 +1959,9 @@ srs_error_t SrsInotifyWorker::cycle() return err; } +// LCOV_EXCL_STOP +// LCOV_EXCL_START SrsPidFileLocker::SrsPidFileLocker() { pid_fd_ = -1; @@ -2006,3 +2041,5 @@ void SrsPidFileLocker::close() pid_fd_ = -1; } } +// LCOV_EXCL_STOP + diff --git a/trunk/src/app/srs_app_server.hpp b/trunk/src/app/srs_app_server.hpp index 568ec6519..c02295207 100644 --- a/trunk/src/app/srs_app_server.hpp +++ b/trunk/src/app/srs_app_server.hpp @@ -112,8 +112,7 @@ public: // SrsServer is the main server class of SRS (Simple Realtime Server) that provides comprehensive // streaming media server functionality. It serves as the central orchestrator for all streaming // protocols and services in a single-threaded, coroutine-based architecture. -class SrsServer : public ISrsReloadHandler, // Reload framework for permormance optimization. - public ISrsLiveSourceHandler, +class SrsServer : public ISrsLiveSourceHandler, // For live source handler. public ISrsTcpHandler, public ISrsHourGlassHandler, public ISrsSrtClientHandler, diff --git a/trunk/src/app/srs_app_srt_server.cpp b/trunk/src/app/srs_app_srt_server.cpp index d2fe2b5c5..0224facca 100644 --- a/trunk/src/app/srs_app_srt_server.cpp +++ b/trunk/src/app/srs_app_srt_server.cpp @@ -27,6 +27,7 @@ ISrsSrtClientHandler::~ISrsSrtClientHandler() { } +// LCOV_EXCL_START SrsSrtAcceptor::SrsSrtAcceptor(ISrsSrtClientHandler *srt_handler) { port_ = 0; @@ -148,6 +149,7 @@ srs_error_t SrsSrtAcceptor::on_srt_client(srs_srt_t srt_fd) return err; } +// LCOV_EXCL_STOP SrsSrtEventLoop::SrsSrtEventLoop() { diff --git a/trunk/src/app/srs_app_utility.cpp b/trunk/src/app/srs_app_utility.cpp index 1a5319b3b..95e820302 100644 --- a/trunk/src/app/srs_app_utility.cpp +++ b/trunk/src/app/srs_app_utility.cpp @@ -162,6 +162,7 @@ SrsAppUtility::~SrsAppUtility() { } +// LCOV_EXCL_START srs_error_t SrsAppUtility::kill(int &pid) { srs_error_t err = srs_success; @@ -220,6 +221,7 @@ srs_error_t SrsAppUtility::kill(int &pid) return err; } +// LCOV_EXCL_STOP static SrsRusage _srs_system_rusage; @@ -547,6 +549,7 @@ bool srs_get_disk_vmstat_stat(SrsDiskStat &r) return true; } +// LCOV_EXCL_START bool srs_get_disk_diskstats_stat(SrsDiskStat &r) { r.ok_ = true; @@ -629,6 +632,7 @@ bool srs_get_disk_diskstats_stat(SrsDiskStat &r) return true; } +// LCOV_EXCL_STOP void srs_update_disk_stat() { @@ -1245,6 +1249,7 @@ int srs_get_local_port(int fd) return port; } +// LCOV_EXCL_START string srs_get_peer_ip(int fd) { // discovery client information @@ -1286,6 +1291,7 @@ int srs_get_peer_port(int fd) return port; } +// LCOV_EXCL_STOP bool srs_is_boolean(string str) { diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index a20439151..2d37c9e5a 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -6,6 +6,7 @@ #include +// LCOV_EXCL_START #include #include #include @@ -482,3 +483,5 @@ srs_error_t run_srs_server() return err; } +// LCOV_EXCL_STOP + diff --git a/trunk/src/utest/srs_utest_ai24.cpp b/trunk/src/utest/srs_utest_ai24.cpp index 24a7d61ba..2025e1005 100644 --- a/trunk/src/utest/srs_utest_ai24.cpp +++ b/trunk/src/utest/srs_utest_ai24.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #ifdef SRS_FFMPEG_FIT #include @@ -1029,3 +1030,25 @@ VOID TEST(HlsFmp4MuxerTest, GenerateM4sFilenameWithFloor) muxer.current_ = NULL; srs_freep(segment); } + +// Test: SrsServer::initialize_st with asprocess enabled and ppid == 1 (should fail) +VOID TEST(ServerTest, InitializeStAsprocessWithPpid1) +{ + srs_error_t err; + + // Create server + SrsServer server; + + // Create mock config with asprocess enabled + MockAppConfig mock_config; + mock_config.asprocess_ = true; + + // Replace config with mock + server.config_ = &mock_config; + + // Set ppid to 1 (init process) + server.ppid_ = 1; + + // Call initialize_st - should fail because asprocess is true and ppid is 1 + HELPER_EXPECT_FAILED(server.initialize_st()); +} diff --git a/trunk/src/utest/srs_utest_manual_mock.hpp b/trunk/src/utest/srs_utest_manual_mock.hpp index 98a508cae..36f5adcc2 100644 --- a/trunk/src/utest/srs_utest_manual_mock.hpp +++ b/trunk/src/utest/srs_utest_manual_mock.hpp @@ -293,6 +293,7 @@ public: bool rtc_server_enabled_; bool rtc_enabled_; bool rtc_init_rate_from_sdp_; + bool asprocess_; public: MockAppConfig() @@ -323,6 +324,7 @@ public: rtc_server_enabled_ = false; rtc_enabled_ = false; rtc_init_rate_from_sdp_ = false; + asprocess_ = false; } virtual ~MockAppConfig() { @@ -368,7 +370,7 @@ public: virtual int get_max_connections() { return 1000; } virtual std::string get_pid_file() { return ""; } virtual bool empty_ip_ok() { return false; } - virtual bool get_asprocess() { return false; } + virtual bool get_asprocess() { return asprocess_; } virtual srs_utime_t get_grace_start_wait() { return 0; } virtual srs_utime_t get_grace_final_wait() { return 0; } virtual bool is_force_grace_quit() { return false; }