From b35ca646dd8b3c05134ffb1aa34e0259995b7030 Mon Sep 17 00:00:00 2001 From: APTX Date: Sun, 6 Sep 2009 16:38:57 +0200 Subject: [PATCH] - Padding amask & fmask to 8 characters is required! - Fix setRawReply. Data is sent starting from the most significant flag. --- filecommand.cpp | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/filecommand.cpp b/filecommand.cpp index b396a2e..bf3c51f 100644 --- a/filecommand.cpp +++ b/filecommand.cpp @@ -232,9 +232,11 @@ Command FileCommand::rawCommand() const cmd.second["fid"] = m_fid; } - cmd.second["fmask"] = QString::number(m_fmask, 16); - // Clear any bits which aren't known. - cmd.second["amask"] = QString::number(m_amask & FileAnimeFlag::AllData, 16); + // Clear any bits which aren't known and pad to 8 characters + cmd.second["fmask"] = QString::number(m_fmask & FileFlag::AllData, 16) + .rightJustified(8, QLatin1Char('0')); + cmd.second["amask"] = QString::number(m_amask & FileAnimeFlag::AllData, 16) + .rightJustified(8, QLatin1Char('0')); return cmd; } @@ -263,10 +265,10 @@ void FileCommand::setRawReply(ReplyCode replyCode, const QString &reply, Client void FileCommand::readReplyData(const QString &reply) { - QString d = reply.mid(reply.indexOf('\n')); - + QString d = reply.mid(reply.indexOf('\n')).trimmed(); +qDebug() << d; QList parts = d.split('|', QString::KeepEmptyParts); - +qDebug() << parts; m_fid = parts[0].toInt(); if (m_fmask == 0 && m_amask == 0) @@ -281,30 +283,30 @@ void FileCommand::readReplyData(const QString &reply) return; } - int partNo = 0; - for (int i = 0, flag = 1; i < 32; ++i, flag <<= 1) + int partNo = 1; + for (int i = 0, flag = 1 << 31; i < 32; ++i, flag = (flag >> 1) & ~(1 << 31)) { - if (parts.size() >= partNo) - { -qDebug() << "Not enough parts in reply."; - continue; - } if (m_fmask & flag) { + if (partNo >= parts.size()) + { +qDebug() << "Not enough parts in reply."; + continue; + } fileFlagData.insert(FileFlags(flag), parts[partNo]); ++partNo; } } - for (int i = 0, flag = 1; i < 32; ++i, flag <<= 1) + for (int i = 0, flag = 1 << 31; i < 32; ++i, flag = (flag >> 1) & ~(1 << 31)) { - if (parts.size() >= partNo) - { -qDebug() << "Not enough parts in reply."; - continue; - } if (m_amask & flag) { + if (partNo >= parts.size()) + { +qDebug() << "Not enough parts in reply."; + continue; + } fileAnimeFlagData.insert(FileAnimeFlags(flag), parts[partNo]); ++partNo; } -- 2.52.0