From Alejandro Vaquero:

Add RTP player to "RTP Stream Analysis" and makeover of VoIP flow
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4240

svn path=/trunk/; revision=30967
This commit is contained in:
Anders Broman 2009-11-15 20:13:08 +00:00
parent 3dbe3bddcc
commit b16fab6435
16 changed files with 1272 additions and 107 deletions

View File

@ -702,6 +702,8 @@ EXTRA_DIST = \
image/stock_dialog_stop_48.xpm \
image/stock_dialog_warning_48.xpm \
image/text2pcap.rc.in \
image/voip_select.xpm \
image/voip_bg.xpm \
image/toolbar/autoscroll_24.xpm \
image/toolbar/capture_airpcap_16.xpm \
image/toolbar/capture_capture_16.xpm \
@ -752,6 +754,11 @@ EXTRA_DIST = \
image/toolbar/web_support_24.xpm \
image/toolbar/wep_closed_24.xpm \
image/toolbar/wiki_24.xpm \
image/toolbar/decode_24.xpm \
image/toolbar/audio_player_24.xpm \
image/toolbar/voip_flow_24.xpm \
image/toolbar/telephone_16.xpm \
image/toolbar/analyze_24.xpm \
image/tshark.rc.in \
image/up_arrow.xpm \
image/wiresharkdoc.ico \

View File

