add uh_addr_rfc1918()
authorFelix Fietkau <nbd@openwrt.org>
Wed, 2 Jan 2013 15:12:02 +0000 (16:12 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 2 Jan 2013 15:12:02 +0000 (16:12 +0100)
uhttpd.h
utils.c
utils.h

index cb56fcdc5b6a940f34abf5554558f982461e7d76..f47c7430fc155eef2587061303d4d56c297e7f53 100644 (file)
--- a/uhttpd.h
+++ b/uhttpd.h
@@ -136,15 +136,6 @@ struct dispatch_handler {
        void (*handle_request)(struct client *cl, const char *url, struct path_info *pi);
 };
 
-struct uh_addr {
-       uint8_t family;
-       uint16_t port;
-       union {
-               struct in_addr in;
-               struct in6_addr in6;
-       };
-};
-
 struct client {
        struct list_head list;
        int id;
diff --git a/utils.c b/utils.c
index d2ad296bcfe7f59bfc24c7d89fbe8bff8c68cac7..742e2809559b414324fab5473bc4066f10a22ec5 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -217,3 +217,18 @@ char *uh_split_header(char *str)
 
        return val;
 }
+
+bool uh_addr_rfc1918(struct uh_addr *addr)
+{
+       uint32_t a;
+
+       if (addr->family != AF_INET)
+               return false;
+
+       a = htonl(addr->in.s_addr);
+       return ((a >= 0x0A000000) && (a <= 0x0AFFFFFF)) ||
+              ((a >= 0xAC100000) && (a <= 0xAC1FFFFF)) ||
+              ((a >= 0xC0A80000) && (a <= 0xC0A8FFFF));
+
+       return 0;
+}
diff --git a/utils.h b/utils.h
index 8f67823a8ea9e92c4e85b718ba9fe618a57633b7..a53c256508c2d4bab5797d3de72ce694fddd730c 100644 (file)
--- a/utils.h
+++ b/utils.h
 #include <stdlib.h>
 #include <unistd.h>
 
+struct uh_addr {
+       uint8_t family;
+       uint16_t port;
+       union {
+               struct in_addr in;
+               struct in6_addr in6;
+       };
+};
+
 #define min(x, y) (((x) < (y)) ? (x) : (y))
 #define max(x, y) (((x) > (y)) ? (x) : (y))
 
@@ -57,5 +66,6 @@ int uh_urlencode(char *buf, int blen, const char *src, int slen);
 int uh_b64decode(char *buf, int blen, const void *src, int slen);
 bool uh_path_match(const char *prefix, const char *url);
 char *uh_split_header(char *str);
+bool uh_addr_rfc1918(struct uh_addr *addr);
 
 #endif