Merge branch '4.0release' into merge/develop

pull/2943/head
winlin 4 years ago
commit 8e66e2ac96

@ -18,7 +18,8 @@ on:
# The branches below must be a subset of the branches above
branches: [ 4.0release, develop ]
schedule:
- cron: '43 11 * * 0'
# '20 19 * * 6' means 'At 19:20, only on Saturday' @see https://crontab.cronhub.io/
- cron: '20 19 * * 6'
jobs:
analyze:

9
.gitignore vendored

@ -34,5 +34,10 @@
.idea
.DS_Store
/cmake-build-debug/
/CMakeLists.txt
cmake-build-debug
/trunk/ide/srs_clion/CMakeCache.txt
/trunk/ide/srs_clion/CMakeFiles
/trunk/ide/srs_clion/Makefile
/trunk/ide/srs_clion/cmake_install.cmake
/trunk/ide/srs_clion/srs
/trunk/ide/srs_clion/Testing/

@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="srs" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="-c conf/clion.conf" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$CMakeCurrentBuildDir$/../../../" PASS_PARENT_ENVS_2="true" PROJECT_NAME="srs" TARGET_NAME="srs" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="srs" RUN_TARGET_NAME="srs">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

@ -20,6 +20,8 @@ The changelog for SRS.
## SRS 4.0 Changelog
* v4.0, 2021-07-17, Fix bugs and enhance code. 4.0.142
* v4.0, 2021-07-16, Support [CLion and cmake](https://github.com/ossrs/srs/wiki/v4_CN_IDE#clion) to build and debug SRS. 4.0.141
* v4.0, 2021-07-08, For [#2403](https://github.com/ossrs/srs/issues/2403), fix padding packets for RTMP2RTC. 4.0.140
* v4.0, 2021-07-04, For [#2424](https://github.com/ossrs/srs/issues/2424), use srandom/random to generate. 4.0.139
* v4.0, 2021-07-01, Merge [#2452](https://github.com/ossrs/srs/pull/2452), fix FFmpeg bug by updating channel_layout. 4.0.138

@ -136,6 +136,7 @@ Other API used by [ossrs.net](https://ossrs.net):
* `/service/v1/` The latest available version API.
* `/ws-service/v1/` The latest available version API, by websocket.
* `/im-service/v1/` The latest available version API, by IM.
* `/code-service/v1/` The latest available version API, by Code verification.
## Features

1
trunk/.gitignore vendored

@ -49,4 +49,3 @@ bug
/research/thread-model/thread-local
*.gcp
*.svg

@ -0,0 +1,41 @@
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
http_api {
enabled on;
listen 1985;
}
stats {
network 0;
}
rtc_server {
enabled on;
# Listen at udp://8000
listen 8000;
#
# The $CANDIDATE means fetch from env, if not configed, use * as default.
#
# The * means retrieving server IP automatically, from all network interfaces,
# @see https://github.com/ossrs/srs/wiki/v4_CN_RTCWiki#config-candidate
candidate $CANDIDATE;
}
vhost __defaultVhost__ {
rtc {
enabled on;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
}

@ -1,5 +0,0 @@
提供了各种ide。
1. UPP添加Assembly时路径指向ide即可譬如\\dev\winlin\srs\ide
2015.3 winlin

@ -1,49 +1,66 @@
cmake_minimum_required(VERSION 2.6.4)
cmake_minimum_required(VERSION 2.8.12)
project(srs CXX)
INCLUDE_DIRECTORIES(../../objs
../../objs/st
../../objs/hp
../../objs/openssl/include
../../src/core
../../src/kernel
../../src/protocol
../../src/app
../../src/service
../../objs/srtp2/include
../../objs/opus/include
../../objs/ffmpeg/include)
set(SOURCE_FILES ../../src/main/srs_main_server.cpp)
AUX_SOURCE_DIRECTORY(../../src/core SOURCE_FILES)
AUX_SOURCE_DIRECTORY(../../src/kernel SOURCE_FILES)
AUX_SOURCE_DIRECTORY(../../src/protocol SOURCE_FILES)
AUX_SOURCE_DIRECTORY(../../src/app SOURCE_FILES)
AUX_SOURCE_DIRECTORY(../../src/service SOURCE_FILES)
###########################################################
execute_process(
COMMAND bash -c "cd ${PROJECT_SOURCE_DIR}/../../ && pwd"
OUTPUT_VARIABLE SRS_DIR
)
string(STRIP ${SRS_DIR} SRS_DIR)
message("SRS home is ${SRS_DIR}")
###########################################################
# Start to configure SRS with jobs of number of CPUs.
include(ProcessorCount)
ProcessorCount(JOBS)
set(DEPS_LIBS ${SRS_DIR}/objs/st/libst.a
${SRS_DIR}/objs/openssl/lib/libssl.a
${SRS_DIR}/objs/openssl/lib/libcrypto.a
${SRS_DIR}/objs/srtp2/lib/libsrtp2.a
${SRS_DIR}/objs/opus/lib/libopus.a
${SRS_DIR}/objs/ffmpeg/lib/libavutil.a
${SRS_DIR}/objs/ffmpeg/lib/libavcodec.a
${SRS_DIR}/objs/ffmpeg/lib/libswresample.a)
foreach(DEPS_LIB ${DEPS_LIBS})
IF (NOT EXISTS ${DEPS_LIB})
MESSAGE("${DEPS_LIB} not found")
IF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
EXEC_PROGRAM("cd ${SRS_DIR} && ./configure --osx --jobs=${JOBS}")
ELSE ()
EXEC_PROGRAM("cd ${SRS_DIR} && ./configure --jobs=${JOBS}")
ENDIF ()
ELSE ()
MESSAGE("${DEPS_LIB} is ok")
ENDIF ()
endforeach()
###########################################################
# Setup SRS project
INCLUDE_DIRECTORIES(${SRS_DIR}/objs
${SRS_DIR}/objs/st
${SRS_DIR}/objs/openssl/include
${SRS_DIR}/objs/srtp2/include
${SRS_DIR}/objs/opus/include
${SRS_DIR}/objs/ffmpeg/include
${SRS_DIR}/src/core
${SRS_DIR}/src/kernel
${SRS_DIR}/src/protocol
${SRS_DIR}/src/app
${SRS_DIR}/src/service)
set(SOURCE_FILES ${SRS_DIR}/src/main/srs_main_server.cpp)
AUX_SOURCE_DIRECTORY(${SRS_DIR}/src/core SOURCE_FILES)
AUX_SOURCE_DIRECTORY(${SRS_DIR}/src/kernel SOURCE_FILES)
AUX_SOURCE_DIRECTORY(${SRS_DIR}/src/protocol SOURCE_FILES)
AUX_SOURCE_DIRECTORY(${SRS_DIR}/src/app SOURCE_FILES)
ADD_DEFINITIONS("-g -O0")
ADD_EXECUTABLE(srs ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(srs dl)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/st/libst.a)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/openssl/lib/libssl.a)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/openssl/lib/libcrypto.a)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/srtp2/lib/libsrtp2.a)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/opus/lib/libopus.a)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/ffmpeg/lib/libavutil.a)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/ffmpeg/lib/libavcodec.a)
TARGET_LINK_LIBRARIES(srs ${PROJECT_SOURCE_DIR}/../../objs/ffmpeg/lib/libswresample.a)
TARGET_LINK_LIBRARIES(srs ${DEPS_LIBS})
TARGET_LINK_LIBRARIES(srs -ldl)
IF (NOT EXISTS ${PROJECT_SOURCE_DIR}/../../objs/st/libst.a)
MESSAGE("srs_libs not found")
EXEC_PROGRAM("cd .. && ./configure")
ELSE (NOT EXISTS ${PROJECT_SOURCE_DIR}/../../objs/st/libst.a)
MESSAGE("srs_libs is ok")
ENDIF (NOT EXISTS ${PROJECT_SOURCE_DIR}/../../objs/st/libst.a)
MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/ossrs/srs/wiki/v1_CN_IDE#jetbrains")
MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/ossrs/srs/wiki/v1_CN_IDE#jetbrains")
MESSAGE(STATUS "only for jetbrains IDE, @see https://github.com/ossrs/srs/wiki/v1_CN_IDE#jetbrains")
MESSAGE(STATUS "use ./configure && make, @see https://github.com/ossrs/srs#usage")
MESSAGE(STATUS "@see https://github.com/ossrs/srs/wiki/v4_CN_IDE")