@ -61,7 +61,8 @@
#include "gtk/dlg_utils.h"
#include "gtk/main.h"
#include "gtk/graph_analysis.h"
#include "../image/voip_select.xpm"
#include "../image/voip_bg.xpm"
/****************************************************************************/
@ -115,7 +116,9 @@ static void graph_analysis_reset(graph_analysis_data_t* user_data)
static void graph_analysis_init_dlg(graph_analysis_data_t* user_data)
{
int i;
/*const char ** xpm_data;
xpm_data*/
user_data->num_nodes = 0;
user_data->num_items = 0;
user_data->on_destroy_user_data = NULL;
@ -134,7 +137,7 @@ static void graph_analysis_init_dlg(graph_analysis_data_t* user_data)
user_data->dlg.needs_redraw=TRUE;
user_data->dlg.draw_area_time=NULL;
user_data->dlg.draw_area=NULL;
user_data->dlg.pixmap=NULL;
user_data->dlg.pixmap_main=NULL;
user_data->dlg.pixmap_time=NULL;
user_data->dlg.draw_area_comments=NULL;
user_data->dlg.pixmap_comments=NULL;
@ -626,10 +629,16 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
GdkGC *frame_fg_color;
GdkGC *frame_bg_color;
GdkGC *div_line_color;
GdkGC *column_header_gc;
PangoLayout *layout;
PangoLayout *big_layout;
PangoLayout *middle_layout;
PangoLayout *small_layout;
PangoFontDescription *middle_font_desc;
gint middle_font_size;
PangoFontDescription *small_font_desc;
gint small_font_size;
gint label_width, label_height;
guint32 draw_width, draw_height;
char label_string[MAX_COMMENT];
@ -642,6 +651,10 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
}
user_data->dlg.needs_redraw=FALSE;
column_header_gc = gdk_gc_new(user_data->dlg.pixmap_time);
gdk_gc_set_fill(column_header_gc,GDK_TILED);
gdk_gc_set_tile(column_header_gc, gdk_pixmap_create_from_xpm_d(user_data->dlg.pixmap_time,NULL,NULL,(gchar **)voip_bg_xpm));
/* Clear out old plt */
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) )
gdk_draw_rectangle(user_data->dlg.pixmap_time,
@ -651,8 +664,8 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
user_data->dlg.draw_area_time->allocation.width,
user_data->dlg.draw_area_time->allocation.height);
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) )
gdk_draw_rectangle(user_data->dlg.pixmap,
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_main) )
gdk_draw_rectangle(user_data->dlg.pixmap_main,
user_data->dlg.draw_area->style->white_gc,
TRUE,
0, 0,
@ -735,38 +748,41 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
/* We use time from the last display item to calcultate the x left border */
g_snprintf(label_string, MAX_LABEL, "%.3f", user_data->dlg.items[display_items-1].time);
layout = gtk_widget_create_pango_layout(user_data->dlg.draw_area_time, label_string);
big_layout = gtk_widget_create_pango_layout(user_data->dlg.draw_area_time, label_string);
middle_layout = gtk_widget_create_pango_layout(user_data->dlg.draw_area_time, label_string);
small_layout = gtk_widget_create_pango_layout(user_data->dlg.draw_area_time, label_string);
/* XXX - to prevent messages like "Couldn't load font x, falling back to y", I've changed font
description from "Helvetica-Bold 8" to "Helvetica,Sans,Bold 8", this seems to be
conforming to the API, see http://developer.gnome.org/doc/API/2.0/pango/pango-Fonts.html */
pango_layout_set_font_description(big_layout, pango_font_description_from_string("Helvetica,Sans,Bold 8"));
pango_layout_set_font_description(small_layout, pango_font_description_from_string("Helvetica,Sans,Bold 7"));
middle_font_desc = pango_font_description_copy(pango_context_get_font_description(pango_layout_get_context(middle_layout)));
middle_font_size = pango_font_description_get_size(middle_font_desc);
pango_font_description_set_size(middle_font_desc,(gint)(middle_font_size*0.8));
pango_layout_set_font_description(middle_layout,middle_font_desc);
small_font_desc = pango_font_description_copy(pango_context_get_font_description(pango_layout_get_context(small_layout)));
small_font_size = pango_font_description_get_size(small_font_desc);
pango_font_description_set_size(small_font_desc,(gint)(small_font_size*0.7));
pango_layout_set_font_description(small_layout,small_font_desc);
pango_layout_get_pixel_size(layout, &label_width, &label_height);
/* resize the "time" draw area */
left_x_border=3;
left_x_border=0;
user_data->dlg.left_x_border = left_x_border;
right_x_border=2;
right_x_border=0;
draw_width=user_data->dlg.pixmap_width-right_x_border-left_x_border;
/* Paint time title background */
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) )
gdk_draw_rectangle(user_data->dlg.pixmap_time,
user_data->dlg.draw_area_time->style->bg_gc[2],
column_header_gc,
TRUE,
0,
0,
user_data->dlg.draw_area_time->allocation.width,
top_y_border);
/* Paint main title background */
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) )
gdk_draw_rectangle(user_data->dlg.pixmap,
user_data->dlg.draw_area->style->bg_gc[2],
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_main) )
gdk_draw_rectangle(user_data->dlg.pixmap_main,
column_header_gc,
TRUE,
0,
0,
@ -775,7 +791,7 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
/* Paint main comment background */
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments) )
gdk_draw_rectangle(user_data->dlg.pixmap_comments,
user_data->dlg.draw_area_comments->style->bg_gc[2],
column_header_gc,
TRUE,
0,
0,
@ -784,7 +800,7 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
/* Draw the word "Time" on top of time column */
g_snprintf(label_string, label_width, "%s", "Time");
g_snprintf(label_string, label_width, "%s", " Time");
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &label_width, &label_height);
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_time)) {
@ -811,14 +827,15 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
for (current_item=0; current_item<display_items; current_item++){
/*select the color. if it is the selected item select blue color */
if ( current_item+first_item == user_data->dlg.selected_item ) {
gdk_gc_set_ts_origin(user_data->dlg.bg_gc[0],left_x_border,top_y_border+current_item*ITEM_HEIGHT);
frame_bg_color = user_data->dlg.bg_gc[0];
} else {
frame_bg_color = user_data->dlg.bg_gc[1+user_data->dlg.items[current_item].conv_num%MAX_NUM_COL_CONV];
}
/* Paint background */
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) {
gdk_draw_rectangle(user_data->dlg.pixmap,
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main)) {
gdk_draw_rectangle(user_data->dlg.pixmap_main,
frame_bg_color,
TRUE,
left_x_border,
@ -834,8 +851,8 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
g_strlcpy(label_string, get_addr_name(&(user_data->nodes[i])), NODE_WIDTH/5);
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &label_width, &label_height);
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) {
gdk_draw_layout(user_data->dlg.pixmap,
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main)) {
gdk_draw_layout(user_data->dlg.pixmap_main,
user_data->dlg.draw_area->style->black_gc,
left_x_border+NODE_WIDTH/2-label_width/2+NODE_WIDTH*i,
top_y_border/2-((i&1)?0:label_height),
@ -843,8 +860,8 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
}
/* draw the node division lines */
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) {
gdk_draw_line(user_data->dlg.pixmap, user_data->dlg.div_line_gc[0],
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main) ) {
gdk_draw_line(user_data->dlg.pixmap_main, user_data->dlg.div_line_gc[0],
left_x_border+NODE_WIDTH/2+NODE_WIDTH*i,
top_y_border,
left_x_border+NODE_WIDTH/2+NODE_WIDTH*i,
@ -869,14 +886,14 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
/*draw the comments */
g_snprintf(label_string, MAX_COMMENT, "%s", user_data->dlg.items[current_item].comment);
pango_layout_set_text(small_layout, label_string, -1);
pango_layout_get_pixel_size(small_layout, &label_width, &label_height);
pango_layout_set_text(middle_layout, label_string, -1);
pango_layout_get_pixel_size(middle_layout, &label_width, &label_height);
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments)) {
gdk_draw_layout(user_data->dlg.pixmap_comments,
user_data->dlg.draw_area->style->black_gc,
2,
top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2,
small_layout);
middle_layout);
}
/* select colors */
if ( current_item+first_item == user_data->dlg.selected_item ){
@ -890,8 +907,8 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
start_arrow = left_x_border+(user_data->dlg.items[current_item].src_node)*NODE_WIDTH+NODE_WIDTH/2;
end_arrow = left_x_border+(user_data->dlg.items[current_item].dst_node)*NODE_WIDTH+NODE_WIDTH/2;
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) {
gdk_draw_line(user_data->dlg.pixmap, frame_fg_color,
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main) ) {
gdk_draw_line(user_data->dlg.pixmap_main, frame_fg_color,
start_arrow,
top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7,
end_arrow,
@ -899,7 +916,7 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
/* draw the additional line when line style is 2 pixels width */
if (user_data->dlg.items[current_item].line_style == 2) {
gdk_draw_line(user_data->dlg.pixmap, frame_fg_color,
gdk_draw_line(user_data->dlg.pixmap_main, frame_fg_color,
start_arrow,
top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-6,
end_arrow,
@ -909,14 +926,14 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
/* draw the arrow */
if (start_arrow<end_arrow)
draw_arrow(user_data->dlg.pixmap, frame_fg_color, end_arrow-WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, RIGHT_ARROW);
draw_arrow(user_data->dlg.pixmap_main, frame_fg_color, end_arrow-WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, RIGHT_ARROW);
else
draw_arrow(user_data->dlg.pixmap, frame_fg_color, end_arrow+WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, LEFT_ARROW);
draw_arrow(user_data->dlg.pixmap_main, frame_fg_color, end_arrow+WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, LEFT_ARROW);
/* draw the frame comment */
g_snprintf(label_string, MAX_LABEL, "%s", user_data->dlg.items[current_item].frame_label);
pango_layout_set_text(big_layout, label_string, -1);
pango_layout_get_pixel_size(big_layout, &label_width, &label_height);
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &label_width, &label_height);
if (start_arrow<end_arrow){
arrow_width = end_arrow-start_arrow;
label_x = arrow_width/2+start_arrow;
@ -931,12 +948,12 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
if ((int)left_x_border > ((int)label_x-(int)label_width/2))
label_x = left_x_border + label_width/2;
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) {
gdk_draw_layout(user_data->dlg.pixmap,
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main)) {
gdk_draw_layout(user_data->dlg.pixmap_main,
frame_fg_color,
label_x - label_width/2,
top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2-3,
big_layout);
layout);
}
/* draw the source port number */
@ -949,8 +966,8 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
else {
src_port_x = start_arrow + 2;
}
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) {
gdk_draw_layout(user_data->dlg.pixmap,
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main)) {
gdk_draw_layout(user_data->dlg.pixmap_main,
div_line_color,
src_port_x,
top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2-label_height/2-2,
@ -967,8 +984,8 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
else {
dst_port_x = end_arrow - label_width - 2;
}
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) {
gdk_draw_layout(user_data->dlg.pixmap,
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main)) {
gdk_draw_layout(user_data->dlg.pixmap_main,
div_line_color,
dst_port_x,
top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2-label_height/2-2,
@ -977,8 +994,8 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
/* draw the div line of the selected item with soft gray*/
if ( current_item+first_item == user_data->dlg.selected_item )
for (i=0; i<user_data->num_nodes; i++){
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) {
gdk_draw_line(user_data->dlg.pixmap, user_data->dlg.div_line_gc[1],
if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_main) ) {
gdk_draw_line(user_data->dlg.pixmap_main, user_data->dlg.div_line_gc[1],
left_x_border+NODE_WIDTH/2+NODE_WIDTH*i,
(user_data->dlg.selected_item-first_item)*ITEM_HEIGHT+TOP_Y_BORDER,
left_x_border+NODE_WIDTH/2+NODE_WIDTH*i,
@ -1001,7 +1018,7 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data)
if (GDK_IS_DRAWABLE(user_data->dlg.draw_area->window) )
gdk_draw_pixmap(user_data->dlg.draw_area->window,
user_data->dlg.draw_area->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.draw_area)],
user_data->dlg.pixmap,
user_data->dlg.pixmap_main,
0, 0,
0, 0,
user_data->dlg.draw_area->allocation.width, user_data->dlg.draw_area->allocation.height);
@ -1063,10 +1080,12 @@ static gint scroll_event(GtkWidget *widget, GdkEventScroll *event)
graph_analysis_data_t *user_data;
user_data=(graph_analysis_data_t *)g_object_get_data(G_OBJECT(widget), "graph_analysis_data_t");
printf("scroll_event\n");
/* Up scroll */
switch(event->direction) {
case(GDK_SCROLL_UP):
printf("GDK_SCROLL_UP\n");
if (user_data->dlg.first_item == 0) return TRUE;
if (user_data->dlg.first_item < 3)
user_data->dlg.first_item = 0;
@ -1074,6 +1093,7 @@ static gint scroll_event(GtkWidget *widget, GdkEventScroll *event)
user_data->dlg.first_item -= 3;
break;
case(GDK_SCROLL_DOWN):
printf("GDK_SCROLL_DOWN\n");
if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1 == user_data->num_items)) return TRUE;
if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1) > (user_data->num_items-3))
user_data->dlg.first_item = user_data->num_items-(guint32)user_data->dlg.v_scrollbar_adjustment->page_size-1;
@ -1081,7 +1101,9 @@ static gint scroll_event(GtkWidget *widget, GdkEventScroll *event)
user_data->dlg.first_item += 3;
break;
case(GDK_SCROLL_LEFT):
printf("GDK_SCROLL_LEFT\n");
case(GDK_SCROLL_RIGHT):
printf("GDK_SCROLL_RIGTH\n");
/* nothing to do */
break;
}
@ -1138,7 +1160,7 @@ static gint expose_event(GtkWidget *widget, GdkEventExpose *event)
if (GDK_IS_DRAWABLE(widget->window))
gdk_draw_pixmap(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
user_data->dlg.pixmap,
user_data->dlg.pixmap_main,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);
@ -1197,22 +1219,23 @@ static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_)
/* gray and soft gray colors */
static GdkColor color_div_line[2] = {
{0, 0x64ff, 0x64ff, 0x64ff},
{0, 0x7fff, 0x7fff, 0x7fff}
{0, 0x25ff, 0x25ff, 0x25ff},
/*{0, 0x7fff, 0x7fff, 0x7fff}*/
};
/* the first color is blue to highlight the selected item */
static GdkColor col[MAX_NUM_COL_CONV+1] = {
{0, 0x00FF, 0x00FF, 0xFFFF},
{0, 0x33FF, 0xFFFF, 0x33FF},
{0, 0x00FF, 0xCCFF, 0xCCFF},
{0, 0x66FF, 0xFFFF, 0xFFFF},
{0, 0x99FF, 0x66FF, 0xFFFF},
{0, 0x90FF, 0xEEFF, 0x90FF},
{0, 0xFFFF, 0xA0FF, 0x7AFF},
{0, 0xFFFF, 0xB6FF, 0xC1FF},
{0, 0xFAFF, 0xFAFF, 0xD2FF},
{0, 0xFFFF, 0xFFFF, 0x33FF},
{0, 0xCCFF, 0x99FF, 0xFFFF},
{0, 0xCCFF, 0xFFFF, 0x33FF},
{0, 0xFFFF, 0xCCFF, 0xCCFF},
{0, 0xFFFF, 0x99FF, 0x66FF},
{0, 0xFFFF, 0xFFFF, 0x99FF}
{0, 0x66FF, 0xCDFF, 0xAAFF},
{0, 0xE0FF, 0xFFFF, 0xFFFF},
{0, 0xB0FF, 0xC4FF, 0xDEFF},
{0, 0x87FF, 0xCEFF, 0xFAFF},
{0, 0xD3FF, 0xD3FF, 0xD3FF}
};
user_data=(graph_analysis_data_t *)g_object_get_data(G_OBJECT(widget), "graph_analysis_data_t");
@ -1221,18 +1244,18 @@ static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_)
exit(10);
}
if(user_data->dlg.pixmap){
gdk_pixmap_unref(user_data->dlg.pixmap);
user_data->dlg.pixmap=NULL;
if(user_data->dlg.pixmap_main){
gdk_pixmap_unref(user_data->dlg.pixmap_main);
user_data->dlg.pixmap_main=NULL;
}
user_data->dlg.pixmap=gdk_pixmap_new(widget->window,
user_data->dlg.pixmap_main=gdk_pixmap_new(widget->window,
widget->allocation.width,
widget->allocation.height,
-1);
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) )
gdk_draw_rectangle(user_data->dlg.pixmap,
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_main) )
gdk_draw_rectangle(user_data->dlg.pixmap_main,
widget->style->white_gc,
TRUE,
0, 0,
@ -1241,15 +1264,22 @@ static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_)
/* create gc for division lines and set the line stype to dash */
for (i=0; i<2; i++){
user_data->dlg.div_line_gc[i]=gdk_gc_new(user_data->dlg.pixmap);
user_data->dlg.div_line_gc[i]=gdk_gc_new(user_data->dlg.pixmap_main);
gdk_gc_set_line_attributes(user_data->dlg.div_line_gc[i], 1, GDK_LINE_ON_OFF_DASH, 0, 0);
gdk_gc_set_rgb_fg_color(user_data->dlg.div_line_gc[i], &color_div_line[i]);
}
/* create gcs for the background items */
for (i=0; i<MAX_NUM_COL_CONV+1; i++){
user_data->dlg.bg_gc[i]=gdk_gc_new(user_data->dlg.pixmap);
gdk_gc_set_rgb_fg_color(user_data->dlg.bg_gc[i], &col[i]);
if (i==0) {
user_data->dlg.pixmap_tile_select=gdk_pixmap_create_from_xpm_d(user_data->dlg.pixmap_main,NULL,NULL,(gchar **)voip_select_xpm);
user_data->dlg.bg_gc[i]=gdk_gc_new(user_data->dlg.pixmap_tile_select);
gdk_gc_set_fill(user_data->dlg.bg_gc[i], GDK_TILED);
gdk_gc_set_tile(user_data->dlg.bg_gc[i], user_data->dlg.pixmap_tile_select);
} else {
user_data->dlg.bg_gc[i]=gdk_gc_new(user_data->dlg.pixmap_main);
gdk_gc_set_rgb_fg_color(user_data->dlg.bg_gc[i], &col[i]);
}
}
dialog_graph_redraw(user_data);
@ -1278,7 +1308,7 @@ static gint configure_event_comments(GtkWidget *widget, GdkEventConfigure *event
widget->allocation.height,
-1);
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) )
if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_main) )
gdk_draw_rectangle(user_data->dlg.pixmap_comments,
widget->style->white_gc,
TRUE,
@ -1353,6 +1383,7 @@ static gint pane_callback(GtkWidget *widget, GParamSpec *pspec _U_, gpointer dat
static gint v_scrollbar_changed(GtkWidget *widget _U_, gpointer data)
{
graph_analysis_data_t *user_data=(graph_analysis_data_t *)data;
if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1 == user_data->num_items)
&& (user_data->dlg.v_scrollbar_adjustment->value >= user_data->dlg.first_item ))
return TRUE;
@ -1375,6 +1406,11 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box)
GtkWidget *viewport;
GtkWidget *scroll_window_comments;
GtkWidget *viewport_comments;
GtkWidget *frame_time;
GtkWidget *scroll_vbox;
GtkWidget *frame_box;
GtkRequisition scroll_requisition;
GtkWidget *frame;
hbox=gtk_hbox_new(FALSE, 0);
gtk_widget_show(hbox);
@ -1386,13 +1422,17 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box)
user_data->dlg.draw_area_time=gtk_drawing_area_new();
gtk_widget_set_size_request(user_data->dlg.draw_area_time, TIME_WIDTH, user_data->dlg.pixmap_height);
g_object_set_data(G_OBJECT(user_data->dlg.draw_area_time), "graph_analysis_data_t", user_data);
frame_time = gtk_frame_new(NULL);
gtk_widget_show(frame_time);
gtk_container_add(GTK_CONTAINER(frame_time),user_data->dlg.draw_area_time);
/* create "comments" draw area */
user_data->dlg.draw_area_comments=gtk_drawing_area_new();
gtk_widget_set_size_request(user_data->dlg.draw_area_comments, COMMENT_WIDTH, user_data->dlg.pixmap_height);
scroll_window_comments=gtk_scrolled_window_new(NULL, NULL);
gtk_widget_set_size_request(scroll_window_comments, COMMENT_WIDTH/2, user_data->dlg.pixmap_height);
gtk_widget_set_size_request(scroll_window_comments, (gint)(COMMENT_WIDTH/1.5), user_data->dlg.pixmap_height);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scroll_window_comments), GTK_POLICY_ALWAYS, GTK_POLICY_NEVER);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_window_comments), GTK_SHADOW_ETCHED_IN);
viewport_comments = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(scroll_window_comments)), gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scroll_window_comments)));
gtk_container_add(GTK_CONTAINER(viewport_comments), user_data->dlg.draw_area_comments);
gtk_container_add(GTK_CONTAINER(scroll_window_comments), viewport_comments);
@ -1414,6 +1454,7 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box)
else
gtk_widget_set_size_request(user_data->dlg.scroll_window, NODE_WIDTH*5, user_data->dlg.pixmap_height);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window), GTK_POLICY_ALWAYS, GTK_POLICY_NEVER);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window), GTK_SHADOW_ETCHED_IN);
viewport = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window)), gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window)));
gtk_container_add(GTK_CONTAINER(viewport), user_data->dlg.draw_area);
gtk_container_add(GTK_CONTAINER(user_data->dlg.scroll_window), viewport);
@ -1448,7 +1489,7 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box)
gtk_widget_show(user_data->dlg.scroll_window);
gtk_widget_show(scroll_window_comments);
gtk_box_pack_start(GTK_BOX(hbox), user_data->dlg.draw_area_time, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), frame_time, FALSE, FALSE, 3);
user_data->dlg.hpane = gtk_hpaned_new();
gtk_paned_pack1(GTK_PANED (user_data->dlg.hpane), user_data->dlg.scroll_window, FALSE, TRUE);
@ -1458,14 +1499,35 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box)
gtk_box_pack_start(GTK_BOX(hbox), user_data->dlg.hpane, TRUE, TRUE, 0);
/* Create the vbox to include the vertical scroll and a box at the bottom */
scroll_vbox=gtk_vbox_new(FALSE, 0);
gtk_widget_show(scroll_vbox);
/* create the associated v_scrollbar */
user_data->dlg.v_scrollbar_adjustment=(GtkAdjustment *)gtk_adjustment_new(0,0,0,0,0,0);
user_data->dlg.v_scrollbar=gtk_vscrollbar_new(user_data->dlg.v_scrollbar_adjustment);
gtk_widget_show(user_data->dlg.v_scrollbar);
gtk_box_pack_end(GTK_BOX(hbox), user_data->dlg.v_scrollbar, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(scroll_vbox), user_data->dlg.v_scrollbar, TRUE, TRUE, 0);
g_signal_connect(user_data->dlg.v_scrollbar_adjustment, "value_changed", G_CALLBACK(v_scrollbar_changed), user_data);
gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 0);
frame_box = gtk_frame_new(NULL);
gtk_widget_size_request(user_data->dlg.v_scrollbar, &scroll_requisition);
gtk_widget_set_size_request(frame_box, 1, scroll_requisition.width+2);
gtk_frame_set_shadow_type(GTK_FRAME(frame_box), GTK_SHADOW_NONE);
gtk_widget_show(frame_box);
gtk_box_pack_end(GTK_BOX(scroll_vbox), frame_box, FALSE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(hbox), scroll_vbox, FALSE, FALSE, 3);
/* Frame around the main area */
frame = gtk_frame_new(NULL);
gtk_widget_show(frame);
gtk_container_add(GTK_CONTAINER(frame),hbox);
gtk_container_set_border_width(GTK_CONTAINER(hbox),3);
/*gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 15);*/
/*gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 15);*/
gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
gtk_container_set_border_width(GTK_CONTAINER(box),10);
}
/****************************************************************************/
/* PUBLIC */
@ -1498,7 +1560,7 @@ static void dialog_graph_create_window(graph_analysis_data_t* user_data)
/* button row */
hbuttonbox = gtk_hbutton_box_new ();
gtk_box_pack_start (GTK_BOX (vbox), hbuttonbox, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbuttonbox, FALSE, FALSE, 10);
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_SPREAD);
gtk_box_set_spacing (GTK_BOX (hbuttonbox), 30);
gtk_widget_show(hbuttonbox);

