comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: HTTP Range Requests and streams
Date: Mon, 20 Jan 2020 09:34:19 +0100
Date: 2020-01-20T09:34:19+01:00	[thread overview]
Message-ID: <r03oma$1aju$1@gioia.aioe.org> (raw)
In-Reply-To: 6dca68ce-72bb-4faf-91eb-60b32e82698b@googlegroups.com

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

      reply	other threads:[~2020-01-20  8:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-20  8:07 HTTP Range Requests and streams gautier_niouzes
2020-01-20  8:34 ` Dmitry A. Kazakov [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox