summaryrefslogtreecommitdiffstats
path: root/src/modules/socketspy
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/socketspy')
-rw-r--r--src/modules/socketspy/Makefile.am20
-rw-r--r--src/modules/socketspy/libkvisocketspy.cpp92
-rw-r--r--src/modules/socketspy/socketspywindow.cpp125
-rw-r--r--src/modules/socketspy/socketspywindow.h53
4 files changed, 290 insertions, 0 deletions
diff --git a/src/modules/socketspy/Makefile.am b/src/modules/socketspy/Makefile.am
new file mode 100644
index 00000000..7e0a4b6b
--- /dev/null
+++ b/src/modules/socketspy/Makefile.am
@@ -0,0 +1,20 @@
+###############################################################################
+# KVirc IRC client Makefile - 10.03.2000 Szymon Stefanek <stefanek@tin.it>
+###############################################################################
+
+AM_CPPFLAGS = -I$(SS_TOPSRCDIR)/src/kvilib/include/ -I$(SS_TOPSRCDIR)/src/kvirc/include/ \
+$(SS_INCDIRS) $(SS_CPPFLAGS) -DGLOBAL_KVIRC_DIR=\"$(globalkvircdir)\"
+
+pluglib_LTLIBRARIES = libkvisocketspy.la
+
+libkvisocketspy_la_LDFLAGS = -module -avoid-version $(SS_LDFLAGS) $(SS_LIBDIRS)
+
+libkvisocketspy_la_SOURCES = libkvisocketspy.cpp socketspywindow.cpp
+libkvisocketspy_la_LIBADD = $(SS_LIBLINK) ../../kvilib/build/libkvilib.la
+
+noinst_HEADERS= socketspywindow.h
+
+m_%.moc: %.h
+ $(SS_QT_MOC) $< -o $@
+
+socketspywindow.cpp: m_socketspywindow.moc
diff --git a/src/modules/socketspy/libkvisocketspy.cpp b/src/modules/socketspy/libkvisocketspy.cpp
new file mode 100644
index 00000000..c4076620
--- /dev/null
+++ b/src/modules/socketspy/libkvisocketspy.cpp
@@ -0,0 +1,92 @@
+//
+// File : libkvisocketspy.cpp
+// Creation date : Sun Nov 26 2000 13:05:00 CEST by Szymon Stefanek
+//
+// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+
+
+#include "kvi_module.h"
+
+
+#include "socketspywindow.h"
+
+#include "kvi_frame.h"
+#include "kvi_window.h"
+#include "kvi_locale.h"
+
+#include <qsplitter.h>
+
+KviPointerList<KviSocketSpyWindow> * g_pSocketSpyWindowList = 0;
+
+
+/*
+ @doc: socketspy.open
+ @type:
+ command
+ @title:
+ socketspy.open
+ @short:
+ Opens a SocketSpy window
+ @syntax:
+ socketspy.open
+ @description:
+ Creates a new socketspy window. A SocketSpy window
+ monitors the incoming and outgoing raw data on the
+ irc socket of the current irc context.
+*/
+
+static bool socketspy_kvs_cmd_open(KviKvsModuleCommandCall * c)
+{
+ if(!c->window()->console())return c->context()->errorNoIrcContext();
+ KviSocketSpyWindow *w = new KviSocketSpyWindow(c->window()->frame(),c->window()->console());
+ c->window()->frame()->addWindow(w);
+ return true;
+}
+
+static bool socketspy_module_init(KviModule * m)
+{
+ g_pSocketSpyWindowList = new KviPointerList<KviSocketSpyWindow>;
+ g_pSocketSpyWindowList->setAutoDelete(false);
+
+ KVSM_REGISTER_SIMPLE_COMMAND(m,"open",socketspy_kvs_cmd_open);
+ return true;
+}
+
+static bool socketspy_module_cleanup(KviModule *m)
+{
+ while(g_pSocketSpyWindowList->first())g_pSocketSpyWindowList->first()->die();
+ delete g_pSocketSpyWindowList;
+ g_pSocketSpyWindowList = 0;
+ return true;
+}
+
+static bool socketspy_module_can_unload(KviModule *m)
+{
+ return (g_pSocketSpyWindowList->isEmpty());
+}
+
+KVIRC_MODULE(
+ "SocketSpy", // module name
+ "1.0.0", // module version
+ "Copyright (C) 2000 Szymon Stefanek (pragma at kvirc dot net)", // author & (C)
+ "SocketSpy irc socket traffic monitor",
+ socketspy_module_init,
+ socketspy_module_can_unload,
+ 0,
+ socketspy_module_cleanup
+)
diff --git a/src/modules/socketspy/socketspywindow.cpp b/src/modules/socketspy/socketspywindow.cpp
new file mode 100644
index 00000000..4d59b5aa
--- /dev/null
+++ b/src/modules/socketspy/socketspywindow.cpp
@@ -0,0 +1,125 @@
+//
+// File : socketspywindow.cpp
+// Creation date : Thu Aug 31 2000 15:02:22 by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the socketspys of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+#include "socketspywindow.h"
+
+#include "kvi_iconmanager.h"
+#include "kvi_ircview.h"
+#include "kvi_out.h"
+#include "kvi_options.h"
+#include "kvi_locale.h"
+#include "kvi_console.h"
+
+#include <qsplitter.h>
+//#include "kvi_module.h"
+
+extern KviPointerList<KviSocketSpyWindow> * g_pSocketSpyWindowList;
+
+KviSocketSpyWindow::KviSocketSpyWindow(KviFrame * lpFrm,KviConsole * lpConsole)
+: KviWindow(KVI_WINDOW_TYPE_SOCKETSPY,lpFrm,"socket_spy",lpConsole) , KviIrcDataStreamMonitor(lpConsole->context())
+{
+ g_pSocketSpyWindowList->append(this);
+ #ifdef COMPILE_USE_QT4
+ m_pSplitter = new QSplitter(Qt::Horizontal,this,"splitter");
+ #else
+ m_pSplitter = new QSplitter(QSplitter::Horizontal,this,"splitter");
+#endif
+ m_pIrcView = new KviIrcView(m_pSplitter,lpFrm,this);
+ // Ensure proper focusing
+ //setFocusHandler(m_pIrcView,this);
+}
+
+KviSocketSpyWindow::~KviSocketSpyWindow()
+{
+ g_pSocketSpyWindowList->removeRef(this);
+}
+
+void KviSocketSpyWindow::die()
+{
+ close();
+}
+
+QPixmap * KviSocketSpyWindow::myIconPtr()
+{
+ return g_pIconManager->getSmallIcon(KVI_SMALLICON_SPY);
+}
+
+void KviSocketSpyWindow::resizeEvent(QResizeEvent *e)
+{
+ m_pSplitter->setGeometry(0,0,width(),height());
+}
+
+QSize KviSocketSpyWindow::sizeHint() const
+{
+ return m_pIrcView->sizeHint();
+}
+
+void KviSocketSpyWindow::getBaseLogFileName(KviStr &buffer)
+{
+ buffer.sprintf("SOCKETSPY_%d",console()->ircContextId());
+}
+
+void KviSocketSpyWindow::fillCaptionBuffers()
+{
+ KviQString::sprintf(m_szPlainTextCaption,__tr2qs("Socket Spy [IRC Context %u]"),m_pConsole->ircContextId());
+
+ KviQString::sprintf(m_szHtmlActiveCaption,
+ __tr2qs("<nobr><font color=\"%s\"><b>Socket Spy</b></font> " \
+ "<font color=\"%s\">[IRC Context %u]</font></nobr>"),
+ KVI_OPTION_COLOR(KviOption_colorCaptionTextActive).name().ascii(),
+ KVI_OPTION_COLOR(KviOption_colorCaptionTextActive2).name().ascii(),
+ m_pConsole->ircContextId());
+
+ KviQString::sprintf(m_szHtmlInactiveCaption,
+ __tr2qs("<nobr><font color=\"%s\"><b>Socket Spy</b></font> " \
+ "<font color=\"%s\">[IRC Context %u]</font></nobr>"),
+ KVI_OPTION_COLOR(KviOption_colorCaptionTextInactive).name().ascii(),
+ KVI_OPTION_COLOR(KviOption_colorCaptionTextInactive2).name().ascii(),
+ m_pConsole->ircContextId());
+}
+
+void KviSocketSpyWindow::incomingMessage(const char * message)
+{
+ outputNoFmt(KVI_OUT_SOCKETMESSAGE,console()->decodeText(message));
+}
+
+void KviSocketSpyWindow::outgoingMessage(const char * message,int len)
+{
+ KviStr str(message,len);
+ outputNoFmt(KVI_OUT_RAW,console()->decodeText(str.ptr()));
+}
+
+void KviSocketSpyWindow::connectionInitiated()
+{
+ output(KVI_OUT_SOCKETWARNING,__tr2qs("Socket open"));
+}
+
+void KviSocketSpyWindow::connectionTerminated()
+{
+ output(KVI_OUT_SOCKETWARNING,__tr2qs("Socket closed"));
+}
+
+void KviSocketSpyWindow::applyOptions()
+{
+ m_pIrcView->applyOptions();
+ KviWindow::applyOptions();
+}
+#include "m_socketspywindow.moc"
diff --git a/src/modules/socketspy/socketspywindow.h b/src/modules/socketspy/socketspywindow.h
new file mode 100644
index 00000000..ab516d3e
--- /dev/null
+++ b/src/modules/socketspy/socketspywindow.h
@@ -0,0 +1,53 @@
+#ifndef _SOCKETSPYWINDOW_H_
+#define _SOCKETSPYWINDOW_H_
+//
+// File : socketspywindow.h
+// Creation date : Sun Nov 26 2000 13:13:00 CEST by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the socketspys of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+
+#include "kvi_window.h"
+#include "kvi_string.h"
+#include "kvi_ircdatastreammonitor.h"
+
+class KviConsole;
+
+class KviSocketSpyWindow : public KviWindow, public KviIrcDataStreamMonitor
+{
+ Q_OBJECT
+public:
+ KviSocketSpyWindow(KviFrame * lpFrm,KviConsole * lpConsole);
+ ~KviSocketSpyWindow();
+protected:
+ virtual QPixmap * myIconPtr();
+ virtual void fillCaptionBuffers();
+ virtual void resizeEvent(QResizeEvent *e);
+ virtual void getBaseLogFileName(KviStr &buffer);
+ virtual void applyOptions();
+public:
+ virtual QSize sizeHint() const;
+ virtual void incomingMessage(const char * message);
+ // message is NOT null terminated! For proxy connections it might spit out binary data!
+ virtual void outgoingMessage(const char * message,int len);
+ virtual void connectionInitiated();
+ virtual void connectionTerminated();
+ virtual void die();
+};
+
+#endif //_KVI_SOCKETSPYWINDOW_H_