$ gpg --verify libanet-{version}.tar.bz2.sig
Anet |
Anet is a networking library for the Ada programming language. FeaturesThe Anet networking library has the following features:
DownloadRelease versionThe current release version of Anet is available at http://www.codelabs.ch/download/. Verify a ReleaseTo verify the integrity and authenticity of the distribution tarball, import the key http://www.codelabs.ch/keys/0xBB793815pub.asc and type the following command: $ gpg --verify libanet-{version}.tar.bz2.sig The key fingerprint of the public key (0xBB793815) is: Key fingerprint = A2FB FF56 83FB 67D8 017B C50C F8C5 F8B5 BB79 3815 Development versionThe current development version of Anet is available through its git repository: $ git clone http://git.codelabs.ch/git/anet.git A browsable version of the repository is also available here: http://git.codelabs.ch/?p=anet.git InstallationTo compile and install Anet on your system, you need to have the following software installed:
If you want to run the unit tests before installation of Anet (which is recommended) you furthermore need to have the following installed:
Anet supports BSD and Linux operating systems. To build for BSD, append OS=bsd to the make commands below. The building and installation process of Anet is straightforward. Just type in the following commands. $ make $ make PREFIX=/usr/local install If neither PREFIX nor OS are specified, $(HOME)/libraries is used as installation directory and the library is built for Linux. TestingAnet contains a comprehensive unit test suite which can be run by entering the following command: $ make tests All tests should be marked with PASS behind the test name. To run the tests on BSD, type: $ make tests OS=bsd LicenceCopyright (C) 2011-2018 secunet Security Networks AG Copyright (C) 2011-2018 Reto Buerki <reet@codelabs.ch> Copyright (C) 2011-2018 Adrian-Ken Rueegsegger <ken@codelabs.ch> Free use of this software is granted under the terms of the GNAT Modified General Public License (GMGPL). ExampleServer (UNIX/TCP)-- -- 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 Ada.Text_IO; 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, Address_Type => Anet.Sockets.Unix.Full_Path_Type, Accept_Connection => Anet.Sockets.Unix.Accept_Connection); procedure Handle_Request (Src : Anet.Sockets.Unix.Full_Path_Type; 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 (Src : Anet.Sockets.Unix.Full_Path_Type; 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 Ada.Text_IO.Put_Line ("Received data on socket " & Anet.Sockets.Unix.To_String (Path => Src)); 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; Client (UNIX/TCP)-- -- 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.Text_IO; with Ada.Streams; with Anet.Streams; with Anet.Sockets.Unix; procedure Client is Number : Integer := 0; Socket : Anet.Sockets.Unix.TCP_Socket_Type; Stream : aliased Anet.Streams.Memory_Stream_Type (Max_Elements => 4); begin Socket.Init; Socket.Connect (Path => "/tmp/anet.example"); loop Ada.Text_IO.Put_Line ("PING" & Number'Img); Integer'Write (Stream'Access, Number); Socket.Send (Item => Stream.Get_Buffer); declare Buffer : Ada.Streams.Stream_Element_Array (1 .. 4); Last : Ada.Streams.Stream_Element_Offset; begin Socket.Receive (Item => Buffer, Last => Last); Stream.Set_Buffer (Buffer => Buffer (Buffer'First .. Last)); Integer'Read (Stream'Access, Number); Ada.Text_IO.Put_Line ("PONG" & Number'Img); end; delay 1.0; end loop; end Client; |