summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2015-09-10 22:30:28 +0800
committerIru Cai <mytbk920423@gmail.com>2016-04-19 15:24:02 +0800
commit3ddf947c8da82a6d2e40688583143005b632942e (patch)
tree5b890869f5a9651c10b36c8767b3a3d45c5cc8d1
parentb4267aa7c747f1ea3c21e077c69fc0bff736ed19 (diff)
downloadfqterm-3ddf947c8da82a6d2e40688583143005b632942e.tar.xz
new feature: raw packet capture.
-rw-r--r--res/pic/log_raw.pngbin0 -> 931 bytes
-rw-r--r--src/common/fqterm_shortcuthelper.cpp9
-rw-r--r--src/common/fqterm_shortcuthelper.h1
-rw-r--r--src/fqterm/fqterm_frame.cpp19
-rw-r--r--src/fqterm/fqterm_frame.h1
-rw-r--r--src/terminal/fqterm_session.cpp46
-rw-r--r--src/terminal/fqterm_session.h10
7 files changed, 83 insertions, 3 deletions
diff --git a/res/pic/log_raw.png b/res/pic/log_raw.png
new file mode 100644
index 0000000..63b67b2
--- /dev/null
+++ b/res/pic/log_raw.png
Binary files differ
diff --git a/src/common/fqterm_shortcuthelper.cpp b/src/common/fqterm_shortcuthelper.cpp
index 8c18643..f4395c4 100644
--- a/src/common/fqterm_shortcuthelper.cpp
+++ b/src/common/fqterm_shortcuthelper.cpp
@@ -92,8 +92,12 @@ void FQTermShortcutHelper::initShortcutDescriptionTable()
initShortcutDescriptionTableEntry(EDITSCHEMA, "schema", tr(""), tr("Edit Schema"));
initShortcutDescriptionTableEntry(SHORTCUTSETTING, "shortcut", tr(""), tr("Shorcut Setting"));
initShortcutDescriptionTableEntry(COPYARTICLE, "copyarticle", tr("F9"), tr("Copy Article"), "get_article_fulltext");
- initShortcutDescriptionTableEntry(ANTIIDLE, "antiidle", tr(""), tr("Toggle Anti Idle"), "anti_idle");
+ initShortcutDescriptionTableEntry(LOGRAW, "lograw", tr(""), tr("Toggle Raw Data Logging"), "log_raw");
+ getAction(LOGRAW)->setCheckable(true);
+
+ initShortcutDescriptionTableEntry(ANTIIDLE, "antiidle", tr(""), tr("Toggle Anti Idle"), "anti_idle");
getAction(ANTIIDLE)->setCheckable(true);
+
initShortcutDescriptionTableEntry(AUTOREPLY, "autoreply", tr(""), tr("Toggle Auto Reply"), "auto_reply");
getAction(AUTOREPLY)->setCheckable(true);
initShortcutDescriptionTableEntry(VIEWMESSAGE, "viewmessage", tr("F10"), tr("View Messages"), "view_messages");
@@ -194,6 +198,7 @@ void FQTermShortcutHelper::retranslateActions() {
retranslateAction(SHORTCUTSETTING, tr("Short&cut Setting"));
retranslateAction(EDITSCHEMA, tr("&Edit Schema"));
retranslateAction(COPYARTICLE, tr("&Copy article"));
+ retranslateAction(LOGRAW, tr("Log Raw"));
retranslateAction(ANTIIDLE, tr("Anti &idle"));
retranslateAction(AUTOREPLY, tr("Auto &reply"));
retranslateAction(VIEWMESSAGE, tr("&View messages"));
@@ -295,4 +300,4 @@ FQTermShortcutHelper::ShortcutDescriptionEntry::~ShortcutDescriptionEntry() {
}
}//namespace FQTerm
-#include "fqterm_shortcuthelper.moc" \ No newline at end of file
+#include "fqterm_shortcuthelper.moc"
diff --git a/src/common/fqterm_shortcuthelper.h b/src/common/fqterm_shortcuthelper.h
index 7e77df7..91904ac 100644
--- a/src/common/fqterm_shortcuthelper.h
+++ b/src/common/fqterm_shortcuthelper.h
@@ -80,6 +80,7 @@ public:
SHORTCUTSETTING,
EDITSCHEMA,
COPYARTICLE, //F9
+ LOGRAW,
ANTIIDLE,
AUTOREPLY,
VIEWMESSAGE, //F10
diff --git a/src/fqterm/fqterm_frame.cpp b/src/fqterm/fqterm_frame.cpp
index 8bca0e4..5143a56 100644
--- a/src/fqterm/fqterm_frame.cpp
+++ b/src/fqterm/fqterm_frame.cpp
@@ -1170,6 +1170,21 @@ void FQTermFrame::ipLookup() {
ipLookupDialog_.exec();
}
+ void FQTermFrame::logRaw()
+ {
+ FQTermSession *s = windowManager_->activeWindow()->getSession();
+
+ if (!s->isLogging()) {
+ s->startLogging();
+ }
+ else {
+ s->stopLogging(true);
+ }
+
+ getAction(FQTermShortcutHelper::LOGRAW)->setChecked(
+ s->isLogging());
+ }
+
void FQTermFrame::antiIdle() {
windowManager_->activeWindow()->toggleAntiIdle();
getAction(FQTermShortcutHelper::ANTIIDLE)->setChecked(
@@ -1404,6 +1419,7 @@ void FQTermFrame::addMainTool() {
// Spec (5)
toolBarMdiConnectTools_->addAction(getAction(FQTermShortcutHelper::COPYARTICLE));
+ toolBarMdiConnectTools_->addAction(getAction(FQTermShortcutHelper::LOGRAW));
toolBarMdiConnectTools_->addAction(getAction(FQTermShortcutHelper::ANTIIDLE));
toolBarMdiConnectTools_->addAction(getAction(FQTermShortcutHelper::AUTOREPLY));
toolBarMdiConnectTools_->addAction(getAction(FQTermShortcutHelper::VIEWMESSAGE));
@@ -1563,6 +1579,7 @@ void FQTermFrame::addMainMenu() {
// Special
QMenu *spec = menuMain_->addMenu(tr("&Special"));
FQTERM_ADDACTION(spec, COPYARTICLE, this, copyArticle);
+ FQTERM_ADDACTION(spec, LOGRAW, this, logRaw);
FQTERM_ADDACTION(spec, ANTIIDLE, this, antiIdle);
FQTERM_ADDACTION(spec, AUTOREPLY, this, autoReply);
FQTERM_ADDACTION(spec, VIEWMESSAGE, this, viewMessages);
@@ -1607,6 +1624,7 @@ void FQTermFrame::updateMenuToolBar() {
getAction(FQTermShortcutHelper::PASTEWORDWRAP)->setChecked(window->getSession()->param().isAutoWrap_);
getAction(FQTermShortcutHelper::FULLSCREEN)->setChecked(windowState() & Qt::WindowFullScreen);
getAction(FQTermShortcutHelper::ANSICOLOR)->setChecked(window->getSession()->param().isAnsiColor_);
+ getAction(FQTermShortcutHelper::LOGRAW)->setChecked(window->getSession()->isLogging());
getAction(FQTermShortcutHelper::ANTIIDLE)->setChecked(window->getSession()->isAntiIdle());
getAction(FQTermShortcutHelper::AUTOREPLY)->setChecked(window->getSession()->isAutoReply());
getAction(FQTermShortcutHelper::BEEP)->setChecked(window->getSession()->param().isBeep_);
@@ -1684,6 +1702,7 @@ void FQTermFrame::enableMenuToolBar(bool enable) {
getAction(FQTermShortcutHelper::CURRENTSETTING)->setEnabled(enable);
getAction(FQTermShortcutHelper::SAVESETTING)->setEnabled(enable);
getAction(FQTermShortcutHelper::COPYARTICLE)->setEnabled(enable);
+ getAction(FQTermShortcutHelper::LOGRAW)->setEnabled(enable);
getAction(FQTermShortcutHelper::ANTIIDLE)->setEnabled(enable);
getAction(FQTermShortcutHelper::AUTOREPLY)->setEnabled(enable);
getAction(FQTermShortcutHelper::VIEWMESSAGE)->setEnabled(enable);
diff --git a/src/fqterm/fqterm_frame.h b/src/fqterm/fqterm_frame.h
index c7c3d26..fbe0be0 100644
--- a/src/fqterm/fqterm_frame.h
+++ b/src/fqterm/fqterm_frame.h
@@ -151,6 +151,7 @@ class FQTermFrame: public QMainWindow {
void bosscolor();
void toggleServer(bool on);
void uiFont();
+ void logRaw();
void antiIdle();
void autoReply();
void setting();
diff --git a/src/terminal/fqterm_session.cpp b/src/terminal/fqterm_session.cpp
index 6b03bf5..9e8fab8 100644
--- a/src/terminal/fqterm_session.cpp
+++ b/src/terminal/fqterm_session.cpp
@@ -49,6 +49,8 @@
#include <QReadLocker>
#include <QWriteLocker>
#include <QReadWriteLock>
+#include <QFileDialog>
+#include <QFile>
namespace FQTerm {
@@ -126,6 +128,9 @@ FQTermSession::FQTermSession(FQTermConfig *config, FQTermParam param) {
idleTimer_ = new QTimer;
autoReplyTimer_ = new QTimer;
+ isLogging_ = false;
+ logData = NULL;
+
acThread_ = new ArticleCopyThread(*this, waitCondition_, bufferWriteLock_);
FQ_VERIFY(connect(decoder_, SIGNAL(mouseMode(bool)),
@@ -974,6 +979,10 @@ void FQTermSession::readReady(int size, int raw_size) {
raw_data_.resize(raw_size);
telnet_->read_raw(&raw_data_[0], raw_size);
+ if (isLogging_) {
+ logData->append(&raw_data_[0], raw_size);
+ }
+
// read raw buffer
int zmodem_consumed;
if (param_.enableZmodem_)
@@ -1149,6 +1158,10 @@ void FQTermSession::finalizeConnection() {
idleTimer_->stop();
}
+ if (isLogging_) {
+ stopLogging(false);
+ }
+
emit connectionClosed();
}
@@ -1491,6 +1504,39 @@ void FQTermSession::updateSetting( const FQTermParam& p ) {
setAutoReconnect(param_.isAutoReconnect_);
}
+ void FQTermSession::startLogging()
+ {
+ logData = new QByteArray();
+ if (logData!=NULL) {
+ isLogging_ = true;
+ }
+ else {
+ return;
+ }
+ }
+
+ void FQTermSession::stopLogging(bool savedata)
+ {
+ if (savedata) {
+ QString fileName = QFileDialog::getSaveFileName(NULL,
+ tr("Save logged data to file"));
+ if (!fileName.isNull()) {
+ QFile f(fileName);
+ if (f.open(QIODevice::WriteOnly)) {
+ f.write(*logData);
+ f.close();
+ }
+ }
+ }
+ delete logData;
+ isLogging_ = false;
+ }
+
+ bool FQTermSession::isLogging()
+ {
+ return isLogging_;
+ }
+
ArticleCopyThread::ArticleCopyThread(
FQTermSession &bbs, QWaitCondition &waitCondition, QReadWriteLock &bufferLock)
: session_(bbs),
diff --git a/src/terminal/fqterm_session.h b/src/terminal/fqterm_session.h
index 78aaa31..e1f1df3 100644
--- a/src/terminal/fqterm_session.h
+++ b/src/terminal/fqterm_session.h
@@ -215,6 +215,11 @@ class FQTermSession: public QObject {
void updateSetting(const FQTermParam& p);
QReadWriteLock& getBufferLock() {return bufferWriteLock_;}
+ // raw data logging
+ void startLogging();
+ void stopLogging(bool);
+ bool isLogging();
+
public:
@@ -310,7 +315,10 @@ private:
std::vector<char> telnet_data_;
std::vector<char> raw_data_;
-
+ // raw data logging
+ bool isLogging_;
+ QByteArray *logData;
+
int reconnectRetry_;
public:
void setScriptListener(FQTermScriptEventListener* pythonListener) {