aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_inet.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-05-25 15:28:46 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-05-25 15:28:46 +0000
commit822834e2274e6b2946ee758981ba0c261cedc69e (patch)
treee23bc338faf7188d8ec8fea941d812fa312af20f /src/core/ngx_inet.c
parent01b5eab38147e84a1cde453059279c5ad7ad2293 (diff)
downloadnginx-822834e2274e6b2946ee758981ba0c261cedc69e.tar.gz
nginx-822834e2274e6b2946ee758981ba0c261cedc69e.zip
nginx-0.0.3-2004-05-25-19:28:46 import
Diffstat (limited to 'src/core/ngx_inet.c')
-rw-r--r--src/core/ngx_inet.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index fd67b7642..5c032a2d0 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -164,3 +164,38 @@ size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len)
"%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
#endif
}
+
+
+/* AF_INET only */
+
+ngx_int_t ngx_ptocidr(ngx_str_t *text, void *cidr)
+{
+ ngx_uint_t i;
+ ngx_inet_cidr_t *in_cidr;
+
+ in_cidr = cidr;
+
+ for (i = 0; i < text->len; i++) {
+ if (text->data[i] == '/') {
+ break;
+ }
+ }
+
+ if (i == text->len) {
+ return NGX_ERROR;
+ }
+
+ text->data[i] = '\0';
+ in_cidr->addr = inet_addr((char *) text->data);
+ text->data[i] = '/';
+ if (in_cidr->addr == INADDR_NONE) {
+ return NGX_ERROR;
+ }
+
+ in_cidr->mask = ngx_atoi(&text->data[i + 1], text->len - (i + 1));
+ if (in_cidr->mask == (in_addr_t) NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ return NGX_OK;
+}