From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED.fn3LatRFkm9/xzEj7F2/NQ.user.gioia.aioe.org!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: HTTP Range Requests and streams Date: Mon, 20 Jan 2020 09:34:19 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <6dca68ce-72bb-4faf-91eb-60b32e82698b@googlegroups.com> NNTP-Posting-Host: fn3LatRFkm9/xzEj7F2/NQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: en-US Xref: reader01.eternal-september.org comp.lang.ada:57904 Date: 2020-01-20T09:34:19+01:00 List-Id: On 2020-01-20 09:07, gautier_niouzes@hotmail.com wrote: > Is there a library supporting HTTP Range Requests (request only portions of a resource on the server: https://en.wikipedia.org/wiki/Byte_serving ) ? > > Just curious... > > An idea would be to map a stream type (a derived type from Ada.Streams.Root_Stream_Type, with methods Index and Set_Index) onto that mechanism. Do you mean file transfer built-in into the server? A HTTP server library merely implements the protocol. What and how the user implementation of the server does on top of that is not the library business. The HTTP implementation in Simple Components gets you a request callback. In the response you can give an access to a Root_Stream_Type'Class object to take the body from. Now, if you wanted not the whole stream, but a part of it, you could do type Stream_Slice ( Content : not null access Root_Stream_Type'Class; Start : Stream_Element_Offset Size : Stream_Element_Count ) is record Read_Count : Stream_Element_Count := 0; end record; overriding procedure Read (...) -- Call Set_Index when Read_Count = 0 I think you get the idea. I am not sure of it, but I believe that GNAT AWS also allows giving a stream to take the response body from. So IMO it should work relatively smoothly with either. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de