View File

@ -88,8 +88,9 @@ typedef struct _graph_analysis_dialog_data_t {
GtkWidget *draw_area;
GtkWidget *draw_area_comments;
GdkPixmap *pixmap_time;
GdkPixmap *pixmap;
GdkPixmap *pixmap_main;
GdkPixmap *pixmap_comments;
GdkPixmap *pixmap_tile_select;
GtkWidget *scroll_window;
GtkWidget *v_scrollbar;
GtkAdjustment *v_scrollbar_adjustment;

View File

@ -82,6 +82,13 @@
#include "gtk/rtp_analysis.h"
#include "gtk/rtp_stream.h"
#include "gtk/rtp_stream_dlg.h"
#include "gtk/stock_icons.h"
#ifdef HAVE_LIBPORTAUDIO
#include "gtk/graph_analysis.h"
#include "gtk/voip_calls.h"
#include "gtk/rtp_player.h"
#endif /* HAVE_LIBPORTAUDIO */
enum
{
@ -349,6 +356,10 @@ rtp_reset(void *user_data_arg)
/* reset graph info */
dialog_graph_reset(user_data);
#ifdef HAVE_LIBPORTAUDIO
/* reset the RTP player */
reset_rtp_player();
#endif
/* XXX check for error at fclose? */
if (user_data->forward.saveinfo.fp != NULL)
fclose(user_data->forward.saveinfo.fp);
@ -447,6 +458,7 @@ static int rtp_packet(void *user_data_arg, packet_info *pinfo, epan_dissect_t *e
{
user_data_t *user_data = user_data_arg;
const struct _rtp_info *rtpinfo = rtpinfo_arg;
gboolean rtp_selected = FALSE;
/* we ignore packets that are not displayed */
if (pinfo->fd->flags.passed_dfilter == 0)
@ -467,6 +479,7 @@ static int rtp_packet(void *user_data_arg, packet_info *pinfo, epan_dissect_t *e
&(user_data->forward.statinfo), pinfo, rtpinfo);
rtp_packet_save_payload(&(user_data->forward.saveinfo),
&(user_data->forward.statinfo), pinfo, rtpinfo);
rtp_selected = TRUE;
}
/* is it the reversed direction? */
else if (user_data->ssrc_rev == rtpinfo->info_sync_src
@ -481,7 +494,13 @@ static int rtp_packet(void *user_data_arg, packet_info *pinfo, epan_dissect_t *e
&(user_data->reversed.statinfo), pinfo, rtpinfo);
rtp_packet_save_payload(&(user_data->reversed.saveinfo),
&(user_data->reversed.statinfo), pinfo, rtpinfo);
rtp_selected = TRUE;
}
/* add this RTP for future listening using the RTP Player*/
#ifdef HAVE_LIBPORTAUDIO
if (rtp_selected)
add_rtp_packet(rtpinfo, pinfo);
#endif
return 0;
}
@ -1730,6 +1749,16 @@ static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data)
}
#ifdef HAVE_LIBPORTAUDIO
/****************************************************************************/
static void
on_player_bt_clicked(GtkButton *button _U_, gpointer user_data _U_)
{
/*rtp_player_init(voip_calls_get_info());*/
rtp_player_init(NULL);
}
#endif /* HAVE_LIBPORTAUDIO */
static void on_next_bt_clicked_list(GtkWidget *bt _U_, user_data_t *user_data _U_)
{
GtkTreeIter iter;
@ -3188,7 +3217,9 @@ static void create_rtp_dialog(user_data_t* user_data)
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;
#ifdef HAVE_LIBPORTAUDIO
GtkWidget *player_bt = NULL;
#endif /* HAVE_LIBPORTAUDIO */
GtkWidget *graph_bt;
gchar label_forward[150];
gchar label_forward_tree[150];
@ -3323,11 +3354,18 @@ static void create_rtp_dialog(user_data_t* user_data)
gtk_widget_show(goto_bt);
g_signal_connect(goto_bt, "clicked", G_CALLBACK(on_goto_bt_clicked_lst), user_data);
graph_bt = gtk_button_new_with_label("Graph");
graph_bt = gtk_button_new_with_label("Graph");
gtk_container_add(GTK_CONTAINER(box4), graph_bt);
gtk_widget_show(graph_bt);
g_signal_connect(graph_bt, "clicked", G_CALLBACK(on_graph_bt_clicked), user_data);
#ifdef HAVE_LIBPORTAUDIO
player_bt = gtk_button_new_from_stock(WIRESHARK_STOCK_AUDIO_PLAYER);
gtk_container_add(GTK_CONTAINER(box4), player_bt);
gtk_widget_show(player_bt);
g_signal_connect(player_bt, "clicked", G_CALLBACK(on_player_bt_clicked), NULL);
/*gtk_tooltips_set_tip (tooltips, player_bt, "Launch the RTP player to listen the audio stream", NULL);*/
#endif /* HAVE_LIBPORTAUDIO */
next_bt = gtk_button_new_with_label("Next non-Ok");
gtk_container_add(GTK_CONTAINER(box4), next_bt);

View File

@ -81,7 +81,7 @@
#include "gtk/voip_calls.h"
#include "gtk/gtkglobals.h"
#include "gtk/rtp_player.h"
#include "gtk/stock_icons.h"
#ifndef min
#define min(a,b) (((a)<(b))?(a):(b))
@ -358,7 +358,7 @@ add_rtp_packet(const struct _rtp_info *rtp_info, packet_info *pinfo)
rtp_packet_t *new_rtp_packet;
GString *key_str = NULL;
/* create the the streams hash if it doen't exist */
/* create the streams hash if it doen't exist */
if (!rtp_streams_hash)
rtp_streams_hash = g_hash_table_new_full( g_str_hash, g_str_equal, rtp_key_destroy, rtp_stream_value_destroy);
@ -458,6 +458,16 @@ mark_rtp_stream_to_play(gchar *key _U_ , rtp_stream_info_t *rsi, gpointer ptr _U
}
}
/****************************************************************************/
/* Mark the ALL RTP stream to be played. This is called when calling the
* RTP player from the "RTP Analysis" window
*/
static void
mark_all_rtp_stream_to_play(gchar *key _U_ , rtp_stream_info_t *rsi, gpointer ptr _U_)
{
rsi->play = TRUE;
total_packets += rsi->num_packets;
}
/****************************************************************************/
/* Decode a RTP packet
@ -1373,19 +1383,19 @@ configure_event_channels(GtkWidget *widget, GdkEventConfigure *event _U_)
* the other collors are the same as in the Voip Graph analysys
* to match the same calls
*/
static GdkColor col[MAX_NUM_COL_CONV+1] = {
{0, 0x00FF, 0x00FF, 0xFFFF},
{0, 0x33FF, 0xFFFF, 0x33FF},
{0, 0x00FF, 0xCCFF, 0xCCFF},
{0, 0x66FF, 0xFFFF, 0xFFFF},
{0, 0x99FF, 0x66FF, 0xFFFF},
{0, 0xFFFF, 0xFFFF, 0x33FF},
{0, 0xCCFF, 0x99FF, 0xFFFF},
{0, 0xCCFF, 0xFFFF, 0x33FF},
{0, 0xFFFF, 0xCCFF, 0xCCFF},
{0, 0xFFFF, 0x99FF, 0x66FF},
{0, 0xFFFF, 0xFFFF, 0x99FF}
};
static GdkColor col[MAX_NUM_COL_CONV+1] = {
{0, 0x00FF, 0x00FF, 0xFFFF},
{0, 0x90FF, 0xEEFF, 0x90FF},
{0, 0xFFFF, 0xA0FF, 0x7AFF},
{0, 0xFFFF, 0xB6FF, 0xC1FF},
{0, 0xFAFF, 0xFAFF, 0xD2FF},
{0, 0xFFFF, 0xFFFF, 0x33FF},
{0, 0x66FF, 0xCDFF, 0xAAFF},
{0, 0xE0FF, 0xFFFF, 0xFFFF},
{0, 0xB0FF, 0xC4FF, 0xDEFF},
{0, 0x87FF, 0xCEFF, 0xFAFF},
{0, 0xD3FF, 0xD3FF, 0xD3FF}
};
rci=(rtp_channel_info_t *)g_object_get_data(G_OBJECT(widget), "rtp_channel_info_t");
if(!rci){
@ -1844,9 +1854,14 @@ decode_streams(void)
/* reset the Progress Bar count */
progbar_count = 0;
/* Mark the RTP streams to be played using the selected VoipCalls*/
if (rtp_streams_hash)
g_hash_table_foreach( rtp_streams_hash, (GHFunc)mark_rtp_stream_to_play, NULL);
/* Mark the RTP streams to be played using the selected VoipCalls. If voip_calls is NULL
then this was called from "RTP Analysis" so mark all strams */
if (rtp_streams_hash) {
if (voip_calls)
g_hash_table_foreach( rtp_streams_hash, (GHFunc)mark_rtp_stream_to_play, NULL);
else
g_hash_table_foreach( rtp_streams_hash, (GHFunc)mark_all_rtp_stream_to_play, NULL);
}
/* Decode the RTP streams and add them to the RTP channels to be played */
g_list_foreach( rtp_streams_list, (GFunc)decode_rtp_stream, NULL);
@ -2034,22 +2049,22 @@ rtp_player_dlg_create(void)
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_SPREAD);
gtk_box_set_spacing (GTK_BOX (hbuttonbox), 10);
bt_decode = gtk_button_new_with_label("Decode");
bt_decode = gtk_button_new_from_stock(WIRESHARK_STOCK_DECODE);
gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_decode);
g_signal_connect(bt_decode, "clicked", G_CALLBACK(on_bt_decode_clicked), NULL);
gtk_tooltips_set_tip (tooltips, bt_decode, "Decode the RTP stream(s)", NULL);
bt_play = gtk_button_new_with_label("Play");
bt_play = gtk_button_new_from_stock(GTK_STOCK_MEDIA_PLAY);
gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_play);
g_signal_connect(bt_play, "clicked", G_CALLBACK(on_bt_play_clicked), NULL);
gtk_tooltips_set_tip (tooltips, bt_play, "Play the RTP channel(s)", NULL);
bt_pause = gtk_button_new_with_label("Pause");
bt_pause = gtk_button_new_from_stock(GTK_STOCK_MEDIA_PAUSE);
gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_pause);
g_signal_connect(bt_pause, "clicked", G_CALLBACK(on_bt_pause_clicked), NULL);
gtk_tooltips_set_tip (tooltips, bt_pause, "Pause the RTP channel(s)", NULL);
bt_stop = gtk_button_new_with_label("Stop");
bt_stop = gtk_button_new_from_stock(GTK_STOCK_MEDIA_STOP);
gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_stop);
g_signal_connect(bt_stop, "clicked", G_CALLBACK(on_bt_stop_clicked), NULL);
gtk_tooltips_set_tip (tooltips, bt_stop, "Stop the RTP channel(s)", NULL);

