Use val_to_str_const().
[obnox/wireshark/wip.git] / tap-gsm_astat.c
index a19229acbcf6e264f8647c322e620ae06a145a4f..cd523aff6712a320f2344132f8aa6d15f02db0c9 100644 (file)
@@ -3,10 +3,10 @@
  * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
  * In association with Telos Technology Inc.
  *
- * $Id: tap-gsm_astat.c,v 1.1 2003/12/09 18:49:30 guy Exp $
+ * $Id$
  *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1998 Gerald Combs
  *
  * This program is free software; you can redistribute it and/or
 #include <string.h>
 #include "epan/packet_info.h"
 #include "epan/value_string.h"
-#include "tap.h"
-#include "packet-bssap.h"
-#include "packet-gsm_a.h"
-#include "register.h"
+#include <epan/tap.h>
+#include <epan/stat_cmd_args.h>
+#include <epan/dissectors/packet-bssap.h>
+#include <epan/dissectors/packet-gsm_a_common.h>
 
 
 typedef struct _gsm_a_stat_t {
@@ -56,21 +56,20 @@ typedef struct _gsm_a_stat_t {
     int                dtap_sms_message_type[0xff];
     int                dtap_sm_message_type[0xff];
     int                dtap_ss_message_type[0xff];
+    int                dtap_tp_message_type[0xff];
+    int                sacch_rr_message_type[0xff];
 } gsm_a_stat_t;
 
 
 static int
 gsm_a_stat_packet(
     void                       *tapdata,
-    packet_info                        *pinfo,
+    packet_info                        *pinfo _U_,
     epan_dissect_t             *edt _U_,
-    void                       *data)
+    const void                 *data)
 {
     gsm_a_stat_t               *stat_p = tapdata;
-    gsm_a_tap_rec_t            *tap_p = data;
-
-
-    pinfo = pinfo;
+    const gsm_a_tap_rec_t      *tap_p = data;
 
     switch (tap_p->pdu_type)
     {
@@ -102,6 +101,9 @@ gsm_a_stat_packet(
        case PD_SS:
            stat_p->dtap_ss_message_type[tap_p->message_type]++;
            break;
+       case PD_TP:
+           stat_p->dtap_tp_message_type[tap_p->message_type]++;
+           break;
        default:
            /*
             * unsupported PD
@@ -110,6 +112,19 @@ gsm_a_stat_packet(
        }
        break;
 
+   case GSM_A_PDU_TYPE_SACCH:
+   switch (tap_p->protocol_disc)
+   {
+   case 0:
+      stat_p->sacch_rr_message_type[tap_p->message_type]++;
+      break;
+   default:
+      /* unknown Short PD */
+      break;
+   }
+   break;
+
+
     default:
        /*
         * unknown PDU type !!!
@@ -267,25 +282,56 @@ gsm_a_stat_draw(
        i++;
     }
 
+    printf("\nDTAP %s\n", gsm_a_pd_str[PD_TP]);
+    printf("Message (ID)Type                                        Number\n");
+
+    i = 0;
+    while (gsm_a_dtap_msg_tp_strings[i].strptr)
+    {
+       if (stat_p->dtap_tp_message_type[gsm_a_dtap_msg_tp_strings[i].value] > 0)
+       {
+           printf("0x%02x  %-50s%d\n",
+               gsm_a_dtap_msg_tp_strings[i].value,
+               gsm_a_dtap_msg_tp_strings[i].strptr,
+               stat_p->dtap_tp_message_type[gsm_a_dtap_msg_tp_strings[i].value]);
+       }
+
+       i++;
+    }
+
+    printf("\nSACCH Radio Resources Management messages\n");
+    printf("Message (ID)Type                                        Number\n");
+
+    i = 0;
+    while (gsm_a_sacch_msg_rr_strings[i].strptr)
+    {
+       if (stat_p->sacch_rr_message_type[gsm_a_sacch_msg_rr_strings[i].value] > 0)
+       {
+           printf("0x%02x  %-50s%d\n",
+               gsm_a_sacch_msg_rr_strings[i].value,
+               gsm_a_sacch_msg_rr_strings[i].strptr,
+               stat_p->sacch_rr_message_type[gsm_a_sacch_msg_rr_strings[i].value]);
+       }
+
+       i++;
+    }
+
     printf("==============================================================\n");
 }
 
 
 static void
-gsm_a_stat_init(char *optarg)
+gsm_a_stat_init(const char *optarg _U_,void* userdata _U_)
 {
     gsm_a_stat_t       *stat_p;
     GString            *err_p;
 
-
-    optarg = optarg;
-
     stat_p = g_malloc(sizeof(gsm_a_stat_t));
 
     memset(stat_p, 0, sizeof(gsm_a_stat_t));
 
     err_p =
-       register_tap_listener("gsm_a", stat_p, NULL,
+       register_tap_listener("gsm_a", stat_p, NULL, 0,
            NULL,
            gsm_a_stat_packet,
            gsm_a_stat_draw);
@@ -303,5 +349,5 @@ gsm_a_stat_init(char *optarg)
 void
 register_tap_listener_gsm_astat(void)
 {
-    register_ethereal_tap("gsm_a,", gsm_a_stat_init);
+    register_stat_cmd_arg("gsm_a,", gsm_a_stat_init,NULL);
 }