Changeset 920
- Timestamp:
- 09/19/07 13:12:50 (1 year ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cget/main.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r918 r920 1 2007-09-19 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cget/main.c: Quite a few small fixes and micro-improvements. 4 1 5 2007-09-18 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 6 cherokee/trunk/cget/main.c
r608 r920 63 63 #define COLUM_NUM 20 64 64 #define COLUM_SEP ":" 65 #define ENTRIES "cget" 65 66 66 67 … … 167 168 hdr = downloader->header; 168 169 170 TRACE(ENTRIES, "quiet=%d http_code=%d\n", quiet, hdr->response); 171 169 172 /* Check the response 170 173 */ 171 174 if (quiet == false) { 172 cherokee_buffer_t *buf; 173 174 cherokee_buffer_new (&buf); 175 cherokee_http_code_copy (HDR_RESPONSE(hdr), buf); 176 177 print_tuple_str ("Response", buf->buf); 178 179 cherokee_buffer_free (buf); 180 } 181 182 if ((! http_type_200 (hdr->response)) && (! save_headers)) { 183 return ret_error; 175 cherokee_buffer_t tmp = CHEROKEE_BUF_INIT; 176 177 cherokee_http_code_copy (HDR_RESPONSE(hdr), &tmp); 178 print_tuple_str ("Response", tmp.buf); 179 cherokee_buffer_mrproper (&tmp); 184 180 } 185 181 … … 224 220 do_download__read_body (cherokee_downloader_t *downloader, void *param) 225 221 { 222 ret_t ret; 223 ssize_t len; 226 224 char tmp[5]; 227 225 char total[5]; 228 229 ret_t ret;230 ssize_t len;231 226 232 227 /* Write down … … 243 238 cherokee_strfsize (downloader->info.body_recv, tmp); 244 239 245 fprintf (stderr, "\rDownloading: %s of %s", tmp, total); 246 fflush(stderr); 240 if (! quiet) { 241 fprintf (stderr, "\rDownloading: %s of %s", tmp, total); 242 fflush(stderr); 243 } 247 244 248 245 return ret_ok; … … 259 256 260 257 static ret_t 261 do_download (cherokee_downloader_t *downloader , cherokee_fdpoll_t *fdpoll, cherokee_buffer_t *tmp1, cherokee_buffer_t *tmp2)258 do_download (cherokee_downloader_t *downloader) 262 259 { 263 260 ret_t ret; 264 261 cherokee_downloader_status_t status; 265 c int_t headers_are_read = 0;266 c int_t reading = 0;262 cherokee_boolean_t got_headers = false; 263 cherokee_boolean_t reading = false; 267 264 268 265 do_download__init(downloader,NULL); 269 266 270 /*271 * add socket to fdpoll in write mode272 */273 cherokee_fdpoll_add(fdpoll, downloader->socket.socket, 1);274 267 for (;;) { 275 /* Inspect the file descriptors 276 */ 277 if ( cherokee_fdpoll_watch (fdpoll, POLL_TIME) > 0 ) { 278 279 280 /* Do some work 268 /* Do some real work 269 */ 270 ret = cherokee_downloader_step (downloader, NULL, NULL); 271 272 cherokee_downloader_get_status(downloader, &status); 273 TRACE(ENTRIES, "ret=%d status=%d\n", ret, status); 274 275 switch (ret) { 276 case ret_ok: 277 if ( !reading && (status & downloader_status_post_sent)) { 278 reading = true; 279 } 280 281 if ( (status & downloader_status_headers_received) && !got_headers) { 282 do_download__has_headers (downloader, NULL); 283 got_headers = true; 284 } 285 286 if (status & downloader_status_data_available) { 287 do_download__read_body (downloader, NULL); 288 } 289 290 if (status & downloader_status_finished) { 291 do_download__finish (downloader, NULL); 292 } 293 break; 294 295 case ret_eagain: 296 /* It's going on.. 281 297 */ 282 ret = cherokee_downloader_step (downloader, tmp1, tmp2); 283 284 cherokee_downloader_get_status(downloader, &status); 285 switch (ret) { 286 case ret_ok: 287 if ( !reading && (status & downloader_status_post_sent)) { 288 /* 289 * the headers and post have been sent, 290 * switch socket to read 291 */ 292 cherokee_fdpoll_set_mode (fdpoll, downloader->socket.socket, 0); 293 reading = 1; 294 } 298 break; 295 299 296 if ( (status & downloader_status_headers_received) && !headers_are_read) { 297 do_download__has_headers(downloader, NULL); 298 headers_are_read = 1; 299 } 300 301 if (status & downloader_status_data_available) { 302 do_download__read_body(downloader, NULL); 303 } 304 305 if (status & downloader_status_finished) { 306 do_download__finish(downloader, NULL); 307 } 308 309 case ret_eagain: 310 /* it is go.. continue 311 */ 312 break; 300 case ret_eof_have_data: 301 if ((status & downloader_status_headers_received) && !got_headers) { 302 do_download__has_headers (downloader, NULL); 303 got_headers = true; 304 } 305 if (status & downloader_status_data_available) { 306 do_download__read_body (downloader, NULL); 307 } 308 /* fall down */ 309 310 case ret_eof: 311 if (status & downloader_status_finished) { 312 do_download__finish (downloader, NULL); 313 } 314 /* fall down */ 315 316 case ret_error: 317 /* Finished or critical error 318 */ 319 return ret; 313 320 314 case ret_eof_have_data: 315 if (status & downloader_status_data_available) { 316 do_download__read_body(downloader, NULL); 317 } 318 case ret_eof: 319 if (status & downloader_status_finished) { 320 do_download__finish(downloader, NULL); 321 } 322 case ret_error: 323 /* Finished or critical error 324 */ 325 return ret; 326 327 default: 328 SHOULDNT_HAPPEN; 329 return ret_error; 330 } 321 default: 322 SHOULDNT_HAPPEN; 323 return ret_error; 331 324 } 332 325 } … … 339 332 main (int argc, char **argv) 340 333 { 341 int re; 342 ret_t ret; 343 int val; 344 int param_num; 345 int long_index; 346 cuint_t fdlimit; 347 cherokee_fdpoll_t *fdpoll; 334 int re; 335 ret_t ret; 336 cint_t val; 337 cint_t param_num; 338 cint_t long_index; 348 339 cherokee_downloader_t *downloader; 349 cherokee_buffer_t tmp1 = CHEROKEE_BUF_INIT;350 cherokee_buffer_t tmp2 = CHEROKEE_BUF_INIT;351 352 340 353 341 struct option long_options[] = { … … 361 349 }; 362 350 363 cherokee_buffer_ensure_size (&tmp1, 1024);364 cherokee_buffer_ensure_size (&tmp2, 1024);365 366 /* Build the fd poll object..367 */368 ret = cherokee_sys_fdlimit_get (&fdlimit);369 if (ret != ret_ok) return EXIT_ERROR;370 371 ret = cherokee_fdpoll_best_new (&fdpoll, fdlimit, fdlimit);372 if (ret != ret_ok) return EXIT_ERROR;373 374 351 /* Parse known parameters 375 352 */ … … 379 356 printf ("Cherokee Downloader %s\n" 380 357 "Written by Alvaro Lopez Ortega <alvaro@gnu.org>\n\n" 381 "Copyright (C) 2001-200 6Alvaro Lopez Ortega.\n"358 "Copyright (C) 2001-2007 Alvaro Lopez Ortega.\n" 382 359 "This is free software; see the source for copying conditions. There is NO\n" 383 360 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", … … 425 402 } 426 403 404 cherokee_trace_init(); 405 427 406 for (val=optind; val<optind+param_num; val++) { 428 cherokee_buffer_t *url;407 cherokee_buffer_t url = CHEROKEE_BUF_INIT; 429 408 430 409 /* Build the url buffer 431 410 */ 432 ret = cherokee_buffer_new (&url); 433 if (ret != ret_ok) return EXIT_ERROR; 434 435 ret = cherokee_buffer_add_va (url, "%s", argv[val]); 411 ret = cherokee_buffer_add_va (&url, "%s", argv[val]); 436 412 if (ret != ret_ok) return EXIT_ERROR; 437 413 … … 444 420 if (ret != ret_ok) return EXIT_ERROR; 445 421 446 ret = cherokee_downloader_set_url (downloader, url);422 ret = cherokee_downloader_set_url (downloader, &url); 447 423 if (ret != ret_ok) return EXIT_ERROR; 448 424 … … 452 428 /* Download it! 453 429 */ 454 ret = do_download (downloader , fdpoll, &tmp1, &tmp2);430 ret = do_download (downloader); 455 431 if ((ret != ret_ok) && (ret != ret_eof)) { 456 432 return EXIT_ERROR; … … 459 435 /* Free the objects.. 460 436 */ 461 cherokee_buffer_ free (url);437 cherokee_buffer_mrproper (&url); 462 438 cherokee_downloader_free (downloader); 463 439 }