O1::O1(QObject *parent): QObject(parent) { QByteArray hash = QCryptographicHash::hash("12345678", QCryptographicHash::Sha1); crypt_ = new SimpleCrypt(*((quint64 *)(void *)hash.data())); manager_ = new QNetworkAccessManager(this); replyServer_ = new O2ReplyServer(this); qRegisterMetaType<QNetworkReply::NetworkError>("QNetworkReply::NetworkError"); connect(replyServer_, SIGNAL(verificationReceived(QMap<QString,QString>)), this, SLOT(onVerificationReceived(QMap<QString,QString>))); }
void O2ReplyServer::onBytesReady() { QByteArray reply; QByteArray content; content.append("<HTML></HTML>"); reply.append("HTTP/1.0 200 OK \r\n"); reply.append("Content-Type: text/html; charset=\"utf-8\"\r\n"); reply.append(QString("Content-Length: %1\r\n\r\n").arg(content.size())); reply.append(content); socket->write(reply); QByteArray data = socket->readAll(); QMap<QString, QString> queryParams = parseQueryParams(&data); socket->disconnectFromHost(); close(); emit verificationReceived(queryParams); }
void O2ReplyServer::onBytesReady() { if (!isListening()) { // server has been closed, stop processing queued connections return; } qDebug() << "O2ReplyServer::onBytesReady: Processing request"; // NOTE: on first call, the timeout timer is started QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender()); if (!socket) { qWarning() << "O2ReplyServer::onBytesReady: No socket available"; return; } QByteArray reply; reply.append("HTTP/1.0 200 OK \r\n"); reply.append("Content-Type: text/html; charset=\"utf-8\"\r\n"); reply.append(QString("Content-Length: %1\r\n\r\n").arg(replyContent_.size()).toLatin1()); reply.append(replyContent_); socket->write(reply); qDebug() << "O2ReplyServer::onBytesReady: Sent reply"; QByteArray data = socket->readAll(); QMap<QString, QString> queryParams = parseQueryParams(&data); if (queryParams.isEmpty()) { if (tries_ < maxtries_ ) { qDebug() << "O2ReplyServer::onBytesReady: No query params found, waiting for more callbacks"; ++tries_; return; } else { tries_ = 0; qWarning() << "O2ReplyServer::onBytesReady: No query params found, maximum callbacks received"; closeServer(socket, false); return; } } qDebug() << "O2ReplyServer::onBytesReady: Query params found, closing server"; closeServer(socket, true); Q_EMIT verificationReceived(queryParams); }