Ethereal-dev: Re: [Ethereal-dev] It was "the Thing", now is a plugin called mate

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: "Martin Regner" <martin.regner@xxxxxxxxx>
Date: Fri, 19 Nov 2004 20:55:02 +0100
>  Here's "the thing" renamed as "mate" as a plugin.
>


1).

You are using strtof.

mate_base.c
mate_base.c(1672) : warning C4013: 'strtof' undefined; assuming extern returning int
mate_base.c(1672) : warning C4244: '=' : conversion from 'int ' to 'float ', possible loss of data

mate_base.obj : error LNK2001: unresolved external symbol _strtof
mate_util.obj : error LNK2001: unresolved external symbol _strtof

I replaced strtof with strtod.


2).

Visual C++ dosn't like that you have a typedef after scs_init(&avp_strings);

mate_util.c
mate_util.c(262) : error C2143: syntax error : missing ';' before '<class-head>'
mate_util.c(264) : error C2275: 'AVPN' : illegal use of this type as an expression
        mate_util.h(82) : see declaration of 'AVPN'


I changed:
=======

 scs_init(&avp_strings);

 typedef union _any_avp_type {
  AVP avp;
  AVPN avpn;
  AVPL avpl;
  LoAL loal;
  LoALnode loaln;
 } any_avp_type;

to:
====

 typedef union _any_avp_type {
  AVP avp;
  AVPN avpn;
  AVPL avpl;
  LoAL loal;
  LoALnode loaln;
 } any_avp_type;

scs_init(&avp_strings);



3).

I didn't get the plugin to build.

        link -dll /out:mate.dll /NOLOGO /INCREMENTAL:no /MACHINE:I386 /DEBUG packet-mate.obj ..\plugin_api.obj
C:\ethereal-win32-libs\glib\lib\glib-2.0.lib  C:\ethereal-win32-libs\glib\lib\gmodule-2.
0.lib  C:\ethereal-win32-libs\glib\lib\gobject-2.0.lib
   Creating library mate.lib and object mate.exp
packet-mate.obj : error LNK2001: unresolved external symbol _initialize_mate
packet-mate.obj : error LNK2001: unresolved external symbol _proto_tree_add_text
packet-mate.obj : error LNK2001: unresolved external symbol _proto_tree_add_string_format
packet-mate.obj : error LNK2001: unresolved external symbol _proto_tree_add_uint_format
packet-mate.obj : error LNK2001: unresolved external symbol _proto_item_add_subtree
:

I didn't try so much to get this to work.
I changed MATE to be a built in dissector instead of a plugin.

There is at least one advantage with making it a built-in dissector instead of a plugin.

I think that it would be good to have a Statistics/MATE menu-item and to be able to get something similar to
the "Statistics/H.323Conversations" and "Statistics/Conversations" features but listing all the MATE
sessions/legs together with the relevant attributes for each session/leg.

I have not yet started to look on how it would be possible to implement something like this based on
the current MATE code.

If I select to show all Sessions of type "voipcall" I could maybe get something like:
Session         startframe   stopframe   called         calling          guid
sip_callid
voipcall:1      1002          1138          1232332    6109938     87:e5:23:88:16:57:d6:40:af:07:37:48:23:f3:ef:89     -
voipcall:2      1634          1873          1232444    6109938     17:15:23:28:26:27:26:20:2f:17:31:41:13:13:1f:19   -
voipcall:3      1675          1752          1232332    6109292     -
geggeg152543434@xxxxxxxxxxxxxx

What columns will be shown for each type of session/leg will be dependent on the attributes defined in the MATE
configuration file(s).

If I select to see all Legs of type "q931" I could maybe get something like:
Leg              startframe    stopframe    callref         addr                addr
q931:1         1002           1138            00:0b         10.10.21.10   10.22.12.10
q931:2         1634           1873            00:13         10.10.21.10   10.22.12.10


4).

I still get Ethereal to crash when I load several captures.
I get a crash in extract_first_avp(..) on the line:
 node = avpl->null.next;

The back trace is:
extract_first_avp(_avp_list * 0x01e01474) line 600 + 3 bytes
delete_avpl(_avp_list * 0x01e01474, int 1) line 676 + 9 bytes
free_avpl(void * 0x01825588, void * 0x01e01474, void * 0x01825588) line 1482 + 11 bytes
LIBGLIB-2.0-0! 0032db6d()

I will try to look more into why I get these crashes.
I think that it was the same crash I got also with the previous code.