View File

@ -51,6 +51,7 @@
#include "gtk/gtkglobals.h"
#include "gtk/rtp_stream.h"
#include "gtk/rtp_analysis.h"
#include "gtk/stock_icons.h"
#include "image/clist_ascend.xpm"
#include "image/clist_descend.xpm"
@ -811,7 +812,7 @@ static void rtpstream_dlg_create (void)
gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_mark);
gtk_tooltips_set_tip (tooltips, bt_mark, "Mark packets of the selected stream(s)", NULL);
bt_filter = gtk_button_new_with_label ("Prepare Filter");
bt_filter = gtk_button_new_from_stock(WIRESHARK_STOCK_PREPARE_FILTER);
gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter);
gtk_tooltips_set_tip (tooltips, bt_filter, "Prepare a display filter of the selected stream(s)", NULL);
@ -822,7 +823,7 @@ static void rtpstream_dlg_create (void)
gtk_tooltips_set_tip(tooltips, bt_copy,
"Copy all statistical values of this page to the clipboard in CSV (Comma Separated Values) format.", NULL);
bt_analyze = gtk_button_new_with_label ("Analyze");
bt_analyze = gtk_button_new_from_stock(WIRESHARK_STOCK_ANALYZE);
gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_analyze);
gtk_tooltips_set_tip (tooltips, bt_analyze, "Open an analyze window of the selected stream(s)", NULL);

View File

