public static DsoAmfBody Read(AMFReader reader, bool isAmf3) { reader.Reset(); ushort targetUriLen = reader.ReadUInt16(); string targetUri = reader.ReadUTF(targetUriLen); // When the message holds a response from a remote endpoint, the target URI specifies which method on the local client (i.e. reader request originator) should be invoked to handle the response. ushort responseUriLen = reader.ReadUInt16(); string responseUri = reader.ReadUTF(responseUriLen); // The response's target URI is set to the request's response URI with an '/onResult' suffix to denote a success or an '/onStatus' suffix to denote a failure. long dataLen = reader.ReadUInt32(); if (dataLen >= 2147483648) { dataLen = -4294967296; } object bodyObj; // Check for AMF3 kAvmPlusObjectType object type if (isAmf3) { byte typeMarker = reader.ReadByte(); if (typeMarker == 17) { bodyObj = reader.ReadAMF3Data(); } else { bodyObj = reader.ReadData(); } } else { bodyObj = reader.ReadData(); } DsoAmfBody body = new DsoAmfBody(targetUri, responseUri, bodyObj); return body; }
public static DsoAmfBody Read(AMFReader reader, bool isAmf3) { reader.Reset(); ushort targetUriLen = reader.ReadUInt16(); string targetUri = reader.ReadUTF(targetUriLen); // When the message holds a response from a remote endpoint, the target URI specifies which method on the local client (i.e. reader request originator) should be invoked to handle the response. ushort responseUriLen = reader.ReadUInt16(); string responseUri = reader.ReadUTF(responseUriLen); // The response's target URI is set to the request's response URI with an '/onResult' suffix to denote a success or an '/onStatus' suffix to denote a failure. long dataLen = reader.ReadUInt32(); if (dataLen >= 2147483648) { dataLen = -4294967296; } object bodyObj; // Check for AMF3 kAvmPlusObjectType object type if (isAmf3) { byte typeMarker = reader.ReadByte(); if (typeMarker == 17) { bodyObj = reader.ReadAMF3Data(); } else { bodyObj = reader.ReadData(); } } else { bodyObj = reader.ReadData(); } DsoAmfBody body = new DsoAmfBody(targetUri, responseUri, bodyObj); return(body); }
public void Read(byte[] data) { using (MemoryStream ms = new MemoryStream(data)) { using (AMFReader amf = new AMFReader(ms)) { Header = new List <object>(); Bodies = new List <object>(); // AMF0_VERSION = 0; // AMF1_VERSION = 1; // There is no AMF1 but FMS uses it for some reason, hence special casing. // AMF3_VERSION = 3; ushort version = amf.ReadUInt16(); // Number of headers ushort numHeaders = amf.ReadUInt16(); while (numHeaders-- > 0) { var head = DsoAmfHeader.Read(amf); if (head != null) { Header.Add(head); } } // Number of bodys ushort numBodies = amf.ReadUInt16(); while (numBodies-- > 0) { var body = DsoAmfBody.Read(amf, (version == 3)); if (body != null) { Bodies.Add(body); } } } } }