winlin

amf0 utest: remove the object read/write function, directly use object to read or write.

@@ -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 }