Hi everybody,
I've got the probvlem that if I want to read the to my QSslSocket transmitted https-data, the call of QSslSocket->CanReadLine seems to return false. I don't haver any idea whrer this comes from, but it worked how it should and soddenly it didn't without changing anything and changing anything now brings no success.
Here is my code (CSSLConnection inherits QThread and is created from a QTCPServer in its' incommingConnection-function):
// Verbindung verschlüsseln
MSResult CMSSSLConnection::startSocketencryption()
{
m_pSSLSocket->setLocalCertificate("/home/niklas/Dokumente/MySchool/Debug_Ubuntu_x86_Desktop/MSHTTPSServer/myschool.crt");
m_pSSLSocket->setPrivateKey("/home/niklas/Dokumente/MySchool/Debug_Ubuntu_x86_Desktop/MSHTTPSServer/myschool.key.insecure");
m_pSSLSocket->startServerEncryption();
if(m_pSSLSocket->waitForEncrypted())
{
m_pSSLSocket->write("HTTP/1.1 200 OK\r\n"
"Content-type: text/plain\r\n"
"Content-length: 12\r\n"
"\r\n"
"Hello World!");
return MSR_OK;
}
else
{
Log
->Error
(QString("Cannot encrypt connection to %1: %2").
arg(m_pSSLSocket
->peerAddress
().
toString(),
m_pSSLSocket->errorString()));
m_pSSLSocket->disconnectFromHost();
return MSR_ENCRYPTION_ERROR;
}
}
// Neue Verbindung wurde aufgebaut
void CMSSSLConnection::acceptClient()
{
}
// Daten verarbeiten
void CMSSSLConnection::readData()
{
if(m_pSSLSocket->canReadLine())
{
// Anfrage zerlegen
// Um welchen Anfragetypen handelt es sich?
if(request[0] == "GET")
{
// Einfache GET-ANfrage
out.setAutoDetectUnicode(true);
out << "HTTP/1.0 200 Ok\r\n"
"Content-Type: text/html;\r\n"
"\r\n"
"<h1>Nothing to see here</h1>\n";
}
}
else
{
Log
->Error
(QString("Cannot read line from %1").
arg(m_pSSLSocket
->peerAddress
().
toString()));
return;
}
}
// Verbindung verschlüsseln
MSResult CMSSSLConnection::startSocketencryption()
{
m_pSSLSocket->setLocalCertificate("/home/niklas/Dokumente/MySchool/Debug_Ubuntu_x86_Desktop/MSHTTPSServer/myschool.crt");
m_pSSLSocket->setPrivateKey("/home/niklas/Dokumente/MySchool/Debug_Ubuntu_x86_Desktop/MSHTTPSServer/myschool.key.insecure");
m_pSSLSocket->startServerEncryption();
if(m_pSSLSocket->waitForEncrypted())
{
m_pSSLSocket->write("HTTP/1.1 200 OK\r\n"
"Content-type: text/plain\r\n"
"Content-length: 12\r\n"
"\r\n"
"Hello World!");
return MSR_OK;
}
else
{
Log->Error(QString("Cannot encrypt connection to %1: %2").arg(m_pSSLSocket->peerAddress().toString(),
m_pSSLSocket->errorString()));
m_pSSLSocket->disconnectFromHost();
return MSR_ENCRYPTION_ERROR;
}
}
// Neue Verbindung wurde aufgebaut
void CMSSSLConnection::acceptClient()
{
}
// Daten verarbeiten
void CMSSSLConnection::readData()
{
if(m_pSSLSocket->canReadLine())
{
// Anfrage zerlegen
QStringList request = QString(m_pSSLSocket->readLine()).split(QRegExp("[ \r\n][ \r\n]*"));
// Um welchen Anfragetypen handelt es sich?
if(request[0] == "GET")
{
// Einfache GET-ANfrage
QTextStream out(m_pSSLSocket);
out.setAutoDetectUnicode(true);
out << "HTTP/1.0 200 Ok\r\n"
"Content-Type: text/html;\r\n"
"\r\n"
"<h1>Nothing to see here</h1>\n";
}
}
else
{
Log->Error(QString("Cannot read line from %1").arg(m_pSSLSocket->peerAddress().toString()));
return;
}
}
To copy to clipboard, switch view to plain text mode
So in fact, if I connect via firefox (https://localhost) the first message (Hello World) is transmitted, but the second one isn't. Instead of this, in my logfile it says "cannot read line form 127.0.0.1", but there is no exact error given.
The certificates are created like here: http://quickmediasolutions.com/blog/...ations-with-qt, but I used only a length of 2048 for the key and the program should run on linux (ubuntu).
I hope you can help me.
Bookmarks