tests/qtp/qtp_anomaly/src/httpserver.cpp
changeset 3 41300fa6a67c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/qtp/qtp_anomaly/src/httpserver.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -0,0 +1,172 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QTcpServer>
+#include <QTcpSocket>
+
+#include "BrowserWindow.h"
+#include "httpserver.h"
+
+#define HTTP_PORT 80
+
+httpServer::httpServer( QObject *parent  )
+         : QTcpServer( parent )
+{
+    httpSocket = NULL;
+
+    tcpServer = new QTcpServer( /* this */ );
+    not_done = true;
+    bool result = tcpServer->listen(QHostAddress::Any, HTTP_PORT );
+    if ( !result )
+    {
+        delete tcpServer;
+        close();
+        not_done = false;
+        return;
+    }
+    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(handleNewConnection()));
+
+}
+
+httpServer::~httpServer()
+{
+    if ( httpSocket )
+    {
+        httpSocket->disconnect(SIGNAL(readyRead()));
+        httpSocket->disconnect(SIGNAL(error(QAbstractSocket::SocketError)));
+        httpSocket->close();
+        httpSocket->abort();
+        httpSocket->deleteLater();
+        httpSocket = NULL;
+    }
+}
+
+
+bool httpServer::isDone()
+{
+    return not_done;
+}
+void httpServer::handleNewConnection()
+{
+    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
+    clientConnection->setTextModeEnabled(true);
+
+    if ( !httpSocket )
+    {
+        httpSocket = clientConnection;
+        connect( httpSocket,
+            SIGNAL(readyRead()),
+            this,
+            SLOT(readConnection()));
+        connect(httpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
+             this, SLOT(displayConnectionError(QAbstractSocket::SocketError)));
+    }
+    else
+    {
+        // We already are busy with open connection?!
+        // qDebug() << "Server busy.\n";
+        clientConnection->disconnectFromHost();
+    }
+}
+
+
+void httpServer::displayConnectionError(QAbstractSocket::SocketError /* socketError */ )
+{
+    httpSocket->disconnect(SIGNAL(readyRead()));
+    httpSocket->disconnect(SIGNAL(error(QAbstractSocket::SocketError)));
+    httpSocket->close();
+    httpSocket->abort();
+    httpSocket->deleteLater();
+    httpSocket = NULL;
+}
+
+
+void httpServer::readConnection()
+{
+    while (httpSocket->canReadLine())
+    {
+        char buf[256];
+        qint64 lineLength = httpSocket->readLine(buf, sizeof(buf));
+        if (lineLength != -1)
+        {
+            QString tmpCommand(buf);
+            tmpCommand = tmpCommand.simplified();
+
+            // qDebug() << "Received: '" << buf << "'\n";
+
+            if ( tmpCommand.left(4) == QString("GET ") )
+            {
+                qDebug() << "QTESTWEB: Received GET:" << buf << "\n";
+		            // Craft and send a response
+				        QString answer("HTTP/1.x 200 OK\nDate: Tue, 06 Jul 2004 17:59:22 GMT\n");
+				        answer.append("Expires: Thu, 01 Jan 1970 00:00:00 GMT\n");
+				        answer.append("Cache-Control: private, must-revalidate\n");
+				        answer.append("Via: 1.0 cthulhu\n");
+				        answer.append("Server: Apache/1.3.29 (Unix) PHP/4.3.4\n");
+				        answer.append("X-Powered-By: PHP/4.3.4\n");
+				        answer.append("Set-Cookie: fiwikiSession=a8015bd32eee4e5bd46fd83aea40f159; path=/\n");
+				        answer.append("Vary: Accept-Encoding,Cookie\n");
+				        answer.append("Content-Language: fi\n");
+				        answer.append("Content-Type: text/html; charset=utf-8\n");
+				        answer.append("X-Cache: MISS from wikipedia.org\n");
+				        answer.append("Transfer-Encoding: chunked\n");
+				        answer.append("Connection: keep-alive\n");
+				        httpSocket->write(qPrintable(answer));
+				        QString content("<HTML><HEAD><TITLE>Example Page</TITLE></HEAD>\n");
+				        content.append("<body><p>Empty page sent by test server.</p></BODY></HTML>");
+				        httpSocket->write(qPrintable(content));            
+				        httpSocket->flush();
+
+						    QTest::qWait(200);
+
+				        not_done = false;
+            }
+/*
+            else
+            {
+                qDebug() << "Received unknown:" << buf << "\n";
+            }
+*/            
+        }
+    }
+}
+