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
2014-03-08 21:06:20 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
609114a5fec447cd59f10f94844d69e867895a46
609114a5
1 parent
3691c106
amf0 utest: remove the old amf0 read any, discovery object ant use object to read itself.
隐藏空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
99 行增加
和
144 行删除
trunk/src/rtmp/srs_protocol_amf0.cpp
trunk/src/rtmp/srs_protocol_amf0.hpp
trunk/src/rtmp/srs_protocol_amf0.cpp
查看文件 @
609114a
...
...
@@ -191,6 +191,69 @@ SrsAmf0EcmaArray* SrsAmf0Any::array()
return
new
SrsAmf0EcmaArray
();
}
int
SrsAmf0Any
::
discovery
(
SrsStream
*
stream
,
SrsAmf0Any
**
ppvalue
)
{
int
ret
=
ERROR_SUCCESS
;
// detect the object-eof specially
if
(
srs_amf0_is_object_eof
(
stream
))
{
*
ppvalue
=
new
__SrsAmf0ObjectEOF
();
return
ret
;
}
// marker
if
(
!
stream
->
require
(
1
))
{
ret
=
ERROR_RTMP_AMF0_DECODE
;
srs_error
(
"amf0 read any marker failed. ret=%d"
,
ret
);
return
ret
;
}
char
marker
=
stream
->
read_1bytes
();
srs_verbose
(
"amf0 any marker success"
);
// backward the 1byte marker.
stream
->
skip
(
-
1
);
switch
(
marker
)
{
case
RTMP_AMF0_String
:
{
*
ppvalue
=
new
__SrsAmf0String
();
return
ret
;
}
case
RTMP_AMF0_Boolean
:
{
*
ppvalue
=
new
__SrsAmf0Boolean
();
return
ret
;
}
case
RTMP_AMF0_Number
:
{
*
ppvalue
=
new
__SrsAmf0Number
();
return
ret
;
}
case
RTMP_AMF0_Null
:
{
*
ppvalue
=
new
__SrsAmf0Null
();
return
ret
;
}
case
RTMP_AMF0_Undefined
:
{
*
ppvalue
=
new
__SrsAmf0Undefined
();
return
ret
;
}
case
RTMP_AMF0_Object
:
{
*
ppvalue
=
new
SrsAmf0Object
();
return
ret
;
}
case
RTMP_AMF0_EcmaArray
:
{
*
ppvalue
=
new
SrsAmf0EcmaArray
();
return
ret
;
}
case
RTMP_AMF0_Invalid
:
default
:
{
ret
=
ERROR_RTMP_AMF0_INVALID
;
srs_error
(
"invalid amf0 message type. marker=%#x, ret=%d"
,
marker
,
ret
);
return
ret
;
}
}
return
ret
;
}
__SrsUnSortedHashtable
::
__SrsUnSortedHashtable
()
{
}
...
...
@@ -893,6 +956,32 @@ int __SrsAmf0Undefined::write(SrsStream* stream)
return
srs_amf0_write_undefined
(
stream
);
}
int
srs_amf0_read_any
(
SrsStream
*
stream
,
SrsAmf0Any
**
ppvalue
)
{
int
ret
=
ERROR_SUCCESS
;
if
((
ret
=
SrsAmf0Any
::
discovery
(
stream
,
ppvalue
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"amf0 discovery any elem failed. ret=%d"
,
ret
);
return
ret
;
}
srs_assert
(
*
ppvalue
);
if
((
ret
=
(
*
ppvalue
)
->
read
(
stream
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"amf0 parse elem failed. ret=%d"
,
ret
);
srs_freep
(
*
ppvalue
);
return
ret
;
}
return
ret
;
}
int
srs_amf0_write_any
(
SrsStream
*
stream
,
SrsAmf0Any
*
value
)
{
srs_assert
(
value
!=
NULL
);
return
value
->
write
(
stream
);
}
int
srs_amf0_read_utf8
(
SrsStream
*
stream
,
std
::
string
&
value
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -1231,142 +1320,6 @@ bool srs_amf0_is_object_eof(SrsStream* stream)
return
false
;
}
int
srs_amf0_read_any
(
SrsStream
*
stream
,
SrsAmf0Any
**
ppvalue
)
{
int
ret
=
ERROR_SUCCESS
;
// detect the object-eof specially
if
(
srs_amf0_is_object_eof
(
stream
))
{
*
ppvalue
=
new
__SrsAmf0ObjectEOF
();
if
((
ret
=
(
*
ppvalue
)
->
read
(
stream
))
!=
ERROR_SUCCESS
)
{
srs_freep
(
*
ppvalue
);
return
ret
;
}
return
ret
;
}
// marker
if
(
!
stream
->
require
(
1
))
{
ret
=
ERROR_RTMP_AMF0_DECODE
;
srs_error
(
"amf0 read any marker failed. ret=%d"
,
ret
);
return
ret
;
}
char
marker
=
stream
->
read_1bytes
();
srs_verbose
(
"amf0 any marker success"
);
// backward the 1byte marker.
stream
->
skip
(
-
1
);
switch
(
marker
)
{
case
RTMP_AMF0_String
:
{
std
::
string
data
;
if
((
ret
=
srs_amf0_read_string
(
stream
,
data
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
*
ppvalue
=
SrsAmf0Any
::
str
(
data
.
c_str
());
return
ret
;
}
case
RTMP_AMF0_Boolean
:
{
bool
data
;
if
((
ret
=
srs_amf0_read_boolean
(
stream
,
data
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
*
ppvalue
=
SrsAmf0Any
::
boolean
(
data
);
return
ret
;
}
case
RTMP_AMF0_Number
:
{
double
data
;
if
((
ret
=
srs_amf0_read_number
(
stream
,
data
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
*
ppvalue
=
SrsAmf0Any
::
number
(
data
);
return
ret
;
}
case
RTMP_AMF0_Null
:
{
stream
->
skip
(
1
);
*
ppvalue
=
new
__SrsAmf0Null
();
return
ret
;
}
case
RTMP_AMF0_Undefined
:
{
stream
->
skip
(
1
);
*
ppvalue
=
new
__SrsAmf0Undefined
();
return
ret
;
}
case
RTMP_AMF0_Object
:
{
SrsAmf0Object
*
p
=
NULL
;
if
((
ret
=
srs_amf0_read_object
(
stream
,
p
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
*
ppvalue
=
p
;
return
ret
;
}
case
RTMP_AMF0_EcmaArray
:
{
SrsAmf0EcmaArray
*
p
=
NULL
;
if
((
ret
=
srs_amf0_read_ecma_array
(
stream
,
p
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
*
ppvalue
=
p
;
return
ret
;
}
case
RTMP_AMF0_Invalid
:
default
:
{
ret
=
ERROR_RTMP_AMF0_INVALID
;
srs_error
(
"invalid amf0 message type. marker=%#x, ret=%d"
,
marker
,
ret
);
return
ret
;
}
}
return
ret
;
}
int
srs_amf0_write_any
(
SrsStream
*
stream
,
SrsAmf0Any
*
value
)
{
int
ret
=
ERROR_SUCCESS
;
srs_assert
(
value
!=
NULL
);
switch
(
value
->
marker
)
{
case
RTMP_AMF0_String
:
{
std
::
string
data
=
srs_amf0_convert
<
__SrsAmf0String
*>
(
value
)
->
value
;
return
srs_amf0_write_string
(
stream
,
data
);
}
case
RTMP_AMF0_Boolean
:
{
bool
data
=
srs_amf0_convert
<
__SrsAmf0Boolean
*>
(
value
)
->
value
;
return
srs_amf0_write_boolean
(
stream
,
data
);
}
case
RTMP_AMF0_Number
:
{
double
data
=
srs_amf0_convert
<
__SrsAmf0Number
*>
(
value
)
->
value
;
return
srs_amf0_write_number
(
stream
,
data
);
}
case
RTMP_AMF0_Null
:
{
return
srs_amf0_write_null
(
stream
);
}
case
RTMP_AMF0_Undefined
:
{
return
srs_amf0_write_undefined
(
stream
);
}
case
RTMP_AMF0_ObjectEnd
:
{
__SrsAmf0ObjectEOF
*
p
=
srs_amf0_convert
<
__SrsAmf0ObjectEOF
*>
(
value
);
return
p
->
write
(
stream
);
}
case
RTMP_AMF0_Object
:
{
SrsAmf0Object
*
p
=
srs_amf0_convert
<
SrsAmf0Object
*>
(
value
);
return
srs_amf0_write_object
(
stream
,
p
);
}
case
RTMP_AMF0_EcmaArray
:
{
SrsAmf0EcmaArray
*
p
=
srs_amf0_convert
<
SrsAmf0EcmaArray
*>
(
value
);
return
srs_amf0_write_ecma_array
(
stream
,
p
);
}
case
RTMP_AMF0_Invalid
:
default
:
{
ret
=
ERROR_RTMP_AMF0_INVALID
;
srs_error
(
"invalid amf0 message type. marker=%#x, ret=%d"
,
value
->
marker
,
ret
);
return
ret
;
}
}
return
ret
;
}
int
srs_amf0_write_object_eof
(
SrsStream
*
stream
,
__SrsAmf0ObjectEOF
*
value
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
trunk/src/rtmp/srs_protocol_amf0.hpp
查看文件 @
609114a
...
...
@@ -125,6 +125,8 @@ public:
static
SrsAmf0Object
*
object
();
static
SrsAmf0Any
*
object_eof
();
static
SrsAmf0EcmaArray
*
array
();
public
:
static
int
discovery
(
SrsStream
*
stream
,
SrsAmf0Any
**
ppvalue
);
};
/**
...
...
@@ -259,7 +261,7 @@ class __SrsAmf0String : public SrsAmf0Any
public
:
std
::
string
value
;
__SrsAmf0String
(
const
char
*
_value
);
__SrsAmf0String
(
const
char
*
_value
=
NULL
);
virtual
~
__SrsAmf0String
();
virtual
int
size
();
...
...
@@ -279,7 +281,7 @@ class __SrsAmf0Boolean : public SrsAmf0Any
public
:
bool
value
;
__SrsAmf0Boolean
(
bool
_value
);
__SrsAmf0Boolean
(
bool
_value
=
false
);
virtual
~
__SrsAmf0Boolean
();
virtual
int
size
();
...
...
@@ -298,7 +300,7 @@ class __SrsAmf0Number : public SrsAmf0Any
public
:
double
value
;
__SrsAmf0Number
(
double
_value
);
__SrsAmf0Number
(
double
_value
=
0.0
);
virtual
~
__SrsAmf0Number
();
virtual
int
size
();
...
...
@@ -339,6 +341,11 @@ public:
};
/**
* read anything from stream.
*/
extern
int
srs_amf0_read_any
(
SrsStream
*
stream
,
SrsAmf0Any
**
ppvalue
);
/**
* read amf0 string from stream.
* 2.4 String Type
* string-type = string-marker UTF-8
...
...
@@ -380,11 +387,6 @@ extern int srs_amf0_read_undefined(SrsStream* stream);
extern
int
srs_amf0_write_undefined
(
SrsStream
*
stream
);
/**
* read anything from stream.
*/
extern
int
srs_amf0_read_any
(
SrsStream
*
stream
,
SrsAmf0Any
**
ppvalue
);
/**
* read amf0 object from stream.
* 2.5 Object Type
* anonymous-object-type = object-marker *(object-property)
...
...
请
注册
或
登录
后发表评论