aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/wireshark_application.h
blob: df77715bbfcc5d73ddedaec4b846f445fafbfe61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* wireshark_application.c
 *
 * $Id$
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * 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 option) 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.
 */

#ifndef WIRESHARK_APPLICATION_H
#define WIRESHARK_APPLICATION_H

#include "config.h"

#include <glib.h>

#include "capture_opts.h"
#include "file.h"
#include "register.h"

#include "ui/help_url.h"

#include <QApplication>
#include <QList>
#include <QFileInfo>
#include <QThread>

// Recent items:
// - Read from prefs
// - Add from open file
// - Check current list
// - Signal updated item
// -
typedef struct _recent_item_status {
    QString filename;
    qint64 size;
    bool accessible;
    bool in_thread;
} recent_item_status;

class WiresharkApplication : public QApplication
{
    Q_OBJECT
public:
    explicit WiresharkApplication(int &argc,  char **argv);

    void registerUpdate(register_action_e action, const char *message);
    void allSystemsGo();
    QList<recent_item_status *> recentItems() const;
    void addRecentItem(const QString &filename, qint64 size, bool accessible);
#ifdef HAVE_LIBPCAP
    void captureCallback(int event, capture_options * capture_opts);
#endif
    void captureFileCallback(int event, void * data);
    QDir lastOpenDir();
    void setLastOpenDir(const char *dir_name);
    void setLastOpenDir(QString *dir_str);
    void helpTopicAction(topic_action_e action);
    QFont monospaceFont(bool bold = false);


private:
    bool initialized_;
    QTimer *recent_timer_;
    QList<QString> pending_open_files_;

protected:
    bool event(QEvent *event);

signals:
    void appInitialized();
    void openCaptureFile(QString &cf_path);
    void updateRecentItemStatus(const QString &filename, qint64 size, bool accessible);
    void splashUpdate(register_action_e action, const char *message);

#ifdef HAVE_LIBPCAP
    // XXX It might make more sense to move these to main.cpp or main_window.cpp or their own class.
    void captureCapturePrepared(capture_options *capture_opts);
    void captureCaptureUpdateStarted(capture_options *capture_opts);
    void captureCaptureUpdateFinished(capture_options *capture_opts);
    void captureCaptureFixedStarted(capture_options *capture_opts);
    void captureCaptureFixedFinished(capture_options *capture_opts);
    void captureCaptureStopping(capture_options *capture_opts);
    void captureCaptureFailed(capture_options *capture_opts);
#endif

    void captureFileOpened(const capture_file *cf);
    void captureFileReadStarted(const capture_file *cf);
    void captureFileReadFinished(const capture_file *cf);
    void captureFileClosing(const capture_file *cf);
    void captureFileClosed(const capture_file *cf);

public slots:
    void clearRecentItems();

private slots:
    void itemStatusFinished(const QString &filename = "", qint64 size = 0, bool accessible = false);
    void refreshRecentFiles(void);
};

extern WiresharkApplication *wsApp;

#endif // WIRESHARK_APPLICATION_H

/*
 * Editor modelines
 *
 * Local Variables:
 * c-basic-offset: 4
 * tab-width: 8
 * indent-tabs-mode: nil
 * End:
 *
 * ex: set shiftwidth=4 tabstop=8 expandtab:
 * :indentSize=4:tabSize=8:noTabs=true:
 */