mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 03:41:55 +00:00
amf0 utest: boolean to any
This commit is contained in:
parent
4a0023ae63
commit
e40be6e89d
5 changed files with 113 additions and 75 deletions
|
@ -105,12 +105,18 @@ bool SrsAmf0Any::is_ecma_array()
|
|||
return marker == RTMP_AMF0_EcmaArray;
|
||||
}
|
||||
|
||||
std::string SrsAmf0Any::to_str()
|
||||
string SrsAmf0Any::to_str()
|
||||
{
|
||||
__SrsAmf0String* o = srs_amf0_convert<__SrsAmf0String>(this);
|
||||
return o->value;
|
||||
}
|
||||
|
||||
bool SrsAmf0Any::to_boolean()
|
||||
{
|
||||
__SrsAmf0Boolean* o = srs_amf0_convert<__SrsAmf0Boolean>(this);
|
||||
return o->value;
|
||||
}
|
||||
|
||||
bool SrsAmf0Any::is_object_eof()
|
||||
{
|
||||
return marker == RTMP_AMF0_ObjectEnd;
|
||||
|
@ -121,36 +127,9 @@ SrsAmf0Any* SrsAmf0Any::str(const char* value)
|
|||
return new __SrsAmf0String(value);
|
||||
}
|
||||
|
||||
__SrsAmf0String::__SrsAmf0String(const char* _value)
|
||||
SrsAmf0Any* SrsAmf0Any::boolean(bool value)
|
||||
{
|
||||
marker = RTMP_AMF0_String;
|
||||
if (_value) {
|
||||
value = _value;
|
||||
}
|
||||
}
|
||||
|
||||
__SrsAmf0String::~__SrsAmf0String()
|
||||
{
|
||||
}
|
||||
|
||||
int __SrsAmf0String::size()
|
||||
{
|
||||
return SrsAmf0Size::str(value);
|
||||
}
|
||||
|
||||
SrsAmf0Boolean::SrsAmf0Boolean(bool _value)
|
||||
{
|
||||
marker = RTMP_AMF0_Boolean;
|
||||
value = _value;
|
||||
}
|
||||
|
||||
SrsAmf0Boolean::~SrsAmf0Boolean()
|
||||
{
|
||||
}
|
||||
|
||||
int SrsAmf0Boolean::size()
|
||||
{
|
||||
return SrsAmf0Size::boolean();
|
||||
return new __SrsAmf0Boolean(value);
|
||||
}
|
||||
|
||||
SrsAmf0Number::SrsAmf0Number(double _value)
|
||||
|
@ -698,6 +677,38 @@ int SrsAmf0Size::any(SrsAmf0Any* o)
|
|||
return o->size();
|
||||
}
|
||||
|
||||
__SrsAmf0String::__SrsAmf0String(const char* _value)
|
||||
{
|
||||
marker = RTMP_AMF0_String;
|
||||
if (_value) {
|
||||
value = _value;
|
||||
}
|
||||
}
|
||||
|
||||
__SrsAmf0String::~__SrsAmf0String()
|
||||
{
|
||||
}
|
||||
|
||||
int __SrsAmf0String::size()
|
||||
{
|
||||
return SrsAmf0Size::str(value);
|
||||
}
|
||||
|
||||
__SrsAmf0Boolean::__SrsAmf0Boolean(bool _value)
|
||||
{
|
||||
marker = RTMP_AMF0_Boolean;
|
||||
value = _value;
|
||||
}
|
||||
|
||||
__SrsAmf0Boolean::~__SrsAmf0Boolean()
|
||||
{
|
||||
}
|
||||
|
||||
int __SrsAmf0Boolean::size()
|
||||
{
|
||||
return SrsAmf0Size::boolean();
|
||||
}
|
||||
|
||||
int srs_amf0_read_utf8(SrsStream* stream, std::string& value)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
@ -1046,8 +1057,7 @@ int srs_amf0_read_any(SrsStream* stream, SrsAmf0Any*& value)
|
|||
if ((ret = srs_amf0_read_string(stream, data)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
value = SrsAmf0Any::str();
|
||||
srs_amf0_convert<__SrsAmf0String>(value)->value = data;
|
||||
value = SrsAmf0Any::str(data.c_str());
|
||||
return ret;
|
||||
}
|
||||
case RTMP_AMF0_Boolean: {
|
||||
|
@ -1055,8 +1065,7 @@ int srs_amf0_read_any(SrsStream* stream, SrsAmf0Any*& value)
|
|||
if ((ret = srs_amf0_read_boolean(stream, data)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
value = new SrsAmf0Boolean();
|
||||
srs_amf0_convert<SrsAmf0Boolean>(value)->value = data;
|
||||
value = SrsAmf0Any::boolean(data);
|
||||
return ret;
|
||||
}
|
||||
case RTMP_AMF0_Number: {
|
||||
|
@ -1124,7 +1133,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value)
|
|||
return srs_amf0_write_string(stream, data);
|
||||
}
|
||||
case RTMP_AMF0_Boolean: {
|
||||
bool data = srs_amf0_convert<SrsAmf0Boolean>(value)->value;
|
||||
bool data = srs_amf0_convert<__SrsAmf0Boolean>(value)->value;
|
||||
return srs_amf0_write_boolean(stream, data);
|
||||
}
|
||||
case RTMP_AMF0_Number: {
|
||||
|
|
|
@ -65,46 +65,16 @@ public:
|
|||
* user must ensure the type is a string, or assert failed.
|
||||
*/
|
||||
virtual std::string to_str();
|
||||
/**
|
||||
* get the boolean of any when is_boolean() indicates true.
|
||||
* user must ensure the type is a is_boolean, or assert failed.
|
||||
*/
|
||||
virtual bool to_boolean();
|
||||
public:
|
||||
virtual int size() = 0;
|
||||
public:
|
||||
static SrsAmf0Any* str(const char* value = NULL);
|
||||
};
|
||||
|
||||
/**
|
||||
* read amf0 string from stream.
|
||||
* 2.4 String Type
|
||||
* string-type = string-marker UTF-8
|
||||
* @return default value is empty string.
|
||||
* @remark: use SrsAmf0Any::str() to create it.
|
||||
*/
|
||||
class __SrsAmf0String : public SrsAmf0Any
|
||||
{
|
||||
public:
|
||||
std::string value;
|
||||
|
||||
__SrsAmf0String(const char* _value);
|
||||
virtual ~__SrsAmf0String();
|
||||
|
||||
virtual int size();
|
||||
};
|
||||
|
||||
/**
|
||||
* read amf0 boolean from stream.
|
||||
* 2.4 String Type
|
||||
* boolean-type = boolean-marker U8
|
||||
* 0 is false, <> 0 is true
|
||||
* @return default value is false.
|
||||
*/
|
||||
class SrsAmf0Boolean : public SrsAmf0Any
|
||||
{
|
||||
public:
|
||||
bool value;
|
||||
|
||||
SrsAmf0Boolean(bool _value = false);
|
||||
virtual ~SrsAmf0Boolean();
|
||||
|
||||
virtual int size();
|
||||
static SrsAmf0Any* boolean(bool value = false);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -270,6 +240,42 @@ public:
|
|||
static int any(SrsAmf0Any* o);
|
||||
};
|
||||
|
||||
/**
|
||||
* read amf0 string from stream.
|
||||
* 2.4 String Type
|
||||
* string-type = string-marker UTF-8
|
||||
* @return default value is empty string.
|
||||
* @remark: use SrsAmf0Any::str() to create it.
|
||||
*/
|
||||
class __SrsAmf0String : public SrsAmf0Any
|
||||
{
|
||||
public:
|
||||
std::string value;
|
||||
|
||||
__SrsAmf0String(const char* _value);
|
||||
virtual ~__SrsAmf0String();
|
||||
|
||||
virtual int size();
|
||||
};
|
||||
|
||||
/**
|
||||
* read amf0 boolean from stream.
|
||||
* 2.4 String Type
|
||||
* boolean-type = boolean-marker U8
|
||||
* 0 is false, <> 0 is true
|
||||
* @return default value is false.
|
||||
*/
|
||||
class __SrsAmf0Boolean : public SrsAmf0Any
|
||||
{
|
||||
public:
|
||||
bool value;
|
||||
|
||||
__SrsAmf0Boolean(bool _value);
|
||||
virtual ~__SrsAmf0Boolean();
|
||||
|
||||
virtual int size();
|
||||
};
|
||||
|
||||
/**
|
||||
* read amf0 utf8 string from stream.
|
||||
* 1.3.1 Strings and UTF-8
|
||||
|
|
|
@ -283,7 +283,7 @@ int SrsRtmpClient::connect_app(string app, string tc_url)
|
|||
pkt->command_object->set("app", SrsAmf0Any::str(app.c_str()));
|
||||
pkt->command_object->set("swfUrl", SrsAmf0Any::str());
|
||||
pkt->command_object->set("tcUrl", SrsAmf0Any::str(tc_url.c_str()));
|
||||
pkt->command_object->set("fpad", new SrsAmf0Boolean(false));
|
||||
pkt->command_object->set("fpad", SrsAmf0Any::boolean(false));
|
||||
pkt->command_object->set("capabilities", new SrsAmf0Number(239));
|
||||
pkt->command_object->set("audioCodecs", new SrsAmf0Number(3575));
|
||||
pkt->command_object->set("videoCodecs", new SrsAmf0Number(252));
|
||||
|
|
|
@ -2628,7 +2628,7 @@ int SrsPlayPacket::decode(SrsStream* stream)
|
|||
// An optional Boolean value or number that specifies whether
|
||||
// to flush any previous playlist
|
||||
if (reset_value->is_boolean()) {
|
||||
reset = srs_amf0_convert<SrsAmf0Boolean>(reset_value)->value;
|
||||
reset = reset_value->to_boolean();
|
||||
} else if (reset_value->is_number()) {
|
||||
reset = (srs_amf0_convert<SrsAmf0Number>(reset_value)->value == 0 ? false : true);
|
||||
} else {
|
||||
|
|
|
@ -90,7 +90,7 @@ VOID TEST(AMF0Test, Size)
|
|||
SrsAmf0Object o;
|
||||
|
||||
size += SrsAmf0Size::utf8("sex")+SrsAmf0Size::boolean();
|
||||
o.set("sex", new SrsAmf0Boolean(true));
|
||||
o.set("sex", SrsAmf0Any::boolean(true));
|
||||
|
||||
EXPECT_EQ(size, SrsAmf0Size::object(&o));
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ VOID TEST(AMF0Test, Size)
|
|||
SrsAmf0EcmaArray o;
|
||||
|
||||
size += SrsAmf0Size::utf8("sex")+SrsAmf0Size::boolean();
|
||||
o.set("sex", new SrsAmf0Boolean(true));
|
||||
o.set("sex", SrsAmf0Any::boolean(true));
|
||||
|
||||
EXPECT_EQ(size, SrsAmf0Size::array(&o));
|
||||
}
|
||||
|
@ -281,4 +281,27 @@ VOID TEST(AMF0Test, AnyElem)
|
|||
EXPECT_TRUE(o->is_string());
|
||||
EXPECT_STREQ("winlin", o->to_str().c_str());
|
||||
}
|
||||
|
||||
// bool
|
||||
if (true) {
|
||||
o = SrsAmf0Any::boolean();
|
||||
SrsAutoFree(SrsAmf0Any, o, false);
|
||||
EXPECT_TRUE(NULL != o);
|
||||
EXPECT_TRUE(o->is_boolean());
|
||||
EXPECT_FALSE(o->to_boolean());
|
||||
}
|
||||
if (true) {
|
||||
o = SrsAmf0Any::boolean(false);
|
||||
SrsAutoFree(SrsAmf0Any, o, false);
|
||||
EXPECT_TRUE(NULL != o);
|
||||
EXPECT_TRUE(o->is_boolean());
|
||||
EXPECT_FALSE(o->to_boolean());
|
||||
}
|
||||
if (true) {
|
||||
o = SrsAmf0Any::boolean(true);
|
||||
SrsAutoFree(SrsAmf0Any, o, false);
|
||||
EXPECT_TRUE(NULL != o);
|
||||
EXPECT_TRUE(o->is_boolean());
|
||||
EXPECT_TRUE(o->to_boolean());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue