[axel-devel] http proxy authorization and user agent configuration patch

Philipp Hagemeister phihag at phihag.de
Mon Jan 18 07:02:29 UTC 2010


Looks great. I'll commit it pretty much verbatim as soon as I get the
time for a detailled second look.

Cheers,

Philipp

volans wang wrote:
> diff -Nu ../axel_whole/branches/2.x/axelrc.example ./axelrc.example
> --- ../axel_whole/branches/2.x/axelrc.example 2009-05-15 21:10:01.000000000
> +0800
> +++ ./axelrc.example 2009-05-25 13:30:27.000000000 +0800
> @@ -43,9 +43,17 @@
>  # I haven't tried it myself, so I would love to hear from you about the
>  # results.
>  #
> -# http_proxy =
> +# http_proxy=
> +# proxy_user=
> +# proxy_password=
>  # no_proxy =
> 
> +# User-Agent
> +# default set to "Axel VERSION (ARCH)"
> +#
> +# user_agent="xxxxx 2.4 xxxx"
> +#
> +
>  # Keep CGI arguments in the local filename?
>  #
>  # strip_cgi_parameters = 1
> diff -Nu ../axel_whole/branches/2.x/conf.c ./conf.c
> --- ../axel_whole/branches/2.x/conf.c 2009-05-15 21:10:01.000000000 +0800
> +++ ./conf.c 2010-01-16 12:31:31.000000000 +0800
> @@ -79,6 +79,8 @@
>   /* Long live macros!! */
>   get_config_string( default_filename );
>   get_config_string( http_proxy );
> + get_config_string( proxy_user );
> + get_config_string( proxy_password );
>   get_config_string( no_proxy );
>   get_config_number( strip_cgi_parameters );
>   get_config_number( save_state_interval );
> @@ -94,6 +96,7 @@
>   get_config_number( search_threads );
>   get_config_number( search_amount );
>   get_config_number( search_top );
> + get_config_string( user_agent );
> 
>   /* Option defunct but shouldn't be an error */
>   if( strcmp( key, "speed_type" ) == 0 )
> @@ -127,6 +130,8 @@
>   strcpy( conf->default_filename, "default" );
>   *conf->http_proxy = 0;
>   *conf->no_proxy = 0;
> + *conf->proxy_user = 0;
> + *conf->proxy_password   = 0;
>   conf->strip_cgi_parameters = 1;
>   conf->save_state_interval = 10;
>   conf->connection_timeout = 45;
> diff -Nu ../axel_whole/branches/2.x/conf.h ./conf.h
> --- ../axel_whole/branches/2.x/conf.h 2009-05-15 21:10:01.000000000 +0800
> +++ ./conf.h 2009-05-25 12:06:21.000000000 +0800
> @@ -27,6 +27,8 @@
>  {
>   char default_filename[MAX_STRING];
>   char http_proxy[MAX_STRING];
> + char proxy_user[MAX_STRING];
> + char proxy_password[MAX_STRING];
>   char no_proxy[MAX_STRING];
>   int strip_cgi_parameters;
>   int save_state_interval;
> diff -Nu ../axel_whole/branches/2.x/conn.c ./conn.c
> --- ../axel_whole/branches/2.x/conn.c 2009-05-15 21:10:01.000000000 +0800
> +++ ./conn.c 2010-01-16 12:30:36.000000000 +0800
> @@ -27,6 +27,25 @@
> 
>  char string[MAX_STRING];
> 
> +int base64_encode(const unsigned char *data, int length, char *dest)
> +{
> + char base64_table[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
> + "abcdefghijklmnopqrstuvwxyz0123456789+/";
> +    int i;
> +
> + for( i = 0; data[i*3]; i ++ )
> + {
> + dest[i*4] = base64_table[(data[i*3]>>2)];
> + dest[i*4+1] = base64_table[((data[i*3]&3)<<4)|(data[i*3+1]>>4)];
> + dest[i*4+2] = base64_table[((data[i*3+1]&15)<<2)|(data[i*3+2]>>6)];
> + dest[i*4+3] = base64_table[data[i*3+2]&63];
> + if( data[i*3+2] == 0 ) dest[i*4+3] = '=';
> + if( data[i*3+1] == 0 ) dest[i*4+2] = '=';
> + }
> +
> +    return 0;
> +}
> +
>  /* Convert an URL to a conn_t structure */
>  int conn_set( conn_t *conn, char *set_url )
>  {
> @@ -260,6 +279,23 @@
>   http_addheader( conn->http, "User-Agent: %s", conn->conf->user_agent );
>   for( i = 0; i < conn->conf->add_header_count; i++)
>   http_addheader( conn->http, "%s", conn->conf->add_header[i] );
> +
> +        if( *conn->conf->http_proxy != 0 )
> +        {
> +            if( (*conn->conf->proxy_user != 0) &&
> (*conn->conf->proxy_password != 0) )
> +            {
> +                char auth[MAX_STRING];
> +                char auth_64[MAX_STRING];
> +
> +                memset( auth, 0, MAX_STRING );
> +                memset( auth_64, 0, MAX_STRING );
> +                snprintf( auth, MAX_STRING, "%s:%s",
> conn->conf->proxy_user, conn->conf->proxy_password );
> +                base64_encode( auth, strlen(auth), auth_64 );
> +
> +                http_addheader( conn->http, "Proxy-Authorization: Basic
> %s", auth_64 );
> +
> +            }
> +        }
>   }
>   return( 1 );
>  }
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> axel-devel mailing list
> axel-devel at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/axel-devel



-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: OpenPGP digital signature
URL: <http://lists.alioth.debian.org/pipermail/axel-devel/attachments/20100118/ed4cd348/attachment.pgp>


More information about the axel-devel mailing list