changeset 315:865310daf950

* include/dns_priv.h: Make dns_header structure endian dependent. * include/dns_impl.inl: Don't use htons() for bitfields <= 8 bit. Change the way setting the type and class fields in build_query() to work with big-endian.
author asl
date Thu, 29 Aug 2002 10:10:40 +0000
parents 8628bd7bd9bd
children e17d1cf55283
files packages/net/ns/dns/current/ChangeLog packages/net/ns/dns/current/include/dns_impl.inl packages/net/ns/dns/current/include/dns_priv.h
diffstat 3 files changed, 35 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/packages/net/ns/dns/current/ChangeLog
+++ b/packages/net/ns/dns/current/ChangeLog
@@ -1,3 +1,11 @@
+2002-08-29  Roland Caßebohm <roland.cassebohm@visionsystems.de>
+
+        * include/dns_priv.h: Make dns_header structure endian dependent.
+
+        * include/dns_impl.inl: Don't use htons() for bitfields <= 8 bit.
+        Change the way setting the type and class fields in build_query()
+        to work with big-endian.
+
 2002-05-30  Jesper Skov  <jskov@redhat.com>
 
 	* src/dns.c: fixed index->ptdindex oversight.
--- a/packages/net/ns/dns/current/include/dns_impl.inl
+++ b/packages/net/ns/dns/current/include/dns_impl.inl
@@ -201,7 +201,7 @@ build_query(char * msg, const char * hos
     dns_hdr = (struct dns_header *) msg;
     dns_hdr->id = htons(id++);
     dns_hdr->rd = true;
-    dns_hdr->opcode = htons(DNS_QUERY);
+    dns_hdr->opcode = DNS_QUERY;
     dns_hdr->qdcount = htons(1);
   
     /* Now the question we want to ask */
@@ -216,10 +216,10 @@ build_query(char * msg, const char * hos
     ptr += len;
 
     /* Set the type and class fields */
-    *ptr++ = htons(rr_type) & 0xff;
-    *ptr++ = htons(rr_type) >> 8;
-    *ptr++ = htons(DNS_CLASS_IN) & 0xff;
-    *ptr++ = htons(DNS_CLASS_IN) >> 8;
+    *ptr++ = (rr_type >> 8) & 0xff;
+    *ptr++ = rr_type & 0xff;
+    *ptr++ = (DNS_CLASS_IN >> 8) & 0xff;
+    *ptr++ = DNS_CLASS_IN & 0xff;
 
     len = ptr - msg;
 
@@ -279,7 +279,7 @@ parse_answer(char * msg, short rr_type)
     }
 
     if ((dns_hdr->qr != 1) || 
-        (dns_hdr->opcode != htons(DNS_QUERY)) ||
+        (dns_hdr->opcode != DNS_QUERY) ||
         (dns_hdr->rcode != DNS_REPLY_NOERR)) {
         h_errno = NO_RECOVERY;
         return NULL;
--- a/packages/net/ns/dns/current/include/dns_priv.h
+++ b/packages/net/ns/dns/current/include/dns_priv.h
@@ -51,6 +51,7 @@
 //=============================================================================
 
 struct dns_header {
+#if (CYG_BYTEORDER == CYG_LSBFIRST)
   unsigned        id :16;         /* query identification number */
   /* fields in third byte */
   unsigned        rd :1;          /* recursion desired */
@@ -69,6 +70,26 @@ struct dns_header {
   unsigned        ancount :16;    /* number of answer entries */
   unsigned        nscount :16;    /* number of authority entries */
   unsigned        arcount :16;    /* number of resource entries */
+#else
+  unsigned        id :16;         /* query identification number */
+  /* fields in third byte */
+  unsigned        qr :1;          /* response flag */
+  unsigned        opcode :4;      /* purpose of message */
+  unsigned        aa :1;          /* authoritive answer */
+  unsigned        tc :1;          /* truncated message */
+  unsigned        rd :1;          /* recursion desired */
+  /* fields in fourth byte */
+  unsigned        ra :1;          /* recursion available */
+  unsigned        unused :1;      /* unused bits */
+  unsigned        ad: 1;          /* authentic data from named */
+  unsigned        cd: 1;          /* checking disabled by resolver */
+  unsigned        rcode :4;       /* response code */
+  /* remaining bytes */
+  unsigned        qdcount :16;    /* number of question entries */
+  unsigned        ancount :16;    /* number of answer entries */
+  unsigned        nscount :16;    /* number of authority entries */
+  unsigned        arcount :16;    /* number of resource entries */
+#endif
 };
 
 struct resource_record {