@ -71,6 +71,11 @@
#include "../image/toolbar/icon_color_8.xpm"
#include "../image/toolbar/icon_color_9.xpm"
#include "../image/toolbar/icon_color_0.xpm"
#include "../image/toolbar/decode_24.xpm"
#include "../image/toolbar/audio_player_24.xpm"
#include "../image/toolbar/voip_flow_24.xpm"
#include "../image/toolbar/telephone_16.xpm"
#include "../image/toolbar/analyze_24.xpm"
typedef struct stock_pixmap_tag{
@ -145,7 +150,13 @@ void stock_icons_init(void) {
{ WIRESHARK_STOCK_COLOR7, "Color 7", 0, 0, NULL },
{ WIRESHARK_STOCK_COLOR8, "Color 8", 0, 0, NULL },
{ WIRESHARK_STOCK_COLOR9, "Color 9", 0, 0, NULL },
{ WIRESHARK_STOCK_COLOR0, "Color 10", 0, 0, NULL }
{ WIRESHARK_STOCK_COLOR0, "Color 10", 0, 0, NULL },
{ WIRESHARK_STOCK_DECODE, "Decode", 0, 0, NULL },
{ WIRESHARK_STOCK_AUDIO_PLAYER, "Player", 0, 0, NULL },
{ WIRESHARK_STOCK_VOIP_FLOW, "Flow", 0, 0, NULL },
{ WIRESHARK_STOCK_TELEPHONE, "Telephone", 0, 0, NULL },
{ WIRESHARK_STOCK_PREPARE_FILTER, "Prepare Filter", 0, 0, NULL },
{ WIRESHARK_STOCK_ANALYZE, "Analyze", 0, 0, NULL }
};
static const stock_pixmap_t pixmaps[] = {
@ -195,6 +206,12 @@ void stock_icons_init(void) {
{ WIRESHARK_STOCK_COLOR8, icon_color_8_xpm},
{ WIRESHARK_STOCK_COLOR9, icon_color_9_xpm},
{ WIRESHARK_STOCK_COLOR0, icon_color_0_xpm},
{ WIRESHARK_STOCK_DECODE, decode_24_xpm},
{ WIRESHARK_STOCK_AUDIO_PLAYER, audio_player_24_xpm},
{ WIRESHARK_STOCK_VOIP_FLOW, voip_flow_24_xpm},
{ WIRESHARK_STOCK_TELEPHONE, telephone_16_xpm},
{ WIRESHARK_STOCK_PREPARE_FILTER, display_filter_24_xpm},
{ WIRESHARK_STOCK_ANALYZE, analyze_24_xpm},
{ NULL, NULL }
};

View File

@ -85,7 +85,12 @@
#define WIRESHARK_STOCK_COLOR8 "Wireshark_Stock_Color_8"
#define WIRESHARK_STOCK_COLOR9 "Wireshark_Stock_Color_9"
#define WIRESHARK_STOCK_COLOR0 "Wireshark_Stock_Color_10"
#define WIRESHARK_STOCK_DECODE "Wireshark_Stock_Decode"
#define WIRESHARK_STOCK_AUDIO_PLAYER "Wireshark_Audio_Player"
#define WIRESHARK_STOCK_VOIP_FLOW "Wireshark_Voip_Flow"
#define WIRESHARK_STOCK_TELEPHONE "Wireshark_Telephone"
#define WIRESHARK_STOCK_PREPARE_FILTER "Wireshark_Prepare_Filter"
#define WIRESHARK_STOCK_ANALYZE "Wireshark_Analyze"
void stock_icons_init(void);

View File

@ -64,6 +64,7 @@
#include "gtk/dlg_utils.h"
#include "gtk/gui_utils.h"
#include "gtk/gtkglobals.h"
#include "gtk/stock_icons.h"
#include "image/clist_ascend.xpm"
#include "image/clist_descend.xpm"
@ -771,25 +772,26 @@ static void voip_calls_dlg_create (void)
gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_unselect);
gtk_tooltips_set_tip (tooltips, bt_unselect, "Unselect this conversation", NULL);*/
bt_filter = gtk_button_new_with_label ("Prepare Filter");
bt_filter = gtk_button_new_from_stock(WIRESHARK_STOCK_PREPARE_FILTER);
gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter);
gtk_tooltips_set_tip (tooltips, bt_filter, "Prepare a display filter of the selected conversation", NULL);
bt_graph = gtk_button_new_with_label("Graph");
bt_graph = gtk_button_new_from_stock(WIRESHARK_STOCK_VOIP_FLOW);
gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_graph);
gtk_widget_show(bt_graph);
g_signal_connect(bt_graph, "clicked", G_CALLBACK(on_graph_bt_clicked), NULL);
gtk_tooltips_set_tip (tooltips, bt_graph, "Show a flow graph of the selected calls.", NULL);
#ifdef HAVE_LIBPORTAUDIO
bt_player = gtk_button_new_with_label("Player");
bt_player = gtk_button_new_from_stock(WIRESHARK_STOCK_AUDIO_PLAYER);
gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_player);
gtk_widget_show(bt_player);
g_signal_connect(bt_player, "clicked", G_CALLBACK(on_player_bt_clicked), NULL);
gtk_tooltips_set_tip (tooltips, bt_player, "Launch the RTP player to listen the selected calls.", NULL);
#endif /* HAVE_LIBPORTAUDIO */
bt_select_all = gtk_button_new_with_label("Select All");
/*bt_select_all = gtk_button_new_with_label("Select All");*/
bt_select_all = gtk_button_new_from_stock(GTK_STOCK_SELECT_ALL);
gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_select_all);
GTK_WIDGET_SET_FLAGS(bt_select_all, GTK_CAN_DEFAULT);
gtk_tooltips_set_tip (tooltips, bt_select_all, "Select all the calls", NULL);
@ -971,6 +973,10 @@ void
register_tap_listener_voip_calls_dlg(void)
{
register_stat_cmd_arg("voip,calls",voip_calls_init_tap,NULL);
register_stat_menu_item("_VoIP Calls", REGISTER_STAT_GROUP_TELEPHONY,
voip_calls_launch, NULL, NULL, NULL);
/*register_stat_menu_item("_VoIP Calls", REGISTER_STAT_GROUP_TELEPHONY,
voip_calls_launch, NULL, NULL, NULL);*/
register_stat_menu_item_stock("_VoIP Calls...",
REGISTER_STAT_GROUP_TELEPHONY, WIRESHARK_STOCK_TELEPHONE,
voip_calls_launch, NULL, NULL, NULL);
}

View File

@ -0,0 +1,103 @@
/* XPM */
static const char * analyze_24_xpm[] = {
"24 24 76 1",
" c None",
". c #E1E2E2",
"+ c #929596",
"@ c #686D6E",
"# c #3F4547",
"$ c #E1E2E3",
"% c #FDFDFD",
"& c #A2A5A6",
"* c #929595",
"= c #BBBCBB",
"- c #D8D9D6",
"; c #D7D9D5",
"> c #C1C4BF",
", c #A2A5A3",
"' c #43484A",
") c #676C6D",
"! c #5F6464",
"~ c #D6D7D6",
"{ c #ECECEA",
"] c #E9EAE6",
"^ c #E6E7E3",
"/ c #E3E4E0",
"( c #DFE2DC",
"_ c #DDDFD9",
": c #D3D6D1",
"< c #777B7A",
"[ c #5E6364",
"} c #EEEEEC",
"| c #ECEDEA",
"1 c #EDEDEB",
"2 c #E9EAE7",
"3 c #E0E2DC",
"4 c #D9DCD5",
"5 c #D5D9D1",
"6 c #7B7F7E",
"7 c #3E4345",
"8 c #D4D5D5",
"9 c #D6DAD2",
"0 c #D3D7D0",
"a c #45494B",
"b c #909393",
"c c #DDE0DA",
"d c #A8ABA8",
"e c #939697",
"f c #BBBDBA",
"g c #E8E9E6",
"h c #DCDED8",
"i c #C5C8C3",
"j c #696D6F",
"k c #DFE1DC",
"l c #D6D8D4",
"m c #E2E4DF",
"n c #D7D8D5",
"o c #EBECE9",
"p c #E5E7E3",
"q c #BEC0BD",
"r c #EAEAE7",
"s c #959897",
"t c #ECECE9",
"u c #3F4446",
"v c #7B807E",
"w c #D4D7D1",
"x c #484E4E",
"y c #CECFCD",
"z c #464B4D",
"A c #A9ADAA",
"B c #C5C7C4",
"C c #D6D9D4",
"D c #474A49",
"E c #353B3D",
"F c #4B4F4B",
"G c #404545",
"H c #8B8F90",
"I c #525350",
"J c #363C3E",
"K c #939596",
" ",
" .+@##@+$ ",
" %&#*=-;>,'&% ",
" %)!~{]^/(_:<)% ",
" &[{}{|1123456& ",
" .78}}}}}}}}/90a$ ",
" +b{{}}}}}}}}c4de ",
" @f]|}}}}}}}}ghij ",
" #-^1}}}}}}}}|kl# ",
" #;/1}}}}}}}}1mn# ",
" @>(2}}}}}}}}opqj ",
" +,_3}}}}}}}}rgse ",
" .':4/}}}}}}{t8u$ ",
" &<59cg|1ort{[& ",
" %)vw4hkmpg8[xy ",
" %&zABCnqsu&yDEe ",
" .+@##@+$ EFGH ",
" eGIGH ",
" HGIGH ",
" HGIGe ",
" HGFJ ",
" eJK ",
" ",
" "};

View File

