File: extcap-base.h

package info (click to toggle)
wireshark 4.6.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 351,436 kB
  • sloc: ansic: 3,103,613; cpp: 129,736; xml: 100,978; python: 56,510; perl: 24,575; sh: 5,874; lex: 4,383; pascal: 4,304; makefile: 164; ruby: 113; objc: 91; tcl: 35
file content (153 lines) | stat: -rw-r--r-- 5,115 bytes parent folder | download
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
/** @file
 *
 * Base function for extcaps
 *
 * Copyright 2016, Dario Lombardo
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */
#ifndef __EXTCAP_BASE_H__
#define __EXTCAP_BASE_H__

#include <glib.h>
#include <glib/gprintf.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>

#include <wsutil/ws_getopt.h>

#ifdef _WIN32
#include <io.h>
#endif

#include <wsutil/socket.h>

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

#define EXTCAP_BASE_OPTIONS_ENUM \
    EXTCAP_OPT_LIST_INTERFACES, \
    EXTCAP_OPT_VERSION, \
    EXTCAP_OPT_LIST_DLTS, \
    EXTCAP_OPT_INTERFACE, \
    EXTCAP_OPT_CONFIG, \
    EXTCAP_OPT_CONFIG_OPTION_NAME, \
    EXTCAP_OPT_CONFIG_OPTION_VALUE, \
    EXTCAP_OPT_CLEANUP_POSTKILL, \
    EXTCAP_OPT_CAPTURE, \
    EXTCAP_OPT_CAPTURE_FILTER, \
    EXTCAP_OPT_FIFO, \
    EXTCAP_OPT_LOG_LEVEL, \
    EXTCAP_OPT_LOG_FILE


#define EXTCAP_BASE_OPTIONS \
    { "extcap-interfaces", ws_no_argument, NULL, EXTCAP_OPT_LIST_INTERFACES}, \
    { "extcap-version", ws_optional_argument, NULL, EXTCAP_OPT_VERSION}, \
    { "extcap-dlts", ws_no_argument, NULL, EXTCAP_OPT_LIST_DLTS}, \
    { "extcap-interface", ws_required_argument, NULL, EXTCAP_OPT_INTERFACE}, \
    { "extcap-config", ws_no_argument, NULL, EXTCAP_OPT_CONFIG}, \
    { "extcap-config-option-name", ws_required_argument, NULL, EXTCAP_OPT_CONFIG_OPTION_NAME}, \
    { "extcap-config-option-value", ws_required_argument, NULL, EXTCAP_OPT_CONFIG_OPTION_VALUE }, \
    { "extcap-cleanup-postkill", ws_no_argument, NULL, EXTCAP_OPT_CLEANUP_POSTKILL }, \
    { "capture", ws_no_argument, NULL, EXTCAP_OPT_CAPTURE}, \
    { "extcap-capture-filter", ws_required_argument,    NULL, EXTCAP_OPT_CAPTURE_FILTER}, \
    { "fifo", ws_required_argument, NULL, EXTCAP_OPT_FIFO}, \
    { "log-level", ws_required_argument, NULL, EXTCAP_OPT_LOG_LEVEL}, \
    { "log-file", ws_required_argument, NULL, EXTCAP_OPT_LOG_FILE}

typedef struct _extcap_parameters
{
    char * exename;
    char * fifo;
    char * interface;
    char * capture_filter;

    char * version;
    char * compiled_with;
    char * running_with;
    char * helppage;
    uint8_t capture;
    uint8_t show_config;
    uint8_t show_config_option;
    char * config_option_name;
    char * config_option_value;

    char * ws_version;

    /* private content */
    GList * interfaces;
    uint8_t do_version;
    uint8_t do_list_dlts;
    uint8_t do_list_interfaces;
    uint8_t do_cleanup_postkill;

    char * help_header;
    GList * help_options;

    enum ws_log_level debug;

    void (*cleanup_postkill_cb)(void);
} extcap_parameters;

/* used to inform to extcap application that end of application is requested */
extern bool extcap_end_application;

void extcap_base_register_interface(extcap_parameters * extcap, const char * interface, const char * ifdescription, uint16_t dlt, const char * dltdescription );
void extcap_base_register_interface_ext(extcap_parameters * extcap, const char * interface, const char * ifdescription, uint16_t dlt, const char * dltname, const char * dltdescription );

/* used to inform extcap framework that graceful shutdown supported by the extcap
 */
bool extcap_base_register_graceful_shutdown_cb(extcap_parameters * extcap, void (*callback)(void));

/* used to cleanup extcap if previous program was terminated
 */
bool extcap_base_register_cleanup_postkill_cb(extcap_parameters* extcap, void (*callback)(void));

void extcap_base_set_util_info(extcap_parameters * extcap, const char * exename, const char * major, const char * minor, const char * release, const char * helppage);
void extcap_base_set_compiled_with(extcap_parameters * extcap, const char *fmt, ...);
void extcap_base_set_running_with(extcap_parameters * extcap, const char *fmt, ...);
uint8_t extcap_base_parse_options(extcap_parameters * extcap, int result, char * optargument);
uint8_t extcap_base_handle_interface(extcap_parameters * extcap);
void extcap_base_cleanup(extcap_parameters ** extcap);
void extcap_help_add_header(extcap_parameters * extcap, char * help_header);
void extcap_help_add_option(extcap_parameters * extcap, const char * help_option_name, const char * help_optionn_desc);
void extcap_version_print(extcap_parameters * extcap);
void extcap_help_print(extcap_parameters * extcap);
void extcap_cmdline_debug(char** ar, const unsigned n);
void extcap_config_debug(unsigned* count);
void extcap_base_help(void);
void extcap_log_init(void);

/*
 * Report errors and warnings through ws_warning().
 *
 * Unfortunately, ws_warning() may be a macro, so we do it by calling
 * ws_logv() with the appropriate arguments.
 */
void extcap_log_cmdarg_err(const char *msg_format, va_list ap);

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // __EXTCAP_BASE_H__

/*
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
 *
 * Local variables:
 * c-basic-offset: 4
 * tab-width: 8
 * indent-tabs-mode: nil
 * End:
 *
 * vi: set shiftwidth=4 tabstop=8 expandtab:
 * :indentSize=4:tabSize=8:noTabs=true:
 */