--- gvpe/src/util.C 2003/04/02 03:06:22 1.4 +++ gvpe/src/util.C 2003/10/14 15:48:15 1.8 @@ -29,21 +29,19 @@ #include #include #include -#include -#include -#include - #include +#include "netcompat.h" + #include "gettext.h" #include "pidfile.h" #include "dropin.h" #include "global.h" #include "conf.h" +#include "util.h" #include "slog.h" -#include "protocol.h" int write_pidfile (void) @@ -146,7 +144,7 @@ if ((pid = fork ()) == 0) { char *filename; - asprintf (&filename, "%s/%s", confbase, cb(0)); + asprintf (&filename, "%s/%s", confbase, cb()); execl (filename, filename, (char *) 0); exit (255); } @@ -159,3 +157,52 @@ } } } + +#if ENABLE_HTTP_PROXY +// works like strdup +u8 * +base64_encode (const u8 *data, unsigned int len) +{ + const static char base64[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + unsigned int t, i; + const u8 *end = data + len; + u8 *res = new u8 [4 * ((len + 2) / 3) + 1]; + u8 *out = res; + + while (data <= end - 3) + { + t = (((data[0] << 8) | data[1]) << 8) | data[2]; + data += 3; + + *out++ = base64[(t >> 18) & 0x3f]; + *out++ = base64[(t >> 12) & 0x3f]; + *out++ = base64[(t >> 6) & 0x3f]; + *out++ = base64[(t ) & 0x3f]; + } + + for (t = 0, i = 0; data < end; i++) + t = (t << 8) | *data++; + + switch (i) + { + case 2: + *out++ = base64[(t >> 10) & 0x3f]; + *out++ = base64[(t >> 4) & 0x3f]; + *out++ = base64[(t << 2) & 0x3f]; + *out++ = '='; + break; + case 1: + *out++ = base64[(t >> 2) & 0x3f]; + *out++ = base64[(t << 4) & 0x3f]; + *out++ = '='; + *out++ = '='; + break; + } + + *out++ = 0; + + return res; +} +#endif +