gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [lsd0000] 01/02: basic setup


From: gnunet
Subject: [GNUnet-SVN] [lsd0000] 01/02: basic setup
Date: Wed, 11 Jul 2018 10:09:20 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository lsd0000.

commit 9d4751cc26e2265f81dc475bfd33f28079ac7242
Author: Christian Grothoff <address@hidden>
AuthorDate: Wed Jul 11 10:07:54 2018 +0200

    basic setup
---
 .gitignore             |    9 +
 AUTHORS                |    1 +
 COPYING                |    1 +
 ChangeLog              |    3 +
 INSTALL                |  368 ++++++++++++
 Makefile.am            |  115 ++++
 NEWS                   |    1 +
 README                 |    1 +
 bootstrap              |    3 +
 configure.ac           |  114 ++++
 docstyle.css           |   76 +++
 fdl-1.3.texi           |  505 ++++++++++++++++
 gnunet-c-tutorial.texi | 1560 ++++++++++++++++++++++++++++++++++++++++++++++++
 gnunet.texi            |  257 ++++++++
 htmlxref.cnf           |  668 +++++++++++++++++++++
 lsd0000.texi           |   84 +++
 run-gendocs.sh         |   18 +
 17 files changed, 3784 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..98ddd3a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+Makefile.in
+aclocal.m4
+autom4te.cache/
+configure
+install-sh
+*~
+mdate-sh
+missing
+texinfo.tex
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..bf9370c
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Chrsitian Grothoff <address@hidden>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..2d93752
--- /dev/null
+++ b/COPYING
@@ -0,0 +1 @@
+See fdl-1.3.texi.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..5a39b65
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,3 @@
+Wed Jul 11 10:04:55 CEST 2018
+       Created first sketch for a template.
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..8865734
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,368 @@
+Installation Instructions
+*************************
+
+   Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
+Foundation, Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell command './configure && make && make install'
+should configure, build, and install this package.  The following
+more-detailed instructions are generic; see the 'README' file for
+instructions specific to this package.  Some packages provide this
+'INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The 'configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a 'Makefile' in each directory of the package.
+It may also create one or more '.h' files containing system-dependent
+definitions.  Finally, it creates a shell script 'config.status' that
+you can run in the future to recreate the current configuration, and a
+file 'config.log' containing compiler output (useful mainly for
+debugging 'configure').
+
+   It can also use an optional file (typically called 'config.cache' and
+enabled with '--cache-file=config.cache' or simply '-C') that saves the
+results of its tests to speed up reconfiguring.  Caching is disabled by
+default to prevent problems with accidental use of stale cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how 'configure' could check whether to do them, and mail
+diffs or instructions to the address given in the 'README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point 'config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file 'configure.ac' (or 'configure.in') is used to create
+'configure' by a program called 'autoconf'.  You need 'configure.ac' if
+you want to change it or regenerate 'configure' using a newer version of
+'autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. 'cd' to the directory containing the package's source code and type
+     './configure' to configure the package for your system.
+
+     Running 'configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type 'make' to compile the package.
+
+  3. Optionally, type 'make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type 'make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the 'make install' phase executed with root
+     privileges.
+
+  5. Optionally, type 'make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior 'make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing 'make clean'.  To also remove the
+     files that 'configure' created (so you can compile the package for
+     a different kind of computer), type 'make distclean'.  There is
+     also a 'make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type 'make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide 'make
+     distcheck', which can by used by developers to test that all other
+     targets like 'make install' and 'make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the 'configure' script does not know about.  Run './configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give 'configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here is
+an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU 'make'.  'cd' to the
+directory where you want the object files and executables to go and run
+the 'configure' script.  'configure' automatically checks for the source
+code in the directory that 'configure' is in and in '..'.  This is known
+as a "VPATH" build.
+
+   With a non-GNU 'make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use 'make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple '-arch' options to the
+compiler but only a single '-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the 'lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, 'make install' installs the package's commands under
+'/usr/local/bin', include files under '/usr/local/include', etc.  You
+can specify an installation prefix other than '/usr/local' by giving
+'configure' the option '--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like '--bindir=DIR' to specify different values for particular
+kinds of files.  Run 'configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the default
+for these options is expressed in terms of '${prefix}', so that
+specifying just '--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to 'configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+'make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, 'make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+'${prefix}'.  Any directories that were specified during 'configure',
+but not in terms of '${prefix}', must each be overridden at install time
+for the entire installation to be relocated.  The approach of makefile
+variable overrides for each directory variable is required by the GNU
+Coding Standards, and ideally causes no recompilation.  However, some
+platforms have known limitations with the semantics of shared libraries
+that end up requiring recompilation when using this method, particularly
+noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the 'DESTDIR' variable.  For
+example, 'make install DESTDIR=/alternate/directory' will prepend
+'/alternate/directory' before all installation names.  The approach of
+'DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of '${prefix}'
+at 'configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving 'configure' the
+option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
+
+   Some packages pay attention to '--enable-FEATURE' options to
+'configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to '--with-PACKAGE' options, where PACKAGE
+is something like 'gnu-as' or 'x' (for the X Window System).  The
+'README' should mention any '--enable-' and '--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, 'configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the 'configure' options '--x-includes=DIR' and
+'--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of 'make' will be.  For these packages, running './configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with 'make V=1'; while running './configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with 'make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC
+is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX 'make' updates targets which have the same time stamps as their
+prerequisites, which makes it generally unusable when shipped generated
+files such as 'configure' are involved.  Use GNU 'make' instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its '<wchar.h>' header file.  The option '-nodtk' can be used as a
+workaround.  If GNU CC is not installed, it is therefore recommended to
+try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put '/usr/ucb' early in your 'PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in '/usr/bin'.  So, if you need '/usr/ucb'
+in your 'PATH', put it _after_ '/usr/bin'.
+
+   On Haiku, software installed for all users goes in '/boot/common',
+not '/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features 'configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, 'configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+'--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as 'sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file 'config.sub' for the possible values of each field.  If
+'config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option '--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with '--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for 'configure' scripts to share,
+you can create a site shell script called 'config.site' that gives
+default values for variables like 'CC', 'cache_file', and 'prefix'.
+'configure' looks for 'PREFIX/share/config.site' if it exists, then
+'PREFIX/etc/config.site' if it exists.  Or, you can set the
+'CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all 'configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to 'configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the 'configure' command line, using 'VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified 'gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
+Autoconf limitation.  Until the limitation is lifted, you can use this
+workaround:
+
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+'configure' Invocation
+======================
+
+   'configure' recognizes the following options to control how it
+operates.
+
+'--help'
+'-h'
+     Print a summary of all of the options to 'configure', and exit.
+
+'--help=short'
+'--help=recursive'
+     Print a summary of the options unique to this package's
+     'configure', and exit.  The 'short' variant lists options used only
+     in the top level, while the 'recursive' variant lists options also
+     present in any nested packages.
+
+'--version'
+'-V'
+     Print the version of Autoconf used to generate the 'configure'
+     script, and exit.
+
+'--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally 'config.cache'.  FILE defaults to '/dev/null' to
+     disable caching.
+
+'--config-cache'
+'-C'
+     Alias for '--cache-file=config.cache'.
+
+'--quiet'
+'--silent'
+'-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to '/dev/null' (any error
+     messages will still be shown).
+
+'--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     'configure' can determine that directory automatically.
+
+'--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names:: for
+     more details, including other options available for fine-tuning the
+     installation locations.
+
+'--no-create'
+'-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+'configure' also accepts some other, not widely useful, options.  Run
+'configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..4bedb04
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,115 @@
+# This Makefile.am is in the public domain
+
+LSD_NUMBER = 0000
+
+docdir = $(datadir)/doc/lsd/
+
+# Main documentation
+
+info_TEXINFOS =                                                \
+       lsd$(LSD_NUMBER).texi
+DISTCLEANFILES =                                               \
+       lsd$(LSD_NUMBER).cps                            
+
+
+# Timestamping
+version2.texi:
+       echo "@set UPDATED $(date +'%d %B %Y')" > $@
+       echo "@set UPDATED-MONTH $(date +'%B %Y')" >> $@
+       echo "@set EDITION $(PACKAGE_VERSION)" >> $@
+       echo "@set VERSION $(PACKAGE_VERSION)" >> $@
+
+
+# Styling
+AM_MAKEINFOHTMLFLAGS = --no-split --css-ref=docstyle.css
+
+EXTRA_DIST =                                                   \
+       htmlxref.cnf                                            \
+       run-gendocs.sh                                          \
+       docstyle.css
+
+# Images
+# 
+infoimagedir = $(infodir)/images
+
+#DOT_FILES = images/$(wildcard *.dot)
+#DOT_VECTOR_GRAPHICS =                                                         
\
+#      $(DOT_FILES:%.dot=%.eps)                                                
\
+#      $(DOT_FILES:%.dot=%.pdf)
+
+# dist_infoimage_DATA =                                        
+#      images/example.png
+#      images/$(wildcard *.png)                                                
\
+#      images/$(wildcard *.svg)
+#      $(DOT_FILES:%.dot=%.png)
+
+#DOT_OPTIONS =                                                                 
\
+#      -Gratio=.9 -Gnodesep=.005 -Granksep=.00005                              
\
+#      -Nfontsite=9 -Nheight=.1 -Nwidth=.1
+
+# .dot.png:
+#      $(AM_V_DOT)$(DOT) -Tpng $(DOT_OPTIONS) < "$<" > 
"$(srcdir)/address@hidden"; \
+#      mv "$(srcdir)/address@hidden" "$(srcdir)/$@"
+# .dot.pdf:
+#      $(AM_V_DOT)$(DOT) -Tpdf $(DOT_OPTIONS) < "$<" > 
"$(srcdir)/address@hidden"; \
+#      mv "$(srcdir)/address@hidden" "$(srcdir)/$@"
+# .dot.eps:
+#      $(AM_V_DOT)$(DOT) -Teps $(DOT_OPTIONS) < "$<" > 
"$(srcdir)/address@hidden"; \
+#      mv "$(srcdir)/address@hidden" "$(srcdir)/$@"
+# .png.eps:
+#      $(AM_V_GEN)convert "$<" "address@hidden"; \
+#      mv "address@hidden" "$@"
+# pdf-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.pdf)
+# info-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.png)
+# ps-local: $(DOT_FILES=%.dot=$(top_srcdir)/%.eps)                \
+#      $(top_srcdir)/%D%/images/coreutils-size-map.eps
+# dvi-local: ps-local
+
+# if HAVE_EXTENDED_DOCUMENTATION_BUILDING
+#daemon_lego_block.png: images/daemon_lego_block.svg
+#      convert images/daemon_lego_block.svg images/daemon_lego_block.png &&
+#      pngcrush images/daemon_lego_block.png images/daemon_lego_block.png
+# endif
+
+
+# Source code
+#examples =                                    \
+#      examples/001.c                                                  
+
+
+
+
+# Installation
+
+doc-all-install:
+       @mkdir -p $(DESTDIR)/$(docdir)
+       @mkdir -p $(DESTDIR)/$(infoimagedir)
+       @mkdir -p $(DESTDIR)/$(infodir)
+       @install -m 0755 lsd$(LSD_NUMBER).pdf $(DESTDIR)/$(docdir)
+       @install -m 0755 lsd$(LSD_NUMBER).info $(DESTDIR)/$(infodir)
+       @install lsd$(LSD_NUMBER).html $(DESTDIR)/$(docdir)
+
+doc-gendoc-install:
+       @mkdir -p $(DESTDIR)/$(docdir)
+       @cp -r manual $(DESTDIR)/$(docdir)
+#      @cp -r images $(DESTDIR)/$(infoimagedir)
+
+dev-build: version.texi version2.texi
+       @makeinfo --pdf lsd$(LSD_NUMBER).texi
+       @makeinfo --html lsd$(LSD_NUMBER).texi
+       @makeinfo --no-split lsd$(LSD_NUMBER).texi
+
+
+# Cleaning
+# FIXME: rm *.html and *.pdf
+#doc-clean:
+#      @rm *.aux *.log *.toc *.cp *.cps
+
+clean:
+       @rm -f lsd$(LSD_NUMBER).pdf
+       @rm -f lsd$(LSD_NUMBER).html
+       @rm -f lsd$(LSD_NUMBER).info
+       @rm -f lsd$(LSD_NUMBER).info-*
+       @rm -fr lsd$(LSD_NUMBER).t2p
+
+#.PHONY: version.texi
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..898a3da
--- /dev/null
+++ b/NEWS
@@ -0,0 +1 @@
+See ChangeLog.
diff --git a/README b/README
new file mode 100644
index 0000000..86fa194
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+This is a template for LSDs. See LSD0001 about LSDs in general.
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 0000000..435da14
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,3 @@
+#!/bin/sh
+rm -rf libltdl
+autoreconf -if
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..953482a
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,114 @@
+# This file is part of GNUnet.
+# (C) 2001--2018 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet 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
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+#
+# Process this file with autoconf to produce a configure script.
+#
+#
+AC_PREREQ(2.61)
+# Checks for programs.
+AC_INIT([lsd0000], [0.0.0], address@hidden)
+
+AM_INIT_AUTOMAKE
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_SUBST(MKDIR_P)
+
+# TODO: add check for VERSION
+# TODO: add check for alternatives
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+
+# should the build process be building the documentation?
+AC_MSG_CHECKING(whether to build documentation)
+AC_ARG_ENABLE([documentation],
+   [AS_HELP_STRING([--disable-documentation], [do not build the 
documentation])],
+   [documentation=${enableval}],
+   [documentation=yes])
+AC_MSG_RESULT($documentation)
+if test "x$documentation" = "xyes"
+then
+  AM_CONDITIONAL([DOCUMENTATION],true)
+  AC_DEFINE([DOCUMENTATION],[1],[Building the documentation])
+else
+  AM_CONDITIONAL([DOCUMENTATION],false)
+  AC_DEFINE([DOCUMENTATION],[0],[Not building the documentation])
+fi
+
+# should the build process be building only the documentation?
+AC_MSG_CHECKING(whether to build only documentation)
+AC_ARG_ENABLE([documentation-only],
+   [AS_HELP_STRING([--enable-documentation-only], [build only the 
documentation])],
+   [documentation_only=${enableval}],
+   [documentation_only=no])
+AC_MSG_RESULT($documentation_only)
+if test "x$documentation_only" = "xyes"
+then
+  AM_CONDITIONAL([DOCUMENTATION_ONLY],true)
+  AC_DEFINE([DOCUMENTATION_ONLY],[1],[Building only the documentation])
+else
+  AM_CONDITIONAL([DOCUMENTATION_ONLY],false)
+  AC_DEFINE([DOCUMENTATION_ONLY],[0],[Not building only the documentation])
+fi
+
+# version info
+# TODO: git blame says this predates our switch to git. git-svn should be 
adjusted to simply git, or
+# an external script that does the job.
+AC_PATH_PROG(svnversioncommand, svnversion)
+AC_PATH_PROG(gitcommand, git)
+AC_MSG_CHECKING(for source being under a VCS)
+svn_version=
+gitsvn_version=
+AS_IF([test ! "X$svnversioncommand" = "X"],
+[
+  svn_version=$(cd $srcdir ; $svnversioncommand -n 2>/dev/null)
+])
+AS_IF([test ! "X$gitcommand" = "X"],
+[
+  gitsvn_version=$(cd $srcdir ; git log -1 2>/dev/null | grep "git-svn-id" | 
sed -e 's/address@hidden([[0-9]]\+\) .*/\1/')
+])
+AS_IF([test "X$svn_version" = "X" -o "X$svn_version" = "Xexported" -o 
"X$svn_version" = "XUnversioned directory"],
+[
+  AS_IF([test "X$gitsvn_version" = "X"],
+  [
+    vcs_name="no"
+    vcs_version="\"release\""
+  ],
+  [
+    vcs_name="yes, git-svn"
+    vcs_version="\"svn-r$gitsvn_version\""
+  ])
+],
+[
+  vcs_name="yes, svn"
+  vcs_version="\"svn-r$svn_version\""
+])
+AC_MSG_RESULT($vcs_name)
+
+AC_MSG_CHECKING(VCS version)
+AC_MSG_RESULT($vcs_version)
+AC_DEFINE_UNQUOTED(VCS_VERSION, [$vcs_version], [VCS revision/hash or tarball 
version])
+
+AC_CONFIG_FILES([
+Makefile
+])
+AC_OUTPUT
+
+# Finally: summary!
+
+AC_MSG_NOTICE([Ready])
+
diff --git a/docstyle.css b/docstyle.css
new file mode 100644
index 0000000..8719248
--- /dev/null
+++ b/docstyle.css
@@ -0,0 +1,76 @@
+html, body {
+    font-size: 1em;
+    text-align: left;
+    text-decoration: none;
+}
+html { background-color: #e7e7e7; }
+
+body {
+    max-width: 74.92em;
+    margin: 0 auto;
+    padding: .5em 1em 1em 1em;
+    background-color: white;
+    border: .1em solid #c0c0c0;
+}
+
+h1, h2, h3, h4 { color: #333; }
+h5, h6, dt { color: #222; }
+
+
+a h3 {
+    color: #005090;
+}
+
+a[href] { color: #005090; }
+a[href]:visited { color: #100070; }
+a[href]:active, a[href]:hover {
+    color: #100070;
+    text-decoration: none;
+}
+
+.linkrow {
+    margin: 3em 0;
+}
+
+.linkrow {
+    text-align: center;
+}
+
+div.example { padding: .8em 1.2em .4em; }
+pre.example { padding: .8em 1.2em; }
+div.example, pre.example {
+    margin: 1em 0 1em 3% ;
+    -webkit-border-radius: .3em;
+    -moz-border-radius: .3em;
+    border-radius: .3em;
+    border: 1px solid #d4cbb6;
+    background-color: #f2efe4;
+}
+div.example > pre.example {
+    padding: 0 0 .4em;
+    margin: 0;
+    border: none;
+}
+
+
+/* This makes the very long tables of contents in Gnulib and other
+   manuals easier to read. */
+.contents ul, .shortcontents ul { font-weight: bold; }
+.contents ul ul, .shortcontents ul ul { font-weight: normal; }
+.contents ul { list-style: none; }
+
+/* For colored navigation bars (Emacs manual): make the bar extend
+   across the whole width of the page and give it a decent height. */
+.header, .node { margin: 0 -1em; padding: 0 1em; }
+.header p, .node p { line-height: 2em; }
+
+/* For navigation links */
+.node a, .header a { display: inline-block; line-height: 2em; }
+.node a:hover, .header a:hover { background: #f2efe4; }
+
+table.cartouche {
+    border-collapse: collapse;
+    border-color: darkred;
+    border-style: solid;
+    border-width: 3px;
+}
diff --git a/fdl-1.3.texi b/fdl-1.3.texi
new file mode 100644
index 0000000..cb71f05
--- /dev/null
+++ b/fdl-1.3.texi
@@ -0,0 +1,505 @@
address@hidden The GNU Free Documentation License.
address@hidden Version 1.3, 3 November 2008
+
address@hidden This file is intended to be included within another document,
address@hidden hence no sectioning command or @node.
+
address@hidden
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, 
Inc.
address@hidden://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
address@hidden display
+
address@hidden 0
address@hidden
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
address@hidden
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, address@hidden input
+format, SGML or XML using a publicly available
+DTD, and standard-conforming simple HTML,
+PostScript or PDF designed for human modification.  Examples
+of transparent image formats include PNG, XCF and
+JPG.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, SGML or
+XML for which the DTD and/or processing tools are
+not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
address@hidden
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
address@hidden
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
address@hidden
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
address@hidden A
address@hidden
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
address@hidden
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
address@hidden
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
address@hidden
+Preserve all the copyright notices of the Document.
+
address@hidden
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
address@hidden
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
address@hidden
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
address@hidden
+Include an unaltered copy of this License.
+
address@hidden
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
address@hidden
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
address@hidden
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
address@hidden
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
address@hidden
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
address@hidden
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
address@hidden
+Preserve any Warranty Disclaimers.
address@hidden enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
address@hidden
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
address@hidden
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
address@hidden
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
address@hidden
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
address@hidden
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
address@hidden
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
address@hidden://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
address@hidden
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
address@hidden enumerate
+
address@hidden
address@hidden ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
address@hidden
address@hidden
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
address@hidden group
address@hidden smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the address@hidden''@: line with this:
+
address@hidden
address@hidden
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
address@hidden group
address@hidden smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
address@hidden Local Variables:
address@hidden ispell-local-pdict: "ispell-dict"
address@hidden End:
diff --git a/gnunet-c-tutorial.texi b/gnunet-c-tutorial.texi
new file mode 100644
index 0000000..fb6e717
--- /dev/null
+++ b/gnunet-c-tutorial.texi
@@ -0,0 +1,1560 @@
+\input texinfo
address@hidden %**start of header
address@hidden gnunet-c-tutorial.info
address@hidden UTF-8
address@hidden GNUnet C Tutorial
address@hidden 2
address@hidden %**end of header
+
address@hidden including 'version.texi' makes makeinfo throw errors.
address@hidden version2.texi
+
address@hidden
+Copyright @copyright{} 2001-2018 GNUnet e.V.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+copy of the license is included in the section entitled ``GNU Free
+Documentation License''.
+
+A copy of the license is also available from the Free Software
+Foundation Web site at @url{http://www.gnu.org/licenses/fdl.html}.
+
+Alternately, this document is also available under the General
+Public License, version 3 or later, as published by the Free Software
+Foundation.  A copy of the license is included in the section entitled
+``GNU General Public License''.
+
+A copy of the license is also available from the Free Software
+Foundation Web site at @url{http://www.gnu.org/licenses/gpl.html}.
address@hidden copying
+
address@hidden Tutorial
address@hidden
+* GNUnet-C-Tutorial: (gnunet-c-tutorial).       C Tutorial for GNunet
address@hidden direntry
+
+
address@hidden
address@hidden GNUnet C Tutorial
address@hidden A Tutorial for GNUnet @value{VERSION} (C version)
address@hidden The GNUnet Developers
+
address@hidden
address@hidden 0pt plus 1filll
+
address@hidden
address@hidden titlepage
+
address@hidden
+
address@hidden **** TODO
address@hidden 1. Update content?
address@hidden 2. Either reference main documentation or
address@hidden 3. Merge this into main documentation
+
address@hidden Top
address@hidden Introduction
+
+This tutorials explains how to install GNUnet on a
+GNU/Linux system and gives an introduction on how
+GNUnet can be used to develop a Peer-to-Peer application.
+Detailed installation instructions for
+various operating systems and a detailed list of all
+dependencies can be found on our website at
address@hidden://gnunet.org/installation} and in our
+Reference Documentation (GNUnet Handbook).
+
+Please read this tutorial carefully since every single step is
+important, and do not hesitate to contact the GNUnet team if you have
+any questions or problems! Visit this link in your webbrowser to learn
+how to contact the GNUnet team:
address@hidden://gnunet.org/contact_information}
+
address@hidden
+
+* Installing GNUnet::                   Installing GNUnet
+* Introduction to GNUnet Architecture:: Introduction to GNUnet Architecture
+* First Steps with GNUnet::             First Steps with GNUnet
+* Developing Applications::             Developing Applications
+
address@hidden
+ --- 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::
+
address@hidden detailmenu
address@hidden menu
+
address@hidden Installing GNUnet
address@hidden Installing GNUnet
+
+First of all you have to install a current version of GNUnet.
+You can download a tarball of a stable version from GNU FTP mirrors
+or obtain the latest development version from our Git repository.
+
+Most of the time you should prefer to download the stable version
+since with the latest development version things can be broken,
+functionality can be changed or tests can fail. You should only use
+the development version if you know that you require a certain
+feature or a certain issue has been fixed since the last release.
+
address@hidden
+* 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::
address@hidden menu
+
address@hidden Obtaining a stable version
address@hidden Obtaining a stable version
+
+Download the tarball from
address@hidden://ftp.gnu.org/gnu/gnunet/address@hidden
+
+Make sure to download the associated @file{.sig} file and to verify the
+authenticity of the tarball against it, like this:
+
address@hidden
+$ wget https://ftp.gnu.org/gnu/gnunet/address@hidden
+$ gpg --verify-files address@hidden
address@hidden example
+
address@hidden
+If this command fails because you do not have the required public key,
+then you need to run the following command to import it:
+
address@hidden
+$ gpg --keyserver keys.gnupg.net --recv-keys 48426C7E
address@hidden example
+
address@hidden
+and rerun the @code{gpg --verify-files} command.
+
address@hidden:}@
address@hidden pub key to sign the 0.10.1 release has been
+revoked}. You will get an error message stating that
address@hidden is no known public key or that it has been revoked}.
+The next release of GNUnet will have a valid signature
+again. We are sorry for the inconvenience this causes.
+Another possible source you could use is our
+"gnunet" git repository which, since the change from SVN to git in 2016,
+has mandatory signed commits by every developer.
+
+After verifying the signature you can extract the tarball.
+The resulting directory will be renamed to @file{gnunet}, which we will
+be using in the remainder of this document to refer to the
+root of the source directory.
+
address@hidden
+$ tar xvzf address@hidden
+$ mv address@hidden gnunet
address@hidden example
+
address@hidden FIXME: This can be irritating for the reader - First we say git 
should
address@hidden be avoid unless it is really required, and then we write this
address@hidden paragraph:
address@hidden
+However, please note that stable versions can be very outdated.
+As a developer you are @b{strongly} encouraged to use the version
+from @uref{https://gnunet.org/git/, git}.
+
address@hidden  Installing Build Tool Chain and Dependencies
address@hidden Installing Build Tool Chain and Dependencies
+
+To successfully compile GNUnet, you need the tools to build GNUnet and
+the required dependencies. Please take a look at the
+GNUnet Reference Documentation
+(@pxref{Dependencies, The GNUnet Reference Documentation,, gnunet, The GNUnet 
Reference Documentation})
+for a list of required dependencies and
+(@pxref{Generic installation instructions, The GNUnet Reference 
Documentation,, gnunet, The GNUnet Reference Documentation})
+read its Installation chapter for specific instructions for
+your Operating System.
+Please check the notes at the end of the configure process about
+required dependencies.
+
+For GNUnet bootstrapping support and the HTTP(S) plugin you should
+install @uref{https://gnunet.org/gnurl, libgnurl}.
+For the filesharing service you should install at least one of the
+datastore backends (MySQL, SQlite and PostgreSQL are supported).
+
address@hidden Obtaining the latest version from Git
address@hidden Obtaining the latest version from Git
+
+The latest development version can be obtained from our Git repository.
+To get the code you need to have @code{Git} installed. Usually your
+Operating System package manager should provide a suitable distribution
+of git (otherwise check out Guix or Nix). If you are using an Operating
+System based on Debian's apt:
+
address@hidden
+$ sudo apt-get install git
address@hidden example
+
+This is required for obtaining the repository, which is achieved with
+the following command:
+
address@hidden
+$ git clone https://gnunet.org/git/gnunet
address@hidden example
+
address@hidden
+After cloning the repository, you have to execute the @file{bootstrap}
+script in the new directory:
+
address@hidden
+$ cd gnunet
+$ ./bootstrap
address@hidden example
+
address@hidden
+The remainder of this tutorial will assume that you have the
+Git branch ``master'' checked out.
+
address@hidden Compiling and Installing GNUnet
address@hidden Compiling and Installing GNUnet
+
+Note: This section is a duplication of the more in depth
address@hidden Installation Handbook, The GNUnet Reference Documentation,, 
gnunet, The GNUnet Reference Documentation}.
+
+First, you need to install libgnupgerror @geq{} 1.27 and
+libgcrypt @geq{} 1.7.6:
+
address@hidden
+$ export GNUPGFTP="https://www.gnupg.org/ftp/gcrypt";
+$ wget $GNUPGFTP/libgpg-error/libgpg-error-1.27.tar.bz2
+$ tar xf libgpg-error-1.27.tar.bz2
+$ cd libgpg-error-1.27
+$ ./configure
+$ make
+$ sudo make install
+$ cd ..
address@hidden example
+
address@hidden
+$ export GNUPGFTP="https://www.gnupg.org/ftp/gcrypt";
+$ wget $GNUPGFTP/libgcrypt/libgcrypt-1.7.6.tar.bz2
+$ tar xf libgcrypt-1.7.6.tar.bz2
+$ cd libgcrypt-1.7.6
+$ ./configure
+$ make
+$ sudo make install
+$ cd ..
address@hidden example
+
address@hidden
+* Installation::
address@hidden menu
+
address@hidden Installation
address@hidden Installation
+Assuming all dependencies are installed, the following commands will
+compile and install GNUnet in your home directory. You can specify the
+directory where GNUnet will be installed by changing the
address@hidden value when calling @command{./configure}.  If
+you do not specifiy a prefix, GNUnet is installed in the directory
address@hidden/usr/local}. When developing new applications you may want
+to enable verbose logging by adding @code{--enable-logging=verbose}:
+
address@hidden
+$ export PREFIX=$HOME
+$ ./configure --prefix=$PREFIX --enable-logging
+$ make
+$ make install
address@hidden example
+
address@hidden
+After installing GNUnet you have to add your GNUnet installation
+to your path environmental variable. In addition you have to
+create the @file{.config} directory in your home directory
+(unless it already exists) where GNUnet stores its data and an
+empty GNUnet configuration file:
+
address@hidden
+$ export PATH=$PATH:$PREFIX/bin
+$ echo export PATH=$PREFIX/bin:\\$PATH >> ~/.bashrc
+$ mkdir ~/.config/
+$ touch ~/.config/gnunet.conf
address@hidden example
+
address@hidden Common Issues - Check your GNUnet installation
address@hidden Common Issues - Check your GNUnet installation
+
+You should check your installation to ensure that installing GNUnet
+was successful up to this point. You should be able to access GNUnet's
+binaries and run GNUnet's self check.
+
address@hidden
+$ which gnunet-arm
+$PREFIX/bin/gnunet-arm
address@hidden example
+
address@hidden
+should return $PREFIX/bin/gnunet-arm (where $PREFIX is the location
+you  have set earlier). It should be located in your
+GNUnet installation and the output should not be empty.
+
+If you see an output like:
+
address@hidden
+$ which gnunet-arm
address@hidden example
+
address@hidden
+check your PATH variable to ensure GNUnet's @file{bin} directory is
+included.
+
+GNUnet provides tests for all of its subcomponents. Assuming you have
+successfully built GNUnet, run
+
address@hidden
+$ cd gnunet
+$ make check
address@hidden example
+
address@hidden
+to execute tests for all components. @command{make check} traverses all
+subdirectories in @file{src}. For every subdirectory you should
+get a message like this:
+
address@hidden
+make[2]: Entering directory `/home/$USER/gnunet/contrib'
+PASS: test_gnunet_prefix
+=============
+1 test passed
+=============
address@hidden example
+
address@hidden Introduction to GNUnet Architecture
address@hidden 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
+the service's functionality, described by an API.
address@hidden This approach is shown in
address@hidden FIXME: enable this once the commented block below works:
address@hidden figure~\ref fig:service.
+Some services provide an additional command line tool to enable the user
+to interact with the service.
+
+Very often it is other GNUnet services that will use these APIs to build
+the higher layers of GNUnet on top of the lower ones. Each layer expands
+or extends the functionality of the service below (for instance, to build
+a mesh on top of a DHT).
address@hidden FXIME: See comment above.
address@hidden See figure ~\ref fig:interaction for an illustration of this 
approach.
+
address@hidden ** @image filename[, width[, height[, alttext[, extension]]]]
address@hidden FIXME: Texlive (?) 20112 makes the assumption that this means
address@hidden 'images/OBJECTNAME.txt' but later versions of it (2017) use this
address@hidden syntax as described below.
address@hidden TODO: Checkout the makedoc script Guile uses.
+
address@hidden FIXME!!!
address@hidden @image{images/gnunet-tutorial-service,,5in,Service with API and 
network protocol,.png}
address@hidden @image{images/gnunet-tutorial-system,,5in,The layered system 
architecture of GNUnet,.png}
+
address@hidden \begin{figure}[!h]
address@hidden   \begin{center}
address@hidden %  \begin{subfigure}
address@hidden         \begin{subfigure}[b]{0.3\textwidth}
address@hidden                 \centering
address@hidden                 
\includegraphics[width=\textwidth]{figs/Service.pdf}
address@hidden                 \caption{Service with API and network protocol}
address@hidden                 \label{fig:service}
address@hidden         \end{subfigure}
address@hidden         ~~~~~~~~~~
address@hidden         \begin{subfigure}[b]{0.3\textwidth}
address@hidden                 \centering
address@hidden                 
\includegraphics[width=\textwidth]{figs/System.pdf}
address@hidden                 \caption{Service interaction}
address@hidden                 \label{fig:interaction}
address@hidden         \end{subfigure}
address@hidden   \end{center}
address@hidden   \caption{GNUnet's layered system architecture}
address@hidden \end{figure}
+
+The main service implementation runs as a standalone process in the
+Operating System and the client code runs as part of the client program,
+so crashes of a client do not affect the service process or other clients.
+The service and the clients communicate via a message protocol to be
+defined and implemented by the programmer.
+
address@hidden First Steps with GNUnet
address@hidden First Steps with GNUnet
+
address@hidden
+* Configure your peer::
+* Start a peer::
+* Monitor a peer::
+* Starting Two Peers by Hand::
+* Starting Peers Using the Testbed Service::
address@hidden menu
+
address@hidden Configure your peer
address@hidden Configure your peer
+
+First of all we need to configure your peer. Each peer is started with
+a configuration containing settings for GNUnet itself and its services.
+This configuration is based on the default configuration shipped with
+GNUnet and can be modified. The default configuration is located in the
address@hidden/share/gnunet/config.d} directory. When starting a peer, you
+can specify a customized configuration using the the @command{-c} command
+line switch when starting the ARM service and all other services. When
+using a modified configuration the default values are loaded and only
+values specified in the configuration file will replace the default
+values.
+
+Since we want to start additional peers later, we need some modifications
+from the default configuration. We need to create a separate service
+home and a file containing our modifications for this peer:
+
address@hidden
+$ mkdir ~/gnunet1/
+$ touch peer1.conf
address@hidden example
+
address@hidden
+Now add the following lines to @file{peer1.conf} to use this directory.
+For simplified usage we want to prevent the peer to connect to the GNUnet
+network since this could lead to confusing output. This modifications
+will replace the default settings:
+
address@hidden
+[PATHS]
+# Use this directory to store GNUnet data
+GNUNET_HOME = ~/gnunet1/
+[hostlist]
+# prevent bootstrapping
+SERVERS =
address@hidden example
+
address@hidden Start a peer
address@hidden Start a peer
+Each GNUnet instance (called peer) has an identity (peer ID) based on a
+cryptographic public private key pair. The peer ID is the printable hash
+of the public key.
+
+GNUnet services are controlled by a master service, the so called
address@hidden Restart Manager} (ARM). ARM starts, stops and even
+restarts services automatically or on demand when a client connects.
+You interact with the ARM service using the @command{gnunet-arm} tool.
+GNUnet can then be started with @command{gnunet-arm -s} and stopped with
address@hidden -e}.  An additional service not automatically started
+can be started using @command{gnunet-arm -i <service name>} and stopped
+using @command{gnunet-arm -k <servicename>}.
+
+Once you have started your peer, you can use many other GNUnet commands
+to interact with it.  For example, you can run:
+
address@hidden
+$ gnunet-peerinfo -s
address@hidden example
+
address@hidden
+to obtain the public key of your peer.
+
+You should see an output containing the peer ID similar to:
+
address@hidden
+I am peer `0PA02UVRKQTS2C .. JL5Q78F6H0B1ACPV1CJI59MEQUMQCC5G'.
address@hidden example
+
address@hidden Monitor a peer
address@hidden Monitor a peer
+
+In this section, we will monitor the behaviour of our peer's DHT
+service with respect to a specific key. First we will start
+GNUnet and then start the DHT service and use the DHT monitor tool
+to monitor the PUT and GET commands we issue ussing the
address@hidden and @command{gnunet-dht-get} commands.
+Using the ``monitor'' line given below, you can observe the behavior
+of your own peer's DHT with respect to the specified KEY:
+
address@hidden
+# start gnunet with all default services:
+$ gnunet-arm -c ~/peer1.conf -s
+# start DHT service:
+$ gnunet-arm -c ~/peer1.conf -i dht
+$ cd ~/gnunet/src/dht;
+$ ./gnunet-dht-monitor -c ~/peer1.conf -k KEY
address@hidden example
+
address@hidden
+Now open a separate terminal and change again to
+the @file{gnunet/src/dht} directory:
+
address@hidden
+$ cd ~/gnunet/src/dht
+# put VALUE under KEY in the DHT:
+$ ./gnunet-dht-put -c ~/peer1.conf -k KEY -d VALUE
+# get key KEY from the DHT:
+$ ./gnunet/src/dht/gnunet-dht-get -c ~/peer1.conf -k KEY
+# print statistics about current GNUnet state:
+$ gnunet-statistics -c ~/peer1.conf
+# print statistics about DHT service:
+$ gnunet-statistics -c ~/peer1.conf -s dht
address@hidden example
+
address@hidden Starting Two Peers by Hand
address@hidden Starting Two Peers by Hand
+
+This section describes how to start two peers on the same machine by hand.
+The process is rather painful, but the description is somewhat
+instructive. In practice, you might prefer the automated method
+(@pxref{Starting Peers Using the Testbed Service}).
+
address@hidden
+* Setup a second peer::
+* Start the second peer and connect the peers::
+* How to connect manually::
address@hidden menu
+
address@hidden Setup a second peer
address@hidden Setup a second peer
+We will now start a second peer on your machine.
+For the second peer, you will need to manually create a modified
+configuration file to avoid conflicts with ports and directories.
+A peers configuration file is by default located
+in @file{~/.gnunet/gnunet.conf}. This file is typically very short
+or even empty as only the differences to the defaults need to be
+specified.  The defaults are located in many files in the
address@hidden/share/gnunet/config.d} directory.
+
+To configure the second peer, use the files
address@hidden/share/gnunet/config.d} as a template for your main
+configuration file:
+
address@hidden
+$ cat $PREFIX/share/gnunet/config.d/*.conf > peer2.conf
address@hidden example
+
address@hidden
+Now you have to edit @file{peer2.conf} and change:
+
address@hidden
address@hidden @code{GNUNET\_TEST\_HOME} under @code{PATHS}
address@hidden Every (uncommented) value for address@hidden'' (add 10000) in any
+section (the option may be commented out if @code{PORT} is
+prefixed by "\#", in this case, UNIX domain sockets are used
+and the PORT option does not need to be touched)
address@hidden Every value for address@hidden'' in any section
+(e.g. by adding a "-p2" suffix)
address@hidden itemize
+
+to a fresh, unique value.  Make sure that the PORT numbers stay
+below 65536. From now on, whenever you interact with the second peer,
+you need to specify @command{-c peer2.conf} as an additional
+command line argument.
+
+Now, generate the 2nd peer's private key:
+
address@hidden
+$ gnunet-peerinfo -s -c peer2.conf
address@hidden example
+
address@hidden
+This may take a while, generate entropy using your keyboard or mouse
+as needed.  Also, make sure the output is different from the
+gnunet-peerinfo output for the first peer (otherwise you made an
+error in the configuration).
+
address@hidden Start the second peer and connect the peers
address@hidden Start the second peer and connect the peers
+
+Then, you can start a second peer using:
+
address@hidden
+$ gnunet-arm -c peer2.conf -s
+$ gnunet-arm -c peer2.conf -i dht
+$ ~/gnunet/src/dht/gnunet-dht-put -c peer2.conf -k KEY -d VALUE
+$ ~/gnunet/src/dht/gnunet-dht-get -c peer2.conf -k KEY
address@hidden example
+
+If you want the two peers to connect, you have multiple options:
+
address@hidden
address@hidden UDP neighbour discovery (automatic)
address@hidden Setup a bootstrap server
address@hidden Connect manually
address@hidden itemize
+
+To setup peer 1 as bootstrapping server change the configuration of
+the first one to be a hostlist server by adding the following lines to
address@hidden to enable bootstrapping server:
+
address@hidden
+[hostlist]
+OPTIONS = -p
address@hidden example
+
address@hidden
+Then change @file{peer2.conf} and replace the address@hidden''
+line in the address@hidden'' section with
address@hidden://localhost:8080/}''.  Restart both peers using:
+
address@hidden
+# stop first peer
+$ gnunet-arm -c peer1.conf -e
+# start first peer
+$ gnunet-arm -c peer1.conf -s
+# start second peer
+$ gnunet-arm -c peer2.conf -s
address@hidden example
+
address@hidden
+Note that if you start your peers without changing these settings, they
+will use the ``global'' hostlist servers of the GNUnet P2P network and
+likely connect to those peers.  At that point, debugging might become
+tricky as you're going to be connected to many more peers and would
+likely observe traffic and behaviors that are not explicitly controlled
+by you.
+
address@hidden How to connect manually
address@hidden How to connect manually
+
+If you want to use the @code{peerinfo} tool to connect your
+peers, you should:
+
address@hidden
address@hidden Set @code{IMMEDIATE_START = NO} in section @code{hostlist}
+(to not connect to the global GNUnet)
address@hidden Start both peers running @command{gnunet-arm -c peer1.conf -s}
+and @command{gnunet-arm -c peer2.conf -s}
address@hidden Get @code{HELLO} message of the first peer running
address@hidden -c peer1.conf -g}
address@hidden Give the output to the second peer by running
address@hidden -c peer2.conf -p '<output>'}
address@hidden itemize
+
+Check that they are connected using @command{gnunet-core -c peer1.conf},
+which should give you the other peer's peer identity:
+
address@hidden
+$ gnunet-core -c peer1.conf
+Peer `9TVUCS8P5A7ILLBGO6 [...shortened...] 1KNBJ4NGCHP3JPVULDG'
address@hidden example
+
address@hidden Starting Peers Using the Testbed Service
address@hidden Starting Peers Using the Testbed Service
address@hidden \label{sec:testbed}
+
+GNUnet's testbed service is used for testing scenarios where
+a number of peers are to be started.  The testbed can manage peers
+on a single host or on multiple hosts in a distributed fashion.
+On a single affordable computer, it should be possible to run
+around tens of peers without drastically increasing the load on the
+system.
+
+The testbed service can be access through its API
address@hidden/gnunet\_testbed\_service.h}.  The API provides many
+routines for managing a group of peers.  It also provides a helper
+function @code{GNUNET\_TESTBED\_test\_run()} to quickly setup a
+minimalistic testing environment on a single host.
+
+This function takes a configuration file which will be used as a
+template configuration for the peers.  The testbed takes care of
+modifying relevant options in the peers' configuration such as
address@hidden, @code{PORT}, @code{UNIXPATH} to unique values
+so that peers run without running into conflicts.  It also checks
+and assigns the ports in configurations only if they are free.
+
+Additionally, the testbed service also reads its options from the
+same configuration file.  Various available options and details
+about them can be found in the testbed default configuration file
address@hidden/testbed/testbed.conf}.
+
+With the testbed API, a sample test case can be structured as follows:
+
address@hidden
address@hidden testbed_test.c
address@hidden example
+
address@hidden
+The source code for the above listing can be found at
address@hidden://gnunet.org/git/gnunet.git/tree/doc/
+documentation/testbed_test.c}
+or in the @file{doc/documentation/} folder of your repository check-out.
+After installing GNUnet, the above source code can be compiled as:
+
address@hidden
+$ export CPPFLAGS="-I/path/to/gnunet/headers"
+$ export LDFLAGS="-L/path/to/gnunet/libraries"
+$ gcc $CPPFLAGS $LDFLAGS -o testbed-test testbed_test.c \
+ -lgnunettestbed -lgnunetdht -lgnunetutil
+# Generate (empty) configuration
+$ touch template.conf
+# run it (press CTRL-C to stop)
+$ ./testbed-test
address@hidden example
+
address@hidden
+The @code{CPPFLAGS} and @code{LDFLAGS} are necessary if GNUnet
+is installed into a different directory other than @file{/usr/local}.
+
+All of testbed API's peer management functions treat management
+actions as operations and return operation handles.  It is expected
+that the operations begin immediately, but they may get delayed (to
+balance out load on the system). The program using the API then has
+to take care of marking the operation as ``done'' so that its
+associated resources can be freed immediately and other waiting
+operations can be executed.  Operations will be canceled if they are
+marked as ``done'' before their completion.
+
+An operation is treated as completed when it succeeds or fails.
+Completion of an operation is either conveyed as events through
address@hidden event callback} or through respective
address@hidden completion callbacks}.
+In functions which support completion notification
+through both controller event callback and operation
+completion callback, first the controller event callback will be
+called.  If the operation is not marked as done in that callback
+or if the callback is given as NULL when creating the operation,
+the operation completion callback will be called.  The API
+documentation shows which event are to be expected in the
+controller event notifications.  It also documents any exceptional
+behaviour.
+
+Once the peers are started, test cases often need to connect
+some of the peers' services.  Normally, opening a connect to
+a peer's service requires the peer's configuration.  While using
+testbed, the testbed automatically generates per-peer configuration.
+Accessing those configurations directly through file system is
+discouraged as their locations are dynamically created and will be
+different among various runs of testbed.  To make access to these
+configurations easy, testbed API provides the function
address@hidden()}.  This function fetches
+the configuration of a given peer and calls the @dfn{Connect Adapter}.
+In the example code, it is the @code{dht\_ca}.  A connect adapter is
+expected to open the connection to the needed service by using the
+provided configuration and return the created service connection handle.
+Successful connection to the needed service is signaled through
address@hidden
+
+A dual to connect adapter is the @dfn{Disconnect Adapter}.  This callback
+is called after the connect adapter has been called when the operation
+from @code{GNUNET\_TESTBED\_service\_connect()} is marked as ``done''.
+It has to disconnect from the service with the provided service
+handle (@code{op\_result}).
+
+Exercise: Find out how many peers you can run on your system.
+
+Exercise: Find out how to create a 2D torus topology by changing the
+options in the configuration file.
address@hidden Topologies, The GNUnet Reference Documentation ,, gnunet, The 
GNUnet Reference Documentation},
+then use the DHT API to store and retrieve values in the network.
+
address@hidden Developing Applications
address@hidden Developing Applications
+
address@hidden
+* 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::
address@hidden menu
+
address@hidden gnunet-ext
address@hidden gnunet-ext
+To develop a new peer-to-peer application or to extend GNUnet we provide
+a template build system for writing GNUnet extensions in C. It can be
+obtained as follows:
+
address@hidden
+$ git clone https://gnunet.org/git/gnunet-ext
+$ cd gnunet-ext/
+$ ./bootstrap
+$ ./configure --prefix=$PREFIX --with-gnunet=$PREFIX
+$ make
+$ make install
+$ make check
address@hidden example
+
address@hidden
+The GNUnet ext template includes examples and a working buildsystem
+for a new GNUnet service. A common GNUnet service consists of the
+following parts which will be discussed in detail in the remainder
+of this document. The functionality of a GNUnet service is implemented in:
+
address@hidden
address@hidden the GNUnet service (gnunet-ext/src/ext/gnunet-service-ext.c)
address@hidden the client API (gnunet-ext/src/ext/ext_api.c)
address@hidden the client application using the service API
+(gnunet-ext/src/ext/gnunet-ext.c)
address@hidden itemize
+
+The interfaces for these entities are defined in:
+
address@hidden
address@hidden client API interface (gnunet-ext/src/ext/ext.h)
address@hidden the service interface 
(gnunet-ext/src/include/gnunet_service_SERVICE.h)
address@hidden the P2P protocol (gnunet-ext/src/include/gnunet_protocols_ext.h)
address@hidden itemize
+
+
+In addition the ext systems provides:
+
address@hidden
address@hidden a test testing the API (gnunet-ext/src/ext/test_ext_api.c)
address@hidden a configuration template for the service
+(gnunet-ext/src/ext/ext.conf.in)
address@hidden itemize
+
address@hidden Adapting the Template
address@hidden Adapting the Template
+
+The first step for writing any extension with a new service is to
+ensure that the @file{ext.conf.in} file contains entries for the
address@hidden, @code{PORT} and @code{BINARY} for the service in a
+section named after the service.
+
+If you want to adapt the template rename the @file{ext.conf.in} to
+match your services name, you have to modify the @code{AC\_OUTPUT}
+section in @file{configure.ac} in the @file{gnunet-ext} root.
+
address@hidden Writing a Client Application
address@hidden Writing a Client Application
+
+When writing any client application (for example, a command-line
+tool), the basic structure is to start with the
address@hidden function.  This function will parse
+command-line options, setup the scheduler and then invoke the
address@hidden function (with the remaining non-option arguments)
+and a handle to the parsed configuration (and the configuration
+file name that was used, which is typically not needed):
+
address@hidden
address@hidden tutorial-examples/001.c
address@hidden example
+
address@hidden
+* Handling command-line options::
+* Writing a Client Library::
+* Writing a user interface::
address@hidden menu
+
address@hidden Handling command-line options
address@hidden Handling command-line options
+
+Options can then be added easily by adding global variables and
+expanding the @code{options} array.  For example, the following would
+add a string-option and a binary flag (defaulting to @code{NULL} and
address@hidden respectively):
+
address@hidden
address@hidden tutorial-examples/002.c
address@hidden example
+
+Issues such as displaying some helpful text describing options using
+the @code{--help} argument and error handling are taken care of when
+using this approach.  Other @code{GNUNET\_GETOPT\_}-functions can be used
+to obtain integer value options, increment counters, etc.  You can
+even write custom option parsers for special circumstances not covered
+by the available handlers. To check if an argument was specified by the
+user you initialize the variable with a specific value (e.g. NULL for
+a string and GNUNET\_SYSERR for a integer) and check after parsing
+happened if the values were modified.
+
+Inside the @code{run} method, the program would perform the
+application-specific logic, which typically involves initializing and
+using some client library to interact with the service.  The client
+library is supposed to implement the IPC whereas the service provides
+more persistent P2P functions.
+
+Exercise: Add a few command-line options and print them inside
+of @code{run}.  What happens if the user gives invalid arguments?
+
address@hidden Writing a Client Library
address@hidden Writing a Client Library
+
+The first and most important step in writing a client library is to
+decide on an API for the library.  Typical API calls include
+connecting to the service, performing application-specific requests
+and cleaning up.  Many examples for such service APIs can be found
+in the @file{gnunet/src/include/gnunet\_*\_service.h} files.
+
+Then, a client-service protocol needs to be designed.  This typically
+involves defining various message formats in a header that will be
+included by both the service and the client library (but is otherwise
+not shared and hence located within the service's directory and not
+installed by @command{make install}).  Each message must start with a
address@hidden GNUNET\_MessageHeader} and must be shorter than 64k.  By
+convention, all fields in IPC (and P2P) messages must be in big-endian
+format (and thus should be read using @code{ntohl} and similar
+functions and written using @code{htonl} and similar functions).
+Unique message types must be defined for each message struct in the
address@hidden header (or an extension-specific include
+file).
+
address@hidden
+* Connecting to the Service::
+* Sending messages::
+* Receiving Replies from the Service::
address@hidden menu
+
address@hidden Connecting to the Service
address@hidden Connecting to the Service
+
+Before a client library can implement the application-specific protocol
+with the service, a connection must be created:
+
address@hidden
address@hidden tutorial-examples/003.c
address@hidden example
+
address@hidden
+As a result a @code{GNUNET\_MQ\_Handle} is returned
+which can to used henceforth to transmit messages to the service.
+The complete MQ API can be found in @file{gnunet\_mq\_lib.h}.
+The @code{hanlders} array in the example above is incomplete.
+Here is where you will define which messages you expect to
+receive from the service, and which functions handle them.
+The @code{error\_cb} is a function that is to be called whenever
+there are errors communicating with the service.
+
address@hidden Sending messages
address@hidden Sending messages
+
+In GNUnet, messages are always sent beginning with a
address@hidden GNUNET\_MessageHeader} in big endian format.
+This header defines the size and the type of the
+message, the payload follows after this header.
+
address@hidden
address@hidden tutorial-examples/004.c
address@hidden example
+
address@hidden
+Existing message types are defined in @file{gnunet\_protocols.h}.
+A common way to create a message is with an envelope:
+
address@hidden
address@hidden tutorial-examples/005.c
address@hidden example
+
address@hidden
+Exercise: Define a message struct that includes a 32-bit
+unsigned integer in addition to the standard GNUnet MessageHeader.
+Add a C struct and define a fresh protocol number for your message.
+Protocol numbers in gnunet-ext are defined
+in @file{gnunet-ext/src/include/gnunet_protocols_ext.h}
+
+Exercise: Find out how you can determine the number of messages
+in a message queue.
+
+Exercise: Find out how you can determine when a message you
+have queued was actually transmitted.
+
+Exercise: Define a helper function to transmit a 32-bit
+unsigned integer (as payload) to a service using some given client
+handle.
+
address@hidden Receiving Replies from the Service
address@hidden Receiving Replies from the Service
+
+Clients can receive messages from the service using the handlers
+specified in the @code{handlers} array we specified when connecting
+to the service.  Entries in the the array are usually created using
+one of two macros, depending on whether the message is fixed size
+or variable size.  Variable size messages are managed using two
+callbacks, one to check that the message is well-formed, the other
+to actually process the message.  Fixed size messages are fully
+checked by the MQ-logic, and thus only need to provide the handler
+to process the message.  Note that the prefixes @code{check\_}
+and @code{handle\_} are mandatory.
+
address@hidden
address@hidden tutorial-examples/006.c
address@hidden example
+
address@hidden
+Exercise: Expand your helper function to receive a response message
+(for example, containing just the @code{struct GNUnet MessageHeader}
+without any payload).  Upon receiving the service's response, you
+should call a callback provided to your helper function's API.
+
+Exercise: Figure out where you can pass values to the
+closures (@code{cls}).
+
address@hidden Writing a user interface
address@hidden Writing a user interface
+
+Given a client library, all it takes to access a service now is to
+combine calls to the client library with parsing command-line
+options.
+
+Exercise: Call your client API from your @code{run()} method in your
+client application to send a request to the service.  For example,
+send a 32-bit integer value based on a number given at the
+command-line to the service.
+
address@hidden Writing a Service
address@hidden Writing a Service
+
+Before you can test the client you've written so far, you'll
+need to also implement the corresponding service.
+
address@hidden
+* Code Placement::
+* Starting a Service::
address@hidden menu
+
address@hidden Code Placement
address@hidden Code Placement
+
+New services are placed in their own subdirectory under
address@hidden/src}. This subdirectory should contain the API
+implementation file @file{SERVICE\_api.c}, the description of
+the client-service protocol @file{SERVICE.h} and P2P protocol
address@hidden, the implementation of the service itself
address@hidden and several files for tests,
+including test code and configuration files.
+
address@hidden Starting a Service
address@hidden Starting a Service
+
+The key API definition for creating a service is the
address@hidden macro:
+
address@hidden
address@hidden tutorial-examples/007.c
address@hidden example
+
address@hidden
+In addition to the service name and flags, the macro takes three
+functions, typically called @code{run}, @code{client\_connect\_cb} and
address@hidden as well as an array of message handlers
+that will be called for incoming messages from clients.
+
+A minimal version of the three central service funtions would look
+like this:
+
address@hidden
address@hidden tutorial-examples/008.c
address@hidden example
+
address@hidden
+Exercise: Write a stub service that processes no messages at all
+in your code.  Create a default configuration for it, integrate it
+with the build system and start the service from
address@hidden using @command{gnunet-arm -i NAME}.
+
+Exercise: Figure out how to set the closure (@code{cls}) for handlers
+of a service.
+
+Exercise: Figure out how to send messages from the service back to the
+client.
+
+Each handler function in the service @b{must} eventually (possibly in some
+asynchronous continuation) call
address@hidden()}. Only after this call
+additional messages from the same client may
+be processed. This way, the service can throttle processing messages
+from the same client.
+
+Exercise: Change the service to ``handle'' the message from your
+client (for now, by printing a message).  What happens if you
+forget to call @code{GNUNET\_SERVICE\_client\_continue()}?
+
address@hidden Interacting directly with other Peers using the CORE Service
address@hidden Interacting directly with other Peers using the CORE Service
+
+FIXME: This section still needs to be updated to the lastest API!
+
+One of the most important services in GNUnet is the @code{CORE} service
+managing connections between peers and handling encryption between peers.
+
+One of the first things any service that extends the P2P protocol
+typically does is connect to the @code{CORE} service using:
+
address@hidden
address@hidden tutorial-examples/009.c
address@hidden example
+
address@hidden
+* New P2P connections::
+* Receiving P2P Messages::
+* Sending P2P Messages::
+* End of P2P connections::
address@hidden menu
+
address@hidden New P2P connections
address@hidden New P2P connections
+
+Before any traffic with a different peer can be exchanged, the peer must
+be known to the service. This is notified by the @code{CORE}
address@hidden callback, which communicates the identity of the new
+peer to the service:
+
address@hidden
address@hidden tutorial-examples/010.c
address@hidden example
+
address@hidden
+Note that whatever you return from @code{connects} is given as the
address@hidden argument to the message handlers for messages from
+the respective peer.
+
+Exercise: Create a service that connects to the @code{CORE}.  Then
+start (and connect) two peers and print a message once your connect
+callback is invoked.
+
address@hidden Receiving P2P Messages
address@hidden Receiving P2P Messages
+
+To receive messages from @code{CORE}, you pass the desired
address@hidden to the @code{GNUNET\_CORE\_connect()} function,
+just as we showed for services.
+
+It is your responsibility to process messages fast enough or
+to implement flow control. If an application does not process
+CORE messages fast enough, CORE will randomly drop messages
+to not keep a very long queue in memory.
+
+Exercise: Start one peer with a new service that has a message
+handler and start a second peer that only has your ``old'' service
+without message handlers.  Which ``connect'' handlers are invoked when
+the two peers are connected?  Why?
+
address@hidden Sending P2P Messages
address@hidden Sending P2P Messages
+
+You can transmit messages to other peers using the @code{mq} you were
+given during the @code{connect} callback.  Note that the @code{mq}
+automatically is released upon @code{disconnect} and that you must
+not use it afterwards.
+
+It is your responsibility to not over-fill the message queue, GNUnet
+will send the messages roughly in the order given as soon as possible.
+
+Exercise: Write a service that upon connect sends messages as
+fast as possible to the other peer (the other peer should run a
+service that ``processes'' those messages).  How fast is the
+transmission?  Count using the STATISTICS service on both ends.  Are
+messages lost? How can you transmit messages faster?  What happens if
+you stop the peer that is receiving your messages?
+
address@hidden End of P2P connections
address@hidden End of P2P connections
+
+If a message handler returns @code{GNUNET\_SYSERR}, the remote
+peer shuts down or there is an unrecoverable network
+disconnection, CORE notifies the service that the peer disconnected.
+After this notification no more messages will be received from the
+peer and the service is no longer allowed to send messages to the peer.
+The disconnect callback looks like the following:
+
address@hidden
address@hidden tutorial-examples/011.c
address@hidden example
+
address@hidden
+Exercise: Fix your service to handle peer disconnects.
+
address@hidden Storing peer-specific data using the PEERSTORE service
address@hidden Storing peer-specific data using the PEERSTORE service
+
+GNUnet's PEERSTORE service offers a persistorage for arbitrary
+peer-specific data. Other GNUnet services can use the PEERSTORE
+to store, retrieve and monitor data records. Each data record
+stored with PEERSTORE contains the following fields:
+
address@hidden
address@hidden subsystem: Name of the subsystem responsible for the record.
address@hidden peerid: Identity of the peer this record is related to.
address@hidden key: a key string identifying the record.
address@hidden value: binary record value.
address@hidden expiry: record expiry date.
address@hidden itemize
+
+The first step is to start a connection to the PEERSTORE service:
address@hidden
address@hidden tutorial-examples/012.c
address@hidden example
+
+The service handle @code{peerstore_handle} will be needed for
+all subsequent PEERSTORE operations.
+
address@hidden
+* Storing records::
+* Retrieving records::
+* Monitoring records::
+* Disconnecting from PEERSTORE::
address@hidden menu
+
address@hidden Storing records
address@hidden Storing records
+
+To store a new record, use the following function:
+
address@hidden
address@hidden tutorial-examples/013.c
address@hidden example
+
address@hidden
+The @code{options} parameter can either be
address@hidden which means that multiple
+values can be stored under the same key combination
+(subsystem, peerid, key), or @code{GNUNET_PEERSTORE_STOREOPTION_REPLACE}
+which means that PEERSTORE will replace any existing values under the
+given key combination (subsystem, peerid, key) with the new given value.
+
+The continuation function @code{cont} will be called after the store
+request is successfully sent to the PEERSTORE service. This does not
+guarantee that the record is successfully stored, only that it was
+received by the service.
+
+The @code{GNUNET_PEERSTORE_store} function returns a handle to the store
+operation. This handle can be used to cancel the store operation only
+before the continuation function is called:
+
address@hidden
address@hidden tutorial-examples/013.1.c
address@hidden example
+
address@hidden Retrieving records
address@hidden Retrieving records
+
+To retrieve stored records, use the following function:
+
address@hidden
address@hidden tutorial-examples/014.c
address@hidden example
+
address@hidden
+The values of @code{peer} and @code{key} can be @code{NULL}. This
+allows the iteration over values stored under any of the following
+key combinations:
+
address@hidden
address@hidden (subsystem)
address@hidden (subsystem, peerid)
address@hidden (subsystem, key)
address@hidden (subsystem, peerid, key)
address@hidden itemize
+
+The @code{callback} function will be called once with each retrieved
+record and once more with a @code{NULL} record to signal the end of
+results.
+
+The @code{GNUNET_PEERSTORE_iterate} function returns a handle to the
+iterate operation. This handle can be used to cancel the iterate
+operation only before the callback function is called with a
address@hidden record.
+
address@hidden Monitoring records
address@hidden Monitoring records
+
+PEERSTORE offers the functionality of monitoring for new records
+stored under a specific key combination (subsystem, peerid, key).
+To start the monitoring, use the following function:
+
address@hidden
address@hidden tutorial-examples/015.c
address@hidden example
+
address@hidden
+Whenever a new record is stored under the given key combination,
+the @code{callback} function will be called with this new
+record. This will continue until the connection to the PEERSTORE
+service is broken or the watch operation is canceled:
+
address@hidden
address@hidden tutorial-examples/016.c
address@hidden example
+
address@hidden Disconnecting from PEERSTORE
address@hidden Disconnecting from PEERSTORE
+
+When the connection to the PEERSTORE service is no longer needed,
+disconnect using the following function:
+
address@hidden
address@hidden tutorial-examples/017.c
address@hidden example
+
address@hidden
+If the @code{sync_first} flag is set to @code{GNUNET_YES},
+the API will delay the disconnection until all store requests
+are received by the PEERSTORE service. Otherwise, it will
+disconnect immediately.
+
address@hidden Using the DHT
address@hidden Using the DHT
+
+The DHT allows to store data so other peers in the P2P network can
+access it and retrieve data stored by any peers in the network.
+This section will explain how to use the DHT. Of course, the first
+thing to do is to connect to the DHT service:
+
address@hidden
address@hidden tutorial-examples/018.c
address@hidden example
+
address@hidden
+The second parameter indicates how many requests in parallel to expect.
+It is not a hard limit, but a good approximation will make the DHT more
+efficient.
+
address@hidden
+* Storing data in the DHT::
+* Obtaining data from the DHT::
+* Implementing a block plugin::
+* Monitoring the DHT::
address@hidden menu
+
address@hidden Storing data in the DHT
address@hidden Storing data in the DHT
+Since the DHT is a dynamic environment (peers join and leave frequently)
+the data that we put in the DHT does not stay there indefinitely. It is
+important to ``refresh'' the data periodically by simply storing it
+again, in order to make sure other peers can access it.
+
+The put API call offers a callback to signal that the PUT request has been
+sent. This does not guarantee that the data is accessible to others peers,
+or even that is has been stored, only that the service has requested to
+a neighboring peer the retransmission of the PUT request towards its final
+destination. Currently there is no feedback about whether or not the data
+has been sucessfully stored or where it has been stored. In order to
+improve the availablilty of the data and to compensate for possible
+errors, peers leaving and other unfavorable events, just make several
+PUT requests!
+
address@hidden
address@hidden tutorial-examples/019.c
address@hidden example
+
address@hidden
+Exercise: Store a value in the DHT periodically to make sure it
+is available over time. You might consider using the function
address@hidden and call
address@hidden from inside a helper function.
+
address@hidden Obtaining data from the DHT
address@hidden Obtaining data from the DHT
+
+As we saw in the previous example, the DHT works in an asynchronous mode.
+Each request to the DHT is executed ``in the background'' and the API
+calls return immediately. In order to receive results from the DHT, the
+API provides a callback. Once started, the request runs in the service,
+the service will try to get as many results as possible (filtering out
+duplicates) until the timeout expires or we explicitly stop the request.
+It is possible to give a ``forever'' timeout with
address@hidden
+
+If we give a route option @code{GNUNET\_DHT\_RO\_RECORD\_ROUTE}
+the callback will get a list of all the peers the data has travelled,
+both on the PUT path and on the GET path.
+
address@hidden
address@hidden tutorial-examples/020.c
address@hidden example
+
address@hidden
+Exercise: Store a value in the DHT and after a while retrieve it.
+Show the IDs of all the peers the requests have gone through.
+In order to convert a peer ID to a string, use the function
address@hidden Pay attention to the route option parameters
+in both calls!
+
address@hidden Implementing a block plugin
address@hidden Implementing a block plugin
+
+In order to store data in the DHT, it is necessary to provide a block
+plugin.  The DHT uses the block plugin to ensure that only well-formed
+requests and replies are transmitted over the network.
+
+The block plugin should be put in a file @file{plugin\_block\_SERVICE.c}
+in the service's respective directory. The
+mandatory functions that need to be implemented for a block plugin are
+described in the following sections.
+
address@hidden
+* 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::
address@hidden menu
+
address@hidden Validating requests and replies
address@hidden Validating requests and replies
+
+The evaluate function should validate a reply or a request. It returns
+a @code{GNUNET\_BLOCK\_EvaluationResult}, which is an enumeration. All
+possible answers are in @file{gnunet\_block\_lib.h}.  The function will
+be called with a @code{reply\_block} argument of @code{NULL} for
+requests.  Note that depending on how @code{evaluate} is called, only
+some of the possible return values are valid.  The specific meaning of
+the @code{xquery} argument is application-specific.  Applications that
+do not use an extended query should check that the @code{xquery\_size}
+is zero.  The block group is typically used to filter duplicate
+replies.
+
address@hidden
address@hidden tutorial-examples/021.c
address@hidden example
+
address@hidden
+Note that it is mandatory to detect duplicate replies in this function
+and return the respective status code.  Duplicate detection is
+typically done using the Bloom filter block group provided by
address@hidden  Failure to do so may cause replies to
+circle in the network.
+
address@hidden Deriving a key from a reply
address@hidden Deriving a key from a reply
+
+The DHT can operate more efficiently if it is possible to derive a key
+from the value of the corresponding block.  The @code{get\_key}
+function is used to obtain the key of a block --- for example, by
+means of hashing.  If deriving the key is not possible, the function
+should simply return @code{GNUNET\_SYSERR} (the DHT will still work
+just fine with such blocks).
+
address@hidden
address@hidden tutorial-examples/022.c
address@hidden example
+
address@hidden Initialization of the plugin
address@hidden Initialization of the plugin
+
+The plugin is realized as a shared C library.  The library must export
+an initialization function which should initialize the plugin.  The
+initialization function specifies what block types the plugin cares
+about and returns a struct with the functions that are to be used for
+validation and obtaining keys (the ones just defined above).
+
address@hidden
address@hidden tutorial-examples/023.c
address@hidden example
+
address@hidden Shutdown of the plugin
address@hidden Shutdown of the plugin
+
+Following GNUnet's general plugin API concept, the plugin must
+export a second function for cleaning up.  It usually does very
+little.
+
address@hidden
address@hidden tutorial-examples/024.c
address@hidden example
+
address@hidden Integration of the plugin with the build system
address@hidden Integration of the plugin with the build system
+
+In order to compile the plugin, the @file{Makefile.am} file for the
+service SERVICE should contain a rule similar to this:
address@hidden Actually this is a Makefile not C. But the whole structure of 
examples
address@hidden must be improved.
+
address@hidden
address@hidden tutorial-examples/025.c
address@hidden example
+
address@hidden
+Exercise: Write a block plugin that accepts all queries
+and all replies but prints information about queries and replies
+when the respective validation hooks are called.
+
address@hidden Monitoring the DHT
address@hidden Monitoring the DHT
+
+It is possible to monitor the functioning of the local
+DHT service. When monitoring the DHT, the service will
+alert the monitoring program of any events, both started
+locally or received for routing from another peer.
+The are three different types of events possible: a
+GET request, a PUT request or a response (a reply to a GET).
+
+Since the different events have different associated data,
+the API gets 3 different callbacks (one for each message type)
+and optional type and key parameters, to allow for filtering of
+messages. When an event happens, the appropiate callback is
+called with all the information about the event.
+
address@hidden
address@hidden tutorial-examples/026.c
address@hidden example
+
address@hidden Debugging with gnunet-arm
address@hidden Debugging with gnunet-arm
+
+Even if services are managed by @command{gnunet-arm}, you can
+start them with @command{gdb} or @command{valgrind}.  For
+example, you could add the following lines to your
+configuration file to start the DHT service in a @command{gdb}
+session in a fresh @command{xterm}:
+
address@hidden
+[dht]
+PREFIX=xterm -e gdb --args
address@hidden example
+
address@hidden
+Alternatively, you can stop a service that was started via
+ARM and run it manually:
+
address@hidden
+$ gnunet-arm -k dht
+$ gdb --args gnunet-service-dht -L DEBUG
+$ valgrind gnunet-service-dht -L DEBUG
address@hidden example
+
address@hidden
+Assuming other services are well-written, they will automatically
+re-integrate the restarted service with the peer.
+
+GNUnet provides a powerful logging mechanism providing log
+levels @code{ERROR}, @code{WARNING}, @code{INFO} and @code{DEBUG}.
+The current log level is configured using the @code{$GNUNET_FORCE_LOG}
+environmental variable. The @code{DEBUG} level is only available if
address@hidden was used when running
address@hidden More details about logging can be found under
address@hidden://gnunet.org/logging}.
+
+You should also probably enable the creation of core files, by setting
address@hidden, and echo'ing @code{1} into
address@hidden/proc/sys/kernel/core\_uses\_pid}. Then you can investigate the
+core dumps with @command{gdb}, which is often the fastest method to
+find simple errors.
+
+Exercise: Add a memory leak to your service and obtain a trace
+pointing to the leak using @command{valgrind} while running the service
+from @command{gnunet-service-arm}.
+
address@hidden
diff --git a/gnunet.texi b/gnunet.texi
new file mode 100644
index 0000000..3cce4de
--- /dev/null
+++ b/gnunet.texi
@@ -0,0 +1,257 @@
+\input texinfo
address@hidden -*-texinfo-*-
+
address@hidden %**start of header
address@hidden gnunet.info
address@hidden UTF-8
address@hidden GNUnet Reference Manual
address@hidden 2
address@hidden It seems as if this breaks some old garbage version of
address@hidden texinfo running on some systems. FIXME!!!
address@hidden @urefbreakstyle before
address@hidden %**end of header
+
address@hidden version.texi
+
address@hidden Set Versions which might be used in more than one place:
address@hidden GNUFTP-URL https://ftp.gnu.org/gnu/gnunet
address@hidden PYPI-URL https://pypi.python.org/packages/source
address@hidden GNURL-VERSION-CURRENT 7.55.1
address@hidden GNUNET-DIST-URL https://gnunet.org/sites/default/files/
address@hidden @set OPENPGP-SIGNING-KEY-ID
+
address@hidden
+Copyright @copyright{} 2001-2018 GNUnet e.V.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+copy of the license is included in the section entitled ``GNU Free
+Documentation License''.
+
+A copy of the license is also available from the Free Software
+Foundation Web site at @url{http://www.gnu.org/licenses/fdl.html}.
+
+Alternately, this document is also available under the General
+Public License, version 3 or later, as published by the Free Software
+Foundation.  A copy of the license is included in the section entitled
+``GNU General Public License''.
+
+A copy of the license is also available from the Free Software
+Foundation Web site at @url{http://www.gnu.org/licenses/gpl.html}.
address@hidden copying
+
address@hidden TODO: Improve this and improve 
https://directory.fsf.org/wiki/Gnunet
address@hidden NOTE FOR TRANSLATORS: Due to en.wikipedia.org being the wikipedia
address@hidden                       which is more up to date than others, 
refrain
address@hidden                       from using localized wikipedia unless you 
are
address@hidden                       sure the articles content is good enough. 
For
address@hidden                       example the german wikipedia entry for 
GNUnet
address@hidden                       is in a terrible shape, but the 
en.wikipedia.org
address@hidden                       entry is still acceptable (although in 
need of
address@hidden                       updates).
+
address@hidden Networking
address@hidden
+* GNUnet: (gnunet).       Framework for secure peer-to-peer networking
address@hidden direntry
+
address@hidden
address@hidden GNUnet Reference Manual
address@hidden Installing, configuring, using and contributing to GNUnet
address@hidden The GNUnet Developers
+
address@hidden
address@hidden 0pt plus 1filll
+Edition @value{EDITION} @*
address@hidden @*
+
address@hidden
address@hidden titlepage
+
address@hidden
address@hidden
+
address@hidden Top
address@hidden Introduction
+
+This document is the Reference Manual for GNUnet version @value{VERSION}.
+
address@hidden
+
+* Preface::                         Chapter 0
+* Philosophy::                      About GNUnet
+* Key Concepts::                    Key concepts of GNUnet
address@hidden * Vocabulary::                      Vocabulary
+* Installing GNUnet::              Installing GNUnet
+* Using GNUnet::                    Using GNUnet
address@hidden * Configuration Handbook::          Configuring GNUnet
+* GNUnet Contributors Handbook::    Contributing to GNUnet
+* GNUnet Developer Handbook::       Developing GNUnet
+* GNU Free Documentation License::  The license of this manual
+* GNU General Public License::
+* GNU Affero General Public License::
+* Concept Index::                   Concepts
+* Programming Index::               Data types, functions, and variables
+
address@hidden
+ --- The Detailed Node Listing ---
+
+Preface
+
+* About this book
+* Introduction
+* General Terminology::
+* Typography::
+
+Philosophy
+
+* Design Principles::
+* Privacy and Anonymity::
+* Practicality::
+
+Key Concepts
+
+* Authentication::
+* Accounting to Encourage Resource Sharing::
+* Confidentiality::
+* Anonymity::
+* Deniability::
+* Peer Identities::
+* Zones in the GNU Name System (GNS Zones)::
+* Egos::
+* Backup of Identities and Egos::
+* Revocation::
+
+Installing GNUnet
+* Installing dependencies::
+* Getting the Source Code::
+* Create @code{gnunet} user and group::
+* Preparing and Compiling the Source Code::
+* Installation::
+* MOVED FROM USER Checking the Installation::
+* MOVED FROM USER The graphical configuration interface::
+* MOVED FROM USER Config Leftovers::
+
+Using GNUnet
+
+* Start and stop GNUnet::
+* First steps - Using the GNU Name System::
+* First steps - Using GNUnet Conversation::
+* First steps - Using the GNUnet VPN::
+* File-sharing::
+* The GNU Name System::
+* Using the Virtual Public Network::
+
+GNUnet Contributors Handbook
+
+* Contributing to GNUnet::
+* Licenses of contributions::
+* Copyright Assignment::
+* Contributing to the Reference Manual::
+* Contributing testcases::
+
+GNUnet Developer Handbook
+
+* Developer Introduction::
+* Internal dependencies::
+* Code overview::
+* System Architecture::
+* Subsystem stability::
+* Naming conventions and coding style guide::
+* Build-system::
+* Developing extensions for GNUnet using the gnunet-ext template::
+* Writing testcases::
+* Building GNUnet and its dependencies::
+* TESTING library::
+* Performance regression analysis with Gauger::
+* TESTBED Subsystem::
+* libgnunetutil::
+* Automatic Restart Manager (ARM)::
+* TRANSPORT Subsystem::
+* NAT library::
+* Distance-Vector plugin::
+* SMTP plugin::
+* Bluetooth plugin::
+* WLAN plugin::
+* ATS Subsystem::
+* CORE Subsystem::
+* CADET Subsystem::
+* NSE Subsystem::
+* HOSTLIST Subsystem::
+* IDENTITY Subsystem::
+* NAMESTORE Subsystem::
+* PEERINFO Subsystem::
+* PEERSTORE Subsystem::
+* SET Subsystem::
+* STATISTICS Subsystem::
+* Distributed Hash Table (DHT)::
+* GNU Name System (GNS)::
+* GNS Namecache::
+* REVOCATION Subsystem::
+* File-sharing (FS) Subsystem::
+* REGEX Subsystem::
+
address@hidden detailmenu
address@hidden menu
+
address@hidden 
*********************************************************************
address@hidden chapters/preface.texi
address@hidden 
*********************************************************************
+
address@hidden 
*********************************************************************
address@hidden chapters/philosophy.texi
address@hidden 
*********************************************************************
+
address@hidden 
*********************************************************************
address@hidden chapters/keyconcepts.texi
address@hidden 
*********************************************************************
+
address@hidden 
*********************************************************************
address@hidden chapters/installation.texi
address@hidden 
*********************************************************************
+
address@hidden 
*********************************************************************
address@hidden chapters/user.texi
address@hidden 
*********************************************************************
+
address@hidden chapters/contributing.texi
+
address@hidden 
*********************************************************************
address@hidden chapters/developer.texi
address@hidden For now in its own Book:
address@hidden @include gnunet-c-tutorial.texi
address@hidden 
*********************************************************************
+
address@hidden 
*********************************************************************
address@hidden GNU Free Documentation License
address@hidden GNU Free Documentation License
address@hidden license, GNU Free Documentation License
address@hidden fdl-1.3.texi
+
address@hidden 
*********************************************************************
address@hidden GNU General Public License
address@hidden GNU General Public License
address@hidden license, GNU General Public License
address@hidden gpl-3.0.texi
+
address@hidden 
*********************************************************************
address@hidden GNU Affero General Public License
address@hidden GNU Affero General Public License
address@hidden license, GNU Affero General Public License
address@hidden agpl-3.0.texi
+
address@hidden 
*********************************************************************
address@hidden Concept Index
address@hidden Concept Index
address@hidden cp
+
address@hidden Programming Index
address@hidden Programming Index
address@hidden tp fn
address@hidden vr fn
address@hidden pg fn
address@hidden fn
+
address@hidden
diff --git a/htmlxref.cnf b/htmlxref.cnf
new file mode 100644
index 0000000..a4928f6
--- /dev/null
+++ b/htmlxref.cnf
@@ -0,0 +1,668 @@
+# htmlxref.cnf - reference file for free Texinfo manuals on the web.
+# Modified by Ludovic Courtès <address@hidden> for the GNU Guix manual.
+# Modified by ng0 <address@hidden> for the GNUnet manual.
+
+htmlxrefversion=2017-10-26.06; # UTC
+
+# Copyright 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+# 
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+#
+# The latest version of this file is available at
+# http://ftpmirror.gnu.org/texinfo/htmlxref.cnf.
+# Email corrections or additions to address@hidden
+# The primary goal is to list all relevant GNU manuals;
+# other free manuals are also welcome.
+#
+# To be included in this list, a manual must:
+#
+# - have a generic url, e.g., no version numbers;
+# - have a unique file name (e.g., manual identifier), i.e., be related to the
+#   package name.  Things like "refman" or "tutorial" don't work.
+# - follow the naming convention for nodes described at
+# http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref.html
+#   This is what makeinfo and texi2html implement.
+# 
+# Unless the above criteria are met, it's not possible to generate
+# reliable cross-manual references.
+# 
+# For information on automatically generating all the useful formats for
+# a manual to put on the web, see
+# http://www.gnu.org/prep/maintain/html_node/Manuals-on-Web-Pages.html.
+
+# For people editing this file: when a manual named foo is related to a
+# package named bar, the url should contain a variable reference ${BAR}.
+# Otherwise, the gnumaint scripts have no way of knowing they are
+# associated, and thus gnu.org/manual can't include them.
+
+# shorten references to manuals on www.gnu.org.
+G = https://www.gnu.org
+GS = ${G}/software
+
+3dldf          mono    ${GS}/3dldf/manual/user_ref/3DLDF.html
+3dldf          node    ${GS}/3dldf/manual/user_ref/
+
+alive          mono    ${GS}/alive/manual/alive.html
+alive          node    ${GS}/alive/manual/html_node/
+
+anubis         chapter ${GS}/anubis/manual/html_chapter/
+anubis         section ${GS}/anubis/manual/html_section/
+anubis         node    ${GS}/anubis/manual/html_node/
+
+artanis                mono    ${GS}/artanis/manual/artanis.html
+artanis                node    ${GS}/artanis/manual/html_node/
+
+aspell         section http://aspell.net/man-html/index.html
+
+auctex         mono    ${GS}/auctex/manual/auctex.html
+auctex         node    ${GS}/auctex/manual/auctex/
+
+autoconf       mono    ${GS}/autoconf/manual/autoconf.html
+autoconf       node    ${GS}/autoconf/manual/html_node/
+
+autogen                mono    ${GS}/autogen/manual/html_mono/autogen.html
+autogen                chapter ${GS}/autogen/manual/html_chapter/
+autogen                node    ${GS}/autoconf/manual/html_node/
+
+automake       mono    ${GS}/automake/manual/automake.html
+automake       node    ${GS}/automake/manual/html_node/
+
+avl            node    http://www.stanford.edu/~blp/avl/libavl.html/
+
+bash           mono    ${GS}/bash/manual/bash.html
+bash           node    ${GS}/bash/manual/html_node/
+
+BINUTILS = http://sourceware.org/binutils/docs
+binutils       node    ${BINUTILS}/binutils/
+ as            node    ${BINUTILS}/as/
+ bfd           node    ${BINUTILS}/bfd/
+ gprof         node    ${BINUTILS}/gprof/
+ ld            node    ${BINUTILS}/ld/
+
+bison          mono    ${GS}/bison/manual/bison.html
+bison          node    ${GS}/bison/manual/html_node/
+
+bpel2owfn      mono    ${GS}/bpel2owfn/manual/2.0.x/bpel2owfn.html
+
+ccd2cue                mono    ${GS}/ccd2cue/manual/ccd2cue.html
+ccd2cue                node    ${GS}/ccd2cue/manual/html_node/
+
+cflow          mono    ${GS}/cflow/manual/cflow.html
+cflow          node    ${GS}/cflow/manual/html_node/
+
+chess          mono    ${GS}/chess/manual/gnuchess.html
+chess          node    ${GS}/chess/manual/html_node/
+
+combine                mono    ${GS}/combine/manual/combine.html
+combine                chapter ${GS}/combine/manual/html_chapter/
+combine                section ${GS}/combine/manual/html_section/
+combine                node    ${GS}/combine/manual/html_node/
+
+complexity     mono    ${GS}/complexity/manual/complexity.html
+complexity     node    ${GS}/complexity/manual/html_node/
+
+coreutils      mono    ${GS}/coreutils/manual/coreutils
+coreutils      node    ${GS}/coreutils/manual/html_node/
+
+cpio           mono    ${GS}/cpio/manual/cpio
+cpio           node    ${GS}/cpio/manual/html_node/
+
+cssc           node    ${GS}/cssc/manual/
+
+#cvs cannot be handled here; see http://ximbiot.com/cvs/manual.
+
+ddd            mono    ${GS}/ddd/manual/html_mono/ddd.html
+
+ddrescue       mono    ${GS}/ddrescue/manual/ddrescue_manual.html
+
+DICO = http://puszcza.gnu.org.ua/software/dico/manual
+dico           mono    ${DICO}/dico.html
+dico           chapter ${DICO}/html_chapter/
+dico           section ${DICO}/html_section/
+dico           node    ${DICO}/html_node/
+
+diffutils      mono    ${GS}/diffutils/manual/diffutils
+diffutils      node    ${GS}/diffutils/manual/html_node/
+
+ed             mono    ${GS}/ed/manual/ed_manual.html
+
+EMACS = ${GS}/emacs/manual
+emacs          mono    ${EMACS}/html_mono/emacs.html
+emacs          node    ${EMACS}/html_node/emacs/
+ #
+ ada-mode      mono    ${EMACS}/html_mono/ada-mode.html
+ ada-mode      node    ${EMACS}/html_node/ada-mode/
+ #
+ autotype      mono    ${EMACS}/html_mono/autotype.html
+ autotype      node    ${EMACS}/html_node/autotype/
+ #
+ ccmode                mono    ${EMACS}/html_mono/ccmode.html
+ ccmode                node    ${EMACS}/html_node/ccmode/
+ #
+ cl            mono    ${EMACS}/html_mono/cl.html
+ cl            node    ${EMACS}/html_node/cl/
+ #
+ ebrowse       mono    ${EMACS}/html_mono/ebrowse.html
+ ebrowse       node    ${EMACS}/html_node/ebrowse/
+ #
+ ediff         mono    ${EMACS}/html_mono/ediff.html
+ ediff         node    ${EMACS}/html_node/ediff/
+ #
+ eieio         mono    ${EMACS}/html_mono/eieio.html
+ eieio         node    ${EMACS}/html_node/eieio/
+ #
+ elisp         mono    ${EMACS}/html_mono/elisp.html
+ elisp         node    ${EMACS}/html_node/elisp/
+ #
+ epa           mono    ${EMACS}/html_mono/epa.html
+ epa           node    ${EMACS}/html_node/epa/
+ #
+ erc           mono    ${EMACS}/html_mono/erc.html
+ erc           node    ${EMACS}/html_node/erc/
+ #
+ dired-x       mono    ${EMACS}/html_mono/dired-x.html
+ dired-x       node    ${EMACS}/html_node/dired-x/
+ #
+ eshell                mono    ${EMACS}/html_mono/eshell.html
+ eshell                node    ${EMACS}/html_node/eshell/
+ #
+ flymake       mono    ${EMACS}/html_mono/flymake.html
+ flymake       node    ${EMACS}/html_node/flymake/
+ #
+ gnus          mono    ${EMACS}/html_mono/gnus.html
+ gnus          node    ${EMACS}/html_node/gnus/
+ #
+ idlwave       mono    ${EMACS}/html_mono/idlwave.html
+ idlwave       node    ${EMACS}/html_node/idlwave/
+ #
+ message       mono    ${EMACS}/html_mono/message.html
+ message       node    ${EMACS}/html_node/message/
+ #
+ mh-e          mono    ${EMACS}/html_mono/mh-e.html
+ mh-e          node    ${EMACS}/html_node/mh-e/
+ #
+ nxml-mode     mono    ${EMACS}/html_mono/nxml-mode.html
+ nxml-mode     node    ${EMACS}/html_node/nxml-mode/
+ #
+ org           mono    ${EMACS}/html_mono/org.html
+ org           node    ${EMACS}/html_node/org/
+ #
+ pcl-cvs       mono    ${EMACS}/html_mono/pcl-cvs.html
+ pcl-cvs       node    ${EMACS}/html_node/pcl-cvs/
+ #
+ rcirc         mono    ${EMACS}/html_mono/rcirc.html
+ rcirc         node    ${EMACS}/html_node/rcirc/
+ #
+ semantic      mono    ${EMACS}/html_mono/semantic.html
+ semantic      node    ${EMACS}/html_node/semantic/
+ #
+ smtp          mono    ${EMACS}/html_mono/smtpmail.html
+ smtp          node    ${EMACS}/html_node/smtpmail/
+ #
+ speedbar      mono    ${EMACS}/html_mono/speedbar.html
+ speedbar      node    ${EMACS}/html_node/speedbar/
+ #
+ tramp         mono    ${EMACS}/html_mono/tramp.html
+ tramp         node    ${EMACS}/html_node/tramp/
+ #
+ vip           mono    ${EMACS}/html_mono/vip.html
+ vip           node    ${EMACS}/html_node/vip/
+ #
+ viper         mono    ${EMACS}/html_mono/viper.html
+ viper         node    ${EMACS}/html_node/viper/
+ #
+ woman         mono    ${EMACS}/html_mono/woman.html
+ woman         node    ${EMACS}/html_node/woman/
+ # (end emacs manuals)
+
+easejs         mono    ${GS}/easejs/manual/easejs.html
+easejs         node    ${GS}/easejs/manual/
+
+EMACS_GUIX = https://alezost.github.io/guix.el/manual/latest
+emacs-guix     mono    ${EMACS_GUIX}/emacs-guix.html
+emacs-guix     node    ${EMACS_GUIX}/html_node/
+
+emacs-muse     node    ${GS}/emacs-muse/manual/muse.html
+emacs-muse     node    ${GS}/emacs-muse/manual/html_node/
+
+emms           node    ${GS}/emms/manual/
+
+# The file is called 'find.info' but the package is 'findutils'.
+find           mono    ${GS}/findutils/manual/html_mono/find.html
+find           node    ${GS}/findutils/manual/html_node/find_html
+findutils      mono    ${GS}/findutils/manual/html_mono/find.html
+findutils      node    ${GS}/findutils/manual/html_node/find_html
+
+FLEX = http://flex.sourceforge.net
+flex           node    ${FLEX}/manual/
+
+gama           mono    ${GS}/gama/manual/gama.html
+gama           node    ${GS}/gama/manual/html_node/
+
+GAWK = ${GS}/gawk/manual
+gawk           mono    ${GAWK}/gawk.html
+gawk           node    ${GAWK}/html_node/
+ gawkinet      mono    ${GAWK}/gawkinet/gawkinet.html
+ gawkinet      node    ${GAWK}/gawkinet/html_node/
+
+gcal           mono    ${GS}/gcal/manual/gcal.html
+gcal           node    ${GS}/gcal/manual/html_node/
+
+GCC = http://gcc.gnu.org/onlinedocs
+gcc            node    ${GCC}/gcc/
+ cpp           node    ${GCC}/cpp/
+ gcj           node    ${GCC}/gcj/
+ gfortran      node    ${GCC}/gfortran/
+ gnat_rm       node    ${GCC}/gnat_rm/
+ gnat_ugn_unw  node    ${GCC}/gnat_ugn_unw/
+ libgomp       node    ${GCC}/libgomp/
+ libstdc++     node    ${GCC}/libstdc++/
+ #
+ gccint                node    ${GCC}/gccint/
+ cppinternals  node    ${GCC}/cppinternals/
+ gfc-internals node    ${GCC}/gfc-internals/
+ gnat-style    node    ${GCC}/gnat-style/
+ libiberty     node    ${GCC}/libiberty/
+
+GDB = http://sourceware.org/gdb/current/onlinedocs
+gdb            node    ${GDB}/gdb/
+ stabs         node    ${GDB}/stabs/
+
+GDBM = http://www.gnu.org.ua/software/gdbm/manual
+gdbm           mono    ${GDBM}/gdbm.html
+gdbm           chapter ${GDBM}/html_chapter/
+gdbm           section ${GDBM}/html_section/
+gdbm           node    ${GDBM}/html_node/
+
+gettext                mono    ${GS}/gettext/manual/gettext.html
+gettext                node    ${GS}/gettext/manual/html_node/
+
+gforth         node    http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/
+
+global         mono    ${GS}/global/manual/global.html
+
+gmediaserver   node    ${GS}/gmediaserver/manual/
+
+gmp            node    http://www.gmplib.org/manual/
+
+gnu-arch       node    ${GS}/gnu-arch/tutorial/
+
+gnu-c-manual   mono    ${GS}/gnu-c-manual/gnu-c-manual.html
+
+gnu-crypto     node    ${GS}/gnu-crypto/manual/
+
+gnubg          mono    ${GS}/gnubg/manual/gnubg.html
+gnubg          node    ${GS}/gnubg/manual/html_node/
+
+gnubik         mono    ${GS}/gnubik/manual/gnubik.html
+gnubik         node    ${GS}/gnubik/manual/html_node/
+
+gnulib         mono    ${GS}/gnulib/manual/gnulib.html
+gnulib         node    ${GS}/gnulib/manual/html_node/
+
+GNUN = ${GS}/trans-coord/manual
+gnun           mono    ${GNUN}/gnun/gnun.html
+gnun           node    ${GNUN}/gnun/html_node/
+ web-trans     mono    ${GNUN}/web-trans/web-trans.html
+ web-trans     node    ${GNUN}/web-trans/html_node/
+
+GNUNET = https://docs.gnunet.org/manuals
+gnunet                  node    ${GNUNET}/gnunet/
+ gnunet-c-tutorial      node    ${GNUNET}/gnunet-c-tutorial/
+ gnunet-java-tutorial   node    ${GNUNET}/gnunet-java-tutorial/
+
+GNUPG = http://www.gnupg.org/documentation/manuals
+gnupg          node    ${GNUPG}/gnupg/
+ dirmngr       node    ${GNUPG}/dirmngr/
+ gcrypt                node    ${GNUPG}/gcrypt/
+ libgcrypt     node    ${GNUPG}/gcrypt/
+ ksba          node    ${GNUPG}/ksba/
+ assuan                node    ${GNUPG}/assuan/
+ gpgme         node    ${GNUPG}/gpgme/
+
+gnuprologjava  node    ${GS}/gnuprologjava/manual/
+
+gnuschool      mono    ${GS}/gnuschool/gnuschool.html
+
+GNUSTANDARDS = ${G}/prep
+ maintain      mono    ${GNUSTANDARDS}/maintain/maintain.html
+ maintain      node    ${GNUSTANDARDS}/maintain/html_node/
+ #
+ standards     mono    ${GNUSTANDARDS}/standards/standards.html
+ standards     node    ${GNUSTANDARDS}/standards/html_node/
+
+gnutls         mono    http://gnutls.org/manual/gnutls.html
+gnutls         node    http://gnutls.org/manual/html_node/
+
+gnutls-guile   mono    http://gnutls.org/manual/gnutls-guile.html
+gnutls-guile   node    http://gnutls.org/manual/gnutls-guile/
+
+gperf          mono    ${GS}/gperf/manual/gperf.html
+gperf          node    ${GS}/gperf/manual/html_node/
+
+grep           mono    ${GS}/grep/manual/grep.html
+grep           node    ${GS}/grep/manual/html_node/
+
+groff          node    ${GS}/groff/manual/html_node/
+
+GRUB = ${GS}/grub/manual
+  grub         mono    ${GRUB}/grub.html
+  grub         node    ${GRUB}/html_node/
+  #
+  multiboot    mono    ${GRUB}/multiboot/multiboot.html
+  multiboot    node    ${GRUB}/multiboot/html_node/
+
+gsasl          mono    ${GS}/gsasl/manual/gsasl.html
+gsasl          node    ${GS}/gsasl/manual/html_node/
+
+gsl            node    ${GS}/gsl/manual/html_node/
+
+gsrc           mono    ${GS}/gsrc/manual/gsrc.html
+gsrc           node    ${GS}/gsrc/manual/html_node/
+
+gss            mono    ${GS}/gss/manual/gss.html
+gss            node    ${GS}/gss/manual/html_node/
+
+gtypist                mono    ${GS}/gtypist/doc/
+
+guile          mono    ${GS}/guile/manual/guile.html
+guile          node    ${GS}/guile/manual/html_node/
+
+guile-avahi    mono    http://nongnu.org/guile-avahi/doc/guile-avahi.html
+
+GUILE_GNOME = ${GS}/guile-gnome/docs
+ gobject       node    ${GUILE_GNOME}/gobject/html/
+ glib          node    ${GUILE_GNOME}/glib/html/
+ atk           node    ${GUILE_GNOME}/atk/html/
+ pango         node    ${GUILE_GNOME}/pango/html/
+ pangocairo    node    ${GUILE_GNOME}/pangocairo/html/
+ gdk           node    ${GUILE_GNOME}/gdk/html/
+ gtk           node    ${GUILE_GNOME}/gtk/html/
+ libglade      node    ${GUILE_GNOME}/libglade/html/
+ gnome-vfs     node    ${GUILE_GNOME}/gnome-vfs/html/
+ libgnomecanvas        node    ${GUILE_GNOME}/libgnomecanvas/html/
+ gconf         node    ${GUILE_GNOME}/gconf/html/
+ libgnome      node    ${GUILE_GNOME}/libgnome/html/
+ libgnomeui    node    ${GUILE_GNOME}/libgnomeui/html/
+ corba         node    ${GUILE_GNOME}/corba/html/
+ clutter       node    ${GUILE_GNOME}/clutter/html/
+ clutter-glx   node    ${GUILE_GNOME}/clutter-glx/html/
+
+guile-gtk      node    ${GS}/guile-gtk/docs/guile-gtk/
+
+guile-rpc      mono    ${GS}/guile-rpc/manual/guile-rpc.html
+guile-rpc      node    ${GS}/guile-rpc/manual/html_node/
+
+guix           mono    ${GS}/guix/manual/guix.html
+guix           node    ${GS}/guix/manual/html_node/
+
+gv             mono    ${GS}/gv/manual/gv.html
+gv             node    ${GS}/gv/manual/html_node/
+
+gzip           mono    ${GS}/gzip/manual/gzip.html
+gzip           node    ${GS}/gzip/manual/html_node/
+
+hello          mono    ${GS}/hello/manual/hello.html
+hello          node    ${GS}/hello/manual/html_node/
+
+help2man       mono    ${GS}/help2man/help2man.html
+
+idutils                mono    ${GS}/idutils/manual/idutils.html
+idutils                node    ${GS}/idutils/manual/html_node/
+
+inetutils      mono    ${GS}/inetutils/manual/inetutils.html
+inetutils      node    ${GS}/inetutils/manual/html_node/
+
+jwhois         mono    ${GS}/jwhois/manual/jwhois.html
+jwhois         node    ${GS}/jwhois/manual/html_node/
+
+libc           mono    ${GS}/libc/manual/html_mono/libc.html
+libc           node    ${GS}/libc/manual/html_node/
+
+LIBCDIO = ${GS}/libcdio
+ libcdio       mono    ${LIBCDIO}/libcdio.html
+ cd-text       mono    ${LIBCDIO}/cd-text-format.html
+
+libextractor   mono    ${GS}/libextractor/manual/libextractor.html
+libextractor   node    ${GS}/libextractor/manual/html_node/
+
+libidn         mono    ${GS}/libidn/manual/libidn.html
+libidn         node    ${GS}/libidn/manual/html_node/
+
+librejs                mono    ${GS}/librejs/manual/librejs.html
+librejs                node    ${GS}/librejs/manual/html_node/
+
+libmatheval    mono    ${GS}/libmatheval/manual/libmatheval.html
+
+LIBMICROHTTPD = ${GS}/libmicrohttpd
+libmicrohttpd          mono    ${LIBMICROHTTPD}/manual/libmicrohttpd.html
+libmicrohttpd          node    ${LIBMICROHTTPD}/manual/html_node/
+ microhttpd-tutorial   mono    ${LIBMICROHTTPD}/tutorial.html
+
+libtasn1       mono    ${GS}/libtasn1/manual/libtasn1.html
+libtasn1       node    ${GS}/libtasn1/manual/html_node/
+
+libtool                mono    ${GS}/libtool/manual/libtool.html
+libtool                node    ${GS}/libtool/manual/html_node/
+
+lightning      mono    ${GS}/lightning/manual/lightning.html
+lightning      node    ${GS}/lightning/manual/html_node/
+
+# The stable/ url redirects immediately, but that's ok.
+# The .html extension is omitted on their web site, but it works if given.
+LILYPOND = http://lilypond.org/doc/stable/Documentation
+ lilypond-internals    node ${LILYPOND}/internals/
+ lilypond-learning     node ${LILYPOND}/learning/
+ lilypond-notation     node ${LILYPOND}/notation/
+ lilypond-snippets     node ${LILYPOND}/snippets/
+ lilypond-usage                node ${LILYPOND}/usage/
+ lilypond-web          node ${LILYPOND}/web/
+ music-glossary                node ${LILYPOND}/music-glossary/
+
+liquidwar6     mono    ${GS}/liquidwar6/manual/liquidwar6.html
+liquidwar6     node    ${GS}/liquidwar6/manual/html_node/
+
+lispintro      mono    
${GS}/emacs/emacs-lisp-intro/html_mono/emacs-lisp-intro.html
+lispintro      node    ${GS}/emacs/emacs-lisp-intro/html_node/index.html
+
+LSH = http://www.lysator.liu.se/~nisse/lsh
+  lsh          mono    ${LSH}/lsh.html
+
+m4             mono    ${GS}/m4/manual/m4.html
+m4             node    ${GS}/m4/manual/html_node/
+
+mailutils      mono    ${GS}/mailutils/manual/mailutils.html
+mailutils      chapter ${GS}/mailutils/manual/html_chapter/
+mailutils      section ${GS}/mailutils/manual/html_section/
+mailutils      node    ${GS}/mailutils/manual/html_node/
+
+make           mono    ${GS}/make/manual/make.html
+make           node    ${GS}/make/manual/html_node/
+
+mcron          mono    ${GS}/mcron/manual/mcron.html
+mcron          node    ${GS}/mcron/manual/html_node/
+
+mdk            mono    ${GS}/mdk/manual/mdk.html
+mdk            node    ${GS}/mdk/manual/html_node/
+
+METAEXCHANGE = http://ftp.gwdg.de/pub/gnu2/iwfmdh/doc/texinfo
+ iwf_mh                node    ${METAEXCHANGE}/iwf_mh.html
+ scantest      node    ${METAEXCHANGE}/scantest.html
+
+MIT_SCHEME = ${GS}/mit-scheme/documentation
+ mit-scheme-ref          node  ${MIT_SCHEME}/mit-scheme-ref/
+ mit-scheme-user  node ${MIT_SCHEME}/mit-scheme-user/
+ sos             node  ${MIT_SCHEME}/mit-scheme-sos/
+ mit-scheme-imail node ${MIT_SCHEME}/mit-scheme-imail/
+
+moe            mono    ${GS}/moe/manual/moe_manual.html
+
+motti          node    ${GS}/motti/manual/
+
+mpc            node    
http://www.multiprecision.org/index.php?prog=mpc&page=html
+
+mpfr           mono    http://www.mpfr.org/mpfr-current/mpfr.html
+
+mtools         mono    ${GS}/mtools/manual/mtools.html
+
+myserver       node    http://www.myserverproject.net/documentation/
+
+nano           mono    http://www.nano-editor.org/dist/latest/nano.html
+
+nettle         chapter http://www.lysator.liu.se/~nisse/nettle/nettle.html
+
+ocrad          mono    ${GS}/ocrad/manual/ocrad_manual.html
+
+parted         mono    ${GS}/parted/manual/parted.html
+parted         node    ${GS}/parted/manual/html_node/
+
+pascal         mono    http://www.gnu-pascal.de/gpc/
+
+# can't use pcb since url's contain dates --30nov10
+
+perl           mono    ${GS}/perl/manual/perldoc-all.html
+
+PIES = http://www.gnu.org.ua/software/pies/manual
+pies           mono    ${PIES}/pies.html
+pies           chapter ${PIES}/html_chapter/
+pies           section ${PIES}/html_section/
+pies           node    ${PIES}/html_node/
+
+plotutils      mono    ${GS}/plotutils/manual/en/plotutils.html
+plotutils      node    ${GS}/plotutils/manual/en/html_node/
+
+proxyknife     mono    ${GS}/proxyknife/manual/proxyknife.html
+proxyknife     node    ${GS}/proxyknife/manual/html_node/
+
+pspp           mono    ${GS}/pspp/manual/pspp.html
+pspp           node    ${GS}/pspp/manual/html_node/
+
+pyconfigure    mono    ${GS}/pyconfigure/manual/pyconfigure.html
+pyconfigure    node    ${GS}/pyconfigure/manual/html_node/
+
+R = http://cran.r-project.org/doc/manuals
+ R-intro       mono    ${R}/R-intro.html
+ R-lang                mono    ${R}/R-lang.html
+ R-exts                mono    ${R}/R-exts.html
+ R-data                mono    ${R}/R-data.html
+ R-admin       mono    ${R}/R-admin.html
+ R-ints                mono    ${R}/R-ints.html
+
+rcs            mono    ${GS}/rcs/manual/rcs.html
+rcs            node    ${GS}/rcs/manual/html_node/
+
+READLINE = http://cnswww.cns.cwru.edu/php/chet/readline
+readline        mono    ${READLINE}/readline.html
+ rluserman      mono    ${READLINE}/rluserman.html
+ history        mono    ${READLINE}/history.html
+
+recode         mono    http://recode.progiciels-bpi.ca/manual/index.html
+
+recutils       mono    ${GS}/recutils/manual/recutils.html
+recutils       node    ${GS}/recutils/manual/html_node/
+
+reftex         mono    ${GS}/auctex/manual/reftex.html
+reftex         node    ${GS}/auctex/manual/reftex/
+
+remotecontrol  mono    ${GS}/remotecontrol/manual/remotecontrol.html
+remotecontrol  node    ${GS}/remotecontrol/manual/html_node/
+
+rottlog                mono    ${GS}/rottlog/manual/rottlog.html
+rottlog                node    ${GS}/rottlog/manual/html_node/
+
+RUSH = http://www.gnu.org.ua/software/rush/manual
+rush           mono    ${RUSH}/rush.html
+rush           chapter ${RUSH}/html_chapter/
+rush           section ${RUSH}/html_section/
+rush           node    ${RUSH}/html_node/
+
+screen         mono    ${GS}/screen/manual/screen.html
+screen         node    ${GS}/screen/manual/html_node/
+
+sed            mono    ${GS}/sed/manual/sed.html
+sed            node    ${GS}/sed/manual/html_node/
+
+sharutils      mono    ${GS}/sharutils/manual/html_mono/sharutils.html
+sharutils      chapter ${GS}/sharutils/manual/html_chapter/
+sharutils      node    ${GS}/sharutils/manual/html_node/
+
+shepherd       mono    ${GS}/shepherd/manual/shepherd.html
+shepherd       node    ${GS}/shepherd/manual/html_node/
+
+# can't use mono files since they have generic names
+SMALLTALK = ${GS}/smalltalk
+smalltalk      node    ${SMALLTALK}/manual/html_node/
+ smalltalk-base        node    ${SMALLTALK}/manual-base/html_node/
+ smalltalk-libs        node    ${SMALLTALK}/manual-libs/html_node/
+
+sourceinstall  mono    ${GS}/sourceinstall/manual/sourceinstall.html
+sourceinstall  node    ${GS}/sourceinstall/manual/html_node/
+
+sqltutor       mono    ${GS}/sqltutor/manual/sqltutor.html
+sqltutor       node    ${GS}/sqltutor/manual/html_node/
+
+src-highlite   mono    ${GS}/src-highlite/source-highlight.html
+
+swbis          mono    ${GS}/swbis/manual.html
+
+tar            mono    ${GS}/tar/manual/tar.html
+tar            chapter ${GS}/tar/manual/html_chapter/
+tar            section ${GS}/tar/manual/html_section/
+tar            node    ${GS}/autoconf/manual/html_node/
+
+teseq          mono    ${GS}/teseq/teseq.html
+teseq          node    ${GS}/teseq/html_node/
+
+TEXINFO = ${GS}/texinfo/manual
+texinfo                mono    ${TEXINFO}/texinfo/texinfo.html
+texinfo                node    ${TEXINFO}/texinfo/html_node/
+ #
+ info          mono    ${TEXINFO}/info/info.html
+ info          node    ${TEXINFO}/info/html_node/
+ #
+ info-stnd     mono    ${TEXINFO}/info-stnd/info-stnd.html
+ info-stnd     node    ${TEXINFO}/info-stnd/html_node/
+
+thales         node    ${GS}/thales/manual/
+
+units          mono    ${GS}/units/manual/units.html
+units          node    ${GS}/units/manual/html_node/
+
+vc-dwim                mono    ${GS}/vc-dwim/manual/vc-dwim.html
+vc-dwim                node    ${GS}/vc-dwim/manual/html_node/
+
+wdiff          mono    ${GS}/wdiff/manual/wdiff.html
+wdiff          node    ${GS}/wdiff/manual/html_node/
+
+websocket4j    mono    ${GS}/websocket4j/manual/websocket4j.html
+websocket4j    node    ${GS}/websocket4j/manual/html_node/
+
+wget           mono    ${GS}/wget/manual/wget.html
+wget           node    ${GS}/wget/manual/html_node/
+
+xboard         mono    ${GS}/xboard/manual/xboard.html
+xboard         node    ${GS}/xboard/manual/html_node/
+
+# emacs-page
+# Free TeX-related Texinfo manuals on tug.org.
+
+T = http://tug.org/texinfohtml
+
+dvipng         mono    ${T}/dvipng.html
+dvips          mono    ${T}/dvips.html
+eplain         mono    ${T}/eplain.html
+kpathsea       mono    ${T}/kpathsea.html
+latex2e                mono    ${T}/latex2e.html
+tlbuild                mono    ${T}/tlbuild.html
+web2c          mono    ${T}/web2c.html
+
+
+# Local Variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "htmlxrefversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lsd0000.texi b/lsd0000.texi
new file mode 100644
index 0000000..a529a86
--- /dev/null
+++ b/lsd0000.texi
@@ -0,0 +1,84 @@
+\input texinfo
address@hidden -*-texinfo-*-
+
address@hidden %**start of header
address@hidden lsd0000.info
address@hidden UTF-8
address@hidden GNUnet Reference Manual
address@hidden 2
address@hidden It seems as if this breaks some old garbage version of
address@hidden texinfo running on some systems. FIXME!!!
address@hidden @urefbreakstyle before
address@hidden %**end of header
+
+
address@hidden version2.texi
+
address@hidden
+Copyright @copyright{} 2001-2018 GNUnet e.V.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+copy of the license is included in the section entitled ``GNU Free
+Documentation License''.
+
+A copy of the license is also available from the Free Software
+Foundation Web site at @url{http://www.gnu.org/licenses/fdl.html}.
+
+Alternately, this document is also available under the General
+Public License, version 3 or later, as published by the Free Software
+Foundation.  A copy of the license is included in the section entitled
+``GNU General Public License''.
+
+A copy of the license is also available from the Free Software
+Foundation Web site at @url{http://www.gnu.org/licenses/gpl.html}.
address@hidden copying
+
+
+
address@hidden Networking
address@hidden
+* GNUnet: (gnunet).       Framework for secure peer-to-peer networking
address@hidden direntry
+
address@hidden
address@hidden GNUnet Reference Manual
address@hidden Installing, configuring, using and contributing to GNUnet
address@hidden The GNUnet Developers
+
address@hidden
address@hidden 0pt plus 1filll
+Edition @value{EDITION} @*
address@hidden @*
+
address@hidden
address@hidden titlepage
+
address@hidden
address@hidden
+
address@hidden Top
address@hidden Introduction
+
+This document is the Reference Manual for GNUnet version @value{VERSION}.
+
address@hidden
+
+* Abstract::                            Abstract
+* GNU Affero General Public License::
+
address@hidden Abstract
address@hidden Abstract
+
+This is a template.
+
+
address@hidden 
*********************************************************************
address@hidden GNU Free Documentation License
address@hidden GNU Free Documentation License
address@hidden license, GNU Free Documentation License
address@hidden fdl-1.3.texi
+
address@hidden
diff --git a/run-gendocs.sh b/run-gendocs.sh
new file mode 100755
index 0000000..d025701
--- /dev/null
+++ b/run-gendocs.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+make version.texi
+make version2.texi
+./gendocs.sh --email address@hidden gnunet-c-tutorial "GNUnet C Tutorial" -o 
"manual/gnunet-c-tutorial"
+#cd manual
+#mkdir gnunet-c-tutorial
+#mv * gnunet-c-tutorial/
+#cd ..
+./gendocs.sh --email address@hidden gnunet "GNUnet Reference Manual" -o 
"manual/gnunet"
+#cd manual
+#mkdir handbook
+#mkdir ../tmp-gnunet
+#mv gnunet ../tmp-gnunet
+#mv * handbook/
+#mv ../tmp-gnunet gnunet
+cp "index.html" manual/
+printf "Success"

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]