Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2013-12-14 15:56:20 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
3dd7156f0dbec00a584a5f418b682a997699f306
3dd7156f
1 parent
fd583570
refine the config buffer.
隐藏空白字符变更
内嵌
并排对比
正在显示
4 个修改的文件
包含
55 行增加
和
82 行删除
README.md
trunk/src/core/srs_core_config.cpp
trunk/src/core/srs_core_config.hpp
trunk/src/core/srs_core_error.hpp
README.md
查看文件 @
3dd7156
...
...
@@ -3,7 +3,7 @@ simple-rtmp-server
srs(simple rtmp origin live server) over state-threads.
<br/>
srs is a simple, high-performance, running in single process, origin live server.
<br/>
srs supports rtmp, HLS, transcoding, forward, http hooks.
<br/>
srs supports
vhost,
rtmp, HLS, transcoding, forward, http hooks.
<br/>
blog:
[
http://blog.csdn.net/win_lin
](
http://blog.csdn.net/win_lin
)
<br/>
see also:
[
https://github.com/winlinvip/simple-rtmp-server
](
https://github.com/winlinvip/simple-rtmp-server
)
<br/>
see also:
[
http://winlinvip.github.io/simple-rtmp-server
](
http://winlinvip.github.io/simple-rtmp-server
)
...
...
@@ -198,6 +198,7 @@ usr sys idl wai hiq siq| read writ| recv send| in out | int csw
*
nginx v1.5.0: 139524 lines
<br/>
### History
*
v0.9, 2013-12-14, support reload the hls/forwarder/transcoder.
*
v0.9, 2013-12-14, refine the thread model for the retry threads.
*
v0.9, 2013-12-10, auto install depends tools/libs on centos/ubuntu.
*
v0.8, 2013-12-08, v0.8 released. 19186 lines.
...
...
trunk/src/core/srs_core_config.cpp
查看文件 @
3dd7156
...
...
@@ -58,15 +58,35 @@ bool is_common_space(char ch)
return
(
ch
==
' '
||
ch
==
'\t'
||
ch
==
CR
||
ch
==
LF
);
}
#define CONF_BUFFER_SIZE 1024 * 1024
class
SrsFileBuffer
{
private
:
int
fd
;
// last available position.
char
*
last
;
// end of buffer.
char
*
end
;
public
:
// start of buffer.
char
*
start
;
// current consumed position.
char
*
pos
;
// current parsed line.
int
line
;
SrsFileBuffer
();
virtual
~
SrsFileBuffer
();
virtual
int
fullfill
(
const
char
*
filename
);
virtual
bool
empty
();
};
SrsFileBuffer
::
SrsFileBuffer
()
{
fd
=
-
1
;
line
=
0
;
pos
=
last
=
start
=
new
char
[
CONF_BUFFER_SIZE
];
end
=
start
+
CONF_BUFFER_SIZE
;
pos
=
last
=
start
=
NULL
;
end
=
start
;
}
SrsFileBuffer
::~
SrsFileBuffer
()
...
...
@@ -77,7 +97,7 @@ SrsFileBuffer::~SrsFileBuffer()
srs_freepa
(
start
);
}
int
SrsFileBuffer
::
open
(
const
char
*
filename
)
int
SrsFileBuffer
::
fullfill
(
const
char
*
filename
)
{
assert
(
fd
==
-
1
);
...
...
@@ -88,9 +108,29 @@ int SrsFileBuffer::open(const char* filename)
line
=
1
;
int
size
=
FILE_SIZE
(
fd
)
-
FILE_OFFSET
(
fd
);
if
(
size
<=
0
)
{
return
ERROR_SYSTEM_CONFIG_EOF
;
}
srs_freepa
(
start
);
pos
=
last
=
start
=
new
char
[
size
];
end
=
start
+
size
;
int
n
=
read
(
fd
,
start
,
size
);
if
(
n
!=
size
)
{
srs_error
(
"read file read error. expect %d, actual %d bytes."
,
size
,
n
);
return
ERROR_SYSTEM_CONFIG_INVALID
;
}
return
ERROR_SUCCESS
;
}
bool
SrsFileBuffer
::
empty
()
{
return
pos
>=
end
;
}
SrsConfDirective
::
SrsConfDirective
()
{
}
...
...
@@ -156,7 +196,7 @@ int SrsConfDirective::parse(const char* filename)
SrsFileBuffer
buffer
;
if
((
ret
=
buffer
.
open
(
filename
))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
buffer
.
fullfill
(
filename
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
...
...
@@ -240,11 +280,15 @@ int SrsConfDirective::read_token(SrsFileBuffer* buffer, std::vector<std::string>
bool
last_space
=
true
;
while
(
true
)
{
if
((
ret
=
refill_buffer
(
buffer
,
d_quoted
,
s_quoted
,
startline
,
pstart
))
!=
ERROR_SUCCESS
)
{
if
(
buffer
->
empty
())
{
ret
=
ERROR_SYSTEM_CONFIG_EOF
;
if
(
!
args
.
empty
()
||
!
last_space
)
{
srs_error
(
"line %d: unexpected end of file, expecting ; or
\"
}
\"
"
,
buffer
->
line
);
return
ERROR_SYSTEM_CONFIG_INVALID
;
}
srs_error
(
"end of file. ret=%d"
,
ret
);
return
ret
;
}
...
...
@@ -363,59 +407,6 @@ int SrsConfDirective::read_token(SrsFileBuffer* buffer, std::vector<std::string>
return
ret
;
}
int
SrsConfDirective
::
refill_buffer
(
SrsFileBuffer
*
buffer
,
bool
d_quoted
,
bool
s_quoted
,
int
startline
,
char
*&
pstart
)
{
int
ret
=
ERROR_SUCCESS
;
if
(
buffer
->
pos
<
buffer
->
last
)
{
return
ret
;
}
int
size
=
FILE_SIZE
(
buffer
->
fd
)
-
FILE_OFFSET
(
buffer
->
fd
);
if
(
size
>
CONF_BUFFER_SIZE
)
{
ret
=
ERROR_SYSTEM_CONFIG_TOO_LARGE
;
srs_error
(
"config file too large, max=%d, actual=%d, ret=%d"
,
CONF_BUFFER_SIZE
,
size
,
ret
);
return
ret
;
}
if
(
size
<=
0
)
{
return
ERROR_SYSTEM_CONFIG_EOF
;
}
int
len
=
buffer
->
pos
-
buffer
->
start
;
if
(
len
>=
CONF_BUFFER_SIZE
)
{
buffer
->
line
=
startline
;
if
(
!
d_quoted
&&
!
s_quoted
)
{
srs_error
(
"line %d: too long parameter
\"
%*s...
\"
started"
,
buffer
->
line
,
10
,
buffer
->
start
);
}
else
{
srs_error
(
"line %d: too long parameter, "
"probably missing terminating '%c' character"
,
buffer
->
line
,
d_quoted
?
'"'
:
'\''
);
}
return
ERROR_SYSTEM_CONFIG_INVALID
;
}
if
(
len
)
{
memmove
(
buffer
->
start
,
pstart
,
len
);
}
size
=
srs_min
(
size
,
buffer
->
end
-
(
buffer
->
start
+
len
));
int
n
=
read
(
buffer
->
fd
,
buffer
->
start
+
len
,
size
);
if
(
n
!=
size
)
{
srs_error
(
"read file read error. expect %d, actual %d bytes."
,
size
,
n
);
return
ERROR_SYSTEM_CONFIG_INVALID
;
}
buffer
->
pos
=
buffer
->
start
+
len
;
buffer
->
last
=
buffer
->
pos
+
n
;
pstart
=
buffer
->
start
;
return
ret
;
}
SrsConfig
*
config
=
new
SrsConfig
();
SrsConfig
::
SrsConfig
()
...
...
trunk/src/core/srs_core_config.hpp
查看文件 @
3dd7156
...
...
@@ -49,24 +49,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// in ms, for HLS aac flush the audio
#define SRS_CONF_DEFAULT_AAC_DELAY 300
class
SrsFileBuffer
{
public
:
int
fd
;
int
line
;
// start of buffer.
char
*
start
;
// end of buffer.
char
*
end
;
// current consumed position.
char
*
pos
;
// last available position.
char
*
last
;
SrsFileBuffer
();
virtual
~
SrsFileBuffer
();
virtual
int
open
(
const
char
*
filename
);
};
class
SrsFileBuffer
;
class
SrsConfDirective
{
...
...
@@ -89,7 +72,6 @@ public:
enum
SrsDirectiveType
{
parse_file
,
parse_block
};
virtual
int
parse_conf
(
SrsFileBuffer
*
buffer
,
SrsDirectiveType
type
);
virtual
int
read_token
(
SrsFileBuffer
*
buffer
,
std
::
vector
<
std
::
string
>&
args
);
virtual
int
refill_buffer
(
SrsFileBuffer
*
buffer
,
bool
d_quoted
,
bool
s_quoted
,
int
startline
,
char
*&
pstart
);
};
/**
...
...
trunk/src/core/srs_core_error.hpp
查看文件 @
3dd7156
...
...
@@ -83,9 +83,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define ERROR_SYSTEM_CONFIG_EOF 409
#define ERROR_SYSTEM_STREAM_BUSY 410
#define ERROR_SYSTEM_IP_INVALID 411
#define ERROR_SYSTEM_CONFIG_TOO_LARGE 412
#define ERROR_SYSTEM_FORWARD_LOOP 413
#define ERROR_SYSTEM_WAITPID 414
#define ERROR_SYSTEM_FORWARD_LOOP 412
#define ERROR_SYSTEM_WAITPID 413
// see librtmp.
// failed when open ssl create the dh
...
...
请
注册
或
登录
后发表评论