summaryrefslogtreecommitdiffstats
path: root/ui/qt/capture_file.h
blob: 2249f8e013a8d74f045dc38a391b60b3c935a73b (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/** @file
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

#ifndef CAPTURE_FILE_H
#define CAPTURE_FILE_H

#include <QObject>

#include <config.h>

#include <glib.h>

#include "cfile.h"
#include "capture_event.h"

class CaptureFile : public QObject
{
    Q_OBJECT
public:
    explicit CaptureFile(QObject *parent = 0, capture_file *cap_file = NULL);
    ~CaptureFile();

    capture_file *capFile() const { return isValid() ? cap_file_ : NULL; }
    void setCapFile(capture_file *cap_file) { cap_file_ = cap_file; }

    /** Check capture file validity
     *
     * @return true if the file is open, readable, and tappable. false if the file
     * is closed.
     */
    bool isValid() const;

    /** Return the full pathname.
     *
     * @return The entire pathname, converted from the native OS's encoding
     * to Unicode if necessary, or a null string if the conversion can't
     * be done.
     */
    const QString filePath();

    /** Return the plain filename.
     *
     * @return The last component of the pathname, including the extension,
     * converted from the native OS's encoding to Unicode if necessary, or
     * a null string if the conversion can't be done.
     */
    const QString fileName();

    /** Return the plain filename without an extension.
     *
     * @return The last component of the pathname, without the extension,
     * converted from the native OS's encoding to Unicode if necessary, or
     * a null string if the conversion can't be done.
     */
    const QString fileBaseName();

    /** Return a string representing the file suitable for use for
     *  display in the UI in places such as a main window title.
     *
     * @return One of:
     *
     *    the devices on which the capture was done, if the file is a
     *    temporary file for a capture;
     *
     *    the last component of the capture file's name, converted
     *    from the native OS's encoding to Unicode if necessary (and
     *    with REPLACEMENT CHARACTER inserted if the string can't
     *    be converted).
     *
     *    a null string, if there is no capture file.
     */
    const QString fileDisplayName();

    /** Return a string representing the file suitable for use in an
     *  auxiliary window title.
     *
     * @return One of:
     *
     *    the result of fileDisplayName(), if the file is open;
     *
     *    the result of fileDisplayName() followed by [closing], if
     *    the file is being closed;
     *
     *    the result of fileDisplayName() followed by [closed], if
     *    the file has been closed;
     *
     *    [no capture file], if there is no capture file.
     */
    const QString fileTitle();

    /** Return the current packet information.
     *
     * @return A pointer to the current packet_info struct or NULL.
     */
    struct _packet_info *packetInfo();

    /** Timestamp precision for the current file.
     * @return One of the WTAP_TSPREC_x values defined in wiretap/wtap.h,
     * or WTAP_TSPREC_UNKNOWN if no file is open.
     */
    int timestampPrecision();

    /** Reload the capture file
     */
    void reload();

    /** Return any set display filter
     */
    QString displayFilter() const;

    // XXX This shouldn't be needed.
    static capture_file *globalCapFile();

    gpointer window();

signals:
    void captureEvent(CaptureEvent);

public slots:
    /** Retap the capture file. Convenience wrapper for cf_retap_packets.
     * Application events are processed periodically via update_progress_dlg.
     */
    void retapPackets();

    /** Retap the capture file after the current batch of application events
     * is processed. If you call this instead of retapPackets or
     * cf_retap_packets in a dialog's constructor it will be displayed before
     * tapping starts.
     */
    void delayedRetapPackets();

    /** Cancel any tapping that might be in progress.
     */
    void stopLoading();

    /** Sets the capture file's "stop_flag" member.
     *
     * @param stop_flag If true, stops the current capture file operation.
     */
    void setCaptureStopFlag(bool stop_flag = true);

private:
    static void captureFileCallback(gint event, gpointer data, gpointer user_data);
#ifdef HAVE_LIBPCAP
    static void captureCallback(gint event, capture_session *cap_session, gpointer user_data);
#endif

    void captureFileEvent(int event, gpointer data);
    void captureSessionEvent(int event, capture_session *cap_session);
    const QString &getFileBasename();

    static QString no_capture_file_;

    capture_file *cap_file_;
    QString file_state_;
};

#endif // CAPTURE_FILE_H