aboutsummaryrefslogtreecommitdiffstats
path: root/lib/http_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/http_client.c')
-rw-r--r--lib/http_client.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/http_client.c b/lib/http_client.c
index aae5645b..69f06ec5 100644
--- a/lib/http_client.c
+++ b/lib/http_client.c
@@ -34,9 +34,10 @@
static gboolean http_connected( gpointer data, int source, b_input_condition cond );
static gboolean http_ssl_connected( gpointer data, void *source, b_input_condition cond );
static gboolean http_incoming_data( gpointer data, int source, b_input_condition cond );
+static void http_free( struct http_request *req );
-void *http_dorequest( char *host, int port, int ssl, char *request, http_input_function func, gpointer data )
+struct http_request *http_dorequest( char *host, int port, int ssl, char *request, http_input_function func, gpointer data )
{
struct http_request *req;
int error = 0;
@@ -66,11 +67,12 @@ void *http_dorequest( char *host, int port, int ssl, char *request, http_input_f
req->data = data;
req->request = g_strdup( request );
req->request_length = strlen( request );
+ req->redir_ttl = 3;
return( req );
}
-void *http_dorequest_url( char *url_string, http_input_function func, gpointer data )
+struct http_request *http_dorequest_url( char *url_string, http_input_function func, gpointer data )
{
url_t *url = g_new0( url_t, 1 );
char *request;
@@ -148,10 +150,10 @@ static gboolean http_connected( gpointer data, int source, b_input_condition con
if( req->bytes_written < req->request_length )
req->inpa = b_input_add( source,
- req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_WRITE,
+ req->ssl ? ssl_getdirection( req->ssl ) : B_EV_IO_WRITE,
http_connected, req );
else
- req->inpa = b_input_add( source, GAIM_INPUT_READ, http_incoming_data, req );
+ req->inpa = b_input_add( source, B_EV_IO_READ, http_incoming_data, req );
return FALSE;
@@ -233,7 +235,7 @@ static gboolean http_incoming_data( gpointer data, int source, b_input_condition
/* There will be more! */
req->inpa = b_input_add( req->fd,
- req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_READ,
+ req->ssl ? ssl_getdirection( req->ssl ) : B_EV_IO_READ,
http_incoming_data, req );
return FALSE;
@@ -310,7 +312,7 @@ got_reply:
req->status_code = -1;
}
- if( req->status_code == 301 || req->status_code == 302 )
+ if( ( req->status_code == 301 || req->status_code == 302 ) && req->redir_ttl-- > 0 )
{
char *loc, *new_request, *new_host;
int error = 0, new_port, new_proto;
@@ -444,7 +446,7 @@ cleanup:
return FALSE;
}
-void http_free( struct http_request *req )
+static void http_free( struct http_request *req )
{
g_free( req->request );
g_free( req->reply_headers );