aboutsummaryrefslogtreecommitdiffstats
path: root/ui/rtp_analysis.h
blob: a10d628c952086a256db327ef3c7bd1e9f10b934 (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
/* rtp_analysis.h
 * RTP analysis addition for Wireshark
 *
 * Copyright 2003, Alcatel Business Systems
 * By Lars Ruoff <lars.ruoff@gmx.net>
 *
 * based on tap_rtp.c
 * Copyright 2003, Iskratel, Ltd, Kranj
 * By Miha Jemec <m.jemec@iskratel.si>
 *
 * 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 __RTP_ANALYSIS_H__
#define __RTP_ANALYSIS_H__

#include <glib.h>
#include <epan/address.h>
#include <epan/packet_info.h>

/** @file
 *  ???
 *  @todo what's this?
 */

void rtp_analysis(
    address *ip_src_fwd,
    guint32  port_src_fwd,
    address *ip_dst_fwd,
    guint32  port_dst_fwd,
    guint32  ssrc_fwd,
    address *ip_src_rev,
    guint32  port_src_rev,
    address *ip_dst_rev,
    guint32  port_dst_rev,
    guint32 ssrc_rev
    );

/****************************************************************************/
/* structure that holds the information about the forward and reversed direction */
typedef struct _bw_history_item {
    double time;
    guint32 bytes;
} bw_history_item;

#define BUFF_BW 300

typedef struct _tap_rtp_stat_t {
    gboolean        first_packet; /**< do not use in code that is called after rtp_packet_analyse */
                               /* use (flags & STAT_FLAG_FIRST) instead */
    /* all of the following fields will be initialized after
     * rtp_packet_analyse has been called
     */
    address         first_packet_mac_addr; /**< MAC address of first packet, used to determine duplicates due to mirroring */
    guint32         flags;      /* see STAT_FLAG-defines below */
    guint16         seq_num;
    guint32         timestamp;
    guint32         first_timestamp;
    guint32         delta_timestamp;
    double          bandwidth;
    bw_history_item bw_history[BUFF_BW];
    guint16         bw_start_index;
    guint16         bw_index;
    guint32         total_bytes;
    guint32         clock_rate;
    double          delta;
    double          jitter;
    double          diff;
    double          skew;
    double          sumt;
    double          sumTS;
    double          sumt2;
    double          sumtTS;
    double          time;       /**< Unit is ms */
    double          start_time;
    double          lastnominaltime;
    double          max_delta;
    double          max_jitter;
    double          max_skew;
    double          mean_jitter;
    guint32         max_nr;
    guint16         start_seq_nr;
    guint16         stop_seq_nr;
    guint32         total_nr;
    guint32         sequence;
    gboolean        under;
    gint            cycles;
    guint16         pt;
    int             reg_pt;
} tap_rtp_stat_t;

#define PT_UNDEFINED -1

/* status flags for the flags parameter in tap_rtp_stat_t */
#define STAT_FLAG_FIRST             0x001
#define STAT_FLAG_MARKER            0x002
#define STAT_FLAG_WRONG_SEQ         0x004
#define STAT_FLAG_PT_CHANGE         0x008
#define STAT_FLAG_PT_CN             0x010
#define STAT_FLAG_FOLLOW_PT_CN      0x020
#define STAT_FLAG_REG_PT_CHANGE     0x040
#define STAT_FLAG_WRONG_TIMESTAMP   0x080
#define STAT_FLAG_PT_T_EVENT        0x100
#define STAT_FLAG_DUP_PKT           0x200

/* forward */
struct _rtp_info;

/* function for analysing an RTP packet. Called from rtp_analysis and rtp_streams */
extern int rtp_packet_analyse(tap_rtp_stat_t *statinfo,
                              packet_info *pinfo,
                              const struct _rtp_info *rtpinfo);

#endif /* __RTP_ANALYSIS_H__ */

/*
 * Editor modelines  -  http://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:
 */