diff options
author | Igor Sysoev <igor@sysoev.ru> | 2004-07-30 21:05:14 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2004-07-30 21:05:14 +0400 |
commit | 6deb041b2f9b360c80bb2530b1fb55634305a55b (patch) | |
tree | 827290a3e7edaa695c0ba818cb5b771b5cb7082f /src/core | |
parent | 00d433f4f843a98fa93e21db158af9c62f7978c5 (diff) |
nginx-0.0.9-2004-07-30-21:05:14 import
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/ngx_inet.c | 2 | ||||
-rw-r--r-- | src/core/ngx_string.c | 77 |
2 files changed, 78 insertions, 1 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c index 68be0ef02..910846f02 100644 --- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -206,7 +206,7 @@ ngx_int_t ngx_ptocidr(ngx_str_t *text, void *cidr) return NGX_OK; } - in_cidr->mask = (ngx_uint_t) (0 - (1 << (32 - m))); + in_cidr->mask = htonl((ngx_uint_t) (0 - (1 << (32 - m)))); return NGX_OK; } diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c index 1e6ee6404..f14040f3f 100644 --- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -123,6 +123,83 @@ void ngx_md5_text(u_char *text, u_char *md5) } +ngx_int_t ngx_encode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) +{ + u_char *d, *s; + ngx_uint_t i; + static u_char basis64[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + if (!(d = ngx_palloc(pool, ((src->len + 2) / 3) * 4 + 1))) { + return NGX_ERROR; + } + + dst->data = d; + s = src->data; + + for (i = 0; i < src->len - 2; i += 3) { + *d++ = basis64[(s[i] >> 2) & 0x3f]; + *d++ = basis64[((s[i] & 3) << 4) | (s[i + 1] >> 4)]; + *d++ = basis64[((s[i + 1] & 0x0f) << 2) | (s[i + 2] >> 6)]; + *d++ = basis64[s[i + 2] & 0x3f]; + } + + if (i < src->len) { + *d++ = basis64[(s[i] >> 2) & 0x3f]; + + if (i == src->len - 1) { + *d++ = basis64[(s[i] & 3) << 4]; + *d++ = '='; + + } else { + *d++ = basis64[((s[i] & 3) << 4) | (s[i + 1] >> 4)]; + *d++ = basis64[(s[i + 1] & 0x0f) << 2]; + } + + *d++ = '='; + } + + dst->len = d - dst->data; + *d++ = '\0'; + + return NGX_OK; +} + + +ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) +{ + u_char *d, *s, c; + + if (!(d = ngx_palloc(pool, ((src->len + 3) / 4) * 3))) { + return NGX_ABORT; + } + + dst->data = d; + s = src->data; + + if (*s == '+') { + c = 62; + + } else if (*s == '/') { + c = 63; + + } else if (*s >= '0' && *s <= '9') { + c = *s - '0' + 52; + + } else if (*s >= 'A' && *s <= 'Z') { + c = *s - 'A'; + + } else if (*s >= 'a' && *s <= 'z') { + c = *s - 'a' + 26; + + } else { + return NGX_ERROR; + } + + return NGX_OK; +} + + #if 0 char *ngx_psprintf(ngx_pool_t *p, const char *fmt, ...) { |