Add Linux AF_ values to epan/aftypes.h; IAX2 implicitly uses them.
authorGuy Harris <guy@alum.mit.edu>
Fri, 8 Aug 2008 20:07:23 +0000 (20:07 -0000)
committerGuy Harris <guy@alum.mit.edu>
Fri, 8 Aug 2008 20:07:23 +0000 (20:07 -0000)
Have the IAX2 dissector include <epan/aftypes.h> and use the Linux AF_
values from it.  Point to the IAX2 I-D, and add some clarifying
comments.

svn path=/trunk/; revision=25962

epan/aftypes.h
epan/dissectors/packet-iax2.c

index ba99a45631b7e4322cbb6ff0f86e54840f51a7c8..4a6bf56b935973f3db8f5dc1989cb9989d5860e5 100644 (file)
@@ -41,6 +41,10 @@ extern "C" {
 #define BSD_AF_INET6_FREEBSD   28
 #define BSD_AF_INET6_DARWIN    30
 
+/* Linux AF_ values. */
+#define LINUX_AF_INET          2
+#define LINUX_AF_INET6         10
+
 /* Winsock AF_ values. */
 #define WINSOCK_AF_INET                2
 #define WINSOCK_AF_IPX         6
index 9bc0a336b8cd99d62ed68efab72cbfc682bdbbe6..167c643e797f94affa5feaae9ddf3cb08cdbc8c3 100644 (file)
@@ -6,7 +6,11 @@
  * Copyright 2003 Alastair Maw
  *
  * IAX2 is a VoIP protocol for the open source PBX Asterisk. Please see
- * http://www.asterisk.org for more information.
+ * http://www.asterisk.org for more information; see
+ *
+ *     http://www.ietf.org/internet-drafts/draft-guy-iax-04.txt
+ *
+ * for the current Internet-Draft for IAX2.
  *
  * $Id$
  *
@@ -42,6 +46,7 @@
 #include <epan/to_str.h>
 #include <epan/emem.h>
 #include <epan/reassemble.h>
+#include <epan/aftypes.h>
 
 #include "packet-iax2.h"
 #include <epan/iax2_codec_type.h>
@@ -1110,13 +1115,18 @@ static guint32 dissect_ies (tvbuff_t * tvb, guint32 offset,
         break;
 
       case IAX_IE_APPARENT_ADDR:
-        /* the family is little-endian. That's probably broken, given
-           everything else is big-endian, but that's not our fault.
-        */
+        /* The IAX2 I-D says that the "apparent address" structure
+           "is the same as the linux struct sockaddr_in", without
+           bothering to note that the address family field is in
+           *host* byte order in that structure (the I-D seems to be
+           assuming that "everything is a Vax^Wx86 or x86-64" with
+           the address family field being little-endian).
+          
+           This means the address family values are the Linux
+           address family values. */
         apparent_addr_family = tvb_get_letohs(tvb, offset+2);
         switch( apparent_addr_family ) {
-          /* these come from linux/socket.h */
-          case 2: /* AF_INET */
+          case LINUX_AF_INET:
             /* IAX is always over UDP */
             ie_data->peer_ptype = PT_UDP;
             ie_data->peer_port = tvb_get_ntohs(tvb, offset+4);
@@ -1200,15 +1210,20 @@ static guint32 dissect_ies (tvbuff_t * tvb, guint32 offset,
          ie_item = proto_tree_add_text(ies_tree, tvb, offset + 2, 16, "Apparent Address");
          sockaddr_tree = proto_item_add_subtree(ie_item, ett_iax2_ies_apparent_addr);
 
-         /* the family is little-endian. That's probably broken, given
-            everything else is big-endian, but that's not our fault.
-         */
+          /* The IAX2 I-D says that the "apparent address" structure
+             "is the same as the linux struct sockaddr_in", without
+             bothering to note that the address family field is in
+             *host* byte order in that structure (the I-D seems to be
+             assuming that "everything is a Vax^Wx86 or x86-64" with
+             the address family field being little-endian).
+            
+             This means the address family values are the Linux
+             address family values. */
          apparent_addr_family = tvb_get_letohs(tvb, offset+2);
          proto_tree_add_uint(sockaddr_tree, hf_IAX_IE_APPARENTADDR_SINFAMILY, tvb, offset + 2, 2, apparent_addr_family);
              
          switch(  apparent_addr_family ) {
-           /* these come from linux/socket.h */
-           case 2: /* AF_INET */
+           case LINUX_AF_INET:
            {
              guint32 addr;
              proto_tree_add_uint(sockaddr_tree, hf_IAX_IE_APPARENTADDR_SINPORT, tvb, offset + 4, 2, ie_data->peer_port);