// // Copyright (c) 2013-2025 The SRS Authors // // SPDX-License-Identifier: MIT // #ifndef SRS_APP_RTC_API_HPP #define SRS_APP_RTC_API_HPP #include #include #include class SrsServer; class ISrsRequest; class SrsSdp; class SrsRtcUserConfig; class SrsGoApiRtcPlay : public ISrsHttpHandler { private: SrsServer *server_; SrsSecurity *security_; public: SrsGoApiRtcPlay(SrsServer *server); virtual ~SrsGoApiRtcPlay(); public: virtual srs_error_t serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r); private: virtual srs_error_t do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsJsonObject *res); public: virtual srs_error_t serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsRtcUserConfig *ruc); private: srs_error_t check_remote_sdp(const SrsSdp &remote_sdp); private: virtual srs_error_t http_hooks_on_play(ISrsRequest *req); }; class SrsGoApiRtcPublish : public ISrsHttpHandler { private: SrsServer *server_; SrsSecurity *security_; public: SrsGoApiRtcPublish(SrsServer *server); virtual ~SrsGoApiRtcPublish(); public: virtual srs_error_t serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r); private: virtual srs_error_t do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsJsonObject *res); public: virtual srs_error_t serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsRtcUserConfig *ruc); private: srs_error_t check_remote_sdp(const SrsSdp &remote_sdp); private: virtual srs_error_t http_hooks_on_publish(ISrsRequest *req); }; // See https://datatracker.ietf.org/doc/draft-ietf-wish-whip/ class SrsGoApiRtcWhip : public ISrsHttpHandler { private: SrsServer *server_; SrsGoApiRtcPublish *publish_; SrsGoApiRtcPlay *play_; public: SrsGoApiRtcWhip(SrsServer *server); virtual ~SrsGoApiRtcWhip(); public: virtual srs_error_t serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r); private: virtual srs_error_t do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsRtcUserConfig *ruc); }; class SrsGoApiRtcNACK : public ISrsHttpHandler { private: SrsServer *server_; public: SrsGoApiRtcNACK(SrsServer *server); virtual ~SrsGoApiRtcNACK(); public: virtual srs_error_t serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r); private: virtual srs_error_t do_serve_http(ISrsHttpResponseWriter *w, ISrsHttpMessage *r, SrsJsonObject *res); }; #endif