diff --git a/monitor.cpp b/monitor.cpp
new file mode 100644
--- /dev/null
+++ b/monitor.cpp
@@ -0,0 +1,104 @@
+/*
+ * $Id: monitor.cpp 54 2008-01-10 00:24:52Z mbroeker $
+ * $URL: http://localhost/svn/cpp/qMonitor/trunk/monitor.cpp $
+ */
+
+#include "include/monitor.h"
+#include "include/readerthread.h"
+
+#ifndef ICON_PATH
+#define ICON_PATH "/usr/share/icons/qMonitor_icon.png"
+#endif
+
+#define HTML_MESSAGE \
+"
qMonitor
" \
+"" \
+"
Wählen Sie das Protokoll" \
+"Wählen Sie einen Port (0=ALLE)" \
+"Drücken Sie Start" \
+"
" \
+"Dieses Programm zeigt den Traffic im Netz an und unterstützt Sie bei täglichen Aufgaben:
" \
+"Kontrolle der TCP/UDP Verbindungen" \
+"Überwachung von textbasierten Serverdiensten" \
+"Protokollanalyse" \
+""
+
+Monitor::Monitor (QWidget * parent)
+{
+ setupUi ((QDialog *) this);
+ textEdit->setReadOnly (true);
+
+ listWidget1->insertItem (0, "TCP");
+ listWidget1->insertItem (1, "UDP");
+ listWidget1->insertItem (2, "ICMP");
+ listWidget1->insertItem (3, "RAW");
+ listWidget1->insertItem (4, "IP");
+
+ Protocol["TCP"] = IPPROTO_TCP;
+ Protocol["UDP"] = IPPROTO_UDP;
+ Protocol["ICMP"] = IPPROTO_ICMP;
+ Protocol["RAW"] = IPPROTO_RAW;
+ Protocol["IP"] = IPPROTO_IP;
+
+ listWidget1->setCurrentRow (0);
+ lineEdit1->setText ("0");
+
+ setWindowIcon (QPixmap (ICON_PATH));
+
+ textEdit->insertHtml (HTML_MESSAGE);
+
+ try {
+ reader = new readerThread (this);
+ }
+ catch (std::exception const &e) {
+ textEdit->append (e.what ());
+ reader = NULL;
+ }
+
+ connect (pushButton1, SIGNAL (clicked ()), this, SLOT (startCapture ()));
+ connect (pushButton2, SIGNAL (clicked ()), this, SLOT (stopCapture ()));
+
+}
+
+Monitor::~Monitor ()
+{
+ if (reader != NULL)
+ delete reader;
+}
+
+void Monitor::startCapture ()
+{
+ textEdit->clear ();
+
+ if (reader != NULL) {
+ if (!reader->isRunning ())
+ reader->start (QThread::NormalPriority);
+ }
+}
+
+void Monitor::stopCapture ()
+{
+ if (reader != NULL) {
+ if (reader->isRunning ())
+ reader->terminate ();
+ }
+}
+
+int Monitor::getProtocol ()
+{
+ return Protocol[listWidget1->item (listWidget1->currentRow ())->text ()];
+}
+
+int Monitor::getPort ()
+{
+ return lineEdit1->text ().toInt ();
+}
+
+void Monitor::customEvent (QEvent * e)
+{
+ if (e->type () == MSG_EVENT) {
+ DataChangeEvent *me = (DataChangeEvent *) e;
+
+ textEdit->append (me->Text ());
+ }
+}