From 785411bb8b287f99dc8c7b7e9fd423c3e6804f9e Mon Sep 17 00:00:00 2001 From: Mark Janssen Date: Sat, 20 Apr 2002 15:19:27 +0000 Subject: [PATCH] Moved base64 code to base64.[ch] More cleanups git-svn-id: https://proxytunnel.svn.sourceforge.net/svnroot/proxytunnel/trunk/proxytunnel@19 bc163920-b10d-0410-b2c5-a5491ca2ceef --- CHANGES | 2 ++ Makefile | 3 +- base64.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ base64.h | 5 ++++ config.h | 2 +- proxytunnel | Bin 20457 -> 20598 bytes proxytunnel.c | 57 ++++---------------------------------- 7 files changed, 89 insertions(+), 54 deletions(-) create mode 100644 base64.c create mode 100644 base64.h diff --git a/CHANGES b/CHANGES index 701c9cc..25199ad 100755 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,8 @@ Changes to proxytunnel version 1.1.0 -- Sat Apr 20 16:00:00 CET 2002 port and forwarding these connections through the specified proxy/tunnel. +- Forked base64 encoding code to base64.[ch] file + Changes to proxytunnel version 1.0.8 -- Fri Apr 19 10:25:00 CET 2002 - Fixed help-text when system doesn't support long-options diff --git a/Makefile b/Makefile index 0f7f5ca..0964fc8 100755 --- a/Makefile +++ b/Makefile @@ -13,7 +13,8 @@ INSTALLPATH = /usr/local/bin PROGNAME = proxytunnel OBJ = proxytunnel.o \ - cmdline.o + base64.o \ + cmdline.o proxytunnel: $(OBJ) $(CC) -o $(PROGNAME) $(LDFLAGS) $(OBJ) diff --git a/base64.c b/base64.c new file mode 100644 index 0000000..5432f52 --- /dev/null +++ b/base64.c @@ -0,0 +1,74 @@ +/* Proxytunnel - (C) 2001-2002 Jos Visser / Mark Janssen */ +/* Contact: josv@osp.nl / maniac@maniac.nl */ + +/* + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include "config.h" +#include "cmdline.h" +#include "base64.h" + +/* Needed for base64 encoding... */ +static const char base64digits[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +/* + * Small MAX macro + */ +#ifndef MAX +#define MAX( x, y ) ( ( (x)>(y) ) ? (x) : (y) ) +#endif + +/* + * This base64 code is heavily modified from fetchmail (also GPL'd, of + * course) by Brendan Cully . + * + * Original copyright notice: + * + * The code in the fetchmail distribution is Copyright 1997 by Eric + * S. Raymond. Portions are also copyrighted by Carl Harris, 1993 + * and 1995. Copyright retained for the purpose of protecting free + * redistribution of source. + * + */ + +/* raw bytes to null-terminated base 64 string */ +void base64(unsigned char *out, const unsigned char *in, int len) +{ + while (len >= 3) { + *out++ = base64digits[in[0] >> 2]; + *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)]; + *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; + *out++ = base64digits[in[2] & 0x3f]; + len -= 3; + in += 3; + } + + /* clean up remainder */ + if (len > 0) { + unsigned char fragment; + + *out++ = base64digits[in[0] >> 2]; + fragment = (in[0] << 4) & 0x30; + if (len > 1) + fragment |= in[1] >> 4; + *out++ = base64digits[fragment]; + *out++ = (len < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c]; + *out++ = '='; + } + *out = '\0'; +} diff --git a/base64.h b/base64.h new file mode 100644 index 0000000..a9b2267 --- /dev/null +++ b/base64.h @@ -0,0 +1,5 @@ +/* Proxytunnel base64.h */ + +void base64(unsigned char *out, const unsigned char *in, int len); +char basicauth[80]; /* Buffer to hold the proxies basic authentication data */ + diff --git a/config.h b/config.h index a4e0cd7..125fc33 100755 --- a/config.h +++ b/config.h @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#define VERSION "1.0.8" +#define VERSION "1.1.0" #define PACKAGE "Proxytunnel" #define PURPOSE "Build generic tunnels through HTTPS proxies" #define AUTHORS "Jos Visser (Muppet) , Mark Janssen (Maniac) " diff --git a/proxytunnel b/proxytunnel index 02e4b14ac5ccf008022ef5596af9315c891f1126..0eea2a077e0b7db864304d1cb59bf3bbe9bfd635 100755 GIT binary patch delta 6631 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 U=DPc~J+SCYH+ARV_I20)0~Og7fB*mh diff --git a/proxytunnel.c b/proxytunnel.c index 6c59d9e..eda7a9f 100755 --- a/proxytunnel.c +++ b/proxytunnel.c @@ -34,10 +34,7 @@ #include "config.h" #include "cmdline.h" - -/* Needed for base64 encoding... */ -static const char base64digits[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +#include "base64.h" /* * Some variables @@ -54,11 +51,8 @@ int i_am_daemon; /* Also... */ */ struct gengetopt_args_info args_info; -#define SIZE 80 -char basicauth[SIZE]; /* Buffer to hold the proxies basic authentication data */ - -#define SIZE2 65536 -char buf[SIZE2]; /* Data transfer buffer */ +#define SIZE 65536 +char buf[SIZE]; /* Data transfer buffer */ /* * Small MAX macro @@ -110,47 +104,6 @@ void signal_handler( int signal ) exit(1); } -/* - * This base64 code is heavily modified from fetchmail (also GPL'd, of - * course) by Brendan Cully . - * - * Original copyright notice: - * - * The code in the fetchmail distribution is Copyright 1997 by Eric - * S. Raymond. Portions are also copyrighted by Carl Harris, 1993 - * and 1995. Copyright retained for the purpose of protecting free - * redistribution of source. - * - */ - -/* raw bytes to null-terminated base 64 string */ -void base64(unsigned char *out, const unsigned char *in, int len) -{ - while (len >= 3) { - *out++ = base64digits[in[0] >> 2]; - *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)]; - *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; - *out++ = base64digits[in[2] & 0x3f]; - len -= 3; - in += 3; - } - - /* clean up remainder */ - if (len > 0) { - unsigned char fragment; - - *out++ = base64digits[in[0] >> 2]; - fragment = (in[0] << 4) & 0x30; - if (len > 1) - fragment |= in[1] >> 4; - *out++ = base64digits[fragment]; - *out++ = (len < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c]; - *out++ = '='; - } - *out = '\0'; -} - - /* * Create and connect the socket that connects to the proxy. After * this routine the sd socket is connected to the proxy. @@ -258,7 +211,7 @@ void readline() * Read one character at a time into buf, until a newline is * encountered. */ - while ( c != 10 && i < SIZE2 - 1 ) + while ( c != 10 && i < SIZE - 1 ) { if( recv( sd, &c ,1 ,0 ) < 0) { @@ -402,7 +355,7 @@ int copy(int from, int to) /* * Read a buffer from the source socket */ - if ( ( n = read( from, buf, SIZE2 ) ) < 0 ) + if ( ( n = read( from, buf, SIZE ) ) < 0 ) { my_perror( "Socket read error" ); exit( 1 );