void TestHTTPServer::readyRead() { QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender()); if (!socket || socket->state() == QTcpSocket::ClosingState) return; if (!m_directories.isEmpty()) { serveGET(socket, socket->readAll()); return; } if (m_state == Failed || (m_waitData.body.isEmpty() && m_waitData.headers.count() == 0)) { qWarning() << "TestHTTPServer: Unexpected data" << socket->readAll(); return; } if (m_state == AwaitingHeader) { QByteArray line; while (!(line = socket->readLine()).isEmpty()) { line.replace('\r', ""); if (line.at(0) == '\n') { m_state = AwaitingData; m_data += socket->readAll(); break; } else { if (!m_waitData.headers.contains(line)) { qWarning() << "TestHTTPServer: Unexpected header:" << line << "\nExpected headers: " << m_waitData.headers; m_state = Failed; socket->disconnectFromHost(); return; } } } } else { m_data += socket->readAll(); } if (!m_data.isEmpty() || m_waitData.body.isEmpty()) { if (m_waitData.body != m_data) { qWarning() << "TestHTTPServer: Unexpected data" << m_data << "\nExpected: " << m_waitData.body; m_state = Failed; } else { socket->write(m_replyData); } socket->disconnectFromHost(); } }
void TestHTTPServer::readyRead() { QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender()); if (!socket || socket->state() == QTcpSocket::ClosingState) return; QByteArray ba = socket->readAll(); if (!dirs.isEmpty()) { serveGET(socket, ba); return; } if (m_hasFailed || waitData.isEmpty()) { qWarning() << "TestHTTPServer: Unexpected data" << ba; return; } for (int ii = 0; ii < ba.count(); ++ii) { const char c = ba.at(ii); if (c == '\r' && waitData.isEmpty()) continue; else if (!waitData.isEmpty() && c == waitData.at(0)) waitData = waitData.mid(1); else if (c == '\r') continue; else { QByteArray data = ba.mid(ii); qWarning() << "TestHTTPServer: Unexpected data" << data << "\nExpected: " << waitData; m_hasFailed = true; socket->disconnectFromHost(); return; } } if (waitData.isEmpty()) { socket->write(replyData); socket->disconnectFromHost(); } }