Changeset 921
- Timestamp:
- 09/19/07 16:48:20 (1 year ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cget/Makefile.am (modified) (1 diff)
- cherokee/trunk/cget/main.c (modified) (5 diffs)
- cherokee/trunk/cget/proxy.c (added)
- cherokee/trunk/cget/proxy.h (added)
- cherokee/trunk/cherokee/downloader-protected.h (modified) (2 diffs)
- cherokee/trunk/cherokee/downloader.c (modified) (10 diffs)
- cherokee/trunk/cherokee/downloader.h (modified) (2 diffs)
- cherokee/trunk/cherokee/post.c (modified) (1 diff)
- cherokee/trunk/cherokee/request.c (modified) (4 diffs)
- cherokee/trunk/cherokee/request.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r920 r921 1 1 2007-09-19 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cherokee/request.c (cherokee_request_header_build_string): Moved 4 to use cherokee_http_* methods instead of local switches for 5 converting the http method into a string. 6 7 * cget/proxy.h, cget/proxy.c, cherokee/request.h, , cget/main.c, 8 cherokee/request.c (cherokee_request_header_build_string), 9 cherokee/downloader.h, cherokee/downloader.c: Added proxy 10 support. Cget inherits this feature of the cherokee-client 11 library. 2 12 3 13 * cget/main.c: Quite a few small fixes and micro-improvements. cherokee/trunk/cget/Makefile.am
r701 r921 16 16 17 17 cget_SOURCES = \ 18 main.c 18 main.c \ 19 proxy.h \ 20 proxy.c 19 21 20 22 bin_PROGRAMS = cget cherokee/trunk/cget/main.c
r920 r921 6 6 * Alvaro Lopez Ortega <alvaro@alobbs.com> 7 7 * 8 * Copyright (C) 2001-200 6Alvaro Lopez Ortega8 * Copyright (C) 2001-2007 Alvaro Lopez Ortega 9 9 * 10 10 * This program is free software; you can redistribute it and/or … … 56 56 #include "socket.h" 57 57 #include "header-protected.h" /* FIXME! */ 58 59 #include "proxy.h" 58 60 59 61 #define EXIT_OK 0 … … 338 340 cint_t long_index; 339 341 cherokee_downloader_t *downloader; 342 cherokee_buffer_t proxy = CHEROKEE_BUF_INIT; 343 cuint_t proxy_port; 340 344 341 345 struct option long_options[] = { … … 402 406 } 403 407 408 /* Tracing and proxy discovering.. 409 */ 404 410 cherokee_trace_init(); 411 cget_find_proxy (&proxy, &proxy_port); 405 412 406 413 for (val=optind; val<optind+param_num; val++) { … … 420 427 if (ret != ret_ok) return EXIT_ERROR; 421 428 429 if (! cherokee_buffer_is_empty (&proxy)) { 430 ret = cherokee_downloader_set_proxy (downloader, &proxy, proxy_port); 431 if (ret != ret_ok) return EXIT_ERROR; 432 } 433 422 434 ret = cherokee_downloader_set_url (downloader, &url); 423 435 if (ret != ret_ok) return EXIT_ERROR; cherokee/trunk/cherokee/downloader-protected.h
r613 r921 56 56 57 57 cherokee_post_t *post; 58 cherokee_buffer_t proxy; 59 cuint_t proxy_port; 58 60 59 61 cherokee_socket_t socket; … … 80 82 81 83 82 83 84 ret_t cherokee_downloader_init (cherokee_downloader_t *downloader); 84 85 ret_t cherokee_downloader_mrproper (cherokee_downloader_t *downloader); cherokee/trunk/cherokee/downloader.c
r895 r921 48 48 49 49 ret_t 50 cherokee_downloader_new (cherokee_downloader_t **downloader)51 {52 ret_t ret;53 CHEROKEE_NEW_STRUCT(n, downloader);54 55 /* Init56 */57 ret = cherokee_downloader_init (n);58 if (unlikely(ret != ret_ok)) return ret;59 60 /* Return the object61 */62 *downloader = n;63 return ret_ok;64 }65 66 67 ret_t68 50 cherokee_downloader_init (cherokee_downloader_t *n) 69 51 { … … 89 71 ret = cherokee_header_new (&n->header); 90 72 if (unlikely(ret != ret_ok)) return ret; 73 74 cherokee_buffer_init (&n->proxy); 75 n->proxy_port = 0; 91 76 92 77 cherokee_buffer_init (&n->tmp1); … … 116 101 117 102 ret_t 118 cherokee_downloader_free (cherokee_downloader_t *downloader)119 {120 cherokee_downloader_mrproper (downloader);121 122 free (downloader);123 return ret_ok;124 }125 126 127 ret_t128 103 cherokee_downloader_mrproper (cherokee_downloader_t *downloader) 129 104 { … … 135 110 cherokee_buffer_mrproper (&downloader->reply_header); 136 111 cherokee_buffer_mrproper (&downloader->body); 112 cherokee_buffer_mrproper (&downloader->proxy); 137 113 138 114 cherokee_buffer_mrproper (&downloader->tmp1); … … 146 122 return ret_ok; 147 123 } 124 125 126 CHEROKEE_ADD_FUNC_NEW (downloader); 127 CHEROKEE_ADD_FUNC_FREE (downloader); 148 128 149 129 … … 172 152 173 153 ret_t 154 cherokee_downloader_set_proxy (cherokee_downloader_t *downloader, cherokee_buffer_t *proxy, cuint_t port) 155 { 156 char *tmp; 157 158 /* Skip 'http(s)://' 159 */ 160 tmp = strchr (proxy->buf, '/'); 161 if (tmp == NULL) 162 tmp = proxy->buf; 163 else 164 tmp += 2; 165 166 /* Copy the values 167 */ 168 cherokee_buffer_clean (&downloader->proxy); 169 cherokee_buffer_add (&downloader->proxy, tmp, strlen(tmp)); 170 171 downloader->proxy_port = port; 172 return ret_ok; 173 } 174 175 176 ret_t 174 177 cherokee_downloader_get_reply_code (cherokee_downloader_t *downloader, cherokee_http_t *code) 175 178 { … … 179 182 180 183 181 ret_t182 c herokee_downloader_connect (cherokee_downloader_t *downloader)184 static ret_t 185 connect_to (cherokee_downloader_t *downloader, cherokee_buffer_t *host, cuint_t port, int protocol) 183 186 { 184 187 ret_t ret; 185 188 cherokee_socket_t *sock = &downloader->socket; 186 cherokee_url_t *url = &downloader->request.url; 189 190 TRACE(ENTRIES, "host=%s port=%d proto=%d\n", host->buf, port, protocol); 187 191 188 192 /* Create the socket … … 193 197 /* Set the port 194 198 */ 195 SOCKET_SIN_PORT(sock) = htons(url->port); 196 197 /* Find the IP from the hostname 198 * Maybe it is a IP.. 199 */ 200 ret = cherokee_socket_pton (sock, &url->host); 199 SOCKET_SIN_PORT(sock) = htons(port); 200 201 /* Supposing it's an IP: convert it. 202 */ 203 ret = cherokee_socket_pton (sock, host); 201 204 if (ret != ret_ok) { 202 205 203 /* Ops! no, it could be a hostname.. 204 * Try to resolv it! 205 */ 206 ret = cherokee_socket_gethostbyname (sock, &url->host); 206 /* Ops! It might be a hostname. Try to resolve it. 207 */ 208 ret = cherokee_socket_gethostbyname (sock, host); 207 209 if (unlikely(ret != ret_ok)) return ret_error; 208 210 } … … 211 213 */ 212 214 ret = cherokee_socket_connect (sock); 215 TRACE(ENTRIES, "socket=%p ret=%d\n", sock, ret); 213 216 if (unlikely(ret != ret_ok)) return ret; 214 217 215 /* Enables nonblocking I/O.216 */217 cherokee_fd_set_nonblocking (SOCKET_FD(sock));218 219 218 /* Is this connection TLS? 220 219 */ 221 if ( url->protocol == https) {220 if (protocol == https) { 222 221 ret = cherokee_socket_init_client_tls (sock); 222 if (ret != ret_ok) return ret; 223 } 224 225 TRACE(ENTRIES, "Exists socket=%p\n", sock); 226 return ret_ok; 227 } 228 229 230 ret_t 231 cherokee_downloader_connect (cherokee_downloader_t *downloader) 232 { 233 ret_t ret; 234 cherokee_boolean_t uses_proxy; 235 cherokee_url_t *url = &downloader->request.url; 236 237 /* Does it use a proxy? 238 */ 239 uses_proxy = ! cherokee_buffer_is_empty (&downloader->proxy); 240 ret = cherokee_request_header_uses_proxy (&downloader->request, uses_proxy); 241 if (ret != ret_ok) return ret; 242 243 /* Connect 244 */ 245 if (uses_proxy) { 246 ret = connect_to (downloader, &downloader->proxy, downloader->proxy_port, http); 247 if (ret != ret_ok) return ret; 248 } else { 249 ret = connect_to (downloader, &url->host, url->port, url->protocol); 223 250 if (ret != ret_ok) return ret; 224 251 } … … 396 423 tmp1 = (ext_tmp1) ? ext_tmp1 : &downloader->tmp1; 397 424 tmp2 = (ext_tmp2) ? ext_tmp2 : &downloader->tmp2; 425 426 TRACE (ENTRIES, "phase=%d\n", downloader->phase); 398 427 399 428 /* Process it cherokee/trunk/cherokee/downloader.h
r606 r921 43 43 44 44 typedef enum { 45 downloader_status_none = 0x0,46 downloader_status_headers_sent = 0x1,47 downloader_status_post_sent = 0x2,45 downloader_status_none = 0x0, 46 downloader_status_headers_sent = 0x1, 47 downloader_status_post_sent = 0x2, 48 48 downloader_status_headers_received = 0x4, 49 downloader_status_data_available = 0x8,50 downloader_status_finished = 0x1049 downloader_status_data_available = 0x8, 50 downloader_status_finished = 0x10 51 51 } cherokee_downloader_status_t; 52 52 … … 56 56 ret_t cherokee_downloader_set_url (cherokee_downloader_t *downloader, cherokee_buffer_t *url); 57 57 ret_t cherokee_downloader_set_keepalive (cherokee_downloader_t *downloader, cherokee_boolean_t active); 58 ret_t cherokee_downloader_set_proxy (cherokee_downloader_t *downloader, cherokee_buffer_t *proxy, cuint_t port); 59 58 60 ret_t cherokee_downloader_get_reply_code (cherokee_downloader_t *downloader, cherokee_http_t *code); 59 61 cherokee/trunk/cherokee/post.c
r863 r921 204 204 /* Sanity check 205 205 */ 206 if (fd < 0) return ret_error; 206 if (fd < 0) 207 return ret_error; 207 208 208 209 /* Send a chunk.. cherokee/trunk/cherokee/request.c
r897 r921 39 39 request->method = http_get; 40 40 request->version = http_version_11; 41 request->proxy = false; 41 42 request->keepalive = true; 42 43 request->pipeline = 1; … … 75 76 } 76 77 78 ret_t 79 cherokee_request_header_uses_proxy (cherokee_request_header_t *request, cherokee_boolean_t proxy) 80 { 81 request->proxy = proxy; 82 return ret_ok; 83 } 84 77 85 78 86 ret_t 79 87 cherokee_request_header_build_string (cherokee_request_header_t *request, cherokee_buffer_t *buf, cherokee_buffer_t *tmp1, cherokee_buffer_t *tmp2) 80 88 { 89 ret_t ret; 90 const char *ptr; 91 cuint_t len; 81 92 cherokee_url_t *url = REQUEST_URL(request); 82 93 … … 88 99 * GET /dir/object HTTP/1.1 89 100 */ 90 switch (request->method) { 91 case http_get: 92 cherokee_buffer_add_str (buf, "GET "); 93 break; 94 case http_post: 95 cherokee_buffer_add_str (buf, "POST "); 96 break; 97 case http_head: 98 cherokee_buffer_add_str (buf, "HEAD "); 99 break; 100 case http_put: 101 cherokee_buffer_add_str (buf, "PUT "); 102 break; 103 default: 104 SHOULDNT_HAPPEN; 105 return ret_error; 106 } 101 ret = cherokee_http_method_to_string (request->method, &ptr, &len); 102 if (ret != ret_ok) return ret; 103 104 ret = cherokee_buffer_add (buf, ptr, len); 105 if (ret != ret_ok) return ret; 106 107 cherokee_buffer_add_str (buf, " "); 108 109 /* Check if the requests goes through a proxy 110 */ 111 if (request->proxy) { 112 cherokee_buffer_add_str (buf, "http://"); 113 cherokee_buffer_add_buffer (buf, URL_HOST(url)); 114 } 107 115 108 116 cherokee_buffer_add_buffer (buf, URL_REQUEST(url)); … … 175 183 cherokee_buffer_add_str (buf, CRLF); 176 184 185 printf ("------>%s\n", buf->buf); 186 177 187 return ret_ok; 178 188 } cherokee/trunk/cherokee/request.h
r606 r921 38 38 39 39 uint16_t pipeline; 40 cherokee_boolean_t proxy; 40 41 cherokee_boolean_t keepalive; 41 42 cherokee_http_method_t method; … … 59 60 ret_t cherokee_request_header_mrproper (cherokee_request_header_t *request); 60 61 62 ret_t cherokee_request_header_uses_proxy (cherokee_request_header_t *request, cherokee_boolean_t proxy); 61 63 ret_t cherokee_request_header_add_header (cherokee_request_header_t *request, char *ptr, cuint_t len); 62 64 ret_t cherokee_request_header_build_string (cherokee_request_header_t *request, cherokee_buffer_t *buf, cherokee_buffer_t *tmp1, cherokee_buffer_t *tmp2);