@ -0,0 +1,87 @@
/* XPM */
static const char * audio_player_24_xpm[] = {
"24 24 60 1",
" c None",
". c #C1C1C1",
"+ c #6D6D6D",
"@ c #3C3C3C",
"# c #585858",
"$ c #353535",
"% c #696969",
"& c #676767",
"* c #686868",
"= c #434343",
"- c #5B5B5B",
"; c #444444",
"> c #A9A9A9",
", c #5A5A5A",
"' c #646464",
") c #4D4D4D",
"! c #A3A3A3",
"~ c #4C4C4C",
"{ c #6C6C6C",
"] c #474747",
"^ c #555555",
"/ c #575757",
"( c #505050",
"_ c #4F4F4F",
": c #494949",
"< c #535353",
"[ c #5E5E5E",
"} c #707070",
"| c #747474",
"1 c #545454",
"2 c #6F6F6F",
"3 c #666666",
"4 c #606060",
"5 c #565656",
"6 c #616161",
"7 c #4B4B4B",
"8 c #525252",
"9 c #727272",
"0 c #757575",
"a c #5F5F5F",
"b c #5D5D5D",
"c c #6B6B6B",
"d c #636363",
"e c #656565",
"f c #3F3F3F",
"g c #333333",
"h c #343434",
"i c #1B1B1B",
"j c #171717",
"k c #1D1D1D",
"l c #414141",
"m c #717171",
"n c #767676",
"o c #3D3D3D",
"p c #383838",
"q c #464646",
"r c #3A3A3A",
"s c #424242",
"t c #4E4E4E",
"u c #303030",
" . ",
" +@+ ",
" #$% ",
" & *=+ ",
" -;> ,# ') ",
" !-~;> {]^ ^- ",
" !/(_:> !<[ }; ",
" |,_^1:> -} ]2 ~3 ",
" [445<5#/:> 6_% &) 3~ ",
" ((<1/#[,7> |89 ;0 @ ",
" ^/##[[a-~> b[ )c @ ",
" b[[add'a~> [^ 7* @ ",
" 4a66e3&6)> )[> f2 @ ",
" 3*&3*%c3~> &g 2h +@ ",
" ijk)2{2*)> ,g3 l# 1^ ",
" 2{mb1n9{)> -2 -o p9 ",
" '/9|q> 6r} [q ",
" '[m: [r{ 9f} ",
" 3#l 20 )/ ",
" {# >st ",
" 0u- ",
" 0| ",
" ",
" "};

273
image/toolbar/decode_24.xpm Normal file
View File

@ -0,0 +1,273 @@
/* XPM */
static const char * decode_24_xpm[] = {
"24 24 246 2",
" c None",
". c #ACADAA",
"+ c #8F908C",
"@ c #A5A7A3",
"# c #939590",
"$ c #AFB0AD",
"% c #8D8F8A",
"& c #CED2CA",
"* c #B1B2AF",
"= c #E7E8E7",
"- c #92948F",
"; c #B3B6AF",
"> c #AEB1AB",
", c #BABEB7",
"' c #D3D7CF",
") c #BCBFB8",
"! c #ABAEA7",
"~ c #B7BAB3",
"{ c #8E908B",
"] c #ACAEAA",
"^ c #AFB2AC",
"/ c #B4B7B0",
"( c #A7A8A5",
"_ c #A9AAA7",
": c #8B8D88",
"< c #BBBEB7",
"[ c #B2B5AF",
"} c #90918D",
"| c #B1B4AD",
"1 c #BEC2BA",
"2 c #A8AAA6",
"3 c #8A8D87",
"4 c #CFD3CB",
"5 c #90928D",
"6 c #CECFCD",
"7 c #8A8C87",
"8 c #D1D5CD",
"9 c #898B86",
"0 c #A1A39F",
"a c #91938F",
"b c #C0C3BC",
"c c #ADB0AA",
"d c #898C86",
"e c #ABADA8",
"f c #C0C4BC",
"g c #9C9D98",
"h c #E3E3E3",
"i c #939592",
"j c #656763",
"k c #C3C3C2",
"l c #CCCCCB",
"m c #666865",
"n c #9D9E9C",
"o c #E6E6E6",
"p c #AFB3AC",
"q c #DEDEDD",
"r c #60635E",
"s c #AAACA8",
"t c #C4C6C2",
"u c #636562",
"v c #C7C8C7",
"w c #636561",
"x c #BCBEBB",
"y c #A0A39D",
"z c #61635F",
"A c #CDCDCC",
"B c #8E8F8B",
"C c #B9BDB6",
"D c #B2B6AF",
"E c #C2C6BE",
"F c #B5B8B1",
"G c #BDC0B9",
"H c #8B8E88",
"I c #DFDFDE",
"J c #7B7C79",
"K c #E3E5E0",
"L c #E3E6E1",
"M c #C2C4C1",
"N c #838581",
"O c #BABCB9",
"P c #E7EAE5",
"Q c #E6E8E4",
"R c #8B8E89",
"S c #E3E3E2",
"T c #8C8E89",
"U c #A4A6A2",
"V c #A5A6A2",
"W c #E0E0DF",
"X c #D7D8D7",
"Y c #CFCFCE",
"Z c #D7D7D6",
"` c #676965",
" . c #E5E8E3",
".. c #E0E3DE",
"+. c #E9EBE7",
"@. c #EEF0ED",
"#. c #EDEFEC",
"$. c #E8EBE6",
"%. c #7C7E7A",
"&. c #C9CAC9",
"*. c #D2D2D1",
"=. c #9EA09C",
"-. c #888A85",
";. c #9EA09B",
">. c #F3F3F3",
",. c #8C8E8A",
"'. c #787A77",
"). c #B7BAB6",
"!. c #E3E7E1",
"~. c #E5E8E4",
"{. c #EDEFED",
"]. c #F2F3F1",
"^. c #F1F2EF",
"/. c #EAECE8",
"(. c #E7EAE6",
"_. c #797A78",
":. c #8B8D89",
"<. c #676A65",
"[. c #DBDBDA",
"}. c #B2B3B1",
"|. c #A0A29E",
"1. c #DFE2DD",
"2. c #E1E4DE",
"3. c #E0E3DD",
"4. c #E7E9E5",
"5. c #D7D8D5",
"6. c #81847F",
"7. c #737471",
"8. c #868784",
"9. c #D1D3CF",
"0. c #E9EBE8",
"a. c #E2E5E1",
"b. c #E4E7E2",
"c. c #E1E4DF",
"d. c #BEC0BB",
"e. c #8A8C88",
"f. c #757672",
"g. c #BFC1BC",
"h. c #DDE0D9",
"i. c #CFD4CB",
"j. c #DDE0DB",
"k. c #D6D8D4",
"l. c #626360",
"m. c #CBCCCB",
"n. c #E4E4E4",
"o. c #666864",
"p. c #D2D3D1",
"q. c #E2E5DF",
"r. c #D4D8D0",
"s. c #D1D3CE",
"t. c #60625E",
"u. c #CFD0CF",
"v. c #C0C2BE",
"w. c #DCDFD9",
"x. c #E6E9E5",
"y. c #868884",
"z. c #DCDCDB",
"A. c #70726F",
"B. c #EBEDE9",
"C. c #DDE0DA",
"D. c #CCCDCA",
"E. c #D4D4D3",
"F. c #EDEEEB",
"G. c #747672",
"H. c #F4F4F4",
"I. c #5E605C",
"J. c #F0F1EF",
"K. c #999A98",
"L. c #C2C3C1",
"M. c #686966",
"N. c #DBDED8",
"O. c #D1D2D1",
"P. c #E1E2E1",
"Q. c #727370",
"R. c #EEEFEC",
"S. c #D9DDD6",
"T. c #D9DBD8",
"U. c #6C6E69",
"V. c #BEBFBD",
"W. c #717470",
"X. c #D3D5D1",
"Y. c #DFE2DC",
"Z. c #C3C9BF",
"`. c #DBDED7",
" + c #F1F1F1",
".+ c #DFDFDF",
"++ c #CBCDC9",
"@+ c #C6CBC1",
"#+ c #DDE1DB",
"$+ c #DEE0DC",
"%+ c #C3C5C1",
"&+ c #EBEDEA",
"*+ c #D9DBD7",
"=+ c #797B77",
"-+ c #D0D2CE",
";+ c #F0F1EE",
">+ c #ECEEEB",
",+ c #C4C6C3",
"'+ c #9D9E9B",
")+ c #E9E9E9",
"!+ c #666964",
"~+ c #9C9E9A",
"{+ c #818280",
"]+ c #D0D1CE",
"^+ c #DEE1DB",
"/+ c #F4F4F2",
"(+ c #FBFBFA",
"_+ c #F5F6F4",
":+ c #E2E4DF",
"<+ c #DDDEDB",
"[+ c #81827F",
"}+ c #9A9C98",
"|+ c #BCBCBB",
"1+ c #7C7E7B",
"2+ c #F3F4F2",
"3+ c #BDC3B7",
"4+ c #DADED7",
"5+ c #C0C5BA",
"6+ c #ECEDEA",
"7+ c #939491",
"8+ c #9A9A99",
"9+ c #B3B3B2",
"0+ c #E2E2E2",
"a+ c #B2B3B2",
"b+ c #959693",
"c+ c #E8E9E7",
"d+ c #DCDDDB",
"e+ c #E6E9E4",
"f+ c #898988",
"g+ c #EAEAEA",
"h+ c #BFBFBF",
"i+ c #626460",
"j+ c #BEC0BD",
"k+ c #E4E5E3",
"l+ c #696B68",
"m+ c #696968",
"n+ c #E2E3E1",
"o+ c #6B6E69",
"p+ c #9B9C9B",
"q+ c #DADBDA",
"r+ c #9C9D9B",
"s+ c #686B66",
"t+ c #B9B9B9",
"u+ c #9FA09F",
"v+ c #80817F",
"w+ c #BFBFBE",
" . + @ ",
" # $ % & + * # = ",
" - ; > , ' ) ! ~ { ",
" ] ^ ' ' ' ' ' / ( ",
" _ : < ' [ } | ' 1 % 2 ",
" 3 4 ' ' 5 6 7 ' ' 8 9 ",
" 0 a b ' c d e ' f - g ",
" h i j k l m n o . p ' ' ' ' ' > 2 ",
" q r s t u v w x y z A B C D b ' E F G H ",
" I J K L M N O P Q R l S T U { ' 5 V 7 W ",
" X Y Z ` ...+.@.#.Q $.%.&.*.6 =.-.;. ",
">.z ,.'.).!.~.{.].^./.(.t _.:.<.[. ",
"}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e. ",
"f.g.h.i.j.k.l.m.n.*.o.p.q.r.j.s.t. ",
"u.o.v.w.x.y.v z.A.B.C.D.` v ",
" E.y.L F.G.n. H.I.J.L K.L. ",
"Y M.D.N.+.y.O. P.Q.R.S.T.U.V. ",
"W.X.Y.Z.`.T.l.X +.+j ++c.@+#+$+z ",
"n %++.&+2.#.*+=+I.G.-+;+c.>+&+,+'+ ",
")+!+~+{+]+b.^+/+(+_+:+^+<+[+}+` ",
" Z v |+1+2+3+4+>+^+5+6+7+8+9+ ",
" 0+a+b+2+:+c+b+d+e+6+2 f+ ",
" g+h+i+j+k+l+m+z n+k.o+p+ ",
" >.q+r+s+K.t+u+w v+w+ "};

