Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/http_client.c

    rba9edaa r1b5ab36  
    3232
    3333
    34 static gboolean http_connected( gpointer data, int source, b_input_condition cond );
    35 static gboolean http_ssl_connected( gpointer data, void *source, b_input_condition cond );
    36 static gboolean http_incoming_data( gpointer data, int source, b_input_condition cond );
     34static void http_connected( gpointer data, int source, GaimInputCondition cond );
     35static void http_ssl_connected( gpointer data, void *source, GaimInputCondition cond );
     36static void http_incoming_data( gpointer data, int source, GaimInputCondition cond );
    3737
    3838
     
    7171}
    7272
     73void *http_dorequest_url( char *url_string, http_input_function func, gpointer data )
     74{
     75        url_t *url = g_new0( url_t, 1 );
     76        char *request;
     77        void *ret;
     78       
     79        if( !url_set( url, url_string ) )
     80        {
     81                g_free( url );
     82                return NULL;
     83        }
     84       
     85        if( url->proto != PROTO_HTTP && url->proto != PROTO_HTTPS )
     86        {
     87                g_free( url );
     88                return NULL;
     89        }
     90       
     91        request = g_strdup_printf( "GET %s HTTP/1.0\r\n"
     92                                   "Host: %s\r\n"
     93                                   "User-Agent: BitlBee " BITLBEE_VERSION " " ARCH "/" CPU "\r\n"
     94                                   "\r\n", url->file, url->host );
     95       
     96        ret = http_dorequest( url->host, url->port,
     97                              url->proto == PROTO_HTTPS, request, func, data );
     98       
     99        g_free( url );
     100        g_free( request );
     101        return ret;
     102}
     103
    73104/* This one is actually pretty simple... Might get more calls if we can't write
    74105   the whole request at once. */
    75 static gboolean http_connected( gpointer data, int source, b_input_condition cond )
     106static void http_connected( gpointer data, int source, GaimInputCondition cond )
    76107{
    77108        struct http_request *req = data;
     
    82113       
    83114        if( req->inpa > 0 )
    84                 b_event_remove( req->inpa );
     115                gaim_input_remove( req->inpa );
    85116       
    86117        sock_make_nonblocking( req->fd );
     
    117148       
    118149        if( req->bytes_written < req->request_length )
    119                 req->inpa = b_input_add( source,
    120                                          req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_WRITE,
    121                                          http_connected, req );
    122         else
    123                 req->inpa = b_input_add( source, GAIM_INPUT_READ, http_incoming_data, req );
    124        
    125         return FALSE;
     150                req->inpa = gaim_input_add( source,
     151                                            req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_WRITE,
     152                                            http_connected, req );
     153        else
     154                req->inpa = gaim_input_add( source, GAIM_INPUT_READ, http_incoming_data, req );
     155       
     156        return;
    126157       
    127158error:
     
    131162        g_free( req );
    132163       
    133         return FALSE;
     164        return;
    134165}
    135166
    136 static gboolean http_ssl_connected( gpointer data, void *source, b_input_condition cond )
     167static void http_ssl_connected( gpointer data, void *source, GaimInputCondition cond )
    137168{
    138169        struct http_request *req = data;
     
    146177}
    147178
    148 static gboolean http_incoming_data( gpointer data, int source, b_input_condition cond )
     179static void http_incoming_data( gpointer data, int source, GaimInputCondition cond )
    149180{
    150181        struct http_request *req = data;
     
    155186       
    156187        if( req->inpa > 0 )
    157                 b_event_remove( req->inpa );
     188                gaim_input_remove( req->inpa );
    158189       
    159190        if( req->ssl )
     
    202233       
    203234        /* There will be more! */
    204         req->inpa = b_input_add( req->fd,
    205                                  req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_READ,
    206                                  http_incoming_data, req );
    207        
    208         return FALSE;
     235        req->inpa = gaim_input_add( req->fd,
     236                                    req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_READ,
     237                                    http_incoming_data, req );
     238       
     239        return;
    209240
    210241got_reply:
     
    222253                evil_server = 1;
    223254        }
    224         else
     255        else if( end1 )
    225256        {
    226257                end1 += 2;
    227258        }
    228        
    229         if( end1 )
    230         {
    231                 *end1 = 0;
    232                
    233                 if( evil_server )
    234                         req->reply_body = end1 + 1;
    235                 else
    236                         req->reply_body = end1 + 2;
    237         }
     259        else
     260        {
     261                goto cleanup;
     262        }
     263       
     264        *end1 = 0;
     265       
     266        if( evil_server )
     267                req->reply_body = end1 + 1;
     268        else
     269                req->reply_body = end1 + 2;
     270       
     271        req->body_size = req->reply_headers + req->bytes_read - req->reply_body;
    238272       
    239273        if( ( end1 = strchr( req->reply_headers, ' ' ) ) != NULL )
     
    362396                req->reply_headers = req->reply_body = NULL;
    363397               
    364                 return FALSE;
     398                return;
    365399        }
    366400       
     
    380414        g_free( req->reply_headers );
    381415        g_free( req );
    382        
    383         return FALSE;
    384416}
Note: See TracChangeset for help on using the changeset viewer.