amf0 utest: remove the object read/write function, directly use object to read or write.
正在显示
4 个修改的文件
包含
34 行增加
和
92 行删除
| @@ -1494,39 +1494,3 @@ int srs_amf0_write_object_eof(SrsStream* stream, __SrsAmf0ObjectEOF* value) | @@ -1494,39 +1494,3 @@ int srs_amf0_write_object_eof(SrsStream* stream, __SrsAmf0ObjectEOF* value) | ||
| 1494 | 1494 | ||
| 1495 | return ret; | 1495 | return ret; |
| 1496 | } | 1496 | } |
| 1497 | - | ||
| 1498 | -int srs_amf0_read_object(SrsStream* stream, SrsAmf0Object*& value) | ||
| 1499 | -{ | ||
| 1500 | - int ret = ERROR_SUCCESS; | ||
| 1501 | - | ||
| 1502 | - value = SrsAmf0Any::object(); | ||
| 1503 | - | ||
| 1504 | - if ((ret = value->read(stream)) != ERROR_SUCCESS) { | ||
| 1505 | - srs_freep(value); | ||
| 1506 | - return ret; | ||
| 1507 | - } | ||
| 1508 | - | ||
| 1509 | - return ret; | ||
| 1510 | -} | ||
| 1511 | -int srs_amf0_write_object(SrsStream* stream, SrsAmf0Object* value) | ||
| 1512 | -{ | ||
| 1513 | - return value->write(stream); | ||
| 1514 | -} | ||
| 1515 | - | ||
| 1516 | -int srs_amf0_read_ecma_array(SrsStream* stream, SrsAmf0EcmaArray*& value) | ||
| 1517 | -{ | ||
| 1518 | - int ret = ERROR_SUCCESS; | ||
| 1519 | - | ||
| 1520 | - value = SrsAmf0Any::ecma_array(); | ||
| 1521 | - | ||
| 1522 | - if ((ret = value->read(stream)) != ERROR_SUCCESS) { | ||
| 1523 | - srs_freep(value); | ||
| 1524 | - return ret; | ||
| 1525 | - } | ||
| 1526 | - | ||
| 1527 | - return ret; | ||
| 1528 | -} | ||
| 1529 | -int srs_amf0_write_ecma_array(SrsStream* stream, SrsAmf0EcmaArray* value) | ||
| 1530 | -{ | ||
| 1531 | - return value->write(stream); | ||
| 1532 | -} |
| @@ -270,23 +270,4 @@ extern int srs_amf0_write_null(SrsStream* stream); | @@ -270,23 +270,4 @@ extern int srs_amf0_write_null(SrsStream* stream); | ||
| 270 | extern int srs_amf0_read_undefined(SrsStream* stream); | 270 | extern int srs_amf0_read_undefined(SrsStream* stream); |
| 271 | extern int srs_amf0_write_undefined(SrsStream* stream); | 271 | extern int srs_amf0_write_undefined(SrsStream* stream); |
| 272 | 272 | ||
| 273 | -/** | ||
| 274 | -* read amf0 object from stream. | ||
| 275 | -* 2.5 Object Type | ||
| 276 | -* anonymous-object-type = object-marker *(object-property) | ||
| 277 | -* object-property = (UTF-8 value-type) | (UTF-8-empty object-end-marker) | ||
| 278 | -*/ | ||
| 279 | -extern int srs_amf0_read_object(SrsStream* stream, SrsAmf0Object*& value); | ||
| 280 | -extern int srs_amf0_write_object(SrsStream* stream, SrsAmf0Object* value); | ||
| 281 | - | ||
| 282 | -/** | ||
| 283 | -* read amf0 object from stream. | ||
| 284 | -* 2.10 ECMA Array Type | ||
| 285 | -* ecma-array-type = associative-count *(object-property) | ||
| 286 | -* associative-count = U32 | ||
| 287 | -* object-property = (UTF-8 value-type) | (UTF-8-empty object-end-marker) | ||
| 288 | -*/ | ||
| 289 | -extern int srs_amf0_read_ecma_array(SrsStream* stream, SrsAmf0EcmaArray*& value); | ||
| 290 | -extern int srs_amf0_write_ecma_array(SrsStream* stream, SrsAmf0EcmaArray* value); | ||
| 291 | - | ||
| 292 | #endif | 273 | #endif |
| @@ -1730,7 +1730,7 @@ SrsConnectAppPacket::SrsConnectAppPacket() | @@ -1730,7 +1730,7 @@ SrsConnectAppPacket::SrsConnectAppPacket() | ||
| 1730 | { | 1730 | { |
| 1731 | command_name = RTMP_AMF0_COMMAND_CONNECT; | 1731 | command_name = RTMP_AMF0_COMMAND_CONNECT; |
| 1732 | transaction_id = 1; | 1732 | transaction_id = 1; |
| 1733 | - command_object = NULL; | 1733 | + command_object = SrsAmf0Any::object(); |
| 1734 | } | 1734 | } |
| 1735 | 1735 | ||
| 1736 | SrsConnectAppPacket::~SrsConnectAppPacket() | 1736 | SrsConnectAppPacket::~SrsConnectAppPacket() |
| @@ -1764,12 +1764,7 @@ int SrsConnectAppPacket::decode(SrsStream* stream) | @@ -1764,12 +1764,7 @@ int SrsConnectAppPacket::decode(SrsStream* stream) | ||
| 1764 | return ret; | 1764 | return ret; |
| 1765 | } | 1765 | } |
| 1766 | 1766 | ||
| 1767 | - if ((ret = srs_amf0_read_object(stream, command_object)) != ERROR_SUCCESS) { | ||
| 1768 | - srs_error("amf0 decode connect command_object failed. ret=%d", ret); | ||
| 1769 | - return ret; | ||
| 1770 | - } | ||
| 1771 | - if (command_object == NULL) { | ||
| 1772 | - ret = ERROR_RTMP_AMF0_DECODE; | 1767 | + if ((ret = command_object->read(stream)) != ERROR_SUCCESS) { |
| 1773 | srs_error("amf0 decode connect command_object failed. ret=%d", ret); | 1768 | srs_error("amf0 decode connect command_object failed. ret=%d", ret); |
| 1774 | return ret; | 1769 | return ret; |
| 1775 | } | 1770 | } |
| @@ -1811,7 +1806,7 @@ int SrsConnectAppPacket::encode_packet(SrsStream* stream) | @@ -1811,7 +1806,7 @@ int SrsConnectAppPacket::encode_packet(SrsStream* stream) | ||
| 1811 | } | 1806 | } |
| 1812 | srs_verbose("encode transaction_id success."); | 1807 | srs_verbose("encode transaction_id success."); |
| 1813 | 1808 | ||
| 1814 | - if ((ret = srs_amf0_write_object(stream, command_object)) != ERROR_SUCCESS) { | 1809 | + if ((ret = command_object->write(stream)) != ERROR_SUCCESS) { |
| 1815 | srs_error("encode command_object failed. ret=%d", ret); | 1810 | srs_error("encode command_object failed. ret=%d", ret); |
| 1816 | return ret; | 1811 | return ret; |
| 1817 | } | 1812 | } |
| @@ -1826,8 +1821,6 @@ SrsConnectAppResPacket::SrsConnectAppResPacket() | @@ -1826,8 +1821,6 @@ SrsConnectAppResPacket::SrsConnectAppResPacket() | ||
| 1826 | { | 1821 | { |
| 1827 | command_name = RTMP_AMF0_COMMAND_RESULT; | 1822 | command_name = RTMP_AMF0_COMMAND_RESULT; |
| 1828 | transaction_id = 1; | 1823 | transaction_id = 1; |
| 1829 | - // TODO: FIXME: memory leak for decode will set the props and info. | ||
| 1830 | - // TODO: FIXME: bug#22, refine the amf0. | ||
| 1831 | props = SrsAmf0Any::object(); | 1824 | props = SrsAmf0Any::object(); |
| 1832 | info = SrsAmf0Any::object(); | 1825 | info = SrsAmf0Any::object(); |
| 1833 | } | 1826 | } |
| @@ -1864,22 +1857,12 @@ int SrsConnectAppResPacket::decode(SrsStream* stream) | @@ -1864,22 +1857,12 @@ int SrsConnectAppResPacket::decode(SrsStream* stream) | ||
| 1864 | return ret; | 1857 | return ret; |
| 1865 | } | 1858 | } |
| 1866 | 1859 | ||
| 1867 | - if ((ret = srs_amf0_read_object(stream, props)) != ERROR_SUCCESS) { | ||
| 1868 | - srs_error("amf0 decode connect props failed. ret=%d", ret); | ||
| 1869 | - return ret; | ||
| 1870 | - } | ||
| 1871 | - if (props == NULL) { | ||
| 1872 | - ret = ERROR_RTMP_AMF0_DECODE; | 1860 | + if ((ret = props->read(stream)) != ERROR_SUCCESS) { |
| 1873 | srs_error("amf0 decode connect props failed. ret=%d", ret); | 1861 | srs_error("amf0 decode connect props failed. ret=%d", ret); |
| 1874 | return ret; | 1862 | return ret; |
| 1875 | } | 1863 | } |
| 1876 | 1864 | ||
| 1877 | - if ((ret = srs_amf0_read_object(stream, info)) != ERROR_SUCCESS) { | ||
| 1878 | - srs_error("amf0 decode connect info failed. ret=%d", ret); | ||
| 1879 | - return ret; | ||
| 1880 | - } | ||
| 1881 | - if (info == NULL) { | ||
| 1882 | - ret = ERROR_RTMP_AMF0_DECODE; | 1865 | + if ((ret = info->read(stream)) != ERROR_SUCCESS) { |
| 1883 | srs_error("amf0 decode connect info failed. ret=%d", ret); | 1866 | srs_error("amf0 decode connect info failed. ret=%d", ret); |
| 1884 | return ret; | 1867 | return ret; |
| 1885 | } | 1868 | } |
| @@ -1930,20 +1913,16 @@ int SrsConnectAppResPacket::encode_packet(SrsStream* stream) | @@ -1930,20 +1913,16 @@ int SrsConnectAppResPacket::encode_packet(SrsStream* stream) | ||
| 1930 | } | 1913 | } |
| 1931 | srs_verbose("encode transaction_id success."); | 1914 | srs_verbose("encode transaction_id success."); |
| 1932 | 1915 | ||
| 1933 | - if (props->size() > 0) { | ||
| 1934 | - if ((ret = srs_amf0_write_object(stream, props)) != ERROR_SUCCESS) { | ||
| 1935 | - srs_error("encode props failed. ret=%d", ret); | ||
| 1936 | - return ret; | ||
| 1937 | - } | 1916 | + if ((ret = props->write(stream)) != ERROR_SUCCESS) { |
| 1917 | + srs_error("encode props failed. ret=%d", ret); | ||
| 1918 | + return ret; | ||
| 1938 | } | 1919 | } |
| 1939 | 1920 | ||
| 1940 | srs_verbose("encode props success."); | 1921 | srs_verbose("encode props success."); |
| 1941 | 1922 | ||
| 1942 | - if (info->size() > 0) { | ||
| 1943 | - if ((ret = srs_amf0_write_object(stream, info)) != ERROR_SUCCESS) { | ||
| 1944 | - srs_error("encode info failed. ret=%d", ret); | ||
| 1945 | - return ret; | ||
| 1946 | - } | 1923 | + if ((ret = info->write(stream)) != ERROR_SUCCESS) { |
| 1924 | + srs_error("encode info failed. ret=%d", ret); | ||
| 1925 | + return ret; | ||
| 1947 | } | 1926 | } |
| 1948 | 1927 | ||
| 1949 | srs_verbose("encode info success."); | 1928 | srs_verbose("encode info success."); |
| @@ -2765,7 +2744,7 @@ int SrsPlayResPacket::encode_packet(SrsStream* stream) | @@ -2765,7 +2744,7 @@ int SrsPlayResPacket::encode_packet(SrsStream* stream) | ||
| 2765 | } | 2744 | } |
| 2766 | srs_verbose("encode command_object success."); | 2745 | srs_verbose("encode command_object success."); |
| 2767 | 2746 | ||
| 2768 | - if ((ret = srs_amf0_write_object(stream, desc)) != ERROR_SUCCESS) { | 2747 | + if ((ret = desc->write(stream)) != ERROR_SUCCESS) { |
| 2769 | srs_error("encode desc failed. ret=%d", ret); | 2748 | srs_error("encode desc failed. ret=%d", ret); |
| 2770 | return ret; | 2749 | return ret; |
| 2771 | } | 2750 | } |
| @@ -2884,7 +2863,7 @@ int SrsOnStatusCallPacket::encode_packet(SrsStream* stream) | @@ -2884,7 +2863,7 @@ int SrsOnStatusCallPacket::encode_packet(SrsStream* stream) | ||
| 2884 | } | 2863 | } |
| 2885 | srs_verbose("encode args success.");; | 2864 | srs_verbose("encode args success.");; |
| 2886 | 2865 | ||
| 2887 | - if ((ret = srs_amf0_write_object(stream, data)) != ERROR_SUCCESS) { | 2866 | + if ((ret = data->write(stream)) != ERROR_SUCCESS) { |
| 2888 | srs_error("encode data failed. ret=%d", ret); | 2867 | srs_error("encode data failed. ret=%d", ret); |
| 2889 | return ret; | 2868 | return ret; |
| 2890 | } | 2869 | } |
| @@ -2947,7 +2926,7 @@ int SrsBandwidthPacket::encode_packet(SrsStream* stream) | @@ -2947,7 +2926,7 @@ int SrsBandwidthPacket::encode_packet(SrsStream* stream) | ||
| 2947 | } | 2926 | } |
| 2948 | srs_verbose("encode args success.");; | 2927 | srs_verbose("encode args success.");; |
| 2949 | 2928 | ||
| 2950 | - if ((ret = srs_amf0_write_object(stream, data)) != ERROR_SUCCESS) { | 2929 | + if ((ret = data->write(stream)) != ERROR_SUCCESS) { |
| 2951 | srs_error("encode data failed. ret=%d", ret); | 2930 | srs_error("encode data failed. ret=%d", ret); |
| 2952 | return ret; | 2931 | return ret; |
| 2953 | } | 2932 | } |
| @@ -3088,7 +3067,7 @@ int SrsOnStatusDataPacket::encode_packet(SrsStream* stream) | @@ -3088,7 +3067,7 @@ int SrsOnStatusDataPacket::encode_packet(SrsStream* stream) | ||
| 3088 | } | 3067 | } |
| 3089 | srs_verbose("encode command_name success."); | 3068 | srs_verbose("encode command_name success."); |
| 3090 | 3069 | ||
| 3091 | - if ((ret = srs_amf0_write_object(stream, data)) != ERROR_SUCCESS) { | 3070 | + if ((ret = data->write(stream)) != ERROR_SUCCESS) { |
| 3092 | srs_error("encode data failed. ret=%d", ret); | 3071 | srs_error("encode data failed. ret=%d", ret); |
| 3093 | return ret; | 3072 | return ret; |
| 3094 | } | 3073 | } |
| @@ -3240,7 +3219,7 @@ int SrsOnMetaDataPacket::encode_packet(SrsStream* stream) | @@ -3240,7 +3219,7 @@ int SrsOnMetaDataPacket::encode_packet(SrsStream* stream) | ||
| 3240 | } | 3219 | } |
| 3241 | srs_verbose("encode name success."); | 3220 | srs_verbose("encode name success."); |
| 3242 | 3221 | ||
| 3243 | - if ((ret = srs_amf0_write_object(stream, metadata)) != ERROR_SUCCESS) { | 3222 | + if ((ret = metadata->write(stream)) != ERROR_SUCCESS) { |
| 3244 | srs_error("encode metadata failed. ret=%d", ret); | 3223 | srs_error("encode metadata failed. ret=%d", ret); |
| 3245 | return ret; | 3224 | return ret; |
| 3246 | } | 3225 | } |
| @@ -729,4 +729,22 @@ VOID TEST(AMF0Test, AnyAssert) | @@ -729,4 +729,22 @@ VOID TEST(AMF0Test, AnyAssert) | ||
| 729 | SrsAutoFree(SrsAmf0Any, o, false); | 729 | SrsAutoFree(SrsAmf0Any, o, false); |
| 730 | EXPECT_TRUE(o->is_ecma_array()); | 730 | EXPECT_TRUE(o->is_ecma_array()); |
| 731 | } | 731 | } |
| 732 | + | ||
| 733 | + // empty object | ||
| 734 | + if (true) { | ||
| 735 | + o = SrsAmf0Any::object(); | ||
| 736 | + SrsAutoFree(SrsAmf0Any, o, false); | ||
| 737 | + s.reset(); | ||
| 738 | + EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); | ||
| 739 | + EXPECT_EQ(1+3, s.pos()); | ||
| 740 | + } | ||
| 741 | + | ||
| 742 | + // empty ecma array | ||
| 743 | + if (true) { | ||
| 744 | + o = SrsAmf0Any::ecma_array(); | ||
| 745 | + SrsAutoFree(SrsAmf0Any, o, false); | ||
| 746 | + s.reset(); | ||
| 747 | + EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); | ||
| 748 | + EXPECT_EQ(1+4+3, s.pos()); | ||
| 749 | + } | ||
| 732 | } | 750 | } |
-
请 注册 或 登录 后发表评论