summaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/nginx.c59
-rw-r--r--src/core/ngx_string.c33
-rw-r--r--src/core/ngx_string.h8
-rw-r--r--src/core/ngx_times.c53
-rw-r--r--src/core/ngx_times.h1
5 files changed, 62 insertions, 92 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 17071c1c5..6d6103c0e 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -140,65 +140,6 @@ int main(int argc, char *const *argv)
return 1;
}
-{
- ngx_str_t d, s;
-
- s.data = "12";
- s.len = sizeof("12") - 1;
-
- if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) {
- ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed");
- } else {
- ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data);
- }
-
- s.data = "123";
- s.len = sizeof("123") - 1;
-
- if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) {
- ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed");
- } else {
- ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data);
- }
-
- s.data = "1234";
- s.len = sizeof("1234") - 1;
-
- if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) {
- ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed");
- } else {
- ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data);
- }
-
- s.data = "12345";
- s.len = sizeof("12345") - 1;
-
- if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) {
- ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed");
- } else {
- ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data);
- }
-
- s.data = "123456";
- s.len = sizeof("123456") - 1;
-
- if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) {
- ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed");
- } else {
- ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data);
- }
-
- s.data = "12345678901234567890";
- s.len = sizeof("12345678901234567890") - 1;
-
- if (ngx_encode_base64(init_cycle.pool, &s, &d) != NGX_OK) {
- ngx_log_error(NGX_LOG_ERR, log, 0, "ngx_encode_base64() failed");
- } else {
- ngx_log_error(NGX_LOG_NOTICE, log, 0, "BASE64: %d:\"%s\"", d.len, d.data);
- }
-
-}
-
if (ngx_add_inherited_sockets(&init_cycle) == NGX_ERROR) {
return 1;
}
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index 7231651c0..4cdb267dd 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -123,20 +123,16 @@ 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)
+void ngx_encode_base64(ngx_str_t *src, ngx_str_t *dst)
{
u_char *d, *s;
size_t len;
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;
len = src->len;
+ s = src->data;
+ d = dst->data;
while (len > 2) {
*d++ = basis64[(s[0] >> 2) & 0x3f];
@@ -164,13 +160,10 @@ ngx_int_t ngx_encode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst)
}
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)
+ngx_int_t ngx_decode_base64(ngx_str_t *src, ngx_str_t *dst)
{
size_t len;
u_char *d, *s;
@@ -207,33 +200,27 @@ ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst)
return NGX_ERROR;
}
- if (!(d = ngx_palloc(pool, ((len + 3) / 4) * 3 + 1))) {
- return NGX_ABORT;
- }
-
- dst->data = d;
-
s = src->data;
+ d = dst->data;
while (len > 3) {
- *d++ = basis64[s[0]] << 2 | basis64[s[1]] >> 4;
- *d++ = basis64[s[1]] << 4 | basis64[s[2]] >> 2;
- *d++ = basis64[s[2]] << 6 | basis64[s[3]];
+ *d++ = (u_char) (basis64[s[0]] << 2 | basis64[s[1]] >> 4);
+ *d++ = (u_char) (basis64[s[1]] << 4 | basis64[s[2]] >> 2);
+ *d++ = (u_char) (basis64[s[2]] << 6 | basis64[s[3]]);
s += 4;
len -= 4;
}
if (len > 1) {
- *d++ = basis64[s[0]] << 2 | basis64[s[1]] >> 4;
+ *d++ = (u_char) (basis64[s[0]] << 2 | basis64[s[1]] >> 4);
}
if (len > 2) {
- *d++ = basis64[s[1]] << 4 | basis64[s[2]] >> 2;
+ *d++ = (u_char) (basis64[s[1]] << 4 | basis64[s[2]] >> 2);
}
dst->len = d - dst->data;
- *d++ = '\0';
return NGX_OK;
}
diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h
index 8a0212685..6b22a67ba 100644
--- a/src/core/ngx_string.h
+++ b/src/core/ngx_string.h
@@ -71,8 +71,12 @@ ngx_int_t ngx_hextoi(u_char *line, size_t n);
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);
-ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst);
+
+#define ngx_base64_encoded_length(len) (((len + 2) / 3) * 4)
+#define ngx_base64_decoded_length(len) (((len + 3) / 4) * 3)
+
+void ngx_encode_base64(ngx_str_t *src, ngx_str_t *dst);
+ngx_int_t ngx_decode_base64(ngx_str_t *src, ngx_str_t *dst);
#define ngx_qsort qsort
diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c
index df73a1dde..2c9985f20 100644
--- a/src/core/ngx_times.c
+++ b/src/core/ngx_times.c
@@ -214,14 +214,51 @@ size_t ngx_http_time(u_char *buf, time_t t)
ngx_gmtime(t, &tm);
return ngx_snprintf((char *) buf, sizeof("Mon, 28 Sep 1970 06:00:00 GMT"),
- "%s, %02d %s %4d %02d:%02d:%02d GMT",
- week[tm.ngx_tm_wday],
- tm.ngx_tm_mday,
- months[tm.ngx_tm_mon - 1],
- tm.ngx_tm_year,
- tm.ngx_tm_hour,
- tm.ngx_tm_min,
- tm.ngx_tm_sec);
+ "%s, %02d %s %4d %02d:%02d:%02d GMT",
+ week[tm.ngx_tm_wday],
+ tm.ngx_tm_mday,
+ months[tm.ngx_tm_mon - 1],
+ tm.ngx_tm_year,
+ tm.ngx_tm_hour,
+ tm.ngx_tm_min,
+ tm.ngx_tm_sec);
+}
+
+
+size_t ngx_http_cookie_time(u_char *buf, time_t t)
+{
+ ngx_tm_t tm;
+
+ ngx_gmtime(t, &tm);
+
+ /*
+ * Netscape 3.x does not understand 4-digit years at all and
+ * 2-digit years more than "37"
+ */
+
+ if (tm.ngx_tm_year > 2037) {
+ return ngx_snprintf((char *) buf,
+ sizeof("Mon, 28-Sep-1970 06:00:00 GMT"),
+ "%s, %02d-%s-%d %02d:%02d:%02d GMT",
+ week[tm.ngx_tm_wday],
+ tm.ngx_tm_mday,
+ months[tm.ngx_tm_mon - 1],
+ tm.ngx_tm_year,
+ tm.ngx_tm_hour,
+ tm.ngx_tm_min,
+ tm.ngx_tm_sec);
+ } else {
+ return ngx_snprintf((char *) buf,
+ sizeof("Mon, 28-Sep-70 06:00:00 GMT"),
+ "%s, %02d-%s-%02d %02d:%02d:%02d GMT",
+ week[tm.ngx_tm_wday],
+ tm.ngx_tm_mday,
+ months[tm.ngx_tm_mon - 1],
+ tm.ngx_tm_year % 100,
+ tm.ngx_tm_hour,
+ tm.ngx_tm_min,
+ tm.ngx_tm_sec);
+ }
}
diff --git a/src/core/ngx_times.h b/src/core/ngx_times.h
index b5b6eb60a..426040577 100644
--- a/src/core/ngx_times.h
+++ b/src/core/ngx_times.h
@@ -9,6 +9,7 @@
void ngx_time_init();
void ngx_time_update(time_t s);
size_t ngx_http_time(u_char *buf, time_t t);
+size_t ngx_http_cookie_time(u_char *buf, time_t t);
void ngx_gmtime(time_t t, ngx_tm_t *tp);
#if (NGX_THREADS)