comparison src/core/ngx_string.c @ 404:37b5381fb6d8

nginx-0.0.9-2004-07-30-21:05:14 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 30 Jul 2004 17:05:14 +0000
parents 8c5b69141dfd
children d6e2b445c1b8
comparison
equal deleted inserted replaced
403:ea3113b181d1 404:37b5381fb6d8
118 *text++ = hex[md5[i] >> 4]; 118 *text++ = hex[md5[i] >> 4];
119 *text++ = hex[md5[i] & 0xf]; 119 *text++ = hex[md5[i] & 0xf];
120 } 120 }
121 121
122 *text = '\0'; 122 *text = '\0';
123 }
124
125
126 ngx_int_t ngx_encode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst)
127 {
128 u_char *d, *s;
129 ngx_uint_t i;
130 static u_char basis64[] =
131 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
132
133 if (!(d = ngx_palloc(pool, ((src->len + 2) / 3) * 4 + 1))) {
134 return NGX_ERROR;
135 }
136
137 dst->data = d;
138 s = src->data;
139
140 for (i = 0; i < src->len - 2; i += 3) {
141 *d++ = basis64[(s[i] >> 2) & 0x3f];
142 *d++ = basis64[((s[i] & 3) << 4) | (s[i + 1] >> 4)];
143 *d++ = basis64[((s[i + 1] & 0x0f) << 2) | (s[i + 2] >> 6)];
144 *d++ = basis64[s[i + 2] & 0x3f];
145 }
146
147 if (i < src->len) {
148 *d++ = basis64[(s[i] >> 2) & 0x3f];
149
150 if (i == src->len - 1) {
151 *d++ = basis64[(s[i] & 3) << 4];
152 *d++ = '=';
153
154 } else {
155 *d++ = basis64[((s[i] & 3) << 4) | (s[i + 1] >> 4)];
156 *d++ = basis64[(s[i + 1] & 0x0f) << 2];
157 }
158
159 *d++ = '=';
160 }
161
162 dst->len = d - dst->data;
163 *d++ = '\0';
164
165 return NGX_OK;
166 }
167
168
169 ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst)
170 {
171 u_char *d, *s, c;
172
173 if (!(d = ngx_palloc(pool, ((src->len + 3) / 4) * 3))) {
174 return NGX_ABORT;
175 }
176
177 dst->data = d;
178 s = src->data;
179
180 if (*s == '+') {
181 c = 62;
182
183 } else if (*s == '/') {
184 c = 63;
185
186 } else if (*s >= '0' && *s <= '9') {
187 c = *s - '0' + 52;
188
189 } else if (*s >= 'A' && *s <= 'Z') {
190 c = *s - 'A';
191
192 } else if (*s >= 'a' && *s <= 'z') {
193 c = *s - 'a' + 26;
194
195 } else {
196 return NGX_ERROR;
197 }
198
199 return NGX_OK;
123 } 200 }
124 201
125 202
126 #if 0 203 #if 0
127 char *ngx_psprintf(ngx_pool_t *p, const char *fmt, ...) 204 char *ngx_psprintf(ngx_pool_t *p, const char *fmt, ...)