Client::Client(QObject *parent) : ClientInterface(parent)
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Api instance init!";
-
+#endif
authReply = 0;
uptimeReply = 0;
{
if (socket->bind(QHostAddress::Any, m_localPort))
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Successful connection";
+#endif
emit connected();
return;
}
m_error = BindError;
m_errorString = socket->errorString();
-qDebug() << QString("Bind on Address: %1 port: %2 failed").arg(m_hostAddress.toString()).arg(m_localPort);
+ qWarning() << QString("Bind on Address: %1 port: %2 failed").arg(m_hostAddress.toString()).arg(m_localPort);
emit connectionError();
return;
}
void Client::lookedUp(QHostInfo hostInfo)
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Host lookup finished";
+#endif
if (hostInfo.error() != QHostInfo::NoError)
{
qDebug() << "Lookup failed:" << hostInfo.errorString();
// Happens if sendState is entered from recv* states.
if (commandTimer->isActive())
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "commandTimer activein sendState";
+#endif
emit commandSent();
return;
}
// Control commands (auth and such) have priority over any other commands.
if (!controlCommandQueue.isEmpty())
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Sending Control Command";
+#endif
AbstractReply *cmd = controlCommandQueue.dequeue();
emit model_queuedCommandRemoved(0);
sendCommand(cmd, true);
{
#ifdef ANIDBUDPCLIENT_CLIENT_STATE_MACHINE_DEBUG
qDebug() << "Entering Idle State";
-qDebug() << m_idlePolicy;
+qDebug() << "Idle policty=" << m_idlePolicy;
#endif
// If not loogged in, nothing has to be done in idle state.
if (sender != m_hostAddress)
{
- qDebug() << QString("Recieved datagram from unknown host: %1 port: %2\nRaw datagram contents:%3\nDiscarding datagram.")
+ qWarning() << QString("Recieved datagram from unknown host: %1 port: %2\nRaw datagram contents:%3\nDiscarding datagram.")
.arg(sender.toString())
.arg(senderPort)
.arg(tmp.constData());
if (authCommand.compression() && tmp.mid(0, 2) == "00")
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "COMPRESSED DATAGRAM = " << tmp;
+#endif
tmp = qUncompress(tmp);
}
QString reply = QString::fromUtf8(tmp);
- qDebug() << QString("Recieved datagram from [%1]:%2\nRaw datagram contents:%3")
- .arg(m_host)
- .arg(senderPort)
- .arg(reply);
-
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
+qDebug() << QString("Recieved datagram from [%1]:%2\nRaw datagram contents:%3")
+ .arg(m_host)
+ .arg(senderPort)
+ .arg(reply);
+#endif
// Check if it is a 6xx error.
{
// Do not parse reply for unknown commands.
if (!sentCommands.contains(commandId))
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << QString("Unknown command with id: %1, discarding")
.arg(commandId.constData());
+#endif
continue;
}
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << QString("Sending reply to command with id: %1")
.arg(commandId.constData());
-
+#endif
// tag + space = 5 + 1
QByteArray replyCodeText = tmp.mid(6, 3);
int newTimeout = qBound(0, Client::UDP_API_COMMAND_TIMEOUT - sentCommands[commandId]->timeSent().secsTo(QDateTime::currentDateTime()), Client::UDP_API_COMMAND_TIMEOUT);
newTimeout *= 1000;
replyTimeoutTimer->start(newTimeout);
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Starting replyTimeoutTimer" << newTimeout;
+#endif
}
}
else
{
case LOGIN_FIRST:
case INVALID_SESSION:
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "LOGIN FIRST required, authing";
+#endif
m_sessionId.clear();
if (controlCommand)
enqueueControlCommand(cmd);
default:
if (replyCode > 601 && replyCode < 700)
{
- qDebug() << QString("SERVER ERROR %1").arg(replyCode);
+ qWarning() << QString("SERVER ERROR %1").arg(replyCode);
emit connectionError();
}
break;
void Client::connect()
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Connecting";
+#endif
emit startConnecting();
}
void Client::disconnect(bool graceful)
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Disconnecting" << (graceful ? "gracefully" : "");
+#endif
if (graceful)
{
disconnecting = true;
void Client::sendRaw(QByteArray command)
{
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << QString("Sending RAW command: %1").arg(command.constData());
+#endif
enqueueCommand(createReply(RawCommand(command)));
}
QByteArray commandId = sentCommandOrder.dequeue();
emit model_sentCommandRemoved(0);
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << commandId << "timed out";
-
+#endif
if (!sentCommandOrder.isEmpty())
{
int newTimeout = qBound(0, Client::UDP_API_COMMAND_TIMEOUT - sentCommands[commandId]->timeSent().secsTo(QDateTime::currentDateTime()), Client::UDP_API_COMMAND_TIMEOUT);
newTimeout *= 1000;
replyTimeoutTimer->start(newTimeout);
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Starting replyTimeoutTimer" << newTimeout;
+#endif
}
// If it's empty thereis no need to start replyTimeoutTimer again, as there are no commands waiting.
if (!replyTimeoutTimer->isActive())
{
replyTimeoutTimer->start(Client::UDP_API_COMMAND_TIMEOUT * 1000);
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << "Starting replyTimeoutTimer" << replyTimeoutTimer->interval();
+#endif
}
-
+#ifdef ANIDBUDPCLIENT_CLIENT_MISC_DEBUG
qDebug() << QString("SENDING datagram:\n\t%1\nto: %2 ([%3]:%4)")
.arg(datagram.constData())
.arg(m_host)
.arg(m_hostAddress.toString())
.arg(m_hostPort);
+#endif
socket->writeDatagram(datagram, m_hostAddress, m_hostPort);
}
HashResult *Hash::hashFile(const HashRequest &file)
{
-qDebug() << "Hash::hashFile";
-
HashResult *result = new HashResult(file);
fileQueue.enqueue(result);
void Hash::endHashing(const QByteArray &hash)
{
-qDebug() << "Hash::endHashing";
HashResult *r = fileQueue.dequeue();
+#ifdef ANIDBUDPCLIENT_HASH_DEBUG
int fileElapsed = fileTime.elapsed();
-
-qDebug() << "File:" << r->fileInfo().fileName() << "Hash:" << hash << "Time:" << fileElapsed;
-
+ qDebug() << "File:" << r->fileInfo().fileName() << "Hash:" << hash << "Time:" << fileElapsed;
+#endif
hashedFileSize += r->fileInfo().size();
r->setHash(hash);
else
{
hashing = false;
- int totalElapsed = totalTime.elapsed();
emit finished();
-qDebug() << "Total time:" << totalElapsed;
+#ifdef ANIDBUDPCLIENT_HASH_DEBUG
+ int totalElapsed = totalTime.elapsed();
+ qDebug() << "Total time:" << totalElapsed;
+#endif
hashedFileSize = totalFileSize = 0;
}
{
if (producer || consumer || buffer)
return;
-qDebug() << "MAIN thread id is: " << QThread::currentThreadId();
+
buffer = new HashPrivate::Buffer;
producer = new HashPrivate::HashProducer(buffer, this);
consumer = new HashPrivate::HashConsumer(buffer, this);
HashRequest::HashRequest(const QFileInfo &fileInfo)
{
-qDebug() << "HashRequest::HashRequest(const QFileInfo &fileInfo)";
m_fileInfo = fileInfo;
}
HashRequest::HashRequest(const HashRequest &other)
{
-qDebug() << "HashRequest::HashRequest(const HashRequest &other)";
m_fileInfo = other.m_fileInfo;
-qDebug() << m_fileInfo.absoluteFilePath();
}
HashRequest &HashRequest::operator=(const HashRequest &other)
{
-qDebug() << "HashRequest &HashRequest::operator=(const HashRequest &other)";
m_fileInfo = other.m_fileInfo;
return *this;
}
void HashProducer::readFile(const QString &file)
{
-qDebug() << "readFile";
-qDebug() << "Thread id is: " << QThread::currentThreadId();
-
QMutexLocker locker(&mutex);
fileName = file;
void HashProducer::run()
{
+#ifdef ANIDBUDPCLIENT_HASH_DEBUG
qDebug() << "Starting thread producer";
qDebug() << "Thread producer id is: " << QThread::currentThreadId();
+#endif
forever
{
mutex.lock();
+#ifdef ANIDBUDPCLIENT_HASH_DEBUG
qDebug() << "Obtaining new file name";
+#endif
QFile file(fileName);
mutex.unlock();
if (file.exists())
{
- qDebug() << "File exists, opening";
+#ifdef ANIDBUDPCLIENT_HASH_DEBUG
+qDebug() << "File exists, opening";
+#endif
if (file.open(QIODevice::ReadOnly))
{
while (!file.atEnd())
{
if (abort)
return;
-// qDebug() << "read->while(" << (!file.atEnd()) << ")";
QByteArray data = file.read(ED2K_PART_SIZE);
while (!(buffer->put(data, file.atEnd()) || abort));
}
restart = false;
mutex.unlock();
}
+#ifdef ANIDBUDPCLIENT_HASH_DEBUG
qDebug() << "Thread producer is stopping";
+#endif
}
} // namespace HashPrivate