aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/dcerpc_stat.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2002-11-06 10:53:36 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2002-11-06 10:53:36 +0000
commitb3e0a56390fdce140228692d9ad3389bfa71c876 (patch)
tree15aec5df6848a3bc189cae2e8a4ef9fc354f49f0 /gtk/dcerpc_stat.c
parentd4e632c5ea3e69eeb958582246ec185fb7832efc (diff)
First step in creating an API to register TAPs for use with ethereal instead of hardcoding them in main.c/menu.c
This adds functions to register the command line arguments to use the API in the same way as is done for tethereal. Later it may be extended to also register the GUI/Menu entry point to ethereal using this api but that iwll be later since the changes required to menu.c are not as intrusive as the main.c command line parsing ones were. Some of the latest changes (before this checkin) has made ethereal to produce lots of GTK errors when starting up the extension windows. They were there before this checking but will be investigated. svn path=/trunk/; revision=6566
Diffstat (limited to 'gtk/dcerpc_stat.c')
-rw-r--r--gtk/dcerpc_stat.c57
1 files changed, 48 insertions, 9 deletions
diff --git a/gtk/dcerpc_stat.c b/gtk/dcerpc_stat.c
index 29527249ab..211cab8f4e 100644
--- a/gtk/dcerpc_stat.c
+++ b/gtk/dcerpc_stat.c
@@ -1,7 +1,7 @@
/* dcerpc_stat.c
* dcerpc_stat 2002 Ronnie Sahlberg
*
- * $Id: dcerpc_stat.c,v 1.1 2002/10/25 01:08:46 guy Exp $
+ * $Id: dcerpc_stat.c,v 1.2 2002/11/06 10:53:36 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -36,6 +36,7 @@
#include "epan/packet_info.h"
#include "simple_dialog.h"
#include "tap.h"
+#include "../register.h"
#include "packet-dcerpc.h"
#include "dcerpc_stat.h"
#include "../globals.h"
@@ -243,8 +244,8 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
/* When called, this function will create a new instance of gtk-dcerpcstat.
*/
-void
-gtk_dcerpcstat_init(e_uuid_t *uuid, int major, int minor, char *filter)
+static void
+gtk_dcerpcstat_init(char *optarg)
{
rpcstat_t *rs;
guint32 i, max_procs;
@@ -255,16 +256,44 @@ gtk_dcerpcstat_init(e_uuid_t *uuid, int major, int minor, char *filter)
GtkWidget *filter_label;
GtkWidget *tmp;
dcerpc_sub_dissector *procs;
+ e_uuid_t uuid;
+ int d1,d2,d3,d40,d41,d42,d43,d44,d45,d46,d47;
+ int major, minor;
+ int pos=0;
+ char *filter=NULL;
+
+ if(sscanf(optarg,"dcerpc,rtt,%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x,%d.%d%n", &d1,&d2,&d3,&d40,&d41,&d42,&d43,&d44,&d45,&d46,&d47,&major,&minor,&pos)==13){
+ uuid.Data1=d1;
+ uuid.Data2=d2;
+ uuid.Data3=d3;
+ uuid.Data4[0]=d40;
+ uuid.Data4[1]=d41;
+ uuid.Data4[2]=d42;
+ uuid.Data4[3]=d43;
+ uuid.Data4[4]=d44;
+ uuid.Data4[5]=d45;
+ uuid.Data4[6]=d46;
+ uuid.Data4[7]=d47;
+ if(pos){
+ filter=optarg+pos;
+ } else {
+ filter=NULL;
+ }
+ } else {
+ fprintf(stderr, "tethereal: invalid \"-z dcerpc,rtt,<uuid>,<major version>.<minor version>[,<filter>]\" argument\n");
+ exit(1);
+ }
+
rs=g_malloc(sizeof(rpcstat_t));
- rs->prog=dcerpc_get_proto_name(uuid, (minor<<8)|(major&0xff) );
+ rs->prog=dcerpc_get_proto_name(&uuid, (minor<<8)|(major&0xff) );
if(!rs->prog){
g_free(rs);
- fprintf(stderr,"tethereal: dcerpcstat_init() Protocol with uuid:%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x v%d.%d not supported\n",uuid->Data1,uuid->Data2,uuid->Data3,uuid->Data4[0],uuid->Data4[1],uuid->Data4[2],uuid->Data4[3],uuid->Data4[4],uuid->Data4[5],uuid->Data4[6],uuid->Data4[7],major,minor);
+ fprintf(stderr,"tethereal: dcerpcstat_init() Protocol with uuid:%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x v%d.%d not supported\n",uuid.Data1,uuid.Data2,uuid.Data3,uuid.Data4[0],uuid.Data4[1],uuid.Data4[2],uuid.Data4[3],uuid.Data4[4],uuid.Data4[5],uuid.Data4[6],uuid.Data4[7],major,minor);
exit(1);
}
- procs=dcerpc_get_proto_sub_dissector(uuid, (minor<<8)|(major&0xff) );
- rs->uuid=*uuid;
+ procs=dcerpc_get_proto_sub_dissector(&uuid, (minor<<8)|(major&0xff) );
+ rs->uuid=uuid;
rs->ver=(minor<<8)|(major&0xff);
rs->win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -404,12 +433,17 @@ static void
dcerpcstat_start_button_clicked(GtkWidget *item _U_, gpointer data _U_)
{
char *filter;
+ char str[256];
filter=(char *)gtk_entry_get_text(GTK_ENTRY(filter_entry));
if(filter[0]==0){
- filter=NULL;
+ sprintf(str, "dcerpc,rtt,%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x,%d.%d",dcerpc_uuid_program->Data1,dcerpc_uuid_program->Data2,dcerpc_uuid_program->Data3,dcerpc_uuid_program->Data4[0],dcerpc_uuid_program->Data4[1],dcerpc_uuid_program->Data4[2],dcerpc_uuid_program->Data4[3],dcerpc_uuid_program->Data4[4],dcerpc_uuid_program->Data4[5],dcerpc_uuid_program->Data4[6],dcerpc_uuid_program->Data4[7],dcerpc_version&0xff,dcerpc_version>>8);
+
+ } else {
+ sprintf(str, "dcerpc,rtt,%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x,%d.%d,%s",dcerpc_uuid_program->Data1,dcerpc_uuid_program->Data2,dcerpc_uuid_program->Data3,dcerpc_uuid_program->Data4[0],dcerpc_uuid_program->Data4[1],dcerpc_uuid_program->Data4[2],dcerpc_uuid_program->Data4[3],dcerpc_uuid_program->Data4[4],dcerpc_uuid_program->Data4[5],dcerpc_uuid_program->Data4[6],dcerpc_uuid_program->Data4[7],dcerpc_version&0xff,dcerpc_version>>8, filter);
}
- gtk_dcerpcstat_init(dcerpc_uuid_program, dcerpc_version&0xff, dcerpc_version>>8, filter);
+
+ gtk_dcerpcstat_init(str);
}
@@ -574,3 +608,8 @@ gtk_dcerpcstat_cb(GtkWidget *w _U_, gpointer d _U_)
gtk_widget_show_all(dlg);
}
+void
+register_tap_listener_gtkdcerpcstat(void)
+{
+ register_ethereal_tap("dcerpc,rtt,", gtk_dcerpcstat_init, NULL, NULL);
+}