/* ncp_stat.c * ncp_stat 2005 Greg Morris * * $Id: ncp_stat.c 00000 2005-09-22 11:09:36Z xxx $ * * Ethereal - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_SYS_TYPES_H # include #endif #include #include #include #include #include #include #include #include "../register.h" #include "../timestats.h" #include "compat_macros.h" #include "../simple_dialog.h" #include "gui_utils.h" #include "dlg_utils.h" #include "../file.h" #include "../globals.h" #include "filter_dlg.h" #include "service_response_time_table.h" #include "../stat_menu.h" #include "../tap_dfilter_dlg.h" #include "gtkglobals.h" /* used to keep track of the statistics for an entire program interface */ typedef struct _ncpstat_t { GtkWidget *win; srt_stat_table ncp_srt_table; srt_stat_table nds_srt_table; srt_stat_table func_srt_table; srt_stat_table sss_srt_table; srt_stat_table nmas_srt_table; srt_stat_table sub_17_srt_table; srt_stat_table sub_21_srt_table; srt_stat_table sub_22_srt_table; srt_stat_table sub_23_srt_table; srt_stat_table sub_32_srt_table; srt_stat_table sub_34_srt_table; srt_stat_table sub_35_srt_table; srt_stat_table sub_36_srt_table; srt_stat_table sub_86_srt_table; srt_stat_table sub_87_srt_table; srt_stat_table sub_89_srt_table; srt_stat_table sub_90_srt_table; srt_stat_table sub_92_srt_table; srt_stat_table sub_94_srt_table; srt_stat_table sub_104_srt_table; srt_stat_table sub_111_srt_table; srt_stat_table sub_114_srt_table; srt_stat_table sub_123_srt_table; srt_stat_table sub_131_srt_table; } ncpstat_t; static const value_string ncp_group_vals[] = { { 0, "Synchronization" }, { 1, "Print" }, { 2, "File System" }, { 3, "Connection" }, { 4, "File Server Environment" }, { 5, "Message" }, { 6, "Bindery" }, { 7, "Queue Management System (QMS)" }, { 8, "Accounting" }, { 9, "Transaction Tracking" }, { 10, "AFP" }, { 11, "NCP Extension" }, { 12, "Extended Attribute" }, { 13, "Auditing" }, { 14, "Enhanced File System" }, { 15, "Migration" }, { 16, "Novell Modular Authentication Services (NMAS)" }, { 17, "Secret Store Services (SSS)" }, { 18, "Packet Burst" }, { 19, "Novell Directory Services (NDS)" }, { 20, "Time Synchronization" }, { 21, "Server Statistics" }, { 22, "Remote" } }; static const value_string sss_verb_enum[] = { { 0x00000000, "Query Server" }, { 0x00000001, "Read App Secrets" }, { 0x00000002, "Write App Secrets" }, { 0x00000003, "Add Secret ID" }, { 0x00000004, "Remove Secret ID" }, { 0x00000005, "Remove SecretStore" }, { 0x00000006, "Enumerate Secret IDs" }, { 0x00000007, "Unlock Store" }, { 0x00000008, "Set Master Password" }, { 0x00000009, "Get Service Information" }, { 0x000000ff, "Fragment"}, }; static const value_string nmas_subverb_enum[] = { { 0, "Fragmented Ping" }, { 2, "Client Put Data" }, { 4, "Client Get Data" }, { 6, "Client Get User NDS Credentials" }, { 8, "Login Store Management" }, { 10, "Writable Object Check" }, { 1242, "Message Handler" }, }; static const value_string ncp_nds_verb_vals[] = { { 1, "Resolve Name" }, { 2, "Read Entry Information" }, { 3, "Read" }, { 4, "Compare" }, { 5, "List" }, { 6, "Search Entries" }, { 7, "Add Entry" }, { 8, "Remove Entry" }, { 9, "Modify Entry" }, { 10, "Modify RDN" }, { 11, "Create Attribute" }, { 12, "Read Attribute Definition" }, { 13, "Remove Attribute Definition" }, { 14, "Define Class" }, { 15, "Read Class Definition" }, { 16, "Modify Class Definition" }, { 17, "Remove Class Definition" }, { 18, "List Containable Classes" }, { 19, "Get Effective Rights" }, { 20, "Add Partition" }, { 21, "Remove Partition" }, { 22, "List Partitions" }, { 23, "Split Partition" }, { 24, "Join Partitions" }, { 25, "Add Replica" }, { 26, "Remove Replica" }, { 27, "Open Stream" }, { 28, "Search Filter" }, { 29, "Create Subordinate Reference" }, { 30, "Link Replica" }, { 31, "Change Replica Type" }, { 32, "Start Update Schema" }, { 33, "End Update Schema" }, { 34, "Update Schema" }, { 35, "Start Update Replica" }, { 36, "End Update Replica" }, { 37, "Update Replica" }, { 38, "Synchronize Partition" }, { 39, "Synchronize Schema" }, { 40, "Read Syntaxes" }, { 41, "Get Replica Root ID" }, { 42, "Begin Move Entry" }, { 43, "Finish Move Entry" }, { 44, "Release Moved Entry" }, { 45, "Backup Entry" }, { 46, "Restore Entry" }, { 47, "Save DIB" }, { 48, "Control" }, { 49, "Remove Backlink" }, { 50, "Close Iteration" }, { 51, "Unused" }, { 52, "Audit Skulking" }, { 53, "Get Server Address" }, { 54, "Set Keys" }, { 55, "Change Password" }, { 56, "Verify Password" }, { 57, "Begin Login" }, { 58, "Finish Login" }, { 59, "Begin Authentication" }, { 60, "Finish Authentication" }, { 61, "Logout" }, { 62, "Repair Ring" }, { 63, "Repair Timestamps" }, { 64, "Create Back Link" }, { 65, "Delete External Reference" }, { 66, "Rename External Reference" }, { 67, "Create Directory Entry" }, { 68, "Remove Directory Entry" }, { 69, "Designate New Master" }, { 70, "Change Tree Name" }, { 71, "Partition Entry Count" }, { 72, "Check Login Restrictions" }, { 73, "Start Join" }, { 74, "Low Level Split" }, { 75, "Low Level Join" }, { 76, "Abort Low Level Join" }, { 77, "Get All Servers" }, { 110, "NDS Fragment" }, { 240, "NDS Ping" }, { 255, "EDirectory Call" }, { 0, NULL } }; static void ncpstat_set_title(ncpstat_t *ss) { char *title; title = g_strdup_printf("NCP Service Response Time statistics: %s", cf_get_display_name(&cfile)); gtk_window_set_title(GTK_WINDOW(ss->win), title); g_free(title); } static void ncpstat_reset(void *pss) { ncpstat_t *ss=(ncpstat_t *)pss; reset_srt_table_data(&ss->ncp_srt_table); reset_srt_table_data(&ss->func_srt_table); reset_srt_table_data(&ss->nds_srt_table); reset_srt_table_data(&ss->sss_srt_table); reset_srt_table_data(&ss->nmas_srt_table); reset_srt_table_data(&ss->sub_17_srt_table); reset_srt_table_data(&ss->sub_21_srt_table); reset_srt_table_data(&ss->sub_22_srt_table); reset_srt_table_data(&ss->sub_23_srt_table); reset_srt_table_data(&ss->sub_32_srt_table); reset_srt_table_data(&ss->sub_34_srt_table); reset_srt_table_data(&ss->sub_35_srt_table); reset_srt_table_data(&ss->sub_36_srt_table); reset_srt_table_data(&ss->sub_86_srt_table); reset_srt_table_data(&ss->sub_87_srt_table); reset_srt_table_data(&ss->sub_89_srt_table); reset_srt_table_data(&ss->sub_90_srt_table); reset_srt_table_data(&ss->sub_92_srt_table); reset_srt_table_data(&ss->sub_94_srt_table); reset_srt_table_data(&ss->sub_104_srt_table); reset_srt_table_data(&ss->sub_111_srt_table); reset_srt_table_data(&ss->sub_114_srt_table); reset_srt_table_data(&ss->sub_123_srt_table); reset_srt_table_data(&ss->sub_131_srt_table); ncpstat_set_title(ss); } static int ncpstat_packet(void *pss, packet_info *pinfo, epan_dissect_t *edt _U_, const void *prv) { ncpstat_t *ss=(ncpstat_t *)pss; const ncp_req_hash_value *request_val=prv; /* if we havent seen the request, just ignore it */ if(!request_val || request_val->ncp_rec==0){ return 0; } /* By Group */ init_srt_table_row(&ss->ncp_srt_table, request_val->ncp_rec->group, val_to_str(request_val->ncp_rec->group, ncp_group_vals, "Unknown(%u)")); add_srt_table_data(&ss->ncp_srt_table, request_val->ncp_rec->group, &request_val->req_frame_time, pinfo); /* By NCP number without subfunction*/ if (request_val->ncp_rec->subfunc==0) { init_srt_table_row(&ss->func_srt_table, request_val->ncp_rec->func, request_val->ncp_rec->name); add_srt_table_data(&ss->func_srt_table, request_val->ncp_rec->func, &request_val->req_frame_time, pinfo); } /* By Subfunction number */ if(request_val->ncp_rec->subfunc!=0){ if (request_val->ncp_rec->func==17) { init_srt_table_row(&ss->sub_17_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_17_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==21) { init_srt_table_row(&ss->sub_21_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_21_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==22) { init_srt_table_row(&ss->sub_22_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_22_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==23) { init_srt_table_row(&ss->sub_23_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_23_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==32) { init_srt_table_row(&ss->sub_32_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_32_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==34) { init_srt_table_row(&ss->sub_34_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_34_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==35) { init_srt_table_row(&ss->sub_35_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_35_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==36) { init_srt_table_row(&ss->sub_36_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_36_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==86) { init_srt_table_row(&ss->sub_86_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_86_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==87) { init_srt_table_row(&ss->sub_87_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_87_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==89) { init_srt_table_row(&ss->sub_89_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_89_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==90) { init_srt_table_row(&ss->sub_90_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_90_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==92) { init_srt_table_row(&ss->sub_92_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_92_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==94) { init_srt_table_row(&ss->sub_94_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_94_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==104) { init_srt_table_row(&ss->sub_104_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_104_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==111) { init_srt_table_row(&ss->sub_111_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_111_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==114) { init_srt_table_row(&ss->sub_114_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_114_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==123) { init_srt_table_row(&ss->sub_123_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_123_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==131) { init_srt_table_row(&ss->sub_131_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name); add_srt_table_data(&ss->sub_131_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo); } } /* By NDS verb */ if (request_val->ncp_rec->func==0x68) { init_srt_table_row(&ss->nds_srt_table, (request_val->nds_request_verb), val_to_str(request_val->nds_request_verb, ncp_nds_verb_vals, "Unknown(%u)")); add_srt_table_data(&ss->nds_srt_table, (request_val->nds_request_verb), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==0x5c) { init_srt_table_row(&ss->sss_srt_table, (request_val->req_nds_flags), val_to_str(request_val->req_nds_flags, sss_verb_enum, "Unknown(%u)")); add_srt_table_data(&ss->sss_srt_table, (request_val->req_nds_flags), &request_val->req_frame_time, pinfo); } if (request_val->ncp_rec->func==0x5e) { init_srt_table_row(&ss->nmas_srt_table, (request_val->req_nds_flags), val_to_str(request_val->req_nds_flags, nmas_subverb_enum, "Unknown(%u)")); add_srt_table_data(&ss->nmas_srt_table, (request_val->req_nds_flags), &request_val->req_frame_time, pinfo); } return 1; } static void ncpstat_draw(void *pss) { ncpstat_t *ss=(ncpstat_t *)pss; draw_srt_table_data(&ss->ncp_srt_table); draw_srt_table_data(&ss->func_srt_table); draw_srt_table_data(&ss->nds_srt_table); draw_srt_table_data(&ss->sss_srt_table); draw_srt_table_data(&ss->nmas_srt_table); draw_srt_table_data(&ss->sub_17_srt_table); draw_srt_table_data(&ss->sub_21_srt_table); draw_srt_table_data(&ss->sub_22_srt_table); draw_srt_table_data(&ss->sub_23_srt_table); draw_srt_table_data(&ss->sub_32_srt_table); draw_srt_table_data(&ss->sub_34_srt_table); draw_srt_table_data(&ss->sub_35_srt_table); draw_srt_table_data(&ss->sub_36_srt_table); draw_srt_table_data(&ss->sub_86_srt_table); draw_srt_table_data(&ss->sub_87_srt_table); draw_srt_table_data(&ss->sub_89_srt_table); draw_srt_table_data(&ss->sub_90_srt_table); draw_srt_table_data(&ss->sub_92_srt_table); draw_srt_table_data(&ss->sub_94_srt_table); draw_srt_table_data(&ss->sub_104_srt_table); draw_srt_table_data(&ss->sub_111_srt_table); draw_srt_table_data(&ss->sub_114_srt_table); draw_srt_table_data(&ss->sub_123_srt_table); draw_srt_table_data(&ss->sub_131_srt_table); } void protect_thread_critical_region(void); void unprotect_thread_critical_region(void); static void win_destroy_cb(GtkWindow *win _U_, gpointer data) { ncpstat_t *ss=(ncpstat_t *)data; protect_thread_critical_region(); remove_tap_listener(ss); unprotect_thread_critical_region(); free_srt_table_data(&ss->ncp_srt_table); free_srt_table_data(&ss->func_srt_table); free_srt_table_data(&ss->nds_srt_table); free_srt_table_data(&ss->sss_srt_table); free_srt_table_data(&ss->nmas_srt_table); free_srt_table_data(&ss->sub_17_srt_table); free_srt_table_data(&ss->sub_21_srt_table); free_srt_table_data(&ss->sub_22_srt_table); free_srt_table_data(&ss->sub_23_srt_table); free_srt_table_data(&ss->sub_32_srt_table); free_srt_table_data(&ss->sub_34_srt_table); free_srt_table_data(&ss->sub_35_srt_table); free_srt_table_data(&ss->sub_36_srt_table); free_srt_table_data(&ss->sub_86_srt_table); free_srt_table_data(&ss->sub_87_srt_table); free_srt_table_data(&ss->sub_89_srt_table); free_srt_table_data(&ss->sub_90_srt_table); free_srt_table_data(&ss->sub_92_srt_table); free_srt_table_data(&ss->sub_94_srt_table); free_srt_table_data(&ss->sub_104_srt_table); free_srt_table_data(&ss->sub_111_srt_table); free_srt_table_data(&ss->sub_114_srt_table); free_srt_table_data(&ss->sub_123_srt_table); free_srt_table_data(&ss->sub_131_srt_table); g_free(ss); } static void gtk_ncpstat_init(const char *optarg, void *userdata _U_) { ncpstat_t *ss; const char *filter=NULL; GtkWidget *label; char filter_string[256]; GString *error_string; GtkWidget *temp_page; GtkWidget *main_nb; GtkWidget *vbox; GtkWidget *bbox; GtkWidget *close_bt; if(!strncmp(optarg,"ncp,srt,",8)){ filter=optarg+8; } else { filter=NULL; } ss=g_malloc(sizeof(ncpstat_t)); ss->win=window_new(GTK_WINDOW_TOPLEVEL, "ncp-stat"); gtk_window_set_default_size(GTK_WINDOW(ss->win), 300, 400); ncpstat_set_title(ss); vbox=gtk_vbox_new(FALSE, 3); gtk_container_add(GTK_CONTAINER(ss->win), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); label=gtk_label_new("NCP Service Response Time Statistics"); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); g_snprintf(filter_string,255,"Filter:%s",filter?filter:""); label=gtk_label_new(filter_string); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); main_nb = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(vbox), main_nb, TRUE, TRUE, 0); temp_page = gtk_vbox_new(FALSE, 6); label = gtk_label_new("Groups"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); /* NCP Groups */ /* We must display TOP LEVEL Widget before calling init_srt_table() */ gtk_widget_show_all(ss->win); label=gtk_label_new("NCP by Group Type"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->ncp_srt_table, 256, temp_page, "ncp.group"); /* NCP Functions */ temp_page = gtk_vbox_new(FALSE, 6); label = gtk_label_new("Functions"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("NCP Functions without Subfunctions"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->func_srt_table, 256, temp_page, "ncp.func"); /* NCP Subfunctions */ temp_page = gtk_vbox_new(FALSE, 6); label = gtk_label_new("17"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 17"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_17_srt_table, 256, temp_page, "ncp.func==17 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("21"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 21"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_21_srt_table, 256, temp_page, "ncp.func==21 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("22"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 22"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_22_srt_table, 256, temp_page, "ncp.func==22 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("23"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 23"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_23_srt_table, 256, temp_page, "ncp.func==23 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("32"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 32"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_32_srt_table, 256, temp_page, "ncp.func==32 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("34"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 34"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_34_srt_table, 256, temp_page, "ncp.func==34 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("35"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 35"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_35_srt_table, 256, temp_page, "ncp.func==35 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("36"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 36"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_36_srt_table, 256, temp_page, "ncp.func==36 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("86"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 86"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_86_srt_table, 256, temp_page, "ncp.func==86 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("87"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 87"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_87_srt_table, 256, temp_page, "ncp.func==87 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("89"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 89 (Extended NCP's with UTF8 Support)"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_89_srt_table, 256, temp_page, "ncp.func==89 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("90"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 90"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_90_srt_table, 256, temp_page, "ncp.func==90 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("92"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 92 (Secret Store Services)"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_92_srt_table, 256, temp_page, "ncp.func==92 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("94"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 94 (Novell Modular Authentication Services)"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_94_srt_table, 256, temp_page, "ncp.func==94 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("104"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 104"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_104_srt_table, 256, temp_page, "ncp.func==104 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("111"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 111"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_111_srt_table, 256, temp_page, "ncp.func==111 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("114"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 114"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_114_srt_table, 256, temp_page, "ncp.func==114 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("123"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 123"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_123_srt_table, 256, temp_page, "ncp.func==123 && ncp.subfunc"); temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("131"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Subfunctions for NCP 131"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sub_131_srt_table, 256, temp_page, "ncp.func==131 && ncp.subfunc"); /* NDS Verbs */ temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("NDS"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("NDS Verbs"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->nds_srt_table, 256, temp_page, "ncp.ndsverb"); /* Secret Store Verbs */ temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("SSS"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("Secret Store Verbs"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->sss_srt_table, 256, temp_page, "sss.subverb"); /* NMAS Verbs */ temp_page = gtk_vbox_new(FALSE, 6); label=gtk_label_new("NMAS"); gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, label); label=gtk_label_new("NMAS Verbs"); gtk_box_pack_start(GTK_BOX(temp_page), label, FALSE, FALSE, 0); init_srt_table(&ss->nmas_srt_table, 256, temp_page, "nmas.subverb"); /* Register the tap listener */ error_string=register_tap_listener("ncp_srt", ss, filter, ncpstat_reset, ncpstat_packet, ncpstat_draw); if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, error_string->str); g_string_free(error_string, TRUE); g_free(ss); return; } /* Button row. */ bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); window_set_cancel_button(ss->win, close_bt, window_cancel_button_cb); SIGNAL_CONNECT(ss->win, "delete_event", window_delete_event_cb, NULL); SIGNAL_CONNECT(ss->win, "destroy", win_destroy_cb, ss); gtk_widget_show_all(ss->win); window_present(ss->win); cf_redissect_packets(&cfile); } static tap_dfilter_dlg ncp_stat_dlg = { "NCP SRT Statistics", "ncp,srt", gtk_ncpstat_init, -1 }; void register_tap_listener_gtkncpstat(void) { register_dfilter_stat(&ncp_stat_dlg, "NCP", REGISTER_STAT_GROUP_RESPONSE_TIME); }