[Chinese-commits] [fqterm] 15/34: new feature: raw packet capture.

Boyuan Yang hosiet-guest at moszumanska.debian.org
Tue Nov 1 06:06:06 UTC 2016


This is an automated email from the git hooks/post-receive script.

hosiet-guest pushed a commit to branch master
in repository fqterm.

commit 3ddf947c8da82a6d2e40688583143005b632942e
Author: Iru Cai <mytbk920423 at gmail.com>
Date:   Thu Sep 10 22:30:28 2015 +0800

    new feature: raw packet capture.
---
 res/pic/log_raw.png                  | Bin 0 -> 931 bytes
 src/common/fqterm_shortcuthelper.cpp |   9 +++++--
 src/common/fqterm_shortcuthelper.h   |   1 +
 src/fqterm/fqterm_frame.cpp          |  19 +++++++++++++++
 src/fqterm/fqterm_frame.h            |   1 +
 src/terminal/fqterm_session.cpp      |  46 +++++++++++++++++++++++++++++++++++
 src/terminal/fqterm_session.h        |  10 +++++++-
 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
Binary files /dev/null and b/res/pic/log_raw.png 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) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/chinese/fqterm.git



More information about the Chinese-commits mailing list