Changeset 4f086417 in mainline


Ignore:
Timestamp:
2013-10-05T20:51:34Z (11 years ago)
Author:
Martin Sucha <sucha14@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
39bcc99
Parents:
ef2ecec (diff), cbfc8b7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge libhttp improvements

Location:
uspace
Files:
8 added
1 deleted
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • uspace/app/download/Makefile

    ref2ecec r4f086417  
    2929USPACE_PREFIX = ../..
    3030LIBS = $(LIBHTTP_PREFIX)/libhttp.a $(LIBURI_PREFIX)/liburi.a
    31 EXTRA_CFLAGS = -I$(LIBHTTP_PREFIX) -I$(LIBURI_PREFIX)
     31EXTRA_CFLAGS = -I$(LIBHTTP_PREFIX)/include -I$(LIBURI_PREFIX)
    3232DEFS = -DRELEASE=$(RELEASE)
    3333BINARY = download
  • uspace/app/download/main.c

    ref2ecec r4f086417  
    4747#include <net/socket.h>
    4848
    49 #include <http.h>
     49#include <http/http.h>
    5050#include <uri.h>
    5151
     
    132132                fprintf(stderr, "Failed creating request\n");
    133133                uri_destroy(uri);
    134                 free(server_path);
    135134                return 3;
    136135        }
    137136       
    138         http_header_t *header_host = http_header_create("Host", uri->host);
    139         if (header_host == NULL) {
    140                 fprintf(stderr, "Failed creating Host header\n");
    141                 uri_destroy(uri);
    142                 free(server_path);
    143                 return 3;
    144         }
    145         list_append(&header_host->link, &req->headers);
    146        
    147         http_header_t *header_ua = http_header_create("User-Agent", USER_AGENT);
    148         if (header_ua == NULL) {
    149                 fprintf(stderr, "Failed creating User-Agent header\n");
    150                 uri_destroy(uri);
    151                 free(server_path);
    152                 return 3;
    153         }
    154         list_append(&header_ua->link, &req->headers);
     137        int rc = http_headers_append(&req->headers, "Host", uri->host);
     138        if (rc != EOK) {
     139                fprintf(stderr, "Failed setting Host header: %s\n", str_error(rc));
     140                uri_destroy(uri);
     141                return rc;
     142        }
     143       
     144        rc = http_headers_append(&req->headers, "User-Agent", USER_AGENT);
     145        if (rc != EOK) {
     146                fprintf(stderr, "Failed creating User-Agent header: %s\n", str_error(rc));
     147                uri_destroy(uri);
     148                return rc;
     149        }
    155150       
    156151        http_t *http = http_create(uri->host, port);
    157152        if (http == NULL) {
    158153                uri_destroy(uri);
    159                 free(server_path);
    160154                fprintf(stderr, "Failed creating HTTP object\n");
    161155                return 3;
    162156        }
    163157       
    164         int rc = http_connect(http);
     158        rc = http_connect(http);
    165159        if (rc != EOK) {
    166160                fprintf(stderr, "Failed connecting: %s\n", str_error(rc));
    167161                uri_destroy(uri);
    168                 free(server_path);
    169162                return rc;
    170163        }
     
    174167                fprintf(stderr, "Failed sending request: %s\n", str_error(rc));
    175168                uri_destroy(uri);
    176                 free(server_path);
    177169                return rc;
    178170        }
    179171       
    180172        http_response_t *response = NULL;
    181         rc = http_receive_response(http, &response);
     173        rc = http_receive_response(&http->recv_buffer, &response, 16 * 1024,
     174            100);
    182175        if (rc != EOK) {
    183176                fprintf(stderr, "Failed receiving response: %s\n", str_error(rc));
    184177                uri_destroy(uri);
    185                 free(server_path);
    186178                return rc;
    187179        }
     
    197189                        fprintf(stderr, "Failed allocating buffer\n)");
    198190                        uri_destroy(uri);
    199                         free(server_path);
    200191                        return ENOMEM;
    201192                }
    202193               
    203194                int body_size;
    204                 while ((body_size = http_receive_body(http, buf, buf_size)) > 0) {
     195                while ((body_size = recv_buffer(&http->recv_buffer, buf, buf_size)) > 0) {
    205196                        fwrite(buf, 1, body_size, stdout);
    206197                }
     
    212203       
    213204        uri_destroy(uri);
    214         free(server_path);
    215205        return EOK;
    216206}
  • uspace/lib/http/Makefile

    ref2ecec r4f086417  
    3131SLIBRARY = libhttp.so.0.0
    3232LSONAME = libhttp.so0
    33 #EXTRA_CFLAGS +=
     33EXTRA_CFLAGS += -Iinclude
    3434
    3535SOURCES = \
    36         http.c
     36        src/http.c \
     37        src/headers.c \
     38        src/request.c \
     39        src/response.c \
     40        src/receive-buffer.c
    3741
    3842include $(USPACE_PREFIX)/Makefile.common
  • uspace/lib/http/include/http/http.h

    ref2ecec r4f086417  
    4141#include <inet/addr.h>
    4242
     43#include "receive-buffer.h"
     44
    4345typedef struct {
    4446        char *host;
     
    5052       
    5153        size_t buffer_size;
    52         char *recv_buffer;
    53         size_t recv_buffer_in;
    54         size_t recv_buffer_out;
     54        receive_buffer_t recv_buffer;
    5555} http_t;
    5656
     
    6767
    6868typedef struct {
     69        list_t list;
     70} http_headers_t;
     71
     72typedef struct {
    6973        char *method;
    7074        char *path;
    71         list_t headers;
     75        http_headers_t headers;
    7276} http_request_t;
    7377
     
    7680        uint16_t status;
    7781        char *message;
    78         list_t headers;
     82        http_headers_t headers;
    7983} http_response_t;
    8084
    8185extern http_t *http_create(const char *, uint16_t);
    8286extern int http_connect(http_t *);
     87
     88extern void http_header_init(http_header_t *);
    8389extern http_header_t *http_header_create(const char *, const char *);
    84 extern http_header_t *http_header_create_no_copy(char *, char *);
     90extern int http_header_receive_name(receive_buffer_t *, receive_buffer_mark_t *);
     91extern int http_header_receive_value(receive_buffer_t *, receive_buffer_mark_t *,
     92    receive_buffer_mark_t *);
     93extern int http_header_receive(receive_buffer_t *, http_header_t *, size_t,
     94    size_t *);
     95extern void http_header_normalize_value(char *);
     96extern bool http_header_name_match(const char *, const char *);
     97ssize_t http_header_encode(http_header_t *, char *, size_t);
    8598extern void http_header_destroy(http_header_t *);
     99
     100extern void http_headers_init(http_headers_t *);
     101extern int http_headers_find_single(http_headers_t *, const char *,
     102    http_header_t **);
     103extern int http_headers_append(http_headers_t *, const char *, const char *);
     104extern int http_headers_set(http_headers_t *, const char *, const char *);
     105extern int http_headers_get(http_headers_t *, const char *, char **);
     106extern int http_headers_receive(receive_buffer_t *, http_headers_t *, size_t,
     107    unsigned);
     108extern void http_headers_clear(http_headers_t *);
     109
     110#define http_headers_foreach(headers, iter) \
     111    list_foreach((headers).list, link, http_header_t, (iter))
     112
     113static inline void http_headers_remove(http_headers_t *headers,
     114    http_header_t *header)
     115{
     116        list_remove(&header->link);
     117}
     118
     119static inline void http_headers_append_header(http_headers_t *headers,
     120    http_header_t *header)
     121{
     122        list_append(&header->link, &headers->list);
     123}
     124
    86125extern http_request_t *http_request_create(const char *, const char *);
    87126extern void http_request_destroy(http_request_t *);
    88127extern int http_request_format(http_request_t *, char **, size_t *);
    89128extern int http_send_request(http_t *, http_request_t *);
    90 extern int http_parse_status(const char *, http_version_t *, uint16_t *,
     129extern int http_receive_status(receive_buffer_t *, http_version_t *, uint16_t *,
    91130    char **);
    92 extern int http_parse_header(const char *, char **, char **);
    93 extern int http_receive_response(http_t *, http_response_t **);
    94 extern int http_receive_body(http_t *, void *, size_t);
     131extern int http_receive_response(receive_buffer_t *, http_response_t **,
     132    size_t, unsigned);
    95133extern void http_response_destroy(http_response_t *);
    96134extern int http_close(http_t *);
Note: See TracChangeset for help on using the changeset viewer.