MCPcopy Create free account
hub / github.com/apache/brpc / ReadAMFArrayItem

Function ReadAMFArrayItem

src/brpc/amf.cpp:760–843  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

758}
759
760static bool ReadAMFArrayItem(AMFInputStream* stream, AMFArray* arr) {
761 uint8_t marker;
762 if (stream->cut_u8(&marker) != 1u) {
763 LOG(ERROR) << "stream is not long enough";
764 return false;
765 }
766 switch ((AMFMarker)marker) {
767 case AMF_MARKER_NUMBER: {
768 uint64_t val = 0;
769 if (stream->cut_u64(&val) != 8u) {
770 LOG(ERROR) << "stream is not long enough";
771 return false;
772 }
773 double* dptr = (double*)&val;
774 arr->AddNumber(*dptr);
775 } break;
776 case AMF_MARKER_BOOLEAN: {
777 uint8_t val = 0;
778 if (stream->cut_u8(&val) != 1u) {
779 LOG(ERROR) << "stream is not long enough";
780 return false;
781 }
782 arr->AddBool(val);
783 } break;
784 case AMF_MARKER_STRING: {
785 std::string val;
786 if (!ReadAMFShortStringBody(&val, stream)) {
787 return false;
788 }
789 arr->AddString(val);
790 } break;
791 case AMF_MARKER_TYPED_OBJECT: {
792 std::string class_name;
793 if (!ReadAMFShortStringBody(&class_name, stream)) {
794 LOG(ERROR) << "Fail to read class_name";
795 }
796 }
797 // fall through
798 case AMF_MARKER_OBJECT: {
799 if (!ReadAMFObjectBody(arr->AddObject(), stream)) {
800 return false;
801 }
802 } break;
803 case AMF_MARKER_ECMA_ARRAY: {
804 if (!ReadAMFEcmaArrayBody(arr->AddObject(), stream)) {
805 return false;
806 }
807 } break;
808 case AMF_MARKER_STRICT_ARRAY: {
809 if (!ReadAMFArrayBody(arr->AddArray(), stream)) {
810 return false;
811 }
812 } break;
813 case AMF_MARKER_NULL:
814 arr->AddNull();
815 break;
816 case AMF_MARKER_UNDEFINED:
817 arr->AddUndefined();

Callers 1

ReadAMFArrayBodyFunction · 0.85

Calls 15

ReadAMFShortStringBodyFunction · 0.85
ReadAMFObjectBodyFunction · 0.85
ReadAMFEcmaArrayBodyFunction · 0.85
ReadAMFArrayBodyFunction · 0.85
marker2strFunction · 0.85
ReadAMFLongStringBodyFunction · 0.85
cut_u8Method · 0.80
cut_u64Method · 0.80
AddNumberMethod · 0.80
AddBoolMethod · 0.80
AddStringMethod · 0.80
AddObjectMethod · 0.80

Tested by

no test coverage detected