View File

@ -0,0 +1,68 @@
/* XPM */
static const char * telephone_16_xpm[] = {
"16 16 49 1",
" c None",
". c #303032",
"+ c #1F1F21",
"@ c #525253",
"# c #505052",
"$ c #1B1B1D",
"% c #242426",
"& c #1A1A1C",
"* c #4E4E50",
"= c #474749",
"- c #9A9A9B",
"; c #29292C",
"> c #1A191D",
", c #232325",
"' c #686868",
") c #3F3E42",
"! c #1A191E",
"~ c #373739",
"{ c #6E6D71",
"] c #1B1A1F",
"^ c #454547",
"/ c #222127",
"( c #323234",
"_ c #575758",
": c #8A8A8B",
"< c #222223",
"[ c #7E7E7F",
"} c #6E6E6F",
"| c #444446",
"1 c #5D5D5F",
"2 c #7F7F81",
"3 c #48484A",
"4 c #19191B",
"5 c #1F1F20",
"6 c #29292B",
"7 c #4F4F51",
"8 c #373738",
"9 c #1A1A1B",
"0 c #454449",
"a c #4F4E53",
"b c #19181D",
"c c #69696B",
"d c #404040",
"e c #1C1B20",
"f c #545358",
"g c #4B4B4F",
"h c #848486",
"i c #757577",
"j c #606062",
" ",
" . ",
" ..+ ",
" @.#$. ",
" %&*=$- ",
" ;>,' ",
" )!~ ",
" {]^ ",
" /( ",
" _$: ",
" <~ [ ",
" }&| 1$2 ",
" 34567%. ",
" 89>0abc ",
" d>efgh ",
" ij "};

View File

@ -0,0 +1,187 @@
/* XPM */
static const char * voip_flow_24_xpm[] = {
"24 24 160 2",
" c None",
". c #FDFDFD",
"+ c #FEFEFE",
"@ c #F9F9F9",
"# c #F2F2F2",
"$ c #F5F5F5",
"% c #F8F8F8",
"& c #9FA19D",
"* c #989A95",
"= c #FDFEFD",
"- c #F0F1F0",
"; c #B7B8B5",
"> c #ACADA9",
", c #EDEEED",
"' c #A0A29E",
") c #9D9E9A",
"! c #F7F8F7",
"~ c #E7E7E7",
"{ c #AAACA7",
"] c #A1A39F",
"^ c #FCFCFC",
"/ c #ECECEC",
"( c #A6A8A3",
"_ c #A2A4A0",
": c #FAFAFA",
"< c #E5E6E5",
"[ c #ABACA9",
"} c #A4A6A2",
"| c #F0F0EF",
"1 c #B1B3B0",
"2 c #ABADA9",
"3 c #F2F2F1",
"4 c #C2C2C2",
"5 c #8A8A8A",
"6 c #A7A7A7",
"7 c #CECECE",
"8 c #EFEFEF",
"9 c #E9E9E9",
"0 c #BABCB9",
"a c #AEAFAD",
"b c #F0F0F0",
"c c #DEDFDE",
"d c #E8E8E7",
"e c #C7C7C7",
"f c #757575",
"g c #434343",
"h c #4B4B4B",
"i c #6F6F6F",
"j c #8F8F8F",
"k c #BFBFBF",
"l c #DDDDDD",
"m c #B0B0B0",
"n c #E6E6E6",
"o c #DCDCDB",
"p c #D4D5D2",
"q c #E4E4E4",
"r c #B5B6B4",
"s c #F4F4F4",
"t c #E8E8E8",
"u c #CFCFCF",
"v c #7E7E7E",
"w c #595959",
"x c #3D3D3D",
"y c #7D7D7D",
"z c #9A9A9A",
"A c #464646",
"B c #727272",
"C c #C1C2C1",
"D c #B5B7B4",
"E c #B3B4B0",
"F c #ECEDEC",
"G c #A8AAA6",
"H c #A8A9A6",
"I c #FBFBFB",
"J c #717171",
"K c #393939",
"L c #0F0F0F",
"M c #151515",
"N c #9FA09F",
"O c #A1A29F",
"P c #A6A7A4",
"Q c #ABACA8",
"R c #F1F1F0",
"S c #F1F1F1",
"T c #898989",
"U c #0E0E0E",
"V c #3A3A3A",
"W c #AAABAA",
"X c #A1A29E",
"Y c #BABBB9",
"Z c #B9BAB7",
"` c #F4F5F4",
" . c #F6F6F6",
".. c #A9A9A9",
"+. c #ABABAB",
"@. c #DCDDDC",
"#. c #B3B5B1",
"$. c #B1B2AE",
"%. c #DEDEDD",
"&. c #E3E3E2",
"*. c #F6F6F5",
"=. c #EFEFEE",
"-. c #DCDCDA",
";. c #E5E5E4",
">. c #B4B6B3",
",. c #F5F6F5",
"'. c #B9BAB6",
"). c #B5B5B4",
"!. c #EEEFEE",
"~. c #A8AAA5",
"{. c #AAABA8",
"]. c #E8E9E7",
"^. c #A9AAA6",
"/. c #A7A9A6",
"(. c #DEDEDE",
"_. c #ACADAA",
":. c #ADAEAA",
"<. c #F4F4F3",
"[. c #B4B5B2",
"}. c #B5B7B3",
"|. c #EBEBEB",
"1. c #CACACA",
"2. c #E2E2E1",
"3. c #BCBDBB",
"4. c #B8BAB7",
"5. c #E2E2E2",
"6. c #DDDEDC",
"7. c #737373",
"8. c #E8E9E8",
"9. c #D8D9D7",
"0. c #F3F3F2",
"a. c #B2B3AF",
"b. c #ADAEAB",
"c. c #B4B5B4",
"d. c #B6B8B4",
"e. c #A7A8A5",
"f. c #A3A4A1",
"g. c #AFAFAF",
"h. c #3E3E3E",
"i. c #EEEEED",
"j. c #EBECEB",
"k. c #A7A8A6",
"l. c #D4D4D3",
"m. c #AAACA9",
"n. c #FEFFFE",
"o. c #EAEBE9",
"p. c #B4B5B1",
"q. c #EAEAEA",
"r. c #EAEBEA",
"s. c #B1B3AF",
"t. c #B0B2AF",
"u. c #F5F5F4",
"v. c #F3F4F2",
"w. c #B6B7B4",
"x. c #EFF0EF",
"y. c #C3C4C2",
"z. c #BFC0BE",
"A. c #FBFBFA",
"B. c #F7F7F7",
"C. c #F8F9F8",
" . + ",
" + . @ # $ ",
" % & * = - ; > = ",
" , ' ) ! ~ { ] ^ ",
" + / ( _ # : + + < [ } . ",
" | 1 2 3 4 5 6 7 8 @ ^ 9 0 a + ",
" b c d b e f g h i j k l : m n o p q ",
" 8 r 1 s t u 6 v w x w y z A B C D E ",
" F G H # I l k j J K L M N O P + ",
" 9 Q > R S T U V W X ( ^ ",
" b Y Z ` ...+.S @.#.$.I ",
" S %.&.*. + . =.-.;.I ",
" 3 #.>.,. | '.).: ",
" !.~.{.- + .].[ ^.$ ",
" !./.[ 8 . @ 8 7 6 5 e (._.:.<. ",
" s [.}.|.9 m : l k j i h g f 1.2.3.4.$ ",
" ` 5.6.o 7.A z y w x w v 6 u t $ 8.9.&.*. ",
" 0.a.b.c.M L K J j k l I | ; d.*. ",
" 8 e.f.g.h.U T S i.{ _.S ",
" j.k.{.l.~ +... . i.m.2 # ",
" n.o._.p.q.I + r.s.t.u. ",
" v.w.; $ x.y.z.A. ",
" . B.C.= @ b s + ",
" + "};

179
image/voip_bg.xpm Normal file
View File

