[go: up one dir, main page]

File: server.adb

package info (click to toggle)
anet 0.3.3-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 800 kB
  • sloc: ada: 5,366; makefile: 120; sh: 19
file content (65 lines) | stat: -rw-r--r-- 2,511 bytes parent folder | download | duplicates (2)
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;