Changeset 4f086417 in mainline
- Timestamp:
- 2013-10-05T20:51:34Z (11 years ago)
- 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. - Location:
- uspace
- Files:
-
- 8 added
- 1 deleted
- 3 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/download/Makefile
ref2ecec r4f086417 29 29 USPACE_PREFIX = ../.. 30 30 LIBS = $(LIBHTTP_PREFIX)/libhttp.a $(LIBURI_PREFIX)/liburi.a 31 EXTRA_CFLAGS = -I$(LIBHTTP_PREFIX) -I$(LIBURI_PREFIX)31 EXTRA_CFLAGS = -I$(LIBHTTP_PREFIX)/include -I$(LIBURI_PREFIX) 32 32 DEFS = -DRELEASE=$(RELEASE) 33 33 BINARY = download -
uspace/app/download/main.c
ref2ecec r4f086417 47 47 #include <net/socket.h> 48 48 49 #include <http .h>49 #include <http/http.h> 50 50 #include <uri.h> 51 51 … … 132 132 fprintf(stderr, "Failed creating request\n"); 133 133 uri_destroy(uri); 134 free(server_path);135 134 return 3; 136 135 } 137 136 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 } 155 150 156 151 http_t *http = http_create(uri->host, port); 157 152 if (http == NULL) { 158 153 uri_destroy(uri); 159 free(server_path);160 154 fprintf(stderr, "Failed creating HTTP object\n"); 161 155 return 3; 162 156 } 163 157 164 intrc = http_connect(http);158 rc = http_connect(http); 165 159 if (rc != EOK) { 166 160 fprintf(stderr, "Failed connecting: %s\n", str_error(rc)); 167 161 uri_destroy(uri); 168 free(server_path);169 162 return rc; 170 163 } … … 174 167 fprintf(stderr, "Failed sending request: %s\n", str_error(rc)); 175 168 uri_destroy(uri); 176 free(server_path);177 169 return rc; 178 170 } 179 171 180 172 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); 182 175 if (rc != EOK) { 183 176 fprintf(stderr, "Failed receiving response: %s\n", str_error(rc)); 184 177 uri_destroy(uri); 185 free(server_path);186 178 return rc; 187 179 } … … 197 189 fprintf(stderr, "Failed allocating buffer\n)"); 198 190 uri_destroy(uri); 199 free(server_path);200 191 return ENOMEM; 201 192 } 202 193 203 194 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) { 205 196 fwrite(buf, 1, body_size, stdout); 206 197 } … … 212 203 213 204 uri_destroy(uri); 214 free(server_path);215 205 return EOK; 216 206 } -
uspace/lib/http/Makefile
ref2ecec r4f086417 31 31 SLIBRARY = libhttp.so.0.0 32 32 LSONAME = libhttp.so0 33 #EXTRA_CFLAGS += 33 EXTRA_CFLAGS += -Iinclude 34 34 35 35 SOURCES = \ 36 http.c 36 src/http.c \ 37 src/headers.c \ 38 src/request.c \ 39 src/response.c \ 40 src/receive-buffer.c 37 41 38 42 include $(USPACE_PREFIX)/Makefile.common -
uspace/lib/http/include/http/http.h
ref2ecec r4f086417 41 41 #include <inet/addr.h> 42 42 43 #include "receive-buffer.h" 44 43 45 typedef struct { 44 46 char *host; … … 50 52 51 53 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; 55 55 } http_t; 56 56 … … 67 67 68 68 typedef struct { 69 list_t list; 70 } http_headers_t; 71 72 typedef struct { 69 73 char *method; 70 74 char *path; 71 list_t headers;75 http_headers_t headers; 72 76 } http_request_t; 73 77 … … 76 80 uint16_t status; 77 81 char *message; 78 list_t headers;82 http_headers_t headers; 79 83 } http_response_t; 80 84 81 85 extern http_t *http_create(const char *, uint16_t); 82 86 extern int http_connect(http_t *); 87 88 extern void http_header_init(http_header_t *); 83 89 extern http_header_t *http_header_create(const char *, const char *); 84 extern http_header_t *http_header_create_no_copy(char *, char *); 90 extern int http_header_receive_name(receive_buffer_t *, receive_buffer_mark_t *); 91 extern int http_header_receive_value(receive_buffer_t *, receive_buffer_mark_t *, 92 receive_buffer_mark_t *); 93 extern int http_header_receive(receive_buffer_t *, http_header_t *, size_t, 94 size_t *); 95 extern void http_header_normalize_value(char *); 96 extern bool http_header_name_match(const char *, const char *); 97 ssize_t http_header_encode(http_header_t *, char *, size_t); 85 98 extern void http_header_destroy(http_header_t *); 99 100 extern void http_headers_init(http_headers_t *); 101 extern int http_headers_find_single(http_headers_t *, const char *, 102 http_header_t **); 103 extern int http_headers_append(http_headers_t *, const char *, const char *); 104 extern int http_headers_set(http_headers_t *, const char *, const char *); 105 extern int http_headers_get(http_headers_t *, const char *, char **); 106 extern int http_headers_receive(receive_buffer_t *, http_headers_t *, size_t, 107 unsigned); 108 extern 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 113 static inline void http_headers_remove(http_headers_t *headers, 114 http_header_t *header) 115 { 116 list_remove(&header->link); 117 } 118 119 static 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 86 125 extern http_request_t *http_request_create(const char *, const char *); 87 126 extern void http_request_destroy(http_request_t *); 88 127 extern int http_request_format(http_request_t *, char **, size_t *); 89 128 extern int http_send_request(http_t *, http_request_t *); 90 extern int http_ parse_status(const char*, http_version_t *, uint16_t *,129 extern int http_receive_status(receive_buffer_t *, http_version_t *, uint16_t *, 91 130 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); 131 extern int http_receive_response(receive_buffer_t *, http_response_t **, 132 size_t, unsigned); 95 133 extern void http_response_destroy(http_response_t *); 96 134 extern int http_close(http_t *);
Note:
See TracChangeset
for help on using the changeset viewer.