QString AmfReader::readString() { char s[2]; if(buff->read(s, 2) != 2) throw AmfInvalidFormatException(); return readUtf8(AMF_DecodeInt16(s)); }
void cExternalTrackers::readyRead() { QByteArray buffer; buffer.resize(m_Server.pendingDatagramSize()); QHostAddress sender; quint16 senderPort; m_Server.readDatagram(buffer.data(), buffer.size(), &sender, &senderPort); unsigned char checkSum = buffer[buffer.size()-1]; if (checkSum==simpleCheckSum(buffer,buffer.size()-1)){ QDataStream stream(buffer); char prefix[EXTERNAL_TRACKER_FORMAT_PREFIX_SIZE+1]; //add zero for simple convert to string prefix[EXTERNAL_TRACKER_FORMAT_PREFIX_SIZE] = 0; stream.readRawData(prefix,EXTERNAL_TRACKER_FORMAT_PREFIX_SIZE); if (memcmp(prefix,EXTERNAL_TRACKER_FORMAT_PREFIX,EXTERNAL_TRACKER_FORMAT_PREFIX_SIZE)==0){ int Version; stream.readRawData((char*)&Version,sizeof(int)); if (Version==EXTERNAL_TRACKER_FORMAT_VERSION){ QString CurrentState = readUtf8(stream); int AppCount; stream.readRawData((char*)&AppCount,sizeof(int)); for (int i = 0; i<AppCount; i++){ QString AppName = readUtf8(stream); addPair(AppName,CurrentState); } } else qWarning() << "Error reading external tracker. Incorrect format version " << Version << " only " << EXTERNAL_TRACKER_FORMAT_VERSION << " supported"; } else qWarning() << "Error reading external tracker. Incorrect format prefix " << prefix; } else qWarning() << "incorrect external tracker checksum"; }
QString AmfReader::readAmf3String() { auto size = readAmf3Int(); bool ref = (size & 1) == 0; size >>= 1; if(ref) return readStringRef(size); if(size == 0) return QString(); auto str = readUtf8(size); addStringRef(str); return str; }