@ -0,0 +1,179 @@
/* XPM */
static const char * voip_bg_xpm[] = {
"20 40 136 2",
" c #F6F3F0",
". c #F5F2EF",
"+ c #F6F2EF",
"@ c #F5F3EF",
"# c #F6F3EF",
"$ c #F5F3F0",
"% c #F6F2F0",
"& c #F5F2EE",
"* c #F5F1EE",
"= c #F4F1EE",
"- c #F4F2EE",
"; c #F5F1EF",
"> c #F4F0ED",
", c #F4F0EE",
"' c #F5F1ED",
") c #F4F1ED",
"! c #F5F0ED",
"~ c #F4F0EC",
"{ c #F3F0ED",
"] c #F3F1ED",
"^ c #F3EFEC",
"/ c #F3F0EC",
"( c #F3EFED",
"_ c #F4EFED",
": c #F4EFEC",
"< c #F3EFEB",
"[ c #F3F0EB",
"} c #F2EFEB",
"| c #F2EFEC",
"1 c #F3EEEB",
"2 c #F2EEEA",
"3 c #F2EEEB",
"4 c #F2EFEA",
"5 c #F1EEEA",
"6 c #F2EEE9",
"7 c #F1EDEA",
"8 c #F2EDEA",
"9 c #F1EDE9",
"0 c #F2EDE9",
"a c #F1ECE9",
"b c #F1ECE8",
"c c #F0EDE9",
"d c #F1EDE8",
"e c #F0ECE8",
"f c #F0EDE8",
"g c #F0ECE9",
"h c #F0ECE7",
"i c #F0EBE7",
"j c #EFEBE7",
"k c #F0EBE8",
"l c #F0EBE6",
"m c #EFEBE6",
"n c #F0EAE7",
"o c #F0EAE6",
"p c #EEEBE6",
"q c #EFEAE6",
"r c #EEEAE6",
"s c #EEE9E5",
"t c #EEEAE5",
"u c #EFE9E5",
"v c #EFE9E6",
"w c #EFEAE5",
"x c #EEE9E4",
"y c #EDE9E5",
"z c #EDE8E5",
"A c #EEE8E4",
"B c #EDE9E4",
"C c #EDE8E4",
"D c #EDE8E3",
"E c #EDE7E3",
"F c #ECE8E3",
"G c #ECE7E3",
"H c #ECE8E2",
"I c #ECE7E2",
"J c #EDE7E2",
"K c #ECE6E2",
"L c #EBE6E2",
"M c #EBE7E2",
"N c #ECE6E1",
"O c #ECE7E1",
"P c #EBE6E1",
"Q c #EBE7E1",
"R c #EBE5E1",
"S c #EBE5E0",
"T c #EBE6E0",
"U c #EAE5E1",
"V c #EAE5E0",
"W c #EAE4E0",
"X c #EAE5DF",
"Y c #EBE5DF",
"Z c #EAE4DF",
"` c #E9E4DF",
" . c #E9E3DF",
".. c #E9E3DE",
"+. c #E9E4DE",
"@. c #EAE3DE",
"#. c #EAE3DF",
"$. c #EAE4DE",
"%. c #E9E3DD",
"&. c #E8E3DE",
"*. c #E8E2DD",
"=. c #E8E2DE",
"-. c #E8E3DD",
";. c #E9E2DD",
">. c #E8E2DC",
",. c #E8E1DC",
"'. c #E8E1DD",
"). c #E7E1DC",
"!. c #E7E1DB",
"~. c #E7E2DC",
"{. c #E7E0DB",
"]. c #E7E0DC",
"^. c #E8E1DB",
"/. c #E8E0DB",
"(. c #E6E0DA",
"_. c #E7E0DA",
":. c #E6E0DB",
"<. c #E7E1DA",
"[. c #E6DFDA",
"}. c #E7DFDA",
"|. c #E6DFD9",
"1. c #E5DFD9",
"2. c #E6E0D9",
"3. c #E5DFDA",
"4. c #E6DFD8",
"5. c #E5DED8",
"6. c #E5DED9",
"7. c #E5DFD8",
"8. c #E6DED9",
"9. c #E4DED8",
"0. c #E5DDD8",
"a. c #E4DDD8",
"b. c #E5DED7",
"c. c #E5DDD7",
"d. c #E4DDD7",
"e. c #E4DED7",
" ",
". + @ # $ + $ . . . + + + $ # . # % ",
". . . @ . + . . . . . . & . & . + . + + ",
"& & * = - & & - - ; = - & & ; & * - & ; ",
"= = > = = , = * ' * * ) ) > = ) = = ! = ",
"> ~ > ) > { > ) > ) > ) { ] > > > > ) ) ",
"> ^ / / ( _ : ~ / ( ~ ^ ~ / / / ~ _ / / ",
"< / < < < ^ ^ [ } / ^ < ^ < } ^ | / < ^ ",
"} < < } } < } 1 < | < } } < } 1 } 1 < } ",
"2 2 3 3 4 2 2 4 2 } 4 2 3 3 3 3 } 2 2 2 ",
"2 2 5 6 7 2 2 8 5 2 8 7 8 7 2 2 2 5 8 7 ",
"9 9 9 9 9 9 9 7 7 9 0 7 9 9 0 9 9 7 9 7 ",
"a b a c d e a e f b 9 b b b d a b g a a ",
"b e e e e e e e b e e e h e e e b e e e ",
"h h i i e j h k i h j k i j k k h h k i ",
"l i j j m j i m i j i n i o j j o i j m ",
"p q q q m m r q q r r q r q q m r q m q ",
"q s q t u t t v t w u s r v w w t t t s ",
"s s x t x s s s y x s s s x s s s s s t ",
"y z A A B C y x B C B B x C x B x B x x ",
"C C D D C C C D D D D D C C C C C C D D ",
"D E F G F G D G E F E F E F H G F G D G ",
"I I G I G J K G I G K I K K I I K G I I ",
"L M N M K L O I P L K I P N N K Q K K K ",
"P P P R R P P P P P N P R P R P P N P P ",
"R S T S T U S S S P T S S R R S P R U R ",
"V W V V W V X V X W Y V Y Z V V V V S V ",
"` Z Z Z Z ` Z Z X Z Z ` Z W Z Z W W Z Z ",
" ... .` Z ..+. .@.` ..` +.+.#.+.#.+.$.+.",
"......................%...&.&.%...%.....",
"*.=.&.-.-.;.*.%.%.*.;.&.%.;.;.=.=.-.-.;.",
">.*.>.*.*.,.*.'.*.>.>.,.>.*.>.>.>.'.>.*.",
").,.,.!.>.).,.~.).).).>.,.!.,.~.).).>.~.",
"!.{.!.).).].).{.!.).^.).).{./.).!.!.).{.",
"{.(.{.(._.{.{.{.!.{.{.:.!.{._.(.<.!.{.(.",
"(.(.[.(.(.(.(.[.[.}.[.(.(.[.[.(.[.(.}.(.",
"|.1.(.|.|.|.[.2.3.1.|.|.[.[.1.1.|.|.3.2.",
"4.1.|.5.6.|.7.1.7.6.1.|.6.6.8.1.|.6.7.6.",
"9.5.0.9.5.5.5.5.5.6.5.5.9.5.6.5.9.5.5.9.",
"a.a.9.b.a.c.a.b.d.9.a.0.e.a.9.d.0.9.d.e."};

116
image/voip_select.xpm Normal file
View File

@ -0,0 +1,116 @@
/* XPM */
static const char * voip_select_xpm[] = {
"20 20 93 2",
" c #3F7BC3",
". c #407CC5",
"+ c #417DC4",
"@ c #417DC5",
"# c #417CC5",
"$ c #417CC4",
"% c #437EC6",
"& c #427EC6",
"* c #437FC6",
"= c #437FC5",
"- c #427FC6",
"; c #4580C7",
"> c #4480C7",
", c #4580C8",
"' c #4480C8",
") c #4781C9",
"! c #4682C8",
"~ c #4782C9",
"{ c #4682C9",
"] c #4983CA",
"^ c #4884CA",
"/ c #4983CB",
"( c #4984CB",
"_ c #4984CA",
": c #4883CA",
"< c #4B85CB",
"[ c #4A85CC",
"} c #4B85CC",
"| c #4A85CB",
"1 c #4D87CE",
"2 c #4D87CD",
"3 c #4D86CD",
"4 c #4C87CE",
"5 c #4C87CD",
"6 c #4C86CD",
"7 c #4F88CF",
"8 c #4E88CF",
"9 c #4F89CF",
"0 c #4E89CE",
"a c #4E88CE",
"b c #4F88CE",
"c c #4E89CF",
"d c #518AD0",
"e c #508AD0",
"f c #508AD1",
"g c #518AD1",
"h c #528CD2",
"i c #538CD1",
"j c #528BD2",
"k c #538CD2",
"l c #528CD1",
"m c #548ED3",
"n c #558DD3",
"o c #548DD3",
"p c #548DD4",
"q c #548ED4",
"r c #558ED4",
"s c #568FD4",
"t c #568FD5",
"u c #5690D4",
"v c #578FD5",
"w c #5891D6",
"x c #5891D7",
"y c #5890D6",
"z c #5A93D7",
"A c #5A92D7",
"B c #5A92D8",
"C c #5A93D8",
"D c #5C94D9",
"E c #5C95D9",
"F c #5B94D9",
"G c #5E95DA",
"H c #5D96DB",
"I c #5E95DB",
"J c #5D96DA",
"K c #5E96DA",
"L c #5D95DA",
"M c #5E96DB",
"N c #6098DC",
"O c #6097DC",
"P c #5F97DC",
"Q c #5F98DC",
"R c #6098DB",
"S c #6199DE",
"T c #6299DD",
"U c #6199DD",
"V c #6299DE",
"W c #629ADD",
"X c #649BDF",
"Y c #639ADE",
"Z c #649ADF",
"` c #639ADF",
" . c #639BDF",
" ",
". + + @ @ @ + @ @ + + # + @ . + $ @ + $ ",
"% % % & * % * = % % % % % % % % % * - % ",
"; ; ; > ; , ; ' ; > ; ; > , , ; ; ; , ' ",
") ! ~ { { ) ~ ~ ! ~ ~ ~ ~ { ~ ~ ~ ~ ) { ",
"] ^ ] / / ] ( _ ^ ] ^ ] ] ] ] ] / ^ : / ",
"< [ [ [ } < | } } } } | } [ [ } < | } [ ",
"1 2 1 3 3 2 4 4 4 2 1 5 5 6 4 6 5 6 2 2 ",
"7 8 9 8 0 a 7 b a 7 8 c 7 9 8 7 c 9 c 7 ",
"d e d e d e d f g e e f e d e e e d e g ",
"h i j j j j h h h k h h i k l k l l k k ",
"m n o o o o o p m o q m o o o m o m o r ",
"s t t t t t s u v s t s s t s t s t s t ",
"w x w y w w x w y w w w w w w y w w w w ",
"z z z A z z A z B z B B C B A C A z C C ",
"D E D E D D F D F D D E D D E D D D D F ",
"G H I J H K I K L K K M I I M M I M M G ",
"N O O P O P P O N Q N O O Q O P R N Q Q ",
"S T U U V U T V V U W V T V V T V S U V ",
"X Y Z X ` Z X X X X ` Z X Z X ` .` X X "};