curl-users
Re: libcurl - sample code for multiple out of order range requests from same url
Date: Sat, 29 Jul 2017 03:20:20 -0400
On 7/27/2017 7:57 AM, Steve Williams wrote:
> To reply to my own query - have worked this a little further & figured
> out how to determine the range a write callback refers to - by adding
> a header callback and pulling the information from the relevant header
> line.
>
> Current issue is getting http range requests to do what I want. Seems
> the spec allows servers to second guess and deliver more than was
> requested which is *so* annoying. Almost annoying enough to drop back
> to sockets and write my own protocol that delivers what I actually
> asked for :)
>
> Any insight into how to get range requests to perform more
> deterministically would be appreciated.
AFAIK if you make a range request for a single part per request and you
get 206 in reply then that will be the content you requested, but yes
206 is not guaranteed. If you make a request for multiple parts per
request then detecting that all the parts are fulfilled will be
complicated based on my reading of RFC 7233 [1]. Offhand I don't know if
libcurl handles that. If you are requesting a single part in each
request you could test for 206 in the write callback instead of parsing
the Content-Range header.
size_t realsize = size * nmemb;
...
if(user->range) {
long response_code = 0;
curl_easy_getinfo(user->curl_handle, CURLINFO_RESPONSE_CODE,
&response_code);
/* don't write server responses other than 206 partial */
if(response_code != 206)
return realsize;
}
write here
You can pass a user pointer to the write callback by using
CURLOPT_WRITEDATA [2].
RTSP ranging is different, hopefully someone experienced with it can
chime in.
[1]: https://tools.ietf.org/html/rfc7233#page-10
[2]: https://curl.haxx.se/libcurl/c/CURLOPT_WRITEDATA.html
-----------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-users
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2017-07-29