正在显示
3 个修改的文件
包含
120 行增加
和
19 行删除
| @@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 24 | #include <srs_protocol_amf0.hpp> | 24 | #include <srs_protocol_amf0.hpp> |
| 25 | 25 | ||
| 26 | #include <utility> | 26 | #include <utility> |
| 27 | +#include <vector> | ||
| 27 | using namespace std; | 28 | using namespace std; |
| 28 | 29 | ||
| 29 | #include <srs_kernel_log.hpp> | 30 | #include <srs_kernel_log.hpp> |
| @@ -417,7 +418,7 @@ void __SrsUnSortedHashtable::clear() | @@ -417,7 +418,7 @@ void __SrsUnSortedHashtable::clear() | ||
| 417 | properties.clear(); | 418 | properties.clear(); |
| 418 | } | 419 | } |
| 419 | 420 | ||
| 420 | -std::string __SrsUnSortedHashtable::key_at(int index) | 421 | +string __SrsUnSortedHashtable::key_at(int index) |
| 421 | { | 422 | { |
| 422 | srs_assert(index < count()); | 423 | srs_assert(index < count()); |
| 423 | SrsObjectPropertyType& elem = properties[index]; | 424 | SrsObjectPropertyType& elem = properties[index]; |
| @@ -431,7 +432,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::value_at(int index) | @@ -431,7 +432,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::value_at(int index) | ||
| 431 | return elem.second; | 432 | return elem.second; |
| 432 | } | 433 | } |
| 433 | 434 | ||
| 434 | -void __SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value) | 435 | +void __SrsUnSortedHashtable::set(string key, SrsAmf0Any* value) |
| 435 | { | 436 | { |
| 436 | if (!value) { | 437 | if (!value) { |
| 437 | srs_warn("add a NULL propertity %s", key.c_str()); | 438 | srs_warn("add a NULL propertity %s", key.c_str()); |
| @@ -455,7 +456,7 @@ void __SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value) | @@ -455,7 +456,7 @@ void __SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value) | ||
| 455 | properties.push_back(std::make_pair(key, value)); | 456 | properties.push_back(std::make_pair(key, value)); |
| 456 | } | 457 | } |
| 457 | 458 | ||
| 458 | -SrsAmf0Any* __SrsUnSortedHashtable::get_property(std::string name) | 459 | +SrsAmf0Any* __SrsUnSortedHashtable::get_property(string name) |
| 459 | { | 460 | { |
| 460 | std::vector<SrsObjectPropertyType>::iterator it; | 461 | std::vector<SrsObjectPropertyType>::iterator it; |
| 461 | 462 | ||
| @@ -471,7 +472,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::get_property(std::string name) | @@ -471,7 +472,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::get_property(std::string name) | ||
| 471 | return NULL; | 472 | return NULL; |
| 472 | } | 473 | } |
| 473 | 474 | ||
| 474 | -SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(std::string name) | 475 | +SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(string name) |
| 475 | { | 476 | { |
| 476 | SrsAmf0Any* prop = get_property(name); | 477 | SrsAmf0Any* prop = get_property(name); |
| 477 | 478 | ||
| @@ -486,7 +487,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(std::string name) | @@ -486,7 +487,7 @@ SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(std::string name) | ||
| 486 | return prop; | 487 | return prop; |
| 487 | } | 488 | } |
| 488 | 489 | ||
| 489 | -SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_number(std::string name) | 490 | +SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_number(string name) |
| 490 | { | 491 | { |
| 491 | SrsAmf0Any* prop = get_property(name); | 492 | SrsAmf0Any* prop = get_property(name); |
| 492 | 493 | ||
| @@ -713,7 +714,7 @@ int SrsAmf0Object::count() | @@ -713,7 +714,7 @@ int SrsAmf0Object::count() | ||
| 713 | return properties->count(); | 714 | return properties->count(); |
| 714 | } | 715 | } |
| 715 | 716 | ||
| 716 | -std::string SrsAmf0Object::key_at(int index) | 717 | +string SrsAmf0Object::key_at(int index) |
| 717 | { | 718 | { |
| 718 | return properties->key_at(index); | 719 | return properties->key_at(index); |
| 719 | } | 720 | } |
| @@ -723,22 +724,22 @@ SrsAmf0Any* SrsAmf0Object::value_at(int index) | @@ -723,22 +724,22 @@ SrsAmf0Any* SrsAmf0Object::value_at(int index) | ||
| 723 | return properties->value_at(index); | 724 | return properties->value_at(index); |
| 724 | } | 725 | } |
| 725 | 726 | ||
| 726 | -void SrsAmf0Object::set(std::string key, SrsAmf0Any* value) | 727 | +void SrsAmf0Object::set(string key, SrsAmf0Any* value) |
| 727 | { | 728 | { |
| 728 | properties->set(key, value); | 729 | properties->set(key, value); |
| 729 | } | 730 | } |
| 730 | 731 | ||
| 731 | -SrsAmf0Any* SrsAmf0Object::get_property(std::string name) | 732 | +SrsAmf0Any* SrsAmf0Object::get_property(string name) |
| 732 | { | 733 | { |
| 733 | return properties->get_property(name); | 734 | return properties->get_property(name); |
| 734 | } | 735 | } |
| 735 | 736 | ||
| 736 | -SrsAmf0Any* SrsAmf0Object::ensure_property_string(std::string name) | 737 | +SrsAmf0Any* SrsAmf0Object::ensure_property_string(string name) |
| 737 | { | 738 | { |
| 738 | return properties->ensure_property_string(name); | 739 | return properties->ensure_property_string(name); |
| 739 | } | 740 | } |
| 740 | 741 | ||
| 741 | -SrsAmf0Any* SrsAmf0Object::ensure_property_number(std::string name) | 742 | +SrsAmf0Any* SrsAmf0Object::ensure_property_number(string name) |
| 742 | { | 743 | { |
| 743 | return properties->ensure_property_number(name); | 744 | return properties->ensure_property_number(name); |
| 744 | } | 745 | } |
| @@ -900,7 +901,7 @@ int SrsAmf0EcmaArray::count() | @@ -900,7 +901,7 @@ int SrsAmf0EcmaArray::count() | ||
| 900 | return properties->count(); | 901 | return properties->count(); |
| 901 | } | 902 | } |
| 902 | 903 | ||
| 903 | -std::string SrsAmf0EcmaArray::key_at(int index) | 904 | +string SrsAmf0EcmaArray::key_at(int index) |
| 904 | { | 905 | { |
| 905 | return properties->key_at(index); | 906 | return properties->key_at(index); |
| 906 | } | 907 | } |
| @@ -910,21 +911,26 @@ SrsAmf0Any* SrsAmf0EcmaArray::value_at(int index) | @@ -910,21 +911,26 @@ SrsAmf0Any* SrsAmf0EcmaArray::value_at(int index) | ||
| 910 | return properties->value_at(index); | 911 | return properties->value_at(index); |
| 911 | } | 912 | } |
| 912 | 913 | ||
| 913 | -void SrsAmf0EcmaArray::set(std::string key, SrsAmf0Any* value) | 914 | +void SrsAmf0EcmaArray::set(string key, SrsAmf0Any* value) |
| 914 | { | 915 | { |
| 915 | properties->set(key, value); | 916 | properties->set(key, value); |
| 916 | } | 917 | } |
| 917 | 918 | ||
| 918 | -SrsAmf0Any* SrsAmf0EcmaArray::get_property(std::string name) | 919 | +SrsAmf0Any* SrsAmf0EcmaArray::get_property(string name) |
| 919 | { | 920 | { |
| 920 | return properties->get_property(name); | 921 | return properties->get_property(name); |
| 921 | } | 922 | } |
| 922 | 923 | ||
| 923 | -SrsAmf0Any* SrsAmf0EcmaArray::ensure_property_string(std::string name) | 924 | +SrsAmf0Any* SrsAmf0EcmaArray::ensure_property_string(string name) |
| 924 | { | 925 | { |
| 925 | return properties->ensure_property_string(name); | 926 | return properties->ensure_property_string(name); |
| 926 | } | 927 | } |
| 927 | 928 | ||
| 929 | +SrsAmf0Any* SrsAmf0EcmaArray::ensure_property_number(string name) | ||
| 930 | +{ | ||
| 931 | + return properties->ensure_property_number(name); | ||
| 932 | +} | ||
| 933 | + | ||
| 928 | int SrsAmf0Size::utf8(string value) | 934 | int SrsAmf0Size::utf8(string value) |
| 929 | { | 935 | { |
| 930 | return 2 + value.length(); | 936 | return 2 + value.length(); |
| @@ -1138,7 +1144,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value) | @@ -1138,7 +1144,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value) | ||
| 1138 | return value->write(stream); | 1144 | return value->write(stream); |
| 1139 | } | 1145 | } |
| 1140 | 1146 | ||
| 1141 | -int srs_amf0_read_utf8(SrsStream* stream, std::string& value) | 1147 | +int srs_amf0_read_utf8(SrsStream* stream, string& value) |
| 1142 | { | 1148 | { |
| 1143 | int ret = ERROR_SUCCESS; | 1149 | int ret = ERROR_SUCCESS; |
| 1144 | 1150 | ||
| @@ -1182,7 +1188,7 @@ int srs_amf0_read_utf8(SrsStream* stream, std::string& value) | @@ -1182,7 +1188,7 @@ int srs_amf0_read_utf8(SrsStream* stream, std::string& value) | ||
| 1182 | 1188 | ||
| 1183 | return ret; | 1189 | return ret; |
| 1184 | } | 1190 | } |
| 1185 | -int srs_amf0_write_utf8(SrsStream* stream, std::string value) | 1191 | +int srs_amf0_write_utf8(SrsStream* stream, string value) |
| 1186 | { | 1192 | { |
| 1187 | int ret = ERROR_SUCCESS; | 1193 | int ret = ERROR_SUCCESS; |
| 1188 | 1194 | ||
| @@ -1213,7 +1219,7 @@ int srs_amf0_write_utf8(SrsStream* stream, std::string value) | @@ -1213,7 +1219,7 @@ int srs_amf0_write_utf8(SrsStream* stream, std::string value) | ||
| 1213 | return ret; | 1219 | return ret; |
| 1214 | } | 1220 | } |
| 1215 | 1221 | ||
| 1216 | -int srs_amf0_read_string(SrsStream* stream, std::string& value) | 1222 | +int srs_amf0_read_string(SrsStream* stream, string& value) |
| 1217 | { | 1223 | { |
| 1218 | int ret = ERROR_SUCCESS; | 1224 | int ret = ERROR_SUCCESS; |
| 1219 | 1225 | ||
| @@ -1236,7 +1242,7 @@ int srs_amf0_read_string(SrsStream* stream, std::string& value) | @@ -1236,7 +1242,7 @@ int srs_amf0_read_string(SrsStream* stream, std::string& value) | ||
| 1236 | return srs_amf0_read_utf8(stream, value); | 1242 | return srs_amf0_read_utf8(stream, value); |
| 1237 | } | 1243 | } |
| 1238 | 1244 | ||
| 1239 | -int srs_amf0_write_string(SrsStream* stream, std::string value) | 1245 | +int srs_amf0_write_string(SrsStream* stream, string value) |
| 1240 | { | 1246 | { |
| 1241 | int ret = ERROR_SUCCESS; | 1247 | int ret = ERROR_SUCCESS; |
| 1242 | 1248 |
| @@ -31,7 +31,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 31 | #include <srs_core.hpp> | 31 | #include <srs_core.hpp> |
| 32 | 32 | ||
| 33 | #include <string> | 33 | #include <string> |
| 34 | -#include <vector> | ||
| 35 | 34 | ||
| 36 | class SrsStream; | 35 | class SrsStream; |
| 37 | class SrsAmf0Object; | 36 | class SrsAmf0Object; |
| @@ -220,6 +219,7 @@ public: | @@ -220,6 +219,7 @@ public: | ||
| 220 | virtual void set(std::string key, SrsAmf0Any* value); | 219 | virtual void set(std::string key, SrsAmf0Any* value); |
| 221 | virtual SrsAmf0Any* get_property(std::string name); | 220 | virtual SrsAmf0Any* get_property(std::string name); |
| 222 | virtual SrsAmf0Any* ensure_property_string(std::string name); | 221 | virtual SrsAmf0Any* ensure_property_string(std::string name); |
| 222 | + virtual SrsAmf0Any* ensure_property_number(std::string name); | ||
| 223 | }; | 223 | }; |
| 224 | 224 | ||
| 225 | /** | 225 | /** |
| @@ -808,4 +808,99 @@ VOID TEST(AMF0Test, ObjectProps) | @@ -808,4 +808,99 @@ VOID TEST(AMF0Test, ObjectProps) | ||
| 808 | EXPECT_TRUE(NULL != o->ensure_property_number("age")); | 808 | EXPECT_TRUE(NULL != o->ensure_property_number("age")); |
| 809 | EXPECT_TRUE(NULL == o->ensure_property_string("age")); | 809 | EXPECT_TRUE(NULL == o->ensure_property_string("age")); |
| 810 | } | 810 | } |
| 811 | + | ||
| 812 | + // count | ||
| 813 | + if (true) { | ||
| 814 | + o = SrsAmf0Any::object(); | ||
| 815 | + SrsAutoFree(SrsAmf0Object, o, false); | ||
| 816 | + | ||
| 817 | + EXPECT_EQ(0, o->count()); | ||
| 818 | + | ||
| 819 | + o->set("name", SrsAmf0Any::str("winlin")); | ||
| 820 | + EXPECT_EQ(1, o->count()); | ||
| 821 | + | ||
| 822 | + o->set("name", SrsAmf0Any::str("winlin")); | ||
| 823 | + EXPECT_EQ(1, o->count()); | ||
| 824 | + | ||
| 825 | + o->set("age", SrsAmf0Any::number(100)); | ||
| 826 | + EXPECT_EQ(2, o->count()); | ||
| 827 | + } | ||
| 828 | +} | ||
| 829 | + | ||
| 830 | +VOID TEST(AMF0Test, EcmaArrayProps) | ||
| 831 | +{ | ||
| 832 | + SrsAmf0EcmaArray* o = NULL; | ||
| 833 | + | ||
| 834 | + // get/set property | ||
| 835 | + if (true) { | ||
| 836 | + o = SrsAmf0Any::ecma_array(); | ||
| 837 | + SrsAutoFree(SrsAmf0EcmaArray, o, false); | ||
| 838 | + | ||
| 839 | + EXPECT_TRUE(NULL == o->get_property("name")); | ||
| 840 | + | ||
| 841 | + o->set("name", SrsAmf0Any::str("winlin")); | ||
| 842 | + EXPECT_TRUE(NULL != o->get_property("name")); | ||
| 843 | + | ||
| 844 | + EXPECT_TRUE(NULL == o->get_property("age")); | ||
| 845 | + | ||
| 846 | + o->set("age", SrsAmf0Any::number(100)); | ||
| 847 | + EXPECT_TRUE(NULL != o->get_property("age")); | ||
| 848 | + } | ||
| 849 | + | ||
| 850 | + // index property | ||
| 851 | + if (true) { | ||
| 852 | + o = SrsAmf0Any::ecma_array(); | ||
| 853 | + SrsAutoFree(SrsAmf0EcmaArray, o, false); | ||
| 854 | + | ||
| 855 | + o->set("name", SrsAmf0Any::str("winlin")); | ||
| 856 | + EXPECT_STREQ("name", o->key_at(0).c_str()); | ||
| 857 | + ASSERT_TRUE(o->value_at(0)->is_string()); | ||
| 858 | + EXPECT_STREQ("winlin", o->value_at(0)->to_str().c_str()); | ||
| 859 | + | ||
| 860 | + o->set("age", SrsAmf0Any::number(100)); | ||
| 861 | + EXPECT_STREQ("name", o->key_at(0).c_str()); | ||
| 862 | + ASSERT_TRUE(o->value_at(0)->is_string()); | ||
| 863 | + EXPECT_STREQ("winlin", o->value_at(0)->to_str().c_str()); | ||
| 864 | + | ||
| 865 | + EXPECT_STREQ("age", o->key_at(1).c_str()); | ||
| 866 | + ASSERT_TRUE(o->value_at(1)->is_number()); | ||
| 867 | + EXPECT_DOUBLE_EQ(100, o->value_at(1)->to_number()); | ||
| 868 | + } | ||
| 869 | + | ||
| 870 | + // ensure property | ||
| 871 | + if (true) { | ||
| 872 | + o = SrsAmf0Any::ecma_array(); | ||
| 873 | + SrsAutoFree(SrsAmf0EcmaArray, o, false); | ||
| 874 | + | ||
| 875 | + EXPECT_TRUE(NULL == o->ensure_property_string("name")); | ||
| 876 | + EXPECT_TRUE(NULL == o->ensure_property_number("age")); | ||
| 877 | + | ||
| 878 | + o->set("name", SrsAmf0Any::str("winlin")); | ||
| 879 | + EXPECT_TRUE(NULL != o->ensure_property_string("name")); | ||
| 880 | + EXPECT_TRUE(NULL == o->ensure_property_number("name")); | ||
| 881 | + EXPECT_TRUE(NULL == o->ensure_property_number("age")); | ||
| 882 | + | ||
| 883 | + o->set("age", SrsAmf0Any::number(100)); | ||
| 884 | + EXPECT_TRUE(NULL != o->ensure_property_string("name")); | ||
| 885 | + EXPECT_TRUE(NULL == o->ensure_property_number("name")); | ||
| 886 | + EXPECT_TRUE(NULL != o->ensure_property_number("age")); | ||
| 887 | + EXPECT_TRUE(NULL == o->ensure_property_string("age")); | ||
| 888 | + } | ||
| 889 | + | ||
| 890 | + // count | ||
| 891 | + if (true) { | ||
| 892 | + o = SrsAmf0Any::ecma_array(); | ||
| 893 | + SrsAutoFree(SrsAmf0EcmaArray, o, false); | ||
| 894 | + | ||
| 895 | + EXPECT_EQ(0, o->count()); | ||
| 896 | + | ||
| 897 | + o->set("name", SrsAmf0Any::str("winlin")); | ||
| 898 | + EXPECT_EQ(1, o->count()); | ||
| 899 | + | ||
| 900 | + o->set("name", SrsAmf0Any::str("winlin")); | ||
| 901 | + EXPECT_EQ(1, o->count()); | ||
| 902 | + | ||
| 903 | + o->set("age", SrsAmf0Any::number(100)); | ||
| 904 | + EXPECT_EQ(2, o->count()); | ||
| 905 | + } | ||
| 811 | } | 906 | } |
-
请 注册 或 登录 后发表评论