Author: mmichelson
Date: Thu Mar 26 14:40:45 2015
New Revision: 433493

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=433493
Log:
Add some comments to NAPTR parsing code where necessary.


Modified:
    team/group/dns_naptr/main/dns_naptr.c

Modified: team/group/dns_naptr/main/dns_naptr.c
URL: 
http://svnview.digium.com/svn/asterisk/team/group/dns_naptr/main/dns_naptr.c?view=diff&rev=433493&r1=433492&r2=433493
==============================================================================
--- team/group/dns_naptr/main/dns_naptr.c (original)
+++ team/group/dns_naptr/main/dns_naptr.c Thu Mar 26 14:40:45 2015
@@ -86,6 +86,10 @@
                }
        }
 
+       /*
+        * Multiple flags are allowed, but you cannot mix the
+        * S, A, U, and P flags together.
+        */
        for (i = 0; i < flags_size; ++i) {
                if (!isalnum(flags[i])) {
                        return FLAGS_INVALID;
@@ -133,6 +137,11 @@
                return 0;
        }
 
+       /* Services are broken into sections divided by a + sign. Each section
+        * must start with an alphabetic character, and then can only contain
+        * alphanumeric characters. The size of any section is limited to
+        * 32 characters
+        */
        while (1) {
                char *plus_pos = memchr(current_pos, '+', end_of_services - 
current_pos);
                uint8_t current_size = plus_pos ? plus_pos - current_pos : 
end_of_services - current_pos;
@@ -167,7 +176,7 @@
  * A NAPTR regexp is structured like so
  * /pattern/repl/FLAGS
  *
- * This ensures that the flags on the regex are valid. Regexp
+ * This ensures that the flags on the regexp are valid. Regexp
  * flags can either be zero or one character long. If the flags
  * are one character long, that character must be "i" to indicate
  * the regex evaluation is case-insensitive.
@@ -234,8 +243,8 @@
 
                ast_assert(backslash_pos < end - 1);
 
-               /* XXX RFC 3402 is unclear about whether a backslash-escaped 
backslash is
-                * acceptable.
+               /* XXX RFC 3402 is unclear about whether other 
backslash-escaped characters
+                * (such as a backslash-escaped backslash) are legal
                 */
                if (!strchr("12345689", backslash_pos[1]) && backslash_pos[1] 
!= delim) {
                        return -1;
@@ -271,6 +280,7 @@
        regex_t reg;
        int res;
 
+       /* regcomp requires a NULL-terminated string */
        memcpy(pattern_str, pattern, pattern_size);
        pattern_str[pattern_size] = '\0';
 
@@ -312,6 +322,14 @@
                return 0;
        }
 
+       /* The delimiter will be a ! or / in most cases, but the rules allow
+        * for the delimiter to be nearly any character. It cannot be 'i' 
because
+        * the delimiter cannot be the same as regexp flags. The delimiter 
cannot
+        * be 1-9 because the delimiter cannot be a backreference number. RFC
+        * 2915 specified that backslash was also not allowed as a delimiter, 
but
+        * RFC 3402 does not say this. We've gone ahead and made the character
+        * illegal for our purposes.
+        */
        delim = *ptr;
        if (strchr("123456789\\i", delim)) {
                return -1;
@@ -417,6 +435,12 @@
        end_of_record = ptr + size;
 
        /* ORDER */
+       /* This assignment takes a big-endian 16-bit value and stores it in the
+        * machine's native byte order. Using this method allows us to avoid 
potential
+        * alignment issues in case the order is not on a short-addressable 
boundary.
+        * See 
http://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html for
+        * more information
+        */
        order = ((unsigned char)(ptr[1]) << 0) | ((unsigned char)(ptr[0]) << 8);
        ptr += 2;
 


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to