2021-05-31 05:42:20 +00:00
//
2023-01-01 00:45:39 +00:00
// Copyright (c) 2013-2023 The SRS Authors
2021-05-31 05:42:20 +00:00
//
2022-01-13 10:40:17 +00:00
// SPDX-License-Identifier: MIT or MulanPSL-2.0
2021-05-31 05:42:20 +00:00
//
2014-12-25 02:55:12 +00:00
# ifndef SRS_CORE_HPP
# define SRS_CORE_HPP
2019-04-22 00:19:03 +00:00
// The version config.
2022-12-28 06:20:18 +00:00
# include <srs_core_version.hpp>
2015-01-08 09:44:08 +00:00
2019-04-22 00:19:03 +00:00
// The macros generated by configure script.
2015-12-31 07:57:16 +00:00
# include <srs_auto_headers.hpp>
2019-05-04 23:44:39 +00:00
// To convert macro values to string.
// @see https://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification
# define SRS_INTERNAL_STR(v) #v
# define SRS_XSTR(v) SRS_INTERNAL_STR(v)
2019-04-22 00:19:03 +00:00
// The project informations, may sent to client in HTTP header or RTMP metadata.
2014-12-25 02:55:12 +00:00
# define RTMP_SIG_SRS_KEY "SRS"
2022-08-09 10:31:55 +00:00
# define RTMP_SIG_SRS_CODE "Bee"
2016-12-09 07:58:59 +00:00
# define RTMP_SIG_SRS_URL "https: //github.com/ossrs/srs"
2020-01-24 10:41:09 +00:00
# define RTMP_SIG_SRS_LICENSE "MIT"
2021-07-08 06:30:47 +00:00
# define SRS_CONSTRIBUTORS "https: //github.com/ossrs/srs/blob/develop/trunk/AUTHORS.md#contributors"
2017-05-06 06:05:22 +00:00
# define RTMP_SIG_SRS_VERSION SRS_XSTR(VERSION_MAJOR) "." SRS_XSTR(VERSION_MINOR) "." SRS_XSTR(VERSION_REVISION)
# define RTMP_SIG_SRS_SERVER RTMP_SIG_SRS_KEY " / " RTMP_SIG_SRS_VERSION "(" RTMP_SIG_SRS_CODE ")"
2020-08-04 12:08:21 +00:00
# define RTMP_SIG_SRS_DOMAIN "ossrs.net"
2014-12-25 02:55:12 +00:00
2019-04-22 00:19:03 +00:00
// The current stable release.
2021-12-26 09:30:51 +00:00
# define VERSION_STABLE 4
2020-10-10 08:20:05 +00:00
# define VERSION_STABLE_BRANCH SRS_XSTR(VERSION_STABLE) ".0release"
2015-03-15 00:15:04 +00:00
2021-12-26 09:50:19 +00:00
// For platform specified headers and defines.
# include <srs_core_platform.hpp>
2014-12-25 02:55:12 +00:00
2019-04-22 00:19:03 +00:00
// The time unit for timeout, interval or duration.
2019-04-11 01:27:16 +00:00
# include <srs_core_time.hpp>
// Some important performance options.
2015-03-03 09:28:07 +00:00
# include <srs_core_performance.hpp>
2014-12-25 02:55:12 +00:00
2019-04-22 00:19:03 +00:00
// To free the p and set to NULL.
// @remark The p must be a pointer T*.
2014-12-25 02:55:12 +00:00
# define srs_freep(p) \
2023-03-25 04:09:13 +00:00
delete p ; \
p = NULL ; \
2014-12-25 02:55:12 +00:00
( void ) 0
2019-04-22 00:19:03 +00:00
// Please use the freepa(T[]) to free an array, otherwise the behavior is undefined.
2015-11-02 03:05:39 +00:00
# define srs_freepa(pa) \
2023-03-25 04:09:13 +00:00
delete [ ] pa ; \
pa = NULL ; \
2015-11-02 03:05:39 +00:00
( void ) 0
2014-12-25 02:55:12 +00:00
2021-10-03 06:17:53 +00:00
// Check CPU for ST(state-threads), please read https://github.com/ossrs/state-threads/issues/22
2022-08-09 14:44:10 +00:00
# if !defined(__amd64__) && !defined(__x86_64__) && !defined(__i386__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__mips__) && !defined(__mips64) && !defined(__loongarch64) && !defined(__riscv)
# error "Only support i386 / amd64 / x86_64 / arm / aarch64 / mips / mips64 / loongarch64 / riscv cpu"
2015-09-23 07:09:59 +00:00
# endif
2014-12-25 02:55:12 +00:00
2017-06-09 03:50:35 +00:00
// Error predefined for all modules.
2017-07-29 04:45:17 +00:00
class SrsCplxError ;
typedef SrsCplxError * srs_error_t ;
2017-06-09 03:50:35 +00:00
2020-07-05 15:26:55 +00:00
# include <string>
2020-07-05 15:49:47 +00:00
// The context ID, it default to a string object, we can also use other objects.
2022-01-11 00:40:05 +00:00
// @remark User can directly use string as SrsContextId, we use struct to ensure the context is an object.
2020-07-05 15:49:47 +00:00
# if 1
2020-07-09 09:16:59 +00:00
class _SrsContextId
2020-07-05 15:26:55 +00:00
{
2020-07-09 09:16:59 +00:00
private :
2020-07-05 15:26:55 +00:00
std : : string v_ ;
2020-07-09 09:16:59 +00:00
public :
_SrsContextId ( ) ;
_SrsContextId ( const _SrsContextId & cp ) ;
2020-07-11 12:58:25 +00:00
_SrsContextId & operator = ( const _SrsContextId & cp ) ;
2020-07-10 10:06:07 +00:00
virtual ~ _SrsContextId ( ) ;
2020-07-09 09:16:59 +00:00
public :
2020-07-10 10:06:07 +00:00
const char * c_str ( ) const ;
bool empty ( ) const ;
2020-07-05 15:49:47 +00:00
// Compare the two context id. @see http://www.cplusplus.com/reference/string/string/compare/
// 0 They compare equal
// <0 Either the value of the first character that does not match is lower in the compared string, or all compared characters match but the compared string is shorter.
// >0 Either the value of the first character that does not match is greater in the compared string, or all compared characters match but the compared string is longer.
2020-07-10 10:06:07 +00:00
int compare ( const _SrsContextId & to ) const ;
2020-08-30 02:13:23 +00:00
// Set the value of context id.
_SrsContextId & set_value ( const std : : string & v ) ;
2020-07-05 15:26:55 +00:00
} ;
typedef _SrsContextId SrsContextId ;
2020-07-05 15:49:47 +00:00
# else
// Actually, we can directly user string as SrsContextId.
typedef std : : string SrsContextId ;
# endif
2020-07-05 15:26:55 +00:00
2015-09-23 07:09:59 +00:00
# endif