summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrofl0r <retnyg@gmx.net>2018-02-06 16:50:00 +0000
committerrofl0r <rofl0r@users.noreply.github.com>2018-02-06 16:57:02 +0000
commitaf1d7ab510f8dc9954c8a1d47149c92c2a2c15fa (patch)
tree1247b166f01ea1f93da5d796600fa54181a53a3d
parentbd04ed00d8b9bac68eaf6f3e7c739ceef043e679 (diff)
move base64 code into own file
it will be needed to add support for upstream proxy auth.
-rw-r--r--src/Makefile.am1
-rw-r--r--src/base64.c57
-rw-r--r--src/base64.h29
-rw-r--r--src/basicauth.c36
4 files changed, 88 insertions, 35 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 60fda2c..565eb4d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -48,6 +48,7 @@ tinyproxy_SOURCES = \
vector.c vector.h \
upstream.c upstream.h \
basicauth.c basicauth.h \
+ base64.c base64.h \
connect-ports.c connect-ports.h
EXTRA_tinyproxy_SOURCES = filter.c filter.h \
diff --git a/src/base64.c b/src/base64.c
new file mode 100644
index 0000000..cc9b6ae
--- /dev/null
+++ b/src/base64.c
@@ -0,0 +1,57 @@
+/* tinyproxy - A fast light-weight HTTP proxy
+ * this file Copyright (C) 2016-2018 rofl0r
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "base64.h"
+
+static const char base64_tbl[64] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+/*
+ rofl0r's base64 impl (taken from libulz)
+ takes count bytes from src, writing base64 encoded string into dst.
+ dst needs to be at least BASE64ENC_BYTES(count) + 1 bytes in size.
+ the string in dst will be zero-terminated.
+ */
+void base64enc(char *dst, const void* src, size_t count)
+{
+ unsigned const char *s = src;
+ char* d = dst;
+ while(count) {
+ int i = 0, n = *s << 16;
+ s++;
+ count--;
+ if(count) {
+ n |= *s << 8;
+ s++;
+ count--;
+ i++;
+ }
+ if(count) {
+ n |= *s;
+ s++;
+ count--;
+ i++;
+ }
+ *d++ = base64_tbl[(n >> 18) & 0x3f];
+ *d++ = base64_tbl[(n >> 12) & 0x3f];
+ *d++ = i ? base64_tbl[(n >> 6) & 0x3f] : '=';
+ *d++ = i == 2 ? base64_tbl[n & 0x3f] : '=';
+ }
+ *d = 0;
+}
+
diff --git a/src/base64.h b/src/base64.h
new file mode 100644
index 0000000..4465b9e
--- /dev/null
+++ b/src/base64.h
@@ -0,0 +1,29 @@
+/* tinyproxy - A fast light-weight HTTP proxy
+ * this file Copyright (C) 2016-2018 rofl0r
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef TINYPROXY_BASE64_H
+#define TINYPROXY_BASE64_H
+
+#include <stddef.h>
+
+/* calculates number of bytes base64-encoded stream of N bytes will take. */
+#define BASE64ENC_BYTES(N) (((N+2)/3)*4)
+void base64enc(char *dst, const void* src, size_t count);
+
+#endif
+
diff --git a/src/basicauth.c b/src/basicauth.c
index ddc6e6e..4360a1a 100644
--- a/src/basicauth.c
+++ b/src/basicauth.c
@@ -24,41 +24,7 @@
#include "html-error.h"
#include "log.h"
#include "conf.h"
-
-/* calculates number of bytes base64-encoded stream of N bytes will take. */
-#define BASE64ENC_BYTES(N) (((N+2)/3)*4)
-
-static const char base64_tbl[64] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-/* my own base64 impl (taken from libulz) */
-static void base64enc(char *dst, const void* src, size_t count)
-{
- unsigned const char *s = src;
- char* d = dst;
- while(count) {
- int i = 0, n = *s << 16;
- s++;
- count--;
- if(count) {
- n |= *s << 8;
- s++;
- count--;
- i++;
- }
- if(count) {
- n |= *s;
- s++;
- count--;
- i++;
- }
- *d++ = base64_tbl[(n >> 18) & 0x3f];
- *d++ = base64_tbl[(n >> 12) & 0x3f];
- *d++ = i ? base64_tbl[(n >> 6) & 0x3f] : '=';
- *d++ = i == 2 ? base64_tbl[n & 0x3f] : '=';
- }
- *d = 0;
-}
+#include "base64.h"
/*
* Add entry to the basicauth list