From Ivan Lawrow: Added IEEE 802.15.4-2003 AES-CCM security modes
[obnox/wireshark/wip.git] / tap-sctpchunkstat.c
index 8cdf8e5bdc90f999a72197119f7590b2aea5fb64..fcb82852408b0ebb2404adc563b8f2ee53fac142 100644 (file)
@@ -1,11 +1,11 @@
 /* tap_sctpchunkstat.c
- * SCTP chunk counter for ethereal
+ * SCTP chunk counter for wireshark
  * Copyright 2005 Oleg Terletsky <oleg.terletsky@comverse.com>
  *
- * $Id:$
+ * $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
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
-/* With MSVC and a libethereal.dll this file needs to import some variables 
-   in a special way. Therefore _NEED_VAR_IMPORT_ is defined. */  
-#define _NEED_VAR_IMPORT_
-
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
 #include "epan/packet_info.h"
 #include "epan/addr_resolv.h"
 #include <epan/tap.h>
+#include <epan/stat_cmd_args.h>
 #include "epan/value_string.h"
-#include "register.h"
 #include <epan/dissectors/packet-sctp.h>
+#include <epan/to_str.h>
 
 typedef struct sctp_ep {
        struct sctp_ep* next;
@@ -88,10 +85,6 @@ typedef struct _sctpstat_t {
 #define CHUNK_TYPE_OFFSET 0
 #define CHUNK_TYPE(x)(tvb_get_guint8((x), CHUNK_TYPE_OFFSET))
 
-
-extern gchar* address_to_str(const address *);
-
-
 static void
 sctpstat_reset(void *phs)
 {
@@ -99,7 +92,7 @@ sctpstat_reset(void *phs)
        sctp_ep_t* list = (sctp_ep_t*)sctp_stat->ep_list;
        sctp_ep_t* tmp = NULL;
        guint16 chunk_type;
-       
+
        if(!list)
                return;
 
@@ -111,7 +104,8 @@ sctpstat_reset(void *phs)
 }
 
 
-sctp_ep_t* alloc_sctp_ep(struct _sctp_info *si)
+static sctp_ep_t*
+alloc_sctp_ep(const struct _sctp_info *si)
 {
        sctp_ep_t* ep;
        guint16 chunk_type;
@@ -121,7 +115,7 @@ sctp_ep_t* alloc_sctp_ep(struct _sctp_info *si)
 
        if (!(ep = g_malloc(sizeof(sctp_ep_t))))
                return NULL;
-       
+
        COPY_ADDRESS(&ep->src,&si->ip_src);
        COPY_ADDRESS(&ep->dst,&si->ip_dst);
        ep->sport = si->sport;
@@ -133,7 +127,7 @@ sctp_ep_t* alloc_sctp_ep(struct _sctp_info *si)
 }
 
 
-       
+
 
 static int
 sctpstat_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *phi)
@@ -141,15 +135,15 @@ sctpstat_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, cons
 
        sctpstat_t *hs=(sctpstat_t *)phs;
        sctp_ep_t *tmp = NULL, *te = NULL;
-       struct _sctp_info *si = (struct _sctp_info *) phi;
+       const struct _sctp_info *si = (const struct _sctp_info *) phi;
        guint32 tvb_number;
        guint8 chunk_type;
-       
+
        if (!hs)
                return (0);
-               
+
        hs->number_of_packets++;
-       
+
        if(!hs->ep_list) {
                hs->ep_list = alloc_sctp_ep(si);
                te = hs->ep_list;
@@ -176,7 +170,7 @@ sctpstat_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, cons
        if(!te)
                return (0);
 
-       
+
        if (si->number_of_tvbs > 0) {
                chunk_type = CHUNK_TYPE(si->tvb[0]);
                if ((chunk_type == SCTP_INIT_CHUNK_ID) ||
@@ -202,11 +196,11 @@ sctpstat_draw(void *phs)
        printf("---------------------------------------------------------------------------------------------------------------------------------------\n");
        printf("|   Source IP   |PortA|    Dest. IP   |PortB|  DATA  |  SACK  |  HBEAT |HBEATACK|  INIT  | INITACK| COOKIE |COOKIACK| ABORT  |  ERROR |\n");
        printf("---------------------------------------------------------------------------------------------------------------------------------------\n");
-       
+
        for(tmp = list ; tmp ; tmp=tmp->next) {
                printf("|%15s|%5u|%15s|%5u|%8u|%8u|%8u|%8u|%8u|%8u|%8u|%8u|%8u|%8u|\n",
-                      address_to_str(&tmp->src),tmp->sport,
-                      address_to_str(&tmp->dst),tmp->dport,
+                      ep_address_to_str(&tmp->src),tmp->sport,
+                      ep_address_to_str(&tmp->dst),tmp->dport,
                       tmp->chunk_count[SCTP_DATA_CHUNK_ID],
                       tmp->chunk_count[SCTP_SACK_CHUNK_ID],
                       tmp->chunk_count[SCTP_HEARTBEAT_CHUNK_ID],
@@ -223,34 +217,29 @@ sctpstat_draw(void *phs)
 
 
 static void
-sctpstat_init(char *optarg)
+sctpstat_init(const char *optarg, void* userdata _U_)
 {
        sctpstat_t *hs;
-       char *filter=NULL;
        GString *error_string;
 
+       hs = (sctpstat_t *)g_malloc(sizeof(sctpstat_t));
        if(!strncmp(optarg,"sctp,stat,",11)){
-               filter=optarg+11;
+               hs->filter=g_strdup(optarg+11);
        } else {
-               filter=g_malloc(1);
-               *filter='\0';
+               hs->filter=NULL;
        }
-
-       hs = g_malloc(sizeof(sctpstat_t));
-       hs->filter=g_malloc(strlen(filter)+1);
        hs->ep_list = NULL;
        hs->number_of_packets = 0;
-       strcpy(hs->filter, filter);
 
        sctpstat_reset(hs);
 
-       error_string=register_tap_listener("sctp", hs, filter, NULL, sctpstat_packet, sctpstat_draw);
+       error_string=register_tap_listener("sctp", hs, hs->filter, 0, NULL, sctpstat_packet, sctpstat_draw);
        if(error_string){
                /* error, we failed to attach to the tap. clean up */
                g_free(hs->filter);
                g_free(hs);
 
-               fprintf(stderr, "tethereal: Couldn't register sctp,stat tap: %s\n",
+               fprintf(stderr, "tshark: Couldn't register sctp,stat tap: %s\n",
                    error_string->str);
                g_string_free(error_string, TRUE);
                exit(1);
@@ -261,5 +250,5 @@ sctpstat_init(char *optarg)
 void
 register_tap_listener_sctpstat(void)
 {
-       register_ethereal_tap("sctp,stat", sctpstat_init);
+       register_stat_cmd_arg("sctp,stat", sctpstat_init,NULL);
 }