curl.c (e466183718bfaaf347a3c02499473068a0072114) | curl.c (b69cdef876340624bb40a2054d14f298471a40a6) |
---|---|
1/* 2 * QEMU Block driver for CURL images 3 * 4 * Copyright (c) 2009 Alexander Graf <agraf@suse.de> 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights --- 521 unchanged lines hidden (view full) --- 530 531 s->multi = curl_multi_init(); 532 curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s); 533 curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb); 534#ifdef NEED_CURL_TIMER_CALLBACK 535 curl_multi_setopt(s->multi, CURLMOPT_TIMERDATA, s); 536 curl_multi_setopt(s->multi, CURLMOPT_TIMERFUNCTION, curl_timer_cb); 537#endif | 1/* 2 * QEMU Block driver for CURL images 3 * 4 * Copyright (c) 2009 Alexander Graf <agraf@suse.de> 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights --- 521 unchanged lines hidden (view full) --- 530 531 s->multi = curl_multi_init(); 532 curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s); 533 curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb); 534#ifdef NEED_CURL_TIMER_CALLBACK 535 curl_multi_setopt(s->multi, CURLMOPT_TIMERDATA, s); 536 curl_multi_setopt(s->multi, CURLMOPT_TIMERFUNCTION, curl_timer_cb); 537#endif |
538 curl_multi_do(s); | |
539 540 qemu_opts_del(opts); 541 return 0; 542 543out: 544 error_setg(errp, "CURL: Error opening file: %s", state->errmsg); 545 curl_easy_cleanup(state->curl); 546 state->curl = NULL; --- 12 unchanged lines hidden (view full) --- 559 .aiocb_size = sizeof(CURLAIOCB), 560 .cancel = curl_aio_cancel, 561}; 562 563 564static void curl_readv_bh_cb(void *p) 565{ 566 CURLState *state; | 538 539 qemu_opts_del(opts); 540 return 0; 541 542out: 543 error_setg(errp, "CURL: Error opening file: %s", state->errmsg); 544 curl_easy_cleanup(state->curl); 545 state->curl = NULL; --- 12 unchanged lines hidden (view full) --- 558 .aiocb_size = sizeof(CURLAIOCB), 559 .cancel = curl_aio_cancel, 560}; 561 562 563static void curl_readv_bh_cb(void *p) 564{ 565 CURLState *state; |
566 int running; |
|
567 568 CURLAIOCB *acb = p; 569 BDRVCURLState *s = acb->common.bs->opaque; 570 571 qemu_bh_delete(acb->bh); 572 acb->bh = NULL; 573 574 size_t start = acb->sector_num * SECTOR_SIZE; --- 32 unchanged lines hidden (view full) --- 607 state->acb[0] = acb; 608 609 snprintf(state->range, 127, "%zd-%zd", start, end); 610 DPRINTF("CURL (AIO): Reading %d at %zd (%s)\n", 611 (acb->nb_sectors * SECTOR_SIZE), start, state->range); 612 curl_easy_setopt(state->curl, CURLOPT_RANGE, state->range); 613 614 curl_multi_add_handle(s->multi, state->curl); | 567 568 CURLAIOCB *acb = p; 569 BDRVCURLState *s = acb->common.bs->opaque; 570 571 qemu_bh_delete(acb->bh); 572 acb->bh = NULL; 573 574 size_t start = acb->sector_num * SECTOR_SIZE; --- 32 unchanged lines hidden (view full) --- 607 state->acb[0] = acb; 608 609 snprintf(state->range, 127, "%zd-%zd", start, end); 610 DPRINTF("CURL (AIO): Reading %d at %zd (%s)\n", 611 (acb->nb_sectors * SECTOR_SIZE), start, state->range); 612 curl_easy_setopt(state->curl, CURLOPT_RANGE, state->range); 613 614 curl_multi_add_handle(s->multi, state->curl); |
615 curl_multi_do(s); | |
616 | 615 |
616 /* Tell curl it needs to kick things off */ 617 curl_multi_socket_action(s->multi, CURL_SOCKET_TIMEOUT, 0, &running); |
|
617} 618 619static BlockDriverAIOCB *curl_aio_readv(BlockDriverState *bs, 620 int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, 621 BlockDriverCompletionFunc *cb, void *opaque) 622{ 623 CURLAIOCB *acb; 624 --- 118 unchanged lines hidden --- | 618} 619 620static BlockDriverAIOCB *curl_aio_readv(BlockDriverState *bs, 621 int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, 622 BlockDriverCompletionFunc *cb, void *opaque) 623{ 624 CURLAIOCB *acb; 625 --- 118 unchanged lines hidden --- |