1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
--
-- Copyright (C) 2012 secunet Security Networks AG
-- Copyright (C) 2012 Reto Buerki <reet@codelabs.ch>
-- Copyright (C) 2012 Adrian-Ken Rueegsegger <ken@codelabs.ch>
--
-- This program is free software; you can redistribute it and/or modify it
-- under the terms of the GNU General Public License as published by the
-- Free Software Foundation; either version 2 of the License, or (at your
-- option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
--
-- This program is distributed in the hope that it will be useful, but
-- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- for more details.
--
-- As a special exception, if other files instantiate generics from this
-- unit, or you link this unit with other files to produce an
-- executable this unit does not by itself cause the resulting
-- executable to be covered by the GNU General Public License. This
-- exception does not however invalidate any other reasons why the
-- executable file might be covered by the GNU Public License.
--
with Ada.Streams;
with Anet.Streams;
with Anet.Sockets.Unix;
with Anet.Receivers.Stream;
procedure Server is
package Unix_TCP_Receiver is new Anet.Receivers.Stream
(Socket_Type => Anet.Sockets.Unix.TCP_Socket_Type);
procedure Handle_Request
(Recv_Data : Ada.Streams.Stream_Element_Array;
Send_Data : out Ada.Streams.Stream_Element_Array;
Send_Last : out Ada.Streams.Stream_Element_Offset);
-- Handle requests from clients.
procedure Handle_Request
(Recv_Data : Ada.Streams.Stream_Element_Array;
Send_Data : out Ada.Streams.Stream_Element_Array;
Send_Last : out Ada.Streams.Stream_Element_Offset)
is
Stream : aliased Anet.Streams.Memory_Stream_Type (Max_Elements => 4);
Number : Integer;
begin
Stream.Set_Buffer (Buffer => Recv_Data);
Integer'Read (Stream'Access, Number);
Number := Number + 1;
Integer'Write (Stream'Access, Number);
Send_Last := Stream.Get_Buffer'Length;
Send_Data (Send_Data'First .. Send_Last) := Stream.Get_Buffer;
end Handle_Request;
Socket : aliased Anet.Sockets.Unix.TCP_Socket_Type;
Receiver : Unix_TCP_Receiver.Receiver_Type (S => Socket'Access);
begin
Socket.Init;
Socket.Bind (Path => "/tmp/anet.example");
Receiver.Listen (Callback => Handle_Request'Access);
end Server;
|