xbmc/xbmc — pull request #2614 by Montellese (2013-04-14 19:48:15+00:00)
Title: webserver: support for HTTP Range handling (makes HTTP streams seekable)

These commits add support for HTTP Range handling in XBMC's webserver which allows other players to seek in HTTP streams accessed through the webserver. a9dcdb1 adds support for handling the following additional HTTP header fields:
* Accept-Ranges is added to any HEAD and GET response that is returning a file
* Range and If-Range are handling for any GET requests to an existing file. Range support includes handling of multiple ranges using the multipart/byteranges content type in the response data.
* Content-Range is added to any GET response that contains only a certain range of data.

There are some additional (mostly cosmetic) commits as well which do some cleanup of stuff I came across while I worked on Range support. The last commit adds optional debug logging which came in very handy during development but I wouldn't mind removing that commit if requested.

ad27c71 needs some discussion as the utility methods str2int64 et. al. don't actually do what they say (at least on win32). They use strtol et. al. which returns a long and on win32 a long is 32bit and not 64bit. So I tried to use strtoll et. al. which returns a long long (which is 64bit) but strtoll is not available on win32 and is only part of C99 and/or C++11. How is this best handled? On win32 there are alternative methods which can be called (see the code in the commit).

I have mainly tested the functionality with VLC accessing a 1080p movie from my video library through XBMC's webserver (on the same machine and from another machine) and seeking during playback multiple times. I also made a quick test using MX Player on my android phone and that worked as well (although a lot slower because that was over WiFi).