aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-12-01 11:54:41 +0000
committerGuy Harris <guy@alum.mit.edu>2004-12-01 11:54:41 +0000
commite4ae2aa011a652faabe2bec1ba022a1fc54f05e6 (patch)
tree57998a9f6bbe83020720b46429a044528aec1a97 /gtk
parentffebed7a167c371d06942361b3ce981be2d317d6 (diff)
From Francisco Alcoba:
add IPv6 support; replace "delay" with "delta". svn path=/trunk/; revision=12636
Diffstat (limited to 'gtk')
-rw-r--r--gtk/rtp_analysis.c200
-rw-r--r--gtk/rtp_analysis.h10
-rw-r--r--gtk/rtp_stream.c25
-rw-r--r--gtk/rtp_stream.h6
-rw-r--r--gtk/rtp_stream_dlg.c83
5 files changed, 204 insertions, 120 deletions
diff --git a/gtk/rtp_analysis.c b/gtk/rtp_analysis.c
index 8ecf150bee..eaa9e98d4d 100644
--- a/gtk/rtp_analysis.c
+++ b/gtk/rtp_analysis.c
@@ -274,12 +274,12 @@ typedef struct _tap_rtp_stat_t {
guint16 bw_start_index;
guint16 bw_index;
guint32 total_bytes;
- double delay;
+ double delta;
double jitter;
double diff;
double time;
double start_time;
- double max_delay;
+ double max_delta;
guint32 max_nr;
guint16 start_seq_nr;
guint16 stop_seq_nr;
@@ -320,14 +320,14 @@ struct _info_direction {
* and structures for both directions */
typedef struct _user_data_t {
/* tap associated data*/
- guint32 ip_src_fwd;
+ address ip_src_fwd;
guint16 port_src_fwd;
- guint32 ip_dst_fwd;
+ address ip_dst_fwd;
guint16 port_dst_fwd;
guint32 ssrc_fwd;
- guint32 ip_src_rev;
+ address ip_src_rev;
guint16 port_src_rev;
- guint32 ip_dst_rev;
+ address ip_dst_rev;
guint16 port_dst_rev;
guint32 ssrc_rev;
@@ -351,7 +351,7 @@ typedef struct _user_data_t {
static gchar *titles[9] = {
"Packet",
"Sequence",
- "Delay (ms)",
+ "Delta (ms)",
"Jitter (ms)",
"IP BW (kbps)",
"Marker",
@@ -374,6 +374,8 @@ static void enable_graph(dialog_graph_graph_t *dgg)
static void dialog_graph_reset(user_data_t* user_data);
+
+
/****************************************************************************/
/* TAP FUNCTIONS */
@@ -385,10 +387,10 @@ rtp_reset(void *user_data_arg)
user_data_t *user_data = user_data_arg;
user_data->forward.statinfo.first_packet = TRUE;
user_data->reversed.statinfo.first_packet = TRUE;
- user_data->forward.statinfo.max_delay = 0;
- user_data->reversed.statinfo.max_delay = 0;
- user_data->forward.statinfo.delay = 0;
- user_data->reversed.statinfo.delay = 0;
+ user_data->forward.statinfo.max_delta = 0;
+ user_data->reversed.statinfo.max_delta = 0;
+ user_data->forward.statinfo.delta = 0;
+ user_data->reversed.statinfo.delta = 0;
user_data->forward.statinfo.diff = 0;
user_data->reversed.statinfo.diff = 0;
user_data->forward.statinfo.jitter = 0;
@@ -526,7 +528,7 @@ static void rtp_draw(void *prs _U_)
/* forward declarations */
static void add_to_clist(GtkCList *clist, guint32 number, guint16 seq_num,
- double delay, double jitter, double bandwidth, gchar *status, gboolean marker,
+ double delta, double jitter, double bandwidth, gchar *status, gboolean marker,
gchar *timeStr, guint32 pkt_len, GdkColor *color);
static int rtp_packet_analyse(tap_rtp_stat_t *statinfo,
@@ -619,7 +621,7 @@ static int rtp_packet_analyse(tap_rtp_stat_t *statinfo,
current_time = (double)pinfo->fd->rel_secs + (double) pinfo->fd->rel_usecs/1000000;
current_diff = fabs (current_time - (statinfo->time) - ((double)(rtpinfo->info_timestamp)-(double)(statinfo->timestamp))/clock_rate);
current_jitter = statinfo->jitter + ( current_diff - statinfo->jitter)/16;
- statinfo->delay = current_time-(statinfo->time);
+ statinfo->delta = current_time-(statinfo->time);
statinfo->jitter = current_jitter;
statinfo->diff = current_diff;
@@ -642,7 +644,7 @@ static int rtp_packet_analyse(tap_rtp_stat_t *statinfo,
if (statinfo->first_packet) {
statinfo->start_seq_nr = rtpinfo->info_seq_num;
statinfo->start_time = current_time;
- statinfo->delay = 0;
+ statinfo->delta = 0;
statinfo->jitter = 0;
statinfo->diff = 0;
statinfo->flags |= STAT_FLAG_FIRST;
@@ -658,9 +660,9 @@ static int rtp_packet_analyse(tap_rtp_stat_t *statinfo,
&& !(statinfo->flags & STAT_FLAG_MARKER)
&& !(statinfo->flags & STAT_FLAG_PT_CN)
&& !(statinfo->flags & STAT_FLAG_FOLLOW_PT_CN)) {
- /* include it in maximum delay calculation */
- if (statinfo->delay > statinfo->max_delay) {
- statinfo->max_delay = statinfo->delay;
+ /* include it in maximum delta calculation */
+ if (statinfo->delta > statinfo->max_delta) {
+ statinfo->max_delta = statinfo->delta;
statinfo->max_nr = pinfo->fd->num;
}
}
@@ -815,7 +817,7 @@ static int rtp_packet_add_info(GtkCList *clist,
else {
add_to_clist(clist,
pinfo->fd->num, rtpinfo->info_seq_num,
- statinfo->delay*1000,
+ statinfo->delta*1000,
statinfo->jitter*1000,
statinfo->bandwidth,
status,
@@ -1081,16 +1083,16 @@ static void on_graph_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
user_data->series_rev.yvalue = -0.5;
g_snprintf(title1, 80, "Forward: %s:%u to %s:%u (SSRC=%u)",
- ip_to_str((ip_addr_p)&(user_data->ip_src_fwd)),
+ address_to_str_w_none(&(user_data->ip_src_fwd)),
user_data->port_src_fwd,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_fwd)),
+ address_to_str_w_none(&(user_data->ip_dst_fwd)),
user_data->port_dst_fwd,
user_data->ssrc_fwd);
g_snprintf(title2, 80, "Reverse: %s:%u to %s:%u (SSRC=%u)",
- ip_to_str((ip_addr_p)&(user_data->ip_src_rev)),
+ address_to_str_w_none(&(user_data->ip_src_rev)),
user_data->port_src_rev,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_rev)),
+ address_to_str_w_none(&(user_data->ip_dst_rev)),
user_data->port_dst_rev,
user_data->ssrc_rev);
@@ -1109,13 +1111,13 @@ static void dialog_graph_set_title(user_data_t* user_data)
return;
}
title = g_strdup_printf("RTP Graph Analysis Forward: %s:%u to %s:%u Reverse: %s:%u to %s:%u",
- ip_to_str((ip_addr_p)&(user_data->ip_src_fwd)),
+ address_to_str_w_none(&(user_data->ip_src_fwd)),
user_data->port_src_fwd,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_fwd)),
+ address_to_str_w_none(&(user_data->ip_dst_fwd)),
user_data->port_dst_fwd,
- ip_to_str((ip_addr_p)&(user_data->ip_src_rev)),
+ address_to_str_w_none(&(user_data->ip_src_rev)),
user_data->port_src_rev,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_rev)),
+ address_to_str_w_none(&(user_data->ip_dst_rev)),
user_data->port_dst_rev);
gtk_window_set_title(GTK_WINDOW(user_data->dlg.dialog_graph.window), title);
@@ -1148,18 +1150,18 @@ static void dialog_graph_reset(user_data_t* user_data)
if (i<2){
g_snprintf(user_data->dlg.dialog_graph.graph[i].title, 100, "%s: %s:%u to %s:%u (SSRC=%u)",
graph_descr[i],
- ip_to_str((ip_addr_p)&(user_data->ip_src_fwd)),
+ address_to_str_w_none(&(user_data->ip_src_fwd)),
user_data->port_src_fwd,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_fwd)),
+ address_to_str_w_none(&(user_data->ip_dst_fwd)),
user_data->port_dst_fwd,
user_data->ssrc_fwd);
/* it is reverse */
} else {
g_snprintf(user_data->dlg.dialog_graph.graph[i].title, 100, "%s: %s:%u to %s:%u (SSRC=%u)",
graph_descr[i],
- ip_to_str((ip_addr_p)&(user_data->ip_src_rev)),
+ address_to_str_w_none(&(user_data->ip_src_rev)),
user_data->port_src_rev,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_rev)),
+ address_to_str_w_none(&(user_data->ip_dst_rev)),
user_data->port_dst_rev,
user_data->ssrc_rev);
}
@@ -2152,6 +2154,7 @@ static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
gchar filter_text[256];
dfilter_t *sfcode;
GString *error_string;
+ gchar ip_version[3];
/* try to compile the filter. */
strcpy(filter_text,"rtp && ip");
@@ -2160,17 +2163,56 @@ static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
return;
}
- g_snprintf(filter_text,sizeof(filter_text),
- "rtp && (( ip.src==%s && udp.srcport==%u && ip.dst==%s && udp.dstport==%u ) || ( ip.src==%s && udp.srcport==%u && ip.dst==%s && udp.dstport==%u ))",
- ip_to_str((ip_addr_p)&(user_data->ip_src_fwd)),
- user_data->port_src_fwd,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_fwd)),
- user_data->port_dst_fwd,
- ip_to_str((ip_addr_p)&(user_data->ip_src_rev)),
- user_data->port_src_rev,
- ip_to_str((ip_addr_p)&(user_data->ip_dst_rev)),
- user_data->port_dst_rev
- );
+ if (user_data->ip_src_fwd.type==AT_IPv6){
+ strcpy(ip_version,"v6");
+ }
+ else{
+ strcpy(ip_version,"");
+ }
+
+
+ if (user_data->ip_src_fwd.type!=AT_NONE){
+ if (user_data->ip_src_rev.type!=AT_NONE){
+ g_snprintf(filter_text,sizeof(filter_text),
+ "rtp && (( ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u ) || ( ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u ))",
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_src_fwd)),
+ user_data->port_src_fwd,
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_dst_fwd)),
+ user_data->port_dst_fwd,
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_src_rev)),
+ user_data->port_src_rev,
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_dst_rev)),
+ user_data->port_dst_rev
+ );
+ }
+ else{
+ g_snprintf(filter_text,sizeof(filter_text),
+ "rtp && (ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u )",
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_src_fwd)),
+ user_data->port_src_fwd,
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_dst_fwd)),
+ user_data->port_dst_fwd
+ );
+ }
+ }
+ else{
+ g_snprintf(filter_text,sizeof(filter_text),
+ "rtp && ( ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u )",
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_src_rev)),
+ user_data->port_src_rev,
+ ip_version,
+ address_to_str_w_none(&(user_data->ip_dst_rev)),
+ user_data->port_dst_rev
+ );
+ }
+
/* remove tap listener */
protect_thread_critical_region();
remove_tap_listener(user_data);
@@ -2945,19 +2987,19 @@ static void draw_stat(user_data_t *user_data)
r_perc = 0;
}
- g_snprintf(label_max, 199, "Max delay = %f sec at packet no. %u \n"
+ g_snprintf(label_max, 199, "Max delta = %f sec at packet no. %u \n"
"Total RTP packets = %u (expected %u) Lost RTP packets = %d (%.2f%%)"
" Sequence errors = %u",
- user_data->forward.statinfo.max_delay, user_data->forward.statinfo.max_nr,
+ user_data->forward.statinfo.max_delta, user_data->forward.statinfo.max_nr,
user_data->forward.statinfo.total_nr,
f_expected, f_lost, f_perc, user_data->forward.statinfo.sequence);
gtk_label_set_text(GTK_LABEL(user_data->dlg.label_stats_fwd), label_max);
- g_snprintf(label_max, 199, "Max delay = %f sec at packet no. %u \n"
+ g_snprintf(label_max, 199, "Max delta = %f sec at packet no. %u \n"
"Total RTP packets = %u (expected %u) Lost RTP packets = %d (%.2f%%)"
" Sequence errors = %u",
- user_data->reversed.statinfo.max_delay, user_data->reversed.statinfo.max_nr,
+ user_data->reversed.statinfo.max_delta, user_data->reversed.statinfo.max_nr,
user_data->reversed.statinfo.total_nr,
r_expected, r_lost, r_perc, user_data->reversed.statinfo.sequence);
@@ -2971,7 +3013,7 @@ static void draw_stat(user_data_t *user_data)
/****************************************************************************/
/* append a line to clist */
static void add_to_clist(GtkCList *clist, guint32 number, guint16 seq_num,
- double delay, double jitter, double bandwidth, gchar *status, gboolean marker,
+ double delta, double jitter, double bandwidth, gchar *status, gboolean marker,
gchar *timeStr, guint32 pkt_len, GdkColor *color)
{
guint added_row;
@@ -2990,7 +3032,7 @@ static void add_to_clist(GtkCList *clist, guint32 number, guint16 seq_num,
g_snprintf(field[0], 20, "%u", number);
g_snprintf(field[1], 20, "%u", seq_num);
- g_snprintf(field[2], 20, "%.2f", delay);
+ g_snprintf(field[2], 20, "%.2f", delta);
g_snprintf(field[3], 20, "%.2f", jitter);
g_snprintf(field[4], 20, "%.2f", bandwidth);
g_snprintf(field[5], 20, "%s", marker? "SET" : "");
@@ -3195,7 +3237,6 @@ void create_rtp_dialog(user_data_t* user_data)
column_arrows *col_arrows_fwd;
column_arrows *col_arrows_rev;
-
window = window_new(GTK_WINDOW_TOPLEVEL, "Ethereal: RTP Stream Analysis");
gtk_window_set_default_size(GTK_WINDOW(window), 700, 400);
@@ -3206,15 +3247,16 @@ void create_rtp_dialog(user_data_t* user_data)
gtk_widget_show(main_vb);
/* Notebooks... */
- strcpy(str_ip_src, ip_to_str((ip_addr_p)&user_data->ip_src_fwd));
- strcpy(str_ip_dst, ip_to_str((ip_addr_p)&user_data->ip_dst_fwd));
+ strcpy(str_ip_src, address_to_str_w_none(&(user_data->ip_src_fwd)));
+ strcpy(str_ip_dst, address_to_str_w_none(&(user_data->ip_dst_fwd)));
g_snprintf(label_forward, 149,
"Analysing stream from %s port %u to %s port %u SSRC = %u",
str_ip_src, user_data->port_src_fwd, str_ip_dst, user_data->port_dst_fwd, user_data->ssrc_fwd);
- strcpy(str_ip_src, ip_to_str((ip_addr_p)&user_data->ip_src_rev));
- strcpy(str_ip_dst, ip_to_str((ip_addr_p)&user_data->ip_dst_rev));
+
+ strcpy(str_ip_src, address_to_str_w_none(&(user_data->ip_src_rev)));
+ strcpy(str_ip_dst, address_to_str_w_none(&(user_data->ip_dst_rev)));
g_snprintf(label_reverse, 149,
"Analysing stream from %s port %u to %s port %u SSRC = %u",
@@ -3278,7 +3320,7 @@ void create_rtp_dialog(user_data_t* user_data)
label = gtk_label_new(" Future ");
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page_help, label);
frame = gtk_frame_new("");
- text = gtk_label_new("\n\nMaybe some more statistics: delay and jitter distribution,...");
+ text = gtk_label_new("\n\nMaybe some more statistics: delta and jitter distribution,...");
gtk_label_set_justify(GTK_LABEL(text), GTK_JUSTIFY_LEFT);
gtk_container_add(GTK_CONTAINER(frame), text);
gtk_container_set_border_width(GTK_CONTAINER(frame), 20);
@@ -3433,14 +3475,14 @@ void unprotect_thread_critical_region(void);
/****************************************************************************/
/* XXX only handles RTP over IPv4, should add IPv6 support */
void rtp_analysis(
- guint32 ip_src_fwd,
+ address *ip_src_fwd,
guint16 port_src_fwd,
- guint32 ip_dst_fwd,
+ address *ip_dst_fwd,
guint16 port_dst_fwd,
guint32 ssrc_fwd,
- guint32 ip_src_rev,
+ address *ip_src_rev,
guint16 port_src_rev,
- guint32 ip_dst_rev,
+ address *ip_dst_rev,
guint16 port_dst_rev,
guint32 ssrc_rev
)
@@ -3454,20 +3496,22 @@ void rtp_analysis(
{0, 0x0000, 0xffff, 0x0000},
{0, 0x0000, 0x0000, 0xffff}
};
+
/* init */
user_data = g_malloc(sizeof(user_data_t));
- user_data->ip_src_fwd = ip_src_fwd;
+ COPY_ADDRESS(&(user_data->ip_src_fwd), ip_src_fwd);
user_data->port_src_fwd = port_src_fwd;
- user_data->ip_dst_fwd = ip_dst_fwd;
+ COPY_ADDRESS(&(user_data->ip_dst_fwd), ip_dst_fwd);
user_data->port_dst_fwd = port_dst_fwd;
user_data->ssrc_fwd = ssrc_fwd;
- user_data->ip_src_rev = ip_src_rev;
+ COPY_ADDRESS(&(user_data->ip_src_rev), ip_src_rev);
user_data->port_src_rev = port_src_rev;
- user_data->ip_dst_rev = ip_dst_rev;
+ COPY_ADDRESS(&(user_data->ip_dst_rev), ip_dst_rev);
user_data->port_dst_rev = port_dst_rev;
user_data->ssrc_rev = ssrc_rev;
+
/* file names for storing sound data */
/*XXX: check for errors*/
fd = create_tempfile(user_data->f_tempname, sizeof(user_data->f_tempname),
@@ -3526,14 +3570,14 @@ void rtp_analysis(
/* entry point from main menu */
void rtp_analysis_cb(GtkWidget *w _U_, gpointer data _U_)
{
- guint32 ip_src_fwd;
+ address ip_src_fwd;
guint16 port_src_fwd;
- guint32 ip_dst_fwd;
+ address ip_dst_fwd;
guint16 port_dst_fwd;
guint32 ssrc_fwd = 0;
- guint32 ip_src_rev;
+ address ip_src_rev;
guint16 port_src_rev;
- guint32 ip_dst_rev;
+ address ip_dst_rev;
guint16 port_dst_rev;
guint32 ssrc_rev = 0;
unsigned int version_fwd;
@@ -3552,7 +3596,7 @@ void rtp_analysis_cb(GtkWidget *w _U_, gpointer data _U_)
guint nfound;
/* Try to compile the filter. */
- strcpy(filter_text,"rtp && ip");
+ strcpy(filter_text,"rtp && (ip || ipv6)");
if (!dfilter_compile(filter_text, &sfcode)) {
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, dfilter_error_msg);
return;
@@ -3587,14 +3631,14 @@ void rtp_analysis_cb(GtkWidget *w _U_, gpointer data _U_)
}
/* ok, it is a RTP frame, so let's get the ip and port values */
- g_memmove(&ip_src_fwd, edt->pi.src.data, 4);
- g_memmove(&ip_dst_fwd, edt->pi.dst.data, 4);
+ COPY_ADDRESS(&(ip_src_fwd), &(edt->pi.src))
+ COPY_ADDRESS(&(ip_dst_fwd), &(edt->pi.dst))
port_src_fwd = edt->pi.srcport;
port_dst_fwd = edt->pi.destport;
/* assume the inverse ip/port combination for the reverse direction */
- g_memmove(&ip_src_rev, edt->pi.dst.data, 4);
- g_memmove(&ip_dst_rev, edt->pi.src.data, 4);
+ COPY_ADDRESS(&(ip_src_rev), &(edt->pi.dst))
+ COPY_ADDRESS(&(ip_dst_rev), &(edt->pi.src))
port_src_rev = edt->pi.destport;
port_dst_rev = edt->pi.srcport;
@@ -3620,17 +3664,17 @@ void rtp_analysis_cb(GtkWidget *w _U_, gpointer data _U_)
while (strinfo_list)
{
strinfo = (rtp_stream_info_t*)(strinfo_list->data);
- if (strinfo->src_addr==ip_src_fwd
+ if (ADDRESSES_EQUAL(&(strinfo->src_addr),&(ip_src_fwd))
&& strinfo->src_port==port_src_fwd
- && strinfo->dest_addr==ip_dst_fwd
+ && ADDRESSES_EQUAL(&(strinfo->dest_addr),&(ip_dst_fwd))
&& strinfo->dest_port==port_dst_fwd)
{
filtered_list = g_list_prepend(filtered_list, strinfo);
}
- if (strinfo->src_addr==ip_src_rev
+ if (ADDRESSES_EQUAL(&(strinfo->src_addr),&(ip_src_rev))
&& strinfo->src_port==port_src_rev
- && strinfo->dest_addr==ip_dst_rev
+ && ADDRESSES_EQUAL(&(strinfo->dest_addr),&(ip_dst_rev))
&& strinfo->dest_port==port_dst_rev)
{
++nfound;
@@ -3649,14 +3693,14 @@ void rtp_analysis_cb(GtkWidget *w _U_, gpointer data _U_)
}
else {
rtp_analysis(
- ip_src_fwd,
+ &ip_src_fwd,
port_src_fwd,
- ip_dst_fwd,
+ &ip_dst_fwd,
port_dst_fwd,
ssrc_fwd,
- ip_src_rev,
+ &ip_src_rev,
port_src_rev,
- ip_dst_rev,
+ &ip_dst_rev,
port_dst_rev,
ssrc_rev
);
diff --git a/gtk/rtp_analysis.h b/gtk/rtp_analysis.h
index 4adb04def6..1dda687c79 100644
--- a/gtk/rtp_analysis.h
+++ b/gtk/rtp_analysis.h
@@ -33,6 +33,7 @@
#define RTP_ANALYSIS_H_INCLUDED
#include <glib.h>
+#include <epan/address.h>
/** @file
* ???
@@ -40,16 +41,17 @@
*/
void rtp_analysis(
- guint32 ip_src_fwd, /* network-order IPv4 address */
+ address *ip_src_fwd,
guint16 port_src_fwd,
- guint32 ip_dst_fwd, /* network-order IPv4 address */
+ address *ip_dst_fwd,
guint16 port_dst_fwd,
guint32 ssrc_fwd,
- guint32 ip_src_rev, /* network-order IPv4 address */
+ address *ip_src_rev,
guint16 port_src_rev,
- guint32 ip_dst_rev, /* network-order IPv4 address */
+ address *ip_dst_rev,
guint16 port_dst_rev,
guint32 ssrc_rev
);
+
#endif /*RTP_ANALYSIS_H_INCLUDED*/
diff --git a/gtk/rtp_stream.c b/gtk/rtp_stream.c
index 96ed9a2b7d..9b015b904c 100644
--- a/gtk/rtp_stream.c
+++ b/gtk/rtp_stream.c
@@ -38,6 +38,7 @@
#include "register.h"
#include <epan/dissectors/packet-rtp.h>
+
#include "alert_box.h"
#include "simple_dialog.h"
@@ -52,6 +53,16 @@
#include <string.h>
+gchar* address_to_str_w_none(address *addr){
+
+ if(addr->type==AT_NONE){
+ return "NONE";
+ }
+ else{
+ return(address_to_str(addr));
+ }
+}
+
/****************************************************************************/
/* the one and only global rtpstream_tapinfo_t structure */
static rtpstream_tapinfo_t the_tapinfo_struct =
@@ -69,9 +80,9 @@ gint rtp_stream_info_cmp(gconstpointer aa, gconstpointer bb)
return 0;
if (a==NULL || b==NULL)
return 1;
- if ((a->src_addr == b->src_addr)
+ if (ADDRESSES_EQUAL(&(a->src_addr), &(b->src_addr))
&& (a->src_port == b->src_port)
- && (a->dest_addr == b->dest_addr)
+ && ADDRESSES_EQUAL(&(a->dest_addr), &(b->dest_addr))
&& (a->dest_port == b->dest_port)
&& (a->ssrc == b->ssrc))
return 0;
@@ -149,12 +160,12 @@ static void rtp_write_header(rtp_stream_info_t *strinfo, FILE *file)
guint16 padding; /* 2 padding bytes */
fprintf(file, "#!rtpplay%s %s/%u\n", RTPFILE_VERSION,
- ip_to_str((guint8*) &strinfo->dest_addr),
+ address_to_str_w_none(&(strinfo->dest_addr)),
strinfo->dest_port);
start_sec = g_htonl(strinfo->start_sec);
start_usec = g_htonl(strinfo->start_usec);
- source = strinfo->src_addr; /* already is in network order */
+ source = *(strinfo->src_addr.data); /* rtpdump only accepts guint32 as source, will be fake for IPv6 */
port = g_htons(strinfo->src_port);
padding = 0;
@@ -191,13 +202,12 @@ int rtpstream_packet(rtpstream_tapinfo_t *tapinfo _U_, packet_info *pinfo, epan_
rtp_stream_info_t tmp_strinfo;
rtp_stream_info_t *strinfo = NULL;
GList* list;
-
rtp_sample_t sample;
/* gather infos on the stream this packet is part of */
- g_memmove(&(tmp_strinfo.src_addr), pinfo->src.data, 4);
+ COPY_ADDRESS(&(tmp_strinfo.src_addr), &(pinfo->src));
tmp_strinfo.src_port = pinfo->srcport;
- g_memmove(&(tmp_strinfo.dest_addr), pinfo->dst.data, 4);
+ COPY_ADDRESS(&(tmp_strinfo.dest_addr), &(pinfo->dst));
tmp_strinfo.dest_port = pinfo->destport;
tmp_strinfo.ssrc = rtpinfo->info_sync_src;
tmp_strinfo.pt = rtpinfo->info_payload_type;
@@ -250,6 +260,7 @@ int rtpstream_packet(rtpstream_tapinfo_t *tapinfo _U_, packet_info *pinfo, epan_
}
}
else if (tapinfo->mode == TAP_MARK) {
+
if (rtp_stream_info_cmp(&tmp_strinfo, tapinfo->filter_stream_fwd)==0
|| rtp_stream_info_cmp(&tmp_strinfo, tapinfo->filter_stream_rev)==0)
{
diff --git a/gtk/rtp_stream.h b/gtk/rtp_stream.h
index fa4f7278ee..e34e9f1215 100644
--- a/gtk/rtp_stream.h
+++ b/gtk/rtp_stream.h
@@ -30,6 +30,7 @@
#include <glib.h>
#include <stdio.h>
+#include <epan/address.h>
/** @file
* ???
@@ -55,9 +56,9 @@ typedef rtp_sample_t* rtp_sample_p;
/* defines an rtp stream */
typedef struct _rtp_stream_info {
- guint32 src_addr;
+ address src_addr;
guint16 src_port;
- guint32 dest_addr;
+ address dest_addr;
guint16 dest_port;
guint32 ssrc;
guint8 pt;
@@ -98,6 +99,7 @@ typedef struct _rtpstream_tapinfo {
gboolean is_registered; /* if the tap listener is currently registered or not */
} rtpstream_tapinfo_t;
+gchar* address_to_str_w_none(address *addr);
/****************************************************************************/
/* INTERFACE */
diff --git a/gtk/rtp_stream_dlg.c b/gtk/rtp_stream_dlg.c
index 6838be3cd4..e9d521d685 100644
--- a/gtk/rtp_stream_dlg.c
+++ b/gtk/rtp_stream_dlg.c
@@ -47,6 +47,8 @@
#include "rtp_pt.h"
+#include <epan/address.h>
+
#include <string.h>
@@ -90,9 +92,9 @@ static void add_to_clist(rtp_stream_info_t* strinfo)
data[6]=&field[6][0];
data[7]=&field[7][0];
- g_snprintf(field[0], 20, "%s", ip_to_str((const guint8*)&(strinfo->src_addr)));
+ g_snprintf(field[0], 20, "%s", address_to_str_w_none(&(strinfo->src_addr)));
g_snprintf(field[1], 20, "%u", strinfo->src_port);
- g_snprintf(field[2], 20, "%s", ip_to_str((const guint8*)&(strinfo->dest_addr)));
+ g_snprintf(field[2], 20, "%s", address_to_str_w_none(&(strinfo->dest_addr)));
g_snprintf(field[3], 20, "%u", strinfo->dest_port);
g_snprintf(field[4], 20, "%u", strinfo->ssrc);
g_snprintf(field[5], 30, "%s", val_to_str(strinfo->pt, rtp_payload_type_vals,
@@ -194,9 +196,9 @@ gint rtp_stream_info_cmp_reverse(gconstpointer aa, gconstpointer bb)
if (a==NULL || b==NULL)
return 1;
- if ((a->src_addr == b->dest_addr)
+ if ((ADDRESSES_EQUAL(&(a->src_addr), &(b->dest_addr)))
&& (a->src_port == b->dest_port)
- && (a->dest_addr == b->src_addr)
+ && (ADDRESSES_EQUAL(&(a->dest_addr), &(b->src_addr)))
&& (a->dest_port == b->src_port))
return 0;
else
@@ -330,17 +332,26 @@ rtpstream_on_filter (GtkButton *button _U_,
gchar *filter_string = NULL;
gchar *filter_string_fwd = NULL;
gchar *filter_string_rev = NULL;
+ gchar ip_version[3];
if (selected_stream_fwd==NULL && selected_stream_rev==NULL)
return;
if (selected_stream_fwd)
{
+ if (selected_stream_fwd->src_addr.type==AT_IPv6){
+ strcpy(ip_version,"v6");
+ }
+ else{
+ strcpy(ip_version,"");
+ }
filter_string_fwd = g_strdup_printf(
- "(ip.src==%s && udp.srcport==%u && ip.dst==%s && udp.dstport==%u && rtp.ssrc==%u)",
- ip_to_str((const guint8*)&(selected_stream_fwd->src_addr)),
+ "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==%u)",
+ ip_version,
+ address_to_str_w_none(&(selected_stream_fwd->src_addr)),
selected_stream_fwd->src_port,
- ip_to_str((const guint8*)&(selected_stream_fwd->dest_addr)),
+ ip_version,
+ address_to_str_w_none(&(selected_stream_fwd->dest_addr)),
selected_stream_fwd->dest_port,
selected_stream_fwd->ssrc);
filter_string = filter_string_fwd;
@@ -348,14 +359,23 @@ rtpstream_on_filter (GtkButton *button _U_,
if (selected_stream_rev)
{
+ if (selected_stream_fwd->src_addr.type==AT_IPv6){
+ strcpy(ip_version,"v6");
+ }
+ else{
+ strcpy(ip_version,"");
+ }
filter_string_rev = g_strdup_printf(
- "(ip.src==%s && udp.srcport==%u && ip.dst==%s && udp.dstport==%u && rtp.ssrc==%u)",
- ip_to_str((const guint8*)&(selected_stream_rev->src_addr)),
+ "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==%u)",
+ ip_version,
+ address_to_str_w_none(&(selected_stream_rev->src_addr)),
selected_stream_rev->src_port,
- ip_to_str((const guint8*)&(selected_stream_rev->dest_addr)),
+ ip_version,
+ address_to_str_w_none(&(selected_stream_rev->dest_addr)),
selected_stream_rev->dest_port,
selected_stream_rev->ssrc);
- filter_string = filter_string_rev;
+
+ filter_string = filter_string_rev;
if (selected_stream_fwd)
{
@@ -379,43 +399,48 @@ rtpstream_on_filter (GtkButton *button _U_,
static void
rtpstream_on_analyse (GtkButton *button _U_,
gpointer user_data _U_)
-{
- guint32 ip_src_fwd = 0;
+{
+ address ip_src_fwd;
guint16 port_src_fwd = 0;
- guint32 ip_dst_fwd = 0;
+ address ip_dst_fwd;
guint16 port_dst_fwd = 0;
guint32 ssrc_fwd = 0;
- guint32 ip_src_rev = 0;
+ address ip_src_rev;
guint16 port_src_rev = 0;
- guint32 ip_dst_rev = 0;
+ address ip_dst_rev;
guint16 port_dst_rev = 0;
guint32 ssrc_rev = 0;
-
+
+ SET_ADDRESS(&ip_src_fwd,AT_NONE,0,NULL);
+ SET_ADDRESS(&ip_dst_fwd,AT_NONE,0,NULL);
+ SET_ADDRESS(&ip_src_rev,AT_NONE,0,NULL);
+ SET_ADDRESS(&ip_dst_rev,AT_NONE,0,NULL);
+
if (selected_stream_fwd) {
- ip_src_fwd = selected_stream_fwd->src_addr;
+ COPY_ADDRESS(&(ip_src_fwd), &(selected_stream_fwd->src_addr));
port_src_fwd = selected_stream_fwd->src_port;
- ip_dst_fwd = selected_stream_fwd->dest_addr;
+ COPY_ADDRESS(&(ip_dst_fwd), &(selected_stream_fwd->dest_addr));
port_dst_fwd = selected_stream_fwd->dest_port;
ssrc_fwd = selected_stream_fwd->ssrc;
}
if (selected_stream_rev) {
- ip_src_rev = selected_stream_rev->src_addr;
+ COPY_ADDRESS(&(ip_src_rev), &(selected_stream_rev->src_addr));
port_src_rev = selected_stream_rev->src_port;
- ip_dst_rev = selected_stream_rev->dest_addr;
+ COPY_ADDRESS(&(ip_dst_rev), &(selected_stream_rev->dest_addr));
port_dst_rev = selected_stream_rev->dest_port;
ssrc_rev = selected_stream_rev->ssrc;
}
rtp_analysis(
- ip_src_fwd,
+ &ip_src_fwd,
port_src_fwd,
- ip_dst_fwd,
+ &ip_dst_fwd,
port_dst_fwd,
ssrc_fwd,
- ip_src_rev,
+ &ip_src_rev,
port_src_rev,
- ip_dst_rev,
+ &ip_dst_rev,
port_dst_rev,
ssrc_rev
);
@@ -438,9 +463,9 @@ rtpstream_on_select_row(GtkCList *clist,
if (event==NULL || event->state & GDK_SHIFT_MASK) {
selected_stream_rev = gtk_clist_get_row_data(GTK_CLIST(clist), row);
g_snprintf(label_text, 80, "Reverse: %s:%u -> %s:%u, SSRC=%u",
- ip_to_str((ip_addr_p)&selected_stream_rev->src_addr),
+ address_to_str_w_none(&(selected_stream_rev->src_addr)),
selected_stream_rev->src_port,
- ip_to_str((ip_addr_p)&selected_stream_rev->dest_addr),
+ address_to_str_w_none(&(selected_stream_rev->dest_addr)),
selected_stream_rev->dest_port,
selected_stream_rev->ssrc
);
@@ -449,9 +474,9 @@ rtpstream_on_select_row(GtkCList *clist,
else {
selected_stream_fwd = gtk_clist_get_row_data(GTK_CLIST(clist), row);
g_snprintf(label_text, 80, "Forward: %s:%u -> %s:%u, SSRC=%u",
- ip_to_str((ip_addr_p)&selected_stream_fwd->src_addr),
+ address_to_str_w_none(&(selected_stream_fwd->src_addr)),
selected_stream_fwd->src_port,
- ip_to_str((ip_addr_p)&selected_stream_fwd->dest_addr),
+ address_to_str_w_none(&(selected_stream_fwd->dest_addr)),
selected_stream_fwd->dest_port,
selected_stream_fwd->ssrc
);