aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2007-11-23 16:59:24 +0000
committerIgor Sysoev <igor@sysoev.ru>2007-11-23 16:59:24 +0000
commit36b634cdbca03d09b5a9c9353e706677c42b4688 (patch)
tree2648e7d5721895ec0d6cd93f1bc517597d8d7fdc /src
parent48bf997e10aacba1f1747248790fcb70503623d3 (diff)
downloadnginx-36b634cdbca03d09b5a9c9353e706677c42b4688.tar.gz
nginx-36b634cdbca03d09b5a9c9353e706677c42b4688.zip
ngx_inet_addr()
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_inet.c45
-rw-r--r--src/core/ngx_inet.h1
2 files changed, 46 insertions, 0 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index 5595d7cae..d7a3cd1fa 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -8,6 +8,51 @@
#include <ngx_core.h>
+/* AF_INET only */
+
+in_addr_t
+ngx_inet_addr(u_char *text, size_t len)
+{
+ u_char *p, c;
+ in_addr_t addr;
+ ngx_uint_t octet, n;
+
+ addr = 0;
+ octet = 0;
+ n = 0;
+
+ for (p = text; p < text + len; p++) {
+
+ c = *p;
+
+ if (c >= '0' && c <= '9') {
+ octet = octet * 10 + (c - '0');
+ continue;
+ }
+
+ if (c == '.' && octet < 256) {
+ addr = (addr << 8) + octet;
+ octet = 0;
+ n++;
+ continue;
+ }
+
+ return INADDR_NONE;
+ }
+
+ if (n != 3) {
+ return INADDR_NONE;
+ }
+
+ if (octet < 256) {
+ addr = (addr << 8) + octet;
+ return htonl(addr);
+ }
+
+ return INADDR_NONE;
+}
+
+
/*
* ngx_sock_ntop() and ngx_inet_ntop() may be implemented as
* "ngx_sprintf(text, "%ud.%ud.%ud.%ud", p[0], p[1], p[2], p[3])", however,
diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h
index a3d624e4d..b2444b98c 100644
--- a/src/core/ngx_inet.h
+++ b/src/core/ngx_inet.h
@@ -58,6 +58,7 @@ typedef struct {
} ngx_url_t;
+in_addr_t ngx_inet_addr(u_char *text, size_t len);
size_t ngx_sock_ntop(int family, struct sockaddr *sa, u_char *text, size_t len);
size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
ngx_int_t ngx_ptocidr(ngx_str_t *text, void *cidr);