On Jan 26, 2004, at 2:22 AM, Alastair Maw wrote:


IAX2 is a Voice-over IP protocol, supported by the open-source PBX asterisk (www.asterisk.org). It is rapidly gaining in popularity in the low-cost VoIP sector. It would be most useful for Ethereal to include support for it.

I attach an IAX2 packet dissector, plus a patch for the makefiles to compile it, in the hope that it might be included in the next release.

It didn't compile:


        packet-iax2.c: In function `dissect_iax2':
        packet-iax2.c:438: error: dereferencing pointer to incomplete type
        packet-iax2.c:438: error: type of formal parameter 1 is incomplete
        packet-iax2.c:438: error: dereferencing pointer to incomplete type
        packet-iax2.c:155: warning: `iax_ies_type' defined but not used

I suspect "struct sockaddr_in" isn't defined; perhaps, on some OSes, one of the header files that packet-iax2.c transitive-closure-of-includes defines it, but on Mac OS X 10.3.2, I suspect none of those header files does.

That is actually a Good Thing, as there isn't necessarily a guarantee that a "struct sockaddr_in" has the exact same layout on all OSes!

How is the IAX_IE_APPARENT_ADDR item defined? I.e., what does the IAX2 protocol send over the wire? Note that "a 'struct sockaddr_in'" isn't the right answer; the protocol needs to specify, for example, that it sends over the wire:

        a 1-byte address length;
        a 1-byte address family code, with one of the following values:

AF_INET: 2
AF_INET6: {whatever value it uses - note that not all OSes have the same value for AF_INET6!}
any other AF_ values it supports;


for AF_INET and AF_INET6, a 2-byte port number, in network byte order;

for AF_INET, a 4-byte IPv4 address, in network byte order, and, for AF_INET6, a 16-byte IPv6 address;

if the item it sends over the wire looks like a 4.4BSD "struct sockaddr", or perhaps the same but with "a 2-byte address family code, in network byte order" instead of the 1-byte address length and 1-byte address family code if it looks like an old-style BSD "struct sockaddr", so that hosts with different "struct sockaddr_in" structures can interoperate. (Maybe it doesn't do IPv6, but perhaps it should....)

_______________________________________________
Ethereal-dev mailing list
[EMAIL PROTECTED]
http://www.ethereal.com/mailman/listinfo/ethereal-dev

Reply via email to