@ -1,35 +0,0 @@
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
HEADERS += \
../../src/core/*.hpp \
../../src/kernel/*.hpp \
../../src/app/*.hpp \
../../src/protocol/*.hpp
SOURCES += \
../../src/core/*.cpp \
../../src/kernel/*.cpp \
../../src/app/*.cpp \
../../src/protocol/*.cpp \
../../src/main/*.cpp
INCLUDEPATH += \
../../src/core \
../../src/kernel \
../../src/app \
../../src/protocol \
../../objs \
../../objs/st \
../../objs/hp \
../../objs/openssl/include
LIBS += \
../../objs/st/libst.a \
../../objs/hp/libhttp_parser.a \
../../objs/openssl/lib/libssl.a \
../../objs/openssl/lib/libcrypto.a \
-ldl

@ -1,263 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.1.1, 2015-03-05T20:44:44. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{fdda5a74-8ef6-4e67-b28c-c5be6c667578}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/winlin/git/ossrs/trunk/ide/build-srs-qt-Desktop-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/winlin/git/ossrs/trunk/ide/build-srs-qt-Desktop-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">srs-qt</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/winlin/git/ossrs/trunk/ide/srs_qt/srs-qt.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">srs-qt.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
<value type="QByteArray">{67c55164-ec8b-40af-90ff-d8b0b02de43a}</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">15</value>
</data>
</qtcreator>

@ -1,3 +0,0 @@
#ifndef _ide_srs_upp_icpp_init_stub
#define _ide_srs_upp_icpp_init_stub
#endif

@ -1,163 +0,0 @@
file
main readonly separator,
../../src/main/srs_main_server.cpp,
../../src/main/srs_main_ingest_hls.cpp,
auto readonly separator,
../../objs/srs_auto_headers.hpp,
core readonly separator,
../../src/core/srs_core.hpp,
../../src/core/srs_core.cpp,
../../src/core/srs_core_autofree.hpp,
../../src/core/srs_core_autofree.cpp,
../../src/core/srs_core_performance.hpp,
../../src/core/srs_core_performance.cpp,
kernel readonly separator,
../../src/kernel/srs_kernel_aac.hpp,
../../src/kernel/srs_kernel_aac.cpp,
../../src/kernel/srs_kernel_balance.hpp,
../../src/kernel/srs_kernel_balance.cpp,
../../src/kernel/srs_kernel_stream.hpp,
../../src/kernel/srs_kernel_stream.cpp,
../../src/kernel/srs_kernel_codec.hpp,
../../src/kernel/srs_kernel_codec.cpp,
../../src/kernel/srs_kernel_consts.hpp,
../../src/kernel/srs_kernel_consts.cpp,
../../src/kernel/srs_kernel_error.hpp,
../../src/kernel/srs_kernel_error.cpp,
../../src/kernel/srs_kernel_file.hpp,
../../src/kernel/srs_kernel_file.cpp,
../../src/kernel/srs_kernel_flv.hpp,
../../src/kernel/srs_kernel_flv.cpp,
../../src/kernel/srs_kernel_log.hpp,
../../src/kernel/srs_kernel_log.cpp,
../../src/kernel/srs_kernel_mp3.hpp,
../../src/kernel/srs_kernel_mp3.cpp,
../../src/kernel/srs_rtsp_stack.hpp,
../../src/kernel/srs_rtsp_stack.cpp,
../../src/kernel/srs_kernel_buffer.hpp,
../../src/kernel/srs_kernel_buffer.cpp,
../../src/kernel/srs_kernel_ts.cpp,
../../src/kernel/srs_kernel_ts.hpp,
../../src/kernel/srs_kernel_utility.hpp,
../../src/kernel/srs_kernel_utility.cpp,
protocol readonly separator,
../../src/protocol/srs_http_stack.hpp,
../../src/protocol/srs_http_stack.cpp,
../../src/protocol/srs_kafka_stack.hpp,
../../src/protocol/srs_kafka_stack.cpp,
../../src/protocol/srs_protocol_kbps.hpp,
../../src/protocol/srs_protocol_kbps.cpp,
../../src/protocol/srs_raw_avc.hpp,
../../src/protocol/srs_raw_avc.cpp,
../../src/protocol/srs_protocol_amf0.hpp,
../../src/protocol/srs_protocol_amf0.cpp,
../../src/protocol/srs_protocol_stream.hpp,
../../src/protocol/srs_protocol_stream.cpp,
../../src/protocol/srs_protocol_json.hpp,
../../src/protocol/srs_protocol_json.cpp,
../../src/protocol/srs_rtmp_handshake.hpp,
../../src/protocol/srs_rtmp_handshake.cpp,
../../src/protocol/srs_protocol_io.hpp,
../../src/protocol/srs_protocol_io.cpp,
../../src/protocol/srs_rtmp_msg_array.hpp,
../../src/protocol/srs_rtmp_msg_array.cpp,
../../src/protocol/srs_rtmp_stack.hpp,
../../src/protocol/srs_rtmp_stack.cpp,
../../src/protocol/srs_protocol_utility.hpp,
../../src/protocol/srs_protocol_utility.cpp,
app readonly separator,
../../src/app/srs_app_async_call.hpp,
../../src/app/srs_app_async_call.cpp,
../../src/app/srs_app_bandwidth.hpp,
../../src/app/srs_app_bandwidth.cpp,
../../src/app/srs_app_caster_flv.hpp,
../../src/app/srs_app_caster_flv.cpp,
../../src/app/srs_app_conn.hpp,
../../src/app/srs_app_conn.cpp,
../../src/app/srs_app_config.hpp,
../../src/app/srs_app_config.cpp,
../../src/app/srs_app_dvr.hpp,
../../src/app/srs_app_dvr.cpp,
../../src/app/srs_app_edge.hpp,
../../src/app/srs_app_edge.cpp,
../../src/app/srs_app_empty.hpp,
../../src/app/srs_app_empty.cpp,
../../src/app/srs_app_encoder.hpp,
../../src/app/srs_app_encoder.cpp,
../../src/app/srs_app_ffmpeg.hpp,
../../src/app/srs_app_ffmpeg.cpp,
../../src/app/srs_app_forward.hpp,
../../src/app/srs_app_forward.cpp,
../../src/app/srs_app_heartbeat.hpp,
../../src/app/srs_app_heartbeat.cpp,
../../src/app/srs_app_hls.hpp,
../../src/app/srs_app_hls.cpp,
../../src/app/srs_app_http_api.hpp,
../../src/app/srs_app_http_api.cpp,
../../src/app/srs_app_http_client.hpp,
../../src/app/srs_app_http_client.cpp,
../../src/app/srs_app_http_conn.hpp,
../../src/app/srs_app_http_conn.cpp,
../../src/app/srs_app_http_hooks.hpp,
../../src/app/srs_app_http_hooks.cpp,
../../src/app/srs_app_http_stream.hpp,
../../src/app/srs_app_http_stream.cpp,
../../src/app/srs_app_http_static.hpp,
../../src/app/srs_app_http_static.cpp,
../../src/app/srs_app_ingest.hpp,
../../src/app/srs_app_ingest.cpp,
../../src/app/srs_app_kafka.hpp,
../../src/app/srs_app_kafka.cpp,
../../src/app/srs_app_listener.hpp,
../../src/app/srs_app_listener.cpp,
../../src/app/srs_app_log.hpp,
../../src/app/srs_app_log.cpp,
../../src/app/srs_app_mpegts_udp.hpp,
../../src/app/srs_app_mpegts_udp.cpp,
../../src/app/srs_app_ng_exec.hpp,
../../src/app/srs_app_ng_exec.cpp,
../../src/app/srs_app_process.hpp,
../../src/app/srs_app_process.cpp,
../../src/app/srs_app_recv_thread.hpp,
../../src/app/srs_app_recv_thread.cpp,
../../src/app/srs_app_refer.hpp,
../../src/app/srs_app_refer.cpp,
../../src/app/srs_app_reload.hpp,
../../src/app/srs_app_reload.cpp,
../../src/app/srs_app_rtmp_conn.hpp,
../../src/app/srs_app_rtmp_conn.cpp,
../../src/app/srs_app_rtsp.hpp,
../../src/app/srs_app_rtsp.cpp,
../../src/app/srs_app_pithy_print.hpp,
../../src/app/srs_app_pithy_print.cpp,
../../src/app/srs_app_security.hpp,
../../src/app/srs_app_security.cpp,
../../src/app/srs_app_server.hpp,
../../src/app/srs_app_server.cpp,
../../src/app/srs_app_st.hpp,
../../src/app/srs_app_st.cpp,
../../src/app/srs_app_statistic.hpp,
../../src/app/srs_app_statistic.cpp,
../../src/app/srs_app_source.hpp,
../../src/app/srs_app_source.cpp,
../../src/app/srs_app_utility.hpp,
../../src/app/srs_app_utility.cpp,
utest readonly separator,
../../src/utest/srs_utest.hpp,
../../src/utest/srs_utest.cpp,
../../src/utest/srs_utest_amf0.hpp,
../../src/utest/srs_utest_amf0.cpp,
../../src/utest/srs_utest_config.hpp,
../../src/utest/srs_utest_config.cpp,
../../src/utest/srs_utest_core.hpp,
../../src/utest/srs_utest_core.cpp,
../../src/utest/srs_utest_kernel.hpp,
../../src/utest/srs_utest_kernel.cpp,
../../src/utest/srs_utest_protocol.hpp,
../../src/utest/srs_utest_protocol.cpp,
../../src/utest/srs_utest_reload.hpp,
../../src/utest/srs_utest_reload.cpp;
mainconfig
"" = "MAIN";

@ -1,18 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "srs", "srs.vcxproj", "{74591348-C63A-4E00-B85E-62A9D8544F6F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{74591348-C63A-4E00-B85E-62A9D8544F6F}.Debug|Win32.ActiveCfg = Debug|Win32
{74591348-C63A-4E00-B85E-62A9D8544F6F}.Release|Win32.ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

@ -1,199 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{74591348-C63A-4E00-B85E-62A9D8544F6F}</ProjectGuid>
<RootNamespace>srs</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IncludePath>$(ProjectDir)/../../src/core;$(ProjectDir)/../../src/kernel;$(ProjectDir)/../../src/protocol;$(ProjectDir)/../../src/app;$(ProjectDir)/../../src/libs;$(ProjectDir)/../../objs;$(IncludePath)</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\objs\srs_auto_headers.hpp" />
<ClInclude Include="..\..\src\app\srs_app_bandwidth.hpp" />
<ClInclude Include="..\..\src\app\srs_app_config.hpp" />
<ClInclude Include="..\..\src\app\srs_app_conn.hpp" />
<ClInclude Include="..\..\src\app\srs_app_dvr.hpp" />
<ClInclude Include="..\..\src\app\srs_app_edge.hpp" />
<ClInclude Include="..\..\src\app\srs_app_empty.hpp" />
<ClInclude Include="..\..\src\app\srs_app_encoder.hpp" />
<ClInclude Include="..\..\src\app\srs_app_ffmpeg.hpp" />
<ClInclude Include="..\..\src\app\srs_app_forward.hpp" />
<ClInclude Include="..\..\src\app\srs_app_heartbeat.hpp" />
<ClInclude Include="..\..\src\app\srs_app_hls.hpp" />
<ClInclude Include="..\..\src\app\srs_app_http_api.hpp" />
<ClInclude Include="..\..\src\app\srs_app_http_client.hpp" />
<ClInclude Include="..\..\src\app\srs_app_http_conn.hpp" />
<ClInclude Include="..\..\src\app\srs_app_http_static.hpp" />
<ClInclude Include="..\..\src\app\srs_app_http_stream.hpp" />
<ClInclude Include="..\..\src\app\srs_app_http_hooks.hpp" />
<ClInclude Include="..\..\src\app\srs_app_ingest.hpp" />
<ClInclude Include="..\..\src\app\srs_app_json.hpp" />
<ClInclude Include="..\..\src\app\srs_app_listener.hpp" />
<ClInclude Include="..\..\src\app\srs_app_log.hpp" />
<ClInclude Include="..\..\src\app\srs_app_mpegts_udp.hpp" />
<ClInclude Include="..\..\src\app\srs_app_caster_flv.hpp" />
<ClInclude Include="..\..\src\app\srs_app_pithy_print.hpp" />
<ClInclude Include="..\..\src\app\srs_app_recv_thread.hpp" />
<ClInclude Include="..\..\src\app\srs_app_refer.hpp" />
<ClInclude Include="..\..\src\app\srs_app_reload.hpp" />
<ClInclude Include="..\..\src\app\srs_app_rtmp_conn.hpp" />
<ClInclude Include="..\..\src\app\srs_app_rtsp.hpp" />
<ClInclude Include="..\..\src\app\srs_app_security.hpp" />
<ClInclude Include="..\..\src\app\srs_app_server.hpp" />
<ClInclude Include="..\..\src\app\srs_app_source.hpp" />
<ClInclude Include="..\..\src\app\srs_app_st.hpp" />
<ClInclude Include="..\..\src\app\srs_app_statistic.hpp" />
<ClInclude Include="..\..\src\app\srs_app_thread.hpp" />
<ClInclude Include="..\..\src\app\srs_app_utility.hpp" />
<ClInclude Include="..\..\src\core\srs_core.hpp" />
<ClInclude Include="..\..\src\core\srs_core_autofree.hpp" />
<ClInclude Include="..\..\src\core\srs_core_performance.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_aac.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_avc.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_stream.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_codec.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_consts.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_error.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_file.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_flv.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_log.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_mp3.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_buffer.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_ts.hpp" />
<ClInclude Include="..\..\src\kernel\srs_kernel_utility.hpp" />
<ClInclude Include="..\..\src\protocol\srs_http_stack.hpp" />
<ClInclude Include="..\..\src\protocol\srs_raw_avc.hpp" />
<ClInclude Include="..\..\src\protocol\srs_protocol_amf0.hpp" />
<ClInclude Include="..\..\src\protocol\srs_protocol_stream.hpp" />
<ClInclude Include="..\..\src\protocol\srs_rtmp_handshake.hpp" />
<ClInclude Include="..\..\src\protocol\srs_protocol_io.hpp" />
<ClInclude Include="..\..\src\protocol\srs_rtmp_msg_array.hpp" />
<ClInclude Include="..\..\src\protocol\srs_rtmp_stack.hpp" />
<ClInclude Include="..\..\src\protocol\srs_protocol_utility.hpp" />
<ClInclude Include="..\..\src\protocol\srs_rtsp_stack.hpp" />
<ClInclude Include="..\..\src\protocol\srs_protocol_kbps.hpp" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\app\srs_app_bandwidth.cpp" />
<ClCompile Include="..\..\src\app\srs_app_config.cpp" />
<ClCompile Include="..\..\src\app\srs_app_conn.cpp" />
<ClCompile Include="..\..\src\app\srs_app_dvr.cpp" />
<ClCompile Include="..\..\src\app\srs_app_edge.cpp" />
<ClCompile Include="..\..\src\app\srs_app_empty.cpp" />
<ClCompile Include="..\..\src\app\srs_app_encoder.cpp" />
<ClCompile Include="..\..\src\app\srs_app_ffmpeg.cpp" />
<ClCompile Include="..\..\src\app\srs_app_forward.cpp" />
<ClCompile Include="..\..\src\app\srs_app_heartbeat.cpp" />
<ClCompile Include="..\..\src\app\srs_app_hls.cpp" />
<ClCompile Include="..\..\src\app\srs_app_http_api.cpp" />
<ClCompile Include="..\..\src\app\srs_app_http_client.cpp" />
<ClCompile Include="..\..\src\app\srs_app_http_conn.cpp" />
<ClCompile Include="..\..\src\app\srs_app_http_static.cpp" />
<ClCompile Include="..\..\src\app\srs_app_http_stream.cpp" />
<ClCompile Include="..\..\src\app\srs_app_http_hooks.cpp" />
<ClCompile Include="..\..\src\app\srs_app_ingest.cpp" />
<ClCompile Include="..\..\src\app\srs_app_json.cpp" />
<ClCompile Include="..\..\src\app\srs_app_listener.cpp" />
<ClCompile Include="..\..\src\app\srs_app_log.cpp" />
<ClCompile Include="..\..\src\app\srs_app_mpegts_udp.cpp" />
<ClCompile Include="..\..\src\app\srs_app_caster_flv.cpp" />
<ClCompile Include="..\..\src\app\srs_app_pithy_print.cpp" />
<ClCompile Include="..\..\src\app\srs_app_recv_thread.cpp" />
<ClCompile Include="..\..\src\app\srs_app_refer.cpp" />
<ClCompile Include="..\..\src\app\srs_app_reload.cpp" />
<ClCompile Include="..\..\src\app\srs_app_rtmp_conn.cpp" />
<ClCompile Include="..\..\src\app\srs_app_rtsp.cpp" />
<ClCompile Include="..\..\src\app\srs_app_security.cpp" />
<ClCompile Include="..\..\src\app\srs_app_server.cpp" />
<ClCompile Include="..\..\src\app\srs_app_source.cpp" />
<ClCompile Include="..\..\src\app\srs_app_st.cpp" />
<ClCompile Include="..\..\src\app\srs_app_statistic.cpp" />
<ClCompile Include="..\..\src\app\srs_app_thread.cpp" />
<ClCompile Include="..\..\src\app\srs_app_utility.cpp" />
<ClCompile Include="..\..\src\core\srs_core.cpp" />
<ClCompile Include="..\..\src\core\srs_core_autofree.cpp" />
<ClCompile Include="..\..\src\core\srs_core_performance.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_aac.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_avc.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_stream.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_codec.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_consts.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_error.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_file.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_flv.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_log.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_mp3.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_buffer.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_ts.cpp" />
<ClCompile Include="..\..\src\kernel\srs_kernel_utility.cpp" />
<ClCompile Include="..\..\src\main\srs_main_server.cpp" />
<ClCompile Include="..\..\src\protocol\srs_http_stack.cpp" />
<ClCompile Include="..\..\src\protocol\srs_raw_avc.cpp" />
<ClCompile Include="..\..\src\protocol\srs_protocol_amf0.cpp" />
<ClCompile Include="..\..\src\protocol\srs_protocol_stream.cpp" />
<ClCompile Include="..\..\src\protocol\srs_rtmp_handshake.cpp" />
<ClCompile Include="..\..\src\protocol\srs_protocol_io.cpp" />
<ClCompile Include="..\..\src\protocol\srs_rtmp_msg_array.cpp" />
<ClCompile Include="..\..\src\protocol\srs_rtmp_stack.cpp" />
<ClCompile Include="..\..\src\protocol\srs_protocol_utility.cpp" />
<ClCompile Include="..\..\src\protocol\srs_rtsp_stack.cpp" />
<ClCompile Include="..\..\src\protocol\srs_protocol_kbps.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -1,384 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="..\..\src\app\srs_app_http.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_bandwidth.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_config.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_conn.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_dvr.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_edge.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_empty.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_encoder.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_ffmpeg.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_forward.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_heartbeat.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_hls.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_pithy_print.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_http_api.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_http_client.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_http_conn.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_http_static.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_http_stream.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_http_hooks.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_ingest.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_json.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_kbps.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_log.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_recv_thread.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_refer.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_reload.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_rtmp_conn.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_security.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_server.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_source.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_st.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_statistic.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_thread.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_utility.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\core\srs_core.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\core\srs_core_autofree.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\core\srs_core_performance.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_aac.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\main\srs_main_server.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_codec.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_consts.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_error.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_file.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_flv.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_log.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_mp3.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_buffer.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_utility.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_ts.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_avc.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kernel\srs_kernel_stream.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_protocol_amf0.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_rtmp_buffer.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_rtmp_handshake.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_protocol_io.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_rtmp_msg_array.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_rtmp_stack.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_protocol_utility.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_mpegts_udp.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_raw_avc.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_rtsp.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\protocol\srs_rtsp_stack.cpp">
<Filter>srs</Filter>
</ClCompile>
<ClCompile Include="..\..\src\app\srs_app_listener.cpp">
<Filter>srs</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\app\srs_app_bandwidth.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_config.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_conn.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_dvr.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_edge.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_empty.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_encoder.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_ffmpeg.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_forward.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_heartbeat.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_hls.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_http.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_http_api.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_http_client.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_http_conn.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_http_hooks.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_ingest.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_json.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_kbps.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_log.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_pithy_print.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\core\srs_core_performance.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_recv_thread.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_refer.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_reload.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_rtmp_conn.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_security.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_server.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_source.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_st.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_statistic.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_thread.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_utility.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\objs\srs_auto_headers.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\core\srs_core.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\core\srs_core_autofree.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_aac.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_codec.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_consts.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_error.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_file.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_flv.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_log.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_mp3.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_buffer.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_utility.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_ts.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_avc.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kernel\srs_kernel_stream.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_protocol_amf0.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_rtmp_buffer.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_rtmp_handshake.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_protocol_io.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_rtmp_msg_array.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_rtmp_stack.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_protocol_utility.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_mpegts_udp.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_raw_avc.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_rtsp.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\protocol\srs_rtsp_stack.hpp">
<Filter>srs</Filter>
</ClInclude>
<ClInclude Include="..\..\src\app\srs_app_listener.hpp">
<Filter>srs</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="srs">
<UniqueIdentifier>{0919b792-be75-49ed-b15a-2dc521e8394f}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:srs_xcode.xcodeproj">
</FileRef>
</Workspace>

@ -1 +0,0 @@
the xcode project for osx.

@ -80,13 +80,14 @@ string srs_path_build_timestamp(string template_path)
}
// to calendar time
struct tm* tm;
struct tm now;
// Each of these functions returns NULL in case an error was detected. @see https://linux.die.net/man/3/localtime_r
if (_srs_config->get_utc_time()) {
if ((tm = gmtime(&tv.tv_sec)) == NULL) {
if (gmtime_r(&tv.tv_sec, &now) == NULL) {
return path;
}
} else {
if ((tm = localtime(&tv.tv_sec)) == NULL) {
if (localtime_r(&tv.tv_sec, &now) == NULL) {
return path;
}
}
@ -96,32 +97,32 @@ string srs_path_build_timestamp(string template_path)
// [2006], replace with current year.
if (true) {
snprintf(buf, sizeof(buf), "%04d", 1900 + tm->tm_year);
snprintf(buf, sizeof(buf), "%04d", 1900 + now.tm_year);
path = srs_string_replace(path, "[2006]", buf);
}
// [01], replace this const to current month.
if (true) {
snprintf(buf, sizeof(buf), "%02d", 1 + tm->tm_mon);
snprintf(buf, sizeof(buf), "%02d", 1 + now.tm_mon);
path = srs_string_replace(path, "[01]", buf);
}
// [02], replace this const to current date.
if (true) {
snprintf(buf, sizeof(buf), "%02d", tm->tm_mday);
snprintf(buf, sizeof(buf), "%02d", now.tm_mday);
path = srs_string_replace(path, "[02]", buf);
}
// [15], replace this const to current hour.
if (true) {
snprintf(buf, sizeof(buf), "%02d", tm->tm_hour);
snprintf(buf, sizeof(buf), "%02d", now.tm_hour);
path = srs_string_replace(path, "[15]", buf);
}
// [04], repleace this const to current minute.
if (true) {
snprintf(buf, sizeof(buf), "%02d", tm->tm_min);
snprintf(buf, sizeof(buf), "%02d", now.tm_min);
path = srs_string_replace(path, "[04]", buf);
}
// [05], repleace this const to current second.
if (true) {
snprintf(buf, sizeof(buf), "%02d", tm->tm_sec);
snprintf(buf, sizeof(buf), "%02d", now.tm_sec);
path = srs_string_replace(path, "[05]", buf);
}
// [999], repleace this const to current millisecond.

@ -9,6 +9,6 @@
#define VERSION_MAJOR 4
#define VERSION_MINOR 0
#define VERSION_REVISION 140
#define VERSION_REVISION 142
#endif

@ -236,13 +236,14 @@ bool srs_log_header(char* buffer, int size, bool utc, bool dangerous, const char
}
// to calendar time
struct tm* tm;
struct tm now;
// Each of these functions returns NULL in case an error was detected. @see https://linux.die.net/man/3/localtime_r
if (utc) {
if ((tm = gmtime(&tv.tv_sec)) == NULL) {
if (gmtime_r(&tv.tv_sec, &now) == NULL) {
return false;
}
} else {
if ((tm = localtime(&tv.tv_sec)) == NULL) {
if (localtime_r(&tv.tv_sec, &now) == NULL) {
return false;
}
}
@ -252,24 +253,24 @@ bool srs_log_header(char* buffer, int size, bool utc, bool dangerous, const char
if (tag) {
written = snprintf(buffer, size,
"[%d-%02d-%02d %02d:%02d:%02d.%03d][%s][%d][%s][%d][%s] ",
1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, (int)(tv.tv_usec / 1000),
1900 + now.tm_year, 1 + now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, (int)(tv.tv_usec / 1000),
level, getpid(), cid.c_str(), errno, tag);
} else {
written = snprintf(buffer, size,
"[%d-%02d-%02d %02d:%02d:%02d.%03d][%s][%d][%s][%d] ",
1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, (int)(tv.tv_usec / 1000),
1900 + now.tm_year, 1 + now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, (int)(tv.tv_usec / 1000),
level, getpid(), cid.c_str(), errno);
}
} else {
if (tag) {
written = snprintf(buffer, size,
"[%d-%02d-%02d %02d:%02d:%02d.%03d][%s][%d][%s][%s] ",
1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, (int)(tv.tv_usec / 1000),
1900 + now.tm_year, 1 + now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, (int)(tv.tv_usec / 1000),
level, getpid(), cid.c_str(), tag);
} else {
written = snprintf(buffer, size,
"[%d-%02d-%02d %02d:%02d:%02d.%03d][%s][%d][%s] ",
1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, (int)(tv.tv_usec / 1000),
1900 + now.tm_year, 1 + now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, (int)(tv.tv_usec / 1000),
level, getpid(), cid.c_str());
}
}

Loading…
Cancel
Save