Regards Alejandro
Lars Roland wrote:
Lars Roland schrieb:
Having a short look at the patch, I have to disagree on an implementation detail:
I don't like to have the mgcp dissector allocating a mgcp_info_t structure for each dissection of an mgcp packet without freeing it. This could be considered to be a big memory leak.
Instead use a static array of mgcp_info_t structures. You can take the h225 or the q931 dissector as an example of such an implementation.
On Fri, 18 Feb 2005 13:00:00 -0700, Alejandro Vaquero <alejandrovaquero@xxxxxxxxx> wrote:
Hi All, find attached a patch to add MGCP calls to the "Voip Analysis". The implementation is oriented to MGCP Residential Gateways.
checked in along with the changes I've proposed above and an additional check for the presence of the mgcp plugin.
Regards, Lars
_______________________________________________ Ethereal-dev mailing list Ethereal-dev@xxxxxxxxxxxx http://www.ethereal.com/mailman/listinfo/ethereal-dev
Index: graph_analysis.c
===================================================================
--- graph_analysis.c (revision 13449)
+++ graph_analysis.c (working copy)
@@ -38,6 +38,7 @@
/* in /gtk ... */
#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
#include "gtkglobals.h"
#include "dlg_utils.h"
@@ -647,6 +648,63 @@
}
/****************************************************************************/
+static gint scroll_event(GtkWidget *widget, GdkEventButton *event _U_)
+{
+ graph_analysis_data_t *user_data;
+
+ user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t");
+
+ /* Up scroll */
+ if (event->state == 0){
+ if (user_data->dlg.first_item == 0) return TRUE;
+ user_data->dlg.first_item--;
+
+ /* Down scroll */
+ } else {
+ if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1 == user_data->num_items)) return TRUE;
+ user_data->dlg.first_item++;
+ }
+ dialog_graph_redraw(user_data);
+
+ return TRUE;
+}
+
+/****************************************************************************/
+static gint key_press_event(GtkWidget *widget, GdkEventKey *event _U_)
+{
+ graph_analysis_data_t *user_data;
+
+ user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t");
+
+ /* Up arrow */
+ if (event->keyval == GDK_Up){
+ if (user_data->dlg.selected_item == 0) return TRUE;
+ user_data->dlg.selected_item--;
+ if ( (user_data->dlg.selected_item<user_data->dlg.first_item) || (user_data->dlg.selected_item>user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size) )
+ user_data->dlg.first_item = user_data->dlg.selected_item;
+ /* Down arrow */
+ } else if (event->keyval == GDK_Down){
+ if (user_data->dlg.selected_item == user_data->num_items-1) return TRUE;
+ user_data->dlg.selected_item++;
+ if ( (user_data->dlg.selected_item<user_data->dlg.first_item) || (user_data->dlg.selected_item>user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size) )
+ user_data->dlg.first_item = (guint32)user_data->dlg.selected_item-(guint32)user_data->dlg.v_scrollbar_adjustment->page_size;
+ } else if (event->keyval == GDK_Left){
+ if (user_data->dlg.first_node == 0) return TRUE;
+ user_data->dlg.first_node--;
+ } else if (event->keyval == GDK_Right){
+ if ((user_data->dlg.first_node+user_data->dlg.h_scrollbar_adjustment->page_size+1 == user_data->num_nodes)) return TRUE;
+ user_data->dlg.first_node++;
+ }
+
+ user_data->dlg.needs_redraw=TRUE;
+ dialog_graph_draw(user_data);
+
+ cf_goto_frame(&cfile, user_data->dlg.items[user_data->dlg.selected_item-user_data->dlg.first_item].frame_num);
+
+ return TRUE;
+}
+
+/****************************************************************************/
static gint expose_event(GtkWidget *widget, GdkEventExpose *event)
{
graph_analysis_data_t *user_data;
@@ -795,6 +853,8 @@
user_data->dlg.draw_area=gtk_drawing_area_new();
+ GTK_WIDGET_SET_FLAGS(user_data->dlg.draw_area, GTK_CAN_FOCUS);
+ gtk_widget_grab_focus(user_data->dlg.draw_area);
SIGNAL_CONNECT(user_data->dlg.draw_area, "destroy", quit, user_data);
OBJECT_SET_DATA(user_data->dlg.draw_area, "graph_analysis_data_t", user_data);
@@ -807,6 +867,8 @@
gtk_widget_add_events (user_data->dlg.draw_area,
GDK_BUTTON_PRESS_MASK);
SIGNAL_CONNECT(user_data->dlg.draw_area, "button_press_event", button_press_event, user_data);
+ SIGNAL_CONNECT(user_data->dlg.draw_area, "scroll_event", scroll_event, user_data);
+ SIGNAL_CONNECT(user_data->dlg.draw_area, "key_press_event", key_press_event, user_data);
gtk_widget_show(user_data->dlg.draw_area);
gtk_box_pack_start(GTK_BOX(vbox), user_data->dlg.draw_area, TRUE, TRUE, 0);
Powered by MHonArc 2.6.10