Merge branch 'openssl-providers'
[strongswan.git] / src / charon-tkm / src / ees / esa_event_service.adb
1 --
2 --  Copyright (C) 2012 Reto Buerki
3 --  Copyright (C) 2012 Adrian-Ken Rueegsegger
4 --  HSR Hochschule fuer Technik Rapperswil
5 --
6 --  This program is free software; you can redistribute it and/or modify it
7 --  under the terms of the GNU General Public License as published by the
8 --  Free Software Foundation; either version 2 of the License, or (at your
9 --  option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
10 --
11 --  This program is distributed in the hope that it will be useful, but
12 --  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 --  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 --  for more details.
15 --
16
17 with Anet.Sockets.Unix;
18 with Anet.Receivers.Stream;
19
20 with Tkmrpc.Dispatchers.Ees;
21 with Tkmrpc.Process_Stream;
22
23 pragma Elaborate_All (Anet.Receivers.Stream);
24 pragma Elaborate_All (Tkmrpc.Process_Stream);
25
26 package body Esa_Event_Service
27 is
28
29    package Unix_TCP_Receiver is new Anet.Receivers.Stream
30      (Socket_Type       => Anet.Sockets.Unix.TCP_Socket_Type,
31       Address_Type      => Anet.Sockets.Unix.Full_Path_Type,
32       Accept_Connection => Anet.Sockets.Unix.Accept_Connection);
33
34    procedure Dispatch is new Tkmrpc.Process_Stream
35      (Dispatch     => Tkmrpc.Dispatchers.Ees.Dispatch,
36       Address_Type => Anet.Sockets.Unix.Full_Path_Type);
37
38    Sock     : aliased Anet.Sockets.Unix.TCP_Socket_Type;
39    Receiver : Unix_TCP_Receiver.Receiver_Type (S => Sock'Access);
40
41    -------------------------------------------------------------------------
42
43    procedure Finalize
44    is
45    begin
46       Receiver.Stop;
47    end Finalize;
48
49    -------------------------------------------------------------------------
50
51    procedure Init (Address : Interfaces.C.Strings.chars_ptr)
52    is
53       Path : constant String := Interfaces.C.Strings.Value (Address);
54    begin
55       Sock.Init;
56       Sock.Bind (Path => Anet.Sockets.Unix.Path_Type (Path));
57       Receiver.Listen (Callback => Dispatch'Access);
58    end Init;
59
60 end Esa_Event_Service;