any questions or problems! Check here how to contact the GNUnet
team: @uref{https://gnunet.org/contact_information}
+@menu
+
+* Installing GNUnet:: Installing GNUnet
+* Introduction to GNUnet Architecture:: Introduction to GNUnet Architecture
+* First Steps with GNUnet:: First Steps with GNUnet
+* Developing Applications:: Developing Applications
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Installing GNUnet
+
+* Obtaining a stable version::
+* Installing Build Tool Chain and Dependencies::
+* Obtaining the latest version from Git::
+* Compiling and Installing GNUnet::
+* Common Issues - Check your GNUnet installation::
+
+Introduction to GNUnet Architecture
+
+First Steps with GNUnet
+
+* Configure your peer::
+* Start a peer::
+* Monitor a peer::
+* Starting Two Peers by Hand::
+* Starting Peers Using the Testbed Service::
+
+Developing Applications
+
+* gnunet-ext::
+* Adapting the Template::
+* Writing a Client Application::
+* Writing a Service::
+* Interacting directly with other Peers using the CORE Service::
+* Storing peer-specific data using the PEERSTORE service::
+* Using the DHT::
+* Debugging with gnunet-arm::
+
+@end detailmenu
+@end menu
+
@node Installing GNUnet
@chapter Installing GNUnet
$ cd ..
@end example
+@menu
+* Installation::
+@end menu
+
@node Installation
@subsection Installation
Assuming all dependencies are installed, the following commands will
=============
@end example
-@node Background: GNUnet Architecture
-@chapter Background: GNUnet Architecture
+@node Introduction to GNUnet Architecture
+@chapter Introduction to GNUnet Architecture
GNUnet is organized in layers and services. Each service is composed of a
main service implementation and a client library for other programs to use
In practice, you might prefer the automated method
(@pxref{Starting Peers Using the Testbed Service}).
+@menu
+* Setup a second peer::
+* Start the second peer and connect the peers::
+* How to connect manually::
+@end menu
+
@node Setup a second peer
@subsection Setup a second peer
We will now start a second peer on your machine.
@verbatiminclude tutorial-examples/001.c
@end example
+@menu
+* Handling command-line options::
+* Writing a Client Library::
+* Writing a user interface::
+@end menu
+
@node Handling command-line options
@subsection Handling command-line options
@file{gnunet\_protocols.h} header (or an extension-specific include
file).
+@menu
+* Connecting to the Service::
+* Sending messages::
+* Receiving Replies from the Service::
+@end menu
+
@node Connecting to the Service
@subsubsection Connecting to the Service
Before you can test the client you've written so far, you'll need to also
implement the corresponding service.
+@menu
+* Code Placement::
+* Starting a Service::
+@end menu
+
@node Code Placement
@subsection Code Placement
@verbatiminclude tutorial-examples/009.c
@end example
+@menu
+* New P2P connections::
+* Receiving P2P Messages::
+* Sending P2P Messages::
+* End of P2P connections::
+@end menu
+
@node New P2P connections
@subsection New P2P connections
The service handle @code{peerstore_handle} will be needed for all subsequent
PEERSTORE operations.
+@menu
+* Storing records::
+* Retrieving records::
+* Monitoring records::
+* Disconnecting from PEERSTORE::
+@end menu
+
@node Storing records
@subsection Storing records
It is not a hard limit, but a good approximation will make the DHT more
efficient.
+@menu
+* Storing data in the DHT::
+* Obtaining data from the DHT::
+* Implementing a block plugin::
+* Monitoring the DHT::
+@end menu
+
@node Storing data in the DHT
@subsection Storing data in the DHT
Since the DHT is a dynamic environment (peers join and leave frequently)
mandatory functions that need to be implemented for a block plugin are
described in the following sections.
+@menu
+* Validating requests and replies::
+* Deriving a key from a reply::
+* Initialization of the plugin::
+* Shutdown of the plugin::
+* Integration of the plugin with the build system::
+@end menu
+
@node Validating requests and replies
@subsubsection Validating requests and replies