aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/rtp_analysis.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-01-23 00:29:52 +0000
committerGuy Harris <guy@alum.mit.edu>2004-01-23 00:29:52 +0000
commit7f727e911913a4db5134e7911c8c027ae27cefc9 (patch)
treeac84f02d6dc0c3ea04b690885bd2132296addd92 /gtk/rtp_analysis.c
parent9f8b8cb5a17c28d2ec9c142ffde86cd052f83dc8 (diff)
downloadwireshark-7f727e911913a4db5134e7911c8c027ae27cefc9.tar.gz
wireshark-7f727e911913a4db5134e7911c8c027ae27cefc9.tar.bz2
wireshark-7f727e911913a4db5134e7911c8c027ae27cefc9.zip
From Lars Roland:
- "Refresh" button is back again. Everything should work fine now with multiple windows on the same streams. - made packet list sortable by column. - show a warning when user chooses "RTP Streams/Analyze" without having a RTP packet selected instead of displaying the streams box. - minor GUI updates, renamed button "Next" to "Next non-Ok" for more clarity. svn path=/trunk/; revision=9788
Diffstat (limited to 'gtk/rtp_analysis.c')
-rw-r--r--gtk/rtp_analysis.c419
1 files changed, 288 insertions, 131 deletions
diff --git a/gtk/rtp_analysis.c b/gtk/rtp_analysis.c
index 1175a26e1d..9c09b952ee 100644
--- a/gtk/rtp_analysis.c
+++ b/gtk/rtp_analysis.c
@@ -1,7 +1,7 @@
/* rtp_analysis.c
* RTP analysis addition for ethereal
*
- * $Id: rtp_analysis.c,v 1.22 2004/01/21 22:00:28 ulfl Exp $
+ * $Id: rtp_analysis.c,v 1.23 2004/01/23 00:29:52 guy Exp $
*
* Copyright 2003, Alcatel Business Systems
* By Lars Ruoff <lars.ruoff@gmx.net>
@@ -65,6 +65,9 @@
#include "progress_dlg.h"
#include "compat_macros.h"
+#include "image/clist_ascend.xpm"
+#include "image/clist_descend.xpm"
+
#include <math.h>
#include <fcntl.h>
#include <string.h>
@@ -83,12 +86,20 @@
/****************************************************************************/
+typedef struct column_arrows {
+ GtkWidget *table;
+ GtkWidget *ascend_pm;
+ GtkWidget *descend_pm;
+} column_arrows;
+
typedef struct _dialog_data_t {
GtkWidget *window;
GtkCList *clist_fwd;
GtkCList *clist_rev;
GtkWidget *label_stats_fwd;
GtkWidget *label_stats_rev;
+ column_arrows *col_arrows_fwd;
+ column_arrows *col_arrows_rev;
GtkWidget *notebook;
GtkCList *selected_clist;
GtkWidget *save_voice_as_w;
@@ -200,8 +211,10 @@ typedef const guint8 * ip_addr_p;
/****************************************************************************/
/* when there is a [re]reading of packet's */
static void
-rtp_reset(user_data_t *user_data _U_)
+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;
@@ -285,8 +298,10 @@ static int rtp_packet_save_payload(tap_rtp_save_info_t *saveinfo,
/****************************************************************************/
/* whenever a RTP packet is seen by the tap listener */
-static int rtp_packet(user_data_t *user_data, packet_info *pinfo, epan_dissect_t *edt _U_, struct _rtp_info *rtpinfo)
+static int rtp_packet(void *user_data_arg, packet_info *pinfo, epan_dissect_t *edt _U_, void *rtpinfo_arg)
{
+ user_data_t *user_data = user_data_arg;
+ struct _rtp_info *rtpinfo = rtpinfo_arg;
#ifdef USE_CONVERSATION_GRAPH
value_pair_t vp;
#endif
@@ -635,10 +650,7 @@ void unprotect_thread_critical_region(void);
/* close the dialog window and remove the tap listener */
static void on_destroy(GtkWidget *win _U_, user_data_t *user_data _U_)
{
- protect_thread_critical_region();
- remove_tap_listener(user_data);
- unprotect_thread_critical_region();
-
+ /* close and remove temporary files */
if (user_data->forward.saveinfo.fp != NULL)
fclose(user_data->forward.saveinfo.fp);
if (user_data->reversed.saveinfo.fp != NULL)
@@ -646,16 +658,18 @@ static void on_destroy(GtkWidget *win _U_, user_data_t *user_data _U_)
remove(user_data->f_tempname);
remove(user_data->r_tempname);
- /* Is there a save voice window open? */
+ /* destroy save_voice_as window if open */
if (user_data->dlg.save_voice_as_w != NULL)
gtk_widget_destroy(user_data->dlg.save_voice_as_w);
#ifdef USE_CONVERSATION_GRAPH
- /* Is there a graph window open? */
+ /* destroy graph window if open */
if (user_data->dlg.graph_window != NULL)
gtk_widget_destroy(user_data->dlg.graph_window);
#endif
+ g_free(user_data->dlg.col_arrows_fwd);
+ g_free(user_data->dlg.col_arrows_rev);
g_free(user_data);
}
@@ -785,13 +799,54 @@ static void draw_stat(user_data_t *user_data);
/* re-dissects all packets */
static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
{
-/*
- ***TODO: WILL NOT WORK THIS WAY ANY MORE!***
+ gchar filter_text[256];
+ dfilter_t *sfcode;
+ GString *error_string;
+
+ /* clear the dialog box clists */
gtk_clist_clear(GTK_CLIST(user_data->dlg.clist_fwd));
gtk_clist_clear(GTK_CLIST(user_data->dlg.clist_rev));
+
+ /* try to compile the filter. */
+ strcpy(filter_text,"rtp && ip");
+ if (!dfilter_compile(filter_text, &sfcode)) {
+ simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, NULL, dfilter_error_msg);
+ return;
+ }
+
+ sprintf(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
+ );
+
+ /* register tap listener */
+ error_string = register_tap_listener("rtp", user_data, filter_text,
+ rtp_reset, rtp_packet, rtp_draw);
+ if (error_string != NULL) {
+ simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, NULL, error_string->str);
+ g_string_free(error_string, TRUE);
+ return;
+ }
+
+ /* retap all packets */
retap_packets(&cfile);
+
+ /* remove tap listener again */
+ protect_thread_critical_region();
+ remove_tap_listener(user_data);
+ unprotect_thread_critical_region();
+
+ /* draw statistics info */
draw_stat(user_data);
-*/
+
+ gtk_clist_sort(user_data->dlg.clist_fwd);
+ gtk_clist_sort(user_data->dlg.clist_rev);
}
/****************************************************************************/
@@ -810,10 +865,7 @@ static void on_next_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
gint row;
if (user_data->dlg.selected_clist==NULL)
return;
-/*
- if (user_data->dlg.selected_row==-1)
- user_data->dlg.selected_row = 0;
-*/
+
clist = user_data->dlg.selected_clist;
row = user_data->dlg.selected_row + 1;
@@ -1512,6 +1564,9 @@ static void draw_stat(user_data_t *user_data)
return ;
}
+
+#define NUM_COLS 8
+
/****************************************************************************/
/* append a line to clist */
static void add_to_clist(GtkCList *clist, guint32 number, guint16 seq_num,
@@ -1545,6 +1600,169 @@ static void add_to_clist(GtkCList *clist, guint32 number, guint16 seq_num,
gtk_clist_set_background(GTK_CLIST(clist), added_row, color);
}
+
+/****************************************************************************/
+/* callback for sorting columns of clist */
+static gint rtp_sort_column(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+ char *text1 = NULL;
+ char *text2 = NULL;
+ int i1, i2;
+ double f1, f2;
+
+ const GtkCListRow *row1 = (GtkCListRow *) ptr1;
+ const GtkCListRow *row2 = (GtkCListRow *) ptr2;
+
+ text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+ text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+
+ switch(clist->sort_column){
+ /* columns representing strings */
+ case 4:
+ case 5:
+ case 6:
+ return strcmp (text1, text2);
+ /* columns representing ints */
+ case 0:
+ case 1:
+ case 7:
+ i1=atoi(text1);
+ i2=atoi(text2);
+ return i1-i2;
+ /* columns representing floats */
+ case 2:
+ case 3:
+ f1=atof(text1);
+ f2=atof(text2);
+ if (f1<f2) return -1;
+ else if (f1>f2) return 1;
+ else return 0;
+ }
+ g_assert_not_reached();
+ return 0;
+}
+
+
+/****************************************************************************/
+static void
+click_column_cb(GtkCList *clist, gint column, gpointer data)
+{
+ column_arrows *col_arrows = (column_arrows *) data;
+ int i;
+
+ gtk_clist_freeze(clist);
+
+ for (i = 0; i < NUM_COLS; i++) {
+ gtk_widget_hide(col_arrows[i].ascend_pm);
+ gtk_widget_hide(col_arrows[i].descend_pm);
+ }
+
+ if (column == clist->sort_column) {
+ if (clist->sort_type == GTK_SORT_ASCENDING) {
+ clist->sort_type = GTK_SORT_DESCENDING;
+ gtk_widget_show(col_arrows[column].descend_pm);
+ } else {
+ clist->sort_type = GTK_SORT_ASCENDING;
+ gtk_widget_show(col_arrows[column].ascend_pm);
+ }
+ } else {
+ clist->sort_type = GTK_SORT_ASCENDING;
+ gtk_widget_show(col_arrows[column].ascend_pm);
+ gtk_clist_set_sort_column(clist, column);
+ }
+ gtk_clist_thaw(clist);
+
+ gtk_clist_sort(clist);
+}
+
+
+/****************************************************************************/
+/* Add the packet list */
+static
+GtkWidget* create_clist(user_data_t* user_data)
+{
+ GtkWidget* clist_fwd;
+
+ /* clist for the information */
+ clist_fwd = gtk_clist_new(8);
+ gtk_widget_show(clist_fwd);
+ SIGNAL_CONNECT(clist_fwd, "select_row", on_clist_select_row, user_data);
+
+ gtk_clist_column_titles_show(GTK_CLIST(clist_fwd));
+ gtk_clist_set_compare_func(GTK_CLIST(clist_fwd), rtp_sort_column);
+ gtk_clist_set_sort_column(GTK_CLIST(clist_fwd), 0);
+ gtk_clist_set_sort_type(GTK_CLIST(clist_fwd), GTK_SORT_ASCENDING);
+
+ /* hide date and length column */
+ gtk_clist_set_column_visibility(GTK_CLIST(clist_fwd), 6, FALSE);
+ gtk_clist_set_column_visibility(GTK_CLIST(clist_fwd), 7, FALSE);
+
+ /* column widths and justification */
+ gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 0, 60);
+ gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 1, 75);
+ gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 2, 75);
+ gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 3, 75);
+ gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 4, 50);
+ gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 0, GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 1, GTK_JUSTIFY_RIGHT);
+ gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 2, GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 3, GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 4, GTK_JUSTIFY_CENTER);
+ gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 5, GTK_JUSTIFY_CENTER);
+
+ return clist_fwd;
+}
+
+
+/****************************************************************************/
+/* Add the sort by column feature for a packet clist */
+static
+column_arrows* add_sort_by_column(GtkWidget* window, GtkWidget* clist,
+ user_data_t* user_data _U_)
+{
+ gchar *titles[8] = {"Packet", "Sequence", "Delay (s)", "Jitter (s)", "Marker", "Status", "Date", "Length"};
+ column_arrows *col_arrows;
+ GdkBitmap *ascend_bm, *descend_bm;
+ GdkPixmap *ascend_pm, *descend_pm;
+ GtkStyle *win_style;
+ GtkWidget *column_lb;
+ int i;
+
+ col_arrows = (column_arrows *) g_malloc(sizeof(column_arrows) * NUM_COLS);
+ win_style = gtk_widget_get_style(window);
+ ascend_pm = gdk_pixmap_create_from_xpm_d(window->window,
+ &ascend_bm,
+ &win_style->bg[GTK_STATE_NORMAL],
+ (gchar **)clist_ascend_xpm);
+ descend_pm = gdk_pixmap_create_from_xpm_d(window->window,
+ &descend_bm,
+ &win_style->bg[GTK_STATE_NORMAL],
+ (gchar **)clist_descend_xpm);
+
+ for (i=0; i<NUM_COLS; i++) {
+ col_arrows[i].table = gtk_table_new(2, 2, FALSE);
+ gtk_table_set_col_spacings(GTK_TABLE(col_arrows[i].table), 5);
+ column_lb = gtk_label_new(titles[i]);
+ gtk_table_attach(GTK_TABLE(col_arrows[i].table), column_lb, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
+ gtk_widget_show(column_lb);
+
+ col_arrows[i].ascend_pm = gtk_pixmap_new(ascend_pm, ascend_bm);
+ gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].ascend_pm, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
+ col_arrows[i].descend_pm = gtk_pixmap_new(descend_pm, descend_bm);
+ gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].descend_pm, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
+ /* make packet-nr be the default sort order */
+ if (i == 0) {
+ gtk_widget_show(col_arrows[i].ascend_pm);
+ }
+ gtk_clist_set_column_widget(GTK_CLIST(clist), i, col_arrows[i].table);
+ gtk_widget_show(col_arrows[i].table);
+ }
+
+ SIGNAL_CONNECT(clist, "click-column", click_column_cb, col_arrows);
+
+ return col_arrows;
+}
+
/****************************************************************************/
/* Create the dialog box with all widgets */
void create_rtp_dialog(user_data_t* user_data)
@@ -1556,19 +1774,21 @@ void create_rtp_dialog(user_data_t* user_data)
GtkWidget *label_stats_rev;
GtkWidget *notebook;
- GtkWidget *main_vb, *page, *page_r, *label, *label1, *label2, *label3;
+ GtkWidget *main_vb, *page, *page_r;
+ GtkWidget *label;
GtkWidget *scrolled_window, *scrolled_window_r/*, *frame, *text, *label4, *page_help*/;
- GtkWidget *box4, *voice_bt, /**refresh_bt,*/ *goto_bt, *close_bt, *csv_bt, *next_bt;
+ GtkWidget *box4, *voice_bt, *refresh_bt, *goto_bt, *close_bt, *csv_bt, *next_bt;
#ifdef USE_CONVERSATION_GRAPH
GtkWidget *graph_bt;
#endif
- gchar *titles[8] = {"Packet", "Sequence", "Delay (s)", "Jitter (s)", "Marker", "Status", "Date", "Length"};
gchar label_forward[150];
gchar label_reverse[150];
gchar str_ip_src[16];
gchar str_ip_dst[16];
+ column_arrows *col_arrows_fwd;
+ column_arrows *col_arrows_rev;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
@@ -1582,20 +1802,19 @@ void create_rtp_dialog(user_data_t* user_data)
gtk_container_add(GTK_CONTAINER(window), main_vb);
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));
g_snprintf(label_forward, 149,
- "Analysing connection from %s port %u to %s port %u SSRC = %u\n",
+ "Analysing stream from %s port %u to %s port %u SSRC = %u\n",
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));
g_snprintf(label_reverse, 149,
- "Analysing connection from %s port %u to %s port %u SSRC = %u\n",
+ "Analysing stream from %s port %u to %s port %u SSRC = %u\n",
str_ip_src, user_data->port_src_rev, str_ip_dst, user_data->port_dst_rev, user_data->ssrc_rev);
/* Start a notebook for flipping between sets of changes */
@@ -1609,86 +1828,57 @@ void create_rtp_dialog(user_data_t* user_data)
page = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(page), 20);
- /* scrolled window */
- scrolled_window = gtk_scrolled_window_new(NULL, NULL);
- WIDGET_SET_SIZE(scrolled_window, 600, 200);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-
/* direction label */
- label1 = gtk_label_new(label_forward);
- gtk_box_pack_start(GTK_BOX(page), label1, FALSE, FALSE, 0);
+ label = gtk_label_new(label_forward);
+ gtk_box_pack_start(GTK_BOX(page), label, FALSE, FALSE, 0);
/* place for some statistics */
label_stats_fwd = gtk_label_new("\n\n");
gtk_box_pack_end(GTK_BOX(page), label_stats_fwd, FALSE, FALSE, 5);
- /* clist for the information */
- clist_fwd = gtk_clist_new_with_titles(8, titles);
+ /* scrolled window */
+ scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+ WIDGET_SET_SIZE(scrolled_window, 520, 200);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+
+ /* packet clist */
+ clist_fwd = create_clist(user_data);
gtk_widget_show(clist_fwd);
gtk_container_add(GTK_CONTAINER(scrolled_window), clist_fwd);
gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
- SIGNAL_CONNECT(clist_fwd, "select_row", on_clist_select_row, user_data);
- /* Hide date and length column */
- gtk_clist_set_column_visibility(GTK_CLIST(clist_fwd), 6, FALSE);
- gtk_clist_set_column_visibility(GTK_CLIST(clist_fwd), 7, FALSE);
+ gtk_widget_show(scrolled_window);
- /* label */
- label = gtk_label_new(" Forward Direction ");
+ /* tab */
+ label = gtk_label_new(" Forward Direction ");
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);
- /* column width and justification */
- gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 0, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 1, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 2, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 3, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 4, 40);
- gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 0, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 1, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 2, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 3, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 4, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 5, GTK_JUSTIFY_CENTER);
-
/* same page for reversed connection */
page_r = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(page_r), 20);
+ label = gtk_label_new(label_reverse);
+ gtk_box_pack_start(GTK_BOX(page_r), label, FALSE, FALSE, 0);
+ label_stats_rev = gtk_label_new("\n\n");
+ gtk_box_pack_end(GTK_BOX(page_r), label_stats_rev, FALSE, FALSE, 5);
+
scrolled_window_r = gtk_scrolled_window_new(NULL, NULL);
WIDGET_SET_SIZE(scrolled_window_r, 600, 200);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window_r),
GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
- label3 = gtk_label_new(label_reverse);
- gtk_box_pack_start(GTK_BOX(page_r), label3, FALSE, FALSE, 0);
- label_stats_rev = gtk_label_new("\n\n");
- gtk_box_pack_end(GTK_BOX(page_r), label_stats_rev, FALSE, FALSE, 5);
- clist_rev = gtk_clist_new_with_titles(8, titles);
- gtk_widget_show(clist_rev);
- gtk_clist_set_column_visibility(GTK_CLIST(clist_rev), 6, FALSE);
- gtk_clist_set_column_visibility(GTK_CLIST(clist_rev), 7, FALSE);
-
- SIGNAL_CONNECT(clist_rev, "select_row", on_clist_select_row, user_data);
+ clist_rev = create_clist(user_data);
+ gtk_widget_show(clist_rev);
gtk_container_add(GTK_CONTAINER(scrolled_window_r), clist_rev);
gtk_box_pack_start(GTK_BOX(page_r), scrolled_window_r, TRUE, TRUE, 0);
- label2 = gtk_label_new(" Reversed Direction ");
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page_r, label2);
-
- gtk_clist_set_column_width(GTK_CLIST(clist_rev), 0, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_rev), 1, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_rev), 2, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_rev), 3, 80);
- gtk_clist_set_column_width(GTK_CLIST(clist_rev), 4, 40);
- gtk_clist_set_column_justification(GTK_CLIST(clist_rev), 0, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_rev), 1, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_rev), 2, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_rev), 3, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_rev), 4, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_justification(GTK_CLIST(clist_rev), 5, GTK_JUSTIFY_CENTER);
+ gtk_widget_show(scrolled_window_r);
+
+ label = gtk_label_new(" Reversed Direction ");
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page_r, label);
/* page for help&about or future
page_help = gtk_hbox_new(FALSE, 5);
- label4 = gtk_label_new(" Future ");
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page_help, label4);
+ 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,...");
gtk_label_set_justify(GTK_LABEL(text), GTK_JUSTIFY_LEFT);
@@ -1718,12 +1908,12 @@ void create_rtp_dialog(user_data_t* user_data)
gtk_container_add(GTK_CONTAINER(box4), csv_bt);
gtk_widget_show(csv_bt);
SIGNAL_CONNECT(csv_bt, "clicked", save_csv_as_cb, user_data);
-/*
+
refresh_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_REFRESH);
gtk_container_add(GTK_CONTAINER(box4), refresh_bt);
gtk_widget_show(refresh_bt);
SIGNAL_CONNECT(refresh_bt, "clicked", on_refresh_bt_clicked, user_data);
-*/
+
goto_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_JUMP_TO);
gtk_container_add(GTK_CONTAINER(box4), goto_bt);
gtk_widget_show(goto_bt);
@@ -1736,18 +1926,23 @@ void create_rtp_dialog(user_data_t* user_data)
SIGNAL_CONNECT(graph_bt, "clicked", on_graph_bt_clicked, user_data);
#endif
- next_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_GO_FORWARD);
+ next_bt = gtk_button_new_with_label("Next non-Ok");
gtk_container_add(GTK_CONTAINER(box4), next_bt);
gtk_widget_show(next_bt);
SIGNAL_CONNECT(next_bt, "clicked", on_next_bt_clicked, user_data);
- close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE);
+ close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE);
gtk_container_add(GTK_CONTAINER(box4), close_bt);
gtk_widget_show(close_bt);
SIGNAL_CONNECT(close_bt, "clicked", on_close_bt_clicked, user_data);
gtk_widget_show(window);
+ /* sort by column feature */
+ col_arrows_fwd = add_sort_by_column(window, clist_fwd, user_data);
+ col_arrows_rev = add_sort_by_column(window, clist_rev, user_data);
+
+ /* some widget references need to be saved for outside use */
user_data->dlg.window = window;
user_data->dlg.clist_fwd = GTK_CLIST(clist_fwd);
user_data->dlg.clist_rev = GTK_CLIST(clist_rev);
@@ -1756,12 +1951,14 @@ void create_rtp_dialog(user_data_t* user_data)
user_data->dlg.notebook = notebook;
user_data->dlg.selected_clist = GTK_CLIST(clist_fwd);
user_data->dlg.selected_row = 0;
+ user_data->dlg.col_arrows_fwd = col_arrows_fwd;
+ user_data->dlg.col_arrows_rev = col_arrows_rev;
}
/****************************************************************************/
static gboolean process_node(proto_node *ptree_node, header_field_info *hfinformation,
- const gchar* proto_field, guint32* p_result)
+ gchar* proto_field, guint32* p_result)
{
field_info *finfo;
proto_node *proto_sibling_node;
@@ -1771,7 +1968,7 @@ static gboolean process_node(proto_node *ptree_node, header_field_info *hfinform
finfo = PITEM_FINFO(ptree_node);
if (hfinformation==(finfo->hfinfo)) {
- hfssrc = proto_registrar_get_byname((gchar*) proto_field);
+ hfssrc = proto_registrar_get_byname(proto_field);
if (hfssrc == NULL)
return FALSE;
for(ptree_node=ptree_node->first_child; ptree_node!=NULL;
@@ -1801,14 +1998,14 @@ static gboolean process_node(proto_node *ptree_node, header_field_info *hfinform
/****************************************************************************/
static gboolean get_int_value_from_proto_tree(proto_tree *protocol_tree,
- const gchar* proto_name,
- const gchar* proto_field,
+ gchar* proto_name,
+ gchar* proto_field,
guint32* p_result)
{
proto_node *ptree_node;
header_field_info *hfinformation;
- hfinformation = proto_registrar_get_byname((gchar*) proto_name);
+ hfinformation = proto_registrar_get_byname(proto_name);
if (hfinformation == NULL)
return FALSE;
@@ -1840,10 +2037,8 @@ void rtp_analysis(
)
{
user_data_t *user_data;
- gchar filter_text[256];
- dfilter_t *sfcode;
- GString *error_string;
+ /* init */
user_data = g_malloc(sizeof(user_data_t));
user_data->ip_src_fwd = ip_src_fwd;
@@ -1857,37 +2052,6 @@ void rtp_analysis(
user_data->port_dst_rev = port_dst_rev;
user_data->ssrc_rev = ssrc_rev;
- create_rtp_dialog(user_data);
-
- /* Try to compile the filter. */
- strcpy(filter_text,"rtp && ip");
- if (!dfilter_compile(filter_text, &sfcode)) {
- simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, NULL, dfilter_error_msg);
- return;
- }
-
- sprintf(filter_text,"rtp && ip && !icmp && (( 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)&ip_src_fwd),
- port_src_fwd,
- ip_to_str((ip_addr_p)&ip_dst_fwd),
- port_dst_fwd,
- ip_to_str((ip_addr_p)&ip_src_rev),
- port_src_rev,
- ip_to_str((ip_addr_p)&ip_dst_rev),
- port_dst_rev
- );
-
- /* register tap listener */
- error_string = register_tap_listener("rtp", user_data, filter_text,
- (void*)rtp_reset, (void*)rtp_packet, (void*)rtp_draw);
- if (error_string != NULL) {
- simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, NULL, error_string->str);
- g_string_free(error_string, TRUE);
- g_free(user_data);
- return;
- /*exit(1);*/
- }
-
/* file names for storing sound data */
strncpy(user_data->f_tempname, "f_tempnameXXXXXX", TMPNAMSIZE);
strncpy(user_data->r_tempname, "r_tempnameXXXXXX", TMPNAMSIZE);
@@ -1903,14 +2067,11 @@ void rtp_analysis(
user_data->series_rev.value_pairs = NULL;
#endif
- retap_packets(&cfile);
-
- /* remove tap listener again */
- protect_thread_critical_region();
- remove_tap_listener(user_data);
- unprotect_thread_critical_region();
+ /* create the dialog box */
+ create_rtp_dialog(user_data);
- draw_stat(user_data);
+ /* proceed as if the Refresh button would have been pressed */
+ on_refresh_bt_clicked(NULL, user_data);
}
/****************************************************************************/
@@ -1968,13 +2129,9 @@ void rtp_analysis_cb(GtkWidget *w _U_, gpointer data _U_)
/* if it is not an rtp frame, show the rtpstream dialog */
frame_matched = dfilter_apply_edt(sfcode, edt);
if (frame_matched != 1) {
- rtpstream_dlg_show(rtpstream_get_info()->strinfo_list);
- return;
-/*
epan_dissect_free(edt);
simple_dialog(ESD_TYPE_WARN | ESD_TYPE_MODAL, NULL, "You didn't choose a RTP packet!");
return;
-*/
}
/* ok, it is a RTP frame, so let's get the ip and port values */