Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-07-30 21:05:14 +0400
committerIgor Sysoev <igor@sysoev.ru>2004-07-30 21:05:14 +0400
commit6deb041b2f9b360c80bb2530b1fb55634305a55b (patch)
tree827290a3e7edaa695c0ba818cb5b771b5cb7082f /src/core
parent00d433f4f843a98fa93e21db158af9c62f7978c5 (diff)
nginx-0.0.9-2004-07-30-21:05:14 import
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ngx_inet.c2
-rw-r--r--src/core/ngx_string.c77
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, ...)
{