2017-03-25 09:21:39 +00:00
/**
* The MIT License ( MIT )
*
2019-12-30 02:10:35 +00:00
* Copyright ( c ) 2013 - 2020 Winlin
2017-03-25 09:21:39 +00:00
*
* Permission is hereby granted , free of charge , to any person obtaining a copy of
* this software and associated documentation files ( the " Software " ) , to deal in
* the Software without restriction , including without limitation the rights to
* use , copy , modify , merge , publish , distribute , sublicense , and / or sell copies of
* the Software , and to permit persons to whom the Software is furnished to do so ,
* subject to the following conditions :
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY , FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER
* IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE .
*/
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.
2021-03-15 06:11:34 +00:00
# include <srs_core_version5.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"
2020-02-04 09:11:22 +00:00
# define RTMP_SIG_SRS_CODE "Leo"
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"
2020-03-31 15:06:07 +00:00
# define RTMP_SIG_SRS_AUTHORS "Winlin,Wenjie,Runner365,John,B.P.Y,Lixin"
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.
2020-04-04 07:44:56 +00:00
# define VERSION_STABLE 3
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
2019-04-22 00:19:03 +00:00
// For 32bit os, 2G big file limit for unistd io,
2014-12-25 02:55:12 +00:00
// ie. read/write/lseek to use 64bits size for huge file.
# ifndef _FILE_OFFSET_BITS
# define _FILE_OFFSET_BITS 64
# endif
2019-04-22 00:19:03 +00:00
// For int64_t print using PRId64 format.
2014-12-25 02:55:12 +00:00
# ifndef __STDC_FORMAT_MACROS
# define __STDC_FORMAT_MACROS
# endif
2020-03-22 11:46:56 +00:00
// For RTC/FFMPEG build.
2020-04-29 12:02:28 +00:00
# if defined(SRS_RTC) && !defined(__STDC_CONSTANT_MACROS)
2020-03-22 11:46:56 +00:00
# define __STDC_CONSTANT_MACROS
# endif
2019-04-22 00:19:03 +00:00
// For srs-librtmp, @see https://github.com/ossrs/srs/issues/213
2014-12-25 02:55:12 +00:00
# ifndef _WIN32
# include <inttypes.h>
# endif
# include <assert.h>
# define srs_assert(expression) assert(expression)
# include <stddef.h>
# include <sys/types.h>
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) \
if ( p ) { \
delete p ; \
p = NULL ; \
} \
( 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) \
if ( pa ) { \
delete [ ] pa ; \
pa = NULL ; \
} \
( void ) 0
2014-12-25 02:55:12 +00:00
2019-12-23 09:01:02 +00:00
// For librtmp, it is pure c++ and supports all OS.
# ifndef SRS_EXPORT_LIBRTMP
2019-12-23 13:09:00 +00:00
// Checking for st(state-threads), only support the following cpus: i386/amd64/x86_64/arm
// @reamrk To patch ST for arm, read https://github.com/ossrs/state-threads/issues/1
2019-12-25 11:58:15 +00:00
# if !defined(__amd64__) && !defined(__x86_64__) && !defined(__i386__) && !defined(__arm__) && !defined(__aarch64__)
2019-12-23 09:01:02 +00:00
# error "only support i386 / amd64 / x86_64 / arm cpu"
# endif
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.
// @remark User can directly user string as SrsContextId, we user struct to ensure the context is an object.
# 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