with Ada.Streams;
with Ada.Unchecked_Conversion;
with Agpl.Ustrings; use Agpl.Ustrings;
with Agpl.Text_Io; use Agpl.Text_Io;
package body Agpl.Socket_Utils is
function To_Char is new Ada.Unchecked_Conversion
(Ada.Streams.Stream_Element, Character);
function Read_Line (Sock : Gnat.Sockets.Socket_Type) return String is
Line : Ustring;
C : Character;
E : Ada.Streams.Stream_Element_Array (1 .. 1);
Last : Ada.Streams.Stream_Element_Offset;
use Ada.Streams;
use Gnat.Sockets;
begin
loop
Receive_Socket (Sock, E, Last);
if Last < E'First then
raise Constraint_Error with "socket has been closed";
else
C := To_Char (E (E'First));
-- Put_Line ("C: " & C);
if C = Character'Val (10) then
return +Line;
elsif C /= Character'Val (13) then
Asu.Append (Line, C);
end if;
end if;
end loop;
end Read_Line;
procedure Skip_Line (Sock : Gnat.Sockets.Socket_Type) is
Dummy : constant String := Read_Line (Sock);
pragma Unreferenced (Dummy);
begin
null;
end Skip_Line;
end Agpl.Socket_Utils;