summaryrefslogtreecommitdiffstats
path: root/examples/network/httpd
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-08 12:31:36 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-08 12:31:36 -0600
commitd796c9dd933ab96ec83b9a634feedd5d32e1ba3f (patch)
tree6e3dcca4f77e20ec8966c666aac7c35bd4704053 /examples/network/httpd
downloadtqt3-d796c9dd933ab96ec83b9a634feedd5d32e1ba3f.tar.gz
tqt3-d796c9dd933ab96ec83b9a634feedd5d32e1ba3f.zip
Test conversion to TQt3 from Qt3 8c6fc1f8e35fd264dd01c582ca5e7549b32ab731
Diffstat (limited to 'examples/network/httpd')
-rw-r--r--examples/network/httpd/README7
-rw-r--r--examples/network/httpd/httpd.cpp141
-rw-r--r--examples/network/httpd/httpd.doc20
-rw-r--r--examples/network/httpd/httpd.pro9
4 files changed, 177 insertions, 0 deletions
diff --git a/examples/network/httpd/README b/examples/network/httpd/README
new file mode 100644
index 000000000..dc7229d4a
--- /dev/null
+++ b/examples/network/httpd/README
@@ -0,0 +1,7 @@
+This is an example for the QServerSocket class which is included in the
+network module.
+
+It is a simple http daemon. After starting it you can connect to port
+8080 with a web browser and an html page is shown. The program does
+not really parse the http request; so it is not of much use except for
+being a small example for QServerSocket.
diff --git a/examples/network/httpd/httpd.cpp b/examples/network/httpd/httpd.cpp
new file mode 100644
index 000000000..fd42891bb
--- /dev/null
+++ b/examples/network/httpd/httpd.cpp
@@ -0,0 +1,141 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+#include <stdlib.h>
+#include <qsocket.h>
+#include <qregexp.h>
+#include <qserversocket.h>
+#include <qapplication.h>
+#include <qmainwindow.h>
+#include <qtextstream.h>
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qtextview.h>
+#include <qpushbutton.h>
+
+// HttpDaemon is the the class that implements the simple HTTP server.
+class HttpDaemon : public TQServerSocket
+{
+ Q_OBJECT
+public:
+ HttpDaemon( TQObject* parent=0 ) :
+ TQServerSocket(8080,1,parent)
+ {
+ if ( !ok() ) {
+ qWarning("Failed to bind to port 8080");
+ exit( 1 );
+ }
+ }
+
+ void newConnection( int socket )
+ {
+ // When a new client connects, the server constructs a TQSocket and all
+ // communication with the client is done over this TQSocket. TQSocket
+ // works asynchronouslyl, this means that all the communication is done
+ // in the two slots readClient() and discardClient().
+ TQSocket* s = new TQSocket( this );
+ connect( s, SIGNAL(readyRead()), this, SLOT(readClient()) );
+ connect( s, SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
+ s->setSocket( socket );
+ emit newConnect();
+ }
+
+signals:
+ void newConnect();
+ void endConnect();
+ void wroteToClient();
+
+private slots:
+ void readClient()
+ {
+ // This slot is called when the client sent data to the server. The
+ // server looks if it was a get request and sends a very simple HTML
+ // document back.
+ TQSocket* socket = (TQSocket*)sender();
+ if ( socket->canReadLine() ) {
+ TQStringList tokens = TQStringList::split( TQRegExp("[ \r\n][ \r\n]*"), socket->readLine() );
+ if ( tokens[0] == "GET" ) {
+ TQTextStream os( socket );
+ os.setEncoding( TQTextStream::UnicodeUTF8 );
+ os << "HTTP/1.0 200 Ok\r\n"
+ "Content-Type: text/html; charset=\"utf-8\"\r\n"
+ "\r\n"
+ "<h1>Nothing to see here</h1>\n";
+ socket->close();
+ emit wroteToClient();
+ }
+ }
+ }
+ void discardClient()
+ {
+ TQSocket* socket = (TQSocket*)sender();
+ delete socket;
+ emit endConnect();
+ }
+};
+
+
+// HttpInfo provides a simple graphical user interface to the server and shows
+// the actions of the server.
+class HttpInfo : public TQVBox
+{
+ Q_OBJECT
+public:
+ HttpInfo()
+ {
+ HttpDaemon *httpd = new HttpDaemon( this );
+
+ TQString itext = TQString(
+ "This is a small httpd example.\n"
+ "You can connect with your\n"
+ "web browser to port %1"
+ ).arg( httpd->port() );
+ TQLabel *lb = new TQLabel( itext, this );
+ lb->setAlignment( AlignHCenter );
+ infoText = new TQTextView( this );
+ TQPushButton *tquit = new TQPushButton( "tquit" , this );
+
+ connect( httpd, SIGNAL(newConnect()), SLOT(newConnect()) );
+ connect( httpd, SIGNAL(endConnect()), SLOT(endConnect()) );
+ connect( httpd, SIGNAL(wroteToClient()), SLOT(wroteToClient()) );
+ connect( tquit, SIGNAL(pressed()), qApp, SLOT(tquit()) );
+ }
+
+ ~HttpInfo()
+ {
+ }
+
+private slots:
+ void newConnect()
+ {
+ infoText->append( "New connection" );
+ }
+ void endConnect()
+ {
+ infoText->append( "Connection closed\n\n" );
+ }
+ void wroteToClient()
+ {
+ infoText->append( "Wrote to client" );
+ }
+
+private:
+ TQTextView *infoText;
+};
+
+
+int main( int argc, char** argv )
+{
+ TQApplication app( argc, argv );
+ HttpInfo info;
+ app.setMainWidget( &info );
+ info.show();
+ return app.exec();
+}
+
+#include "httpd.moc"
diff --git a/examples/network/httpd/httpd.doc b/examples/network/httpd/httpd.doc
new file mode 100644
index 000000000..de1e0be9f
--- /dev/null
+++ b/examples/network/httpd/httpd.doc
@@ -0,0 +1,20 @@
+/*
+*/
+
+/*! \page httpd-example.html
+
+ \ingroup network-examples
+
+ \title A simple HTTP daemon
+
+ This example shows how to use the QServerSocket class. It is a very
+ simple implementation of a HTTP daemon that listens on port 8080 and
+ sends back a simple HTML page back for every GET request it gets. After
+ sending the page, it closes the connection.
+
+ <hr>
+
+ Implementation (httpd.cpp):
+
+ \include network/httpd/httpd.cpp
+*/
diff --git a/examples/network/httpd/httpd.pro b/examples/network/httpd/httpd.pro
new file mode 100644
index 000000000..a364499ff
--- /dev/null
+++ b/examples/network/httpd/httpd.pro
@@ -0,0 +1,9 @@
+TEMPLATE = app
+TARGET = httpd
+
+CONFIG += qt warn_on release
+
+REQUIRES = network large-config
+
+HEADERS =
+SOURCES = httpd.cpp