Exemplo n.º 1
0
 bool BencodeParser::getDictionary(QMap<QByteArray, QVariant> *dictionary)
 {
     const int contentSize = content.size();
     if (content.at(index) != 'd')
         return false;

     QMap<QByteArray, QVariant> tmp;
     ++index;

     do {
         if (content.at(index) == 'e') {
             ++index;
             break;
         }

         QByteArray key;
         if (!getByteString(&key))
             break;

         if (key == "info")
           infoStart = index;

         qint64 number;
         QByteArray byteString;
         QList<QVariant> tmpList;
         QMap<QByteArray, QVariant> dictionary;

         if (getInteger(&number))
             tmp.insert(key, number);
         else if (getByteString(&byteString))
             tmp.insert(key, byteString);
         else if (getList(&tmpList))
             tmp.insert(key, tmpList);
         else if (getDictionary(&dictionary))
             tmp.insert(key, QVariant::fromValue<QMap<QByteArray, QVariant> >(dictionary));
         else {
             errString = QString("error at index %1").arg(index);
             return false;
         }

         if (key == "info")
           infoLength = index - infoStart;

     } while (index < contentSize);

     if (dictionary)
         *dictionary = tmp;
     return true;
 }
Exemplo n.º 2
0
	vector<string> StringReader::getByteStrings()
	{
		vector<string> lines;

		string::size_type size = getInt();

		for (string::size_type i=0; i<size; i++)
		{
			lines.push_back(getByteString());
		}

		return lines;
	}
Exemplo n.º 3
0
 bool BencodeParser::getList(QList<QVariant> *list)
 {
     const int contentSize = content.size();
     if (content.at(index) != 'l')
         return false;

     QList<QVariant> tmp;
     ++index;

     do {
         if (content.at(index) == 'e') {
             ++index;
             break;
         }

         qint64 number;
         QByteArray byteString;
         QList<QVariant> tmpList;
         QMap<QByteArray, QVariant> dictionary;

         if (getInteger(&number))
             tmp << number;
         else if (getByteString(&byteString))
             tmp << byteString;
         else if (getList(&tmpList))
             tmp << tmpList;
         else if (getDictionary(&dictionary))
             tmp << QVariant::fromValue<QMap<QByteArray, QVariant> >(dictionary);
         else {
             errString = QString("error at index %1").arg(index);
             return false;
         }
     } while (index < contentSize);

     if (list)
         *list = tmp;
     return true;
 }