Discussion:
libcurl - sample code for multiple out of order range requests from same url
Steve Williams
2017-07-25 18:45:47 UTC
Permalink
Hi guys,

I'm fairly new to libcurl. I need to be able to make multiple out of
order http get range requests to a file.

I understand the server won't necessarily deliver ranges as requested,
but that's what I need.

I took a look at the 10 at a time example.

https://curl.haxx.se/libcurl/c/10-at-a-time.html

What I'd like is something like that but 10 ranges of the same file as a
test.

First question :

1. The callback seems to lack sufficient parameters to understand what
I'm getting.

*static* size_t*cb*(*char* *d, size_t n, size_t l,*void* *p) { ... }

It contains no offset so I don't know what range this chunk represents.
The data wasn't requested sequentially and there will be gaps so you won't be able to munge it internally into sequential order.

I dropped in a seek callback and that's not getting hit so I can't figure it out that way.


2. Not sure how to keep session open over multiple requests.

The*init*() function in 10-at-a-time shows how to send off a request and I can extend that to add a range.

I don't want to have to specify a url each time as it's the same session. Do you infer that internally if I give you the same url pointer ?


Insight, advice welcome.

Thanks :)


Best regards,
Steve.
Steve Williams
2017-08-01 10:46:04 UTC
Permalink
I understand it's not always possible to respond to a range request - if
you're generating a response on the fly, you might not know how long
your response will be so you could send back unsatisfiable or unknown at
this time if anyone tries that on a dynamic request.

Rather than nail this properly, someone found time to define 418 I'm a
teapot (RFC 2324 <https://tools.ietf.org/html/rfc2324>)

Sigh :)

Ah well, like you say, is what it is & can always hack http servers to
my liking if it proves to be a problem.

Fairly low on the list right now.

Thanks, Daniel.

Best regards,
Steve.
Thanks Ray. I got something working that will do for now but not a
fan of the non-deterministic nature of range request responses.
Realize this is an http standards committee issue rather than
anything curl specific. curl handles the protocol as best it can.
HTTP ranges were defined that way from the start. For example, sites
that generate their responses on the fly could have a really hard time
to support byte ranges, so the protocol doesn't mandate servers to
support it.
A bit unfortunate, sure, but now a fact of life...
--
Best regards,
Steve Williams
Managing Director
Advance Software Limited

Mobile: +44 (0)745 9344854
Skype: steve--w

<><> Infinity is here...

Get your free 3D web browser today : http://advance-software.com/products

How does your organisation plan to exploit the virtual reality opportunity ?

Visit our 3D web portal : http://infinity-online.net

https://www.facebook.com/advance.sw

Twitter : @AdvanceSoftware

https://www.linkedin.com/in/advsw
Loading...