Example #1
0
    bool BasicKeywordsModel::isEmpty() {
        QReadLocker readKeywordsLock(&m_KeywordsLock);

        Q_UNUSED(readKeywordsLock);

        QReadLocker readDescriptionLock(&m_DescriptionLock);
        Q_UNUSED(readDescriptionLock);

        return m_KeywordsList.isEmpty() || m_Description.trimmed().isEmpty();
    }
void PeerObject::checkReadData()
{
// 	qDebug("[%p] PeerObject::checkReadData() - data: %d; stdin: %d", QCoreApplication::instance(), m_data.size(), m_dataDescription.size());

// 	m_dbgLog.write("PeerObject::checkReadData()\n");
// 	m_dbgLog.flush();

	// m_dbgLog.write("Locking: 200\n");// m_dbgLog.flush();
	QWriteLocker		readDescriptionLock(&m_dataDescriptionLock);

	while(!m_dataDescription.isEmpty() && (!m_data.isEmpty() || !m_dataPkg.isEmpty() || !m_dataFD.isEmpty())) {
		QPair<QChar, QByteArray>	description(m_dataDescription.takeFirst());
		QByteArray		data;

		if(description.first == 'd') {
			QWriteLocker		readDataLock(&m_dataLock);

			if(m_data.isEmpty()) {
				m_dataDescription.prepend(description);
				return;
			}

			data	=	QCryptographicHash::hash(m_data.takeFirst(), QCryptographicHash::Md5);
// 			data	=	m_data.takeFirst();
		}
		else if(description.first == 'p') {
			QWriteLocker		readDataLock(&m_dataPkgLock);

			if(m_dataPkg.isEmpty()) {
				m_dataDescription.prepend(description);
				return;
			}

			data	=	QCryptographicHash::hash(m_dataPkg.takeFirst(), QCryptographicHash::Md5);
// 			data	=	m_dataPkg.takeFirst();
		}
		else if(description.first == 's') {
			QWriteLocker		readDataLock(&m_dataFDLock);

			if(m_dataFD.isEmpty()) {
				m_dataDescription.prepend(description);
				return;
			}

			data	=	m_dataFD.takeFirst().toLatin1();
		}


		readDescriptionLock.unlock();
		// m_dbgLog.write("Ok: 200\n");// m_dbgLog.flush();

		// m_dbgLog.write("ok\n");
		// m_dbgLog.flush();

// 		qDebug("=== got both ===");

// 		QWriteLocker		writeLocker(&m_peerStreamLock);
//
// 		if(description.first != data.first)
// 		{
// 			qDebug("Peer: PeerObject::checkReadData() - invalid type");
//
// // 			m_dbgLog.write("Invalid data type\n");
// // 			m_dbgLog.flush();
//
// 			m_peerSocket->write(QStringLiteral("fWaited for %1 but received %2").arg(s_actionTitles[description.first]).arg(s_actionTitles[data.first]).toLatin1());
// 			m_peerSocket->flush();
//
// 			if(m_close)
// 				close(1);
// 			return;
// 		}

		// Compare data
		if(data != description.second) {
			qDebug("Peer: PeerObject::checkReadData() - invalid data");

// 			m_dbgLog.write("Invalid data\n");
// 			m_dbgLog.flush();

			m_peerSocket->write("fReceived invalid data\n");
// 			m_peerSocket->flush();

			if(m_close)
				close(1);

			return;
		}

		static	quint32	totalRead	=	0;
		totalRead++;
		Logger::log("Processed", totalRead);

		m_peerSocket->write("s\n");
// 		m_peerSocket->flush();

		readDescriptionLock.relock();
	}

	if(m_close && m_dataDescription.isEmpty()) {
		if(m_data.isEmpty() && m_dataPkg.isEmpty() && m_dataFD.isEmpty())
			close();
		else {
			m_peerSocket->write("fNo more data descriptions\n");
// 			m_peerSocket->flush();

			close(1);
		}
	}
	else
		callSlotQueued(this, "checkReadData");

// 	m_dbgLog.write("PeerObject::~checkReadData()\n");
// 	m_dbgLog.flush();
}