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 ---