aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxrs <xrs@mail36.net>2017-09-20 20:27:01 +0200
committerxrs <xrs@mail36.net>2017-09-20 20:27:01 +0200
commit6ca4af1929f99b0bd49e4d39097ff6d0c331eddf (patch)
treef87e6d55e5bf078d5dc72ef41622a80461b30f67
parentdd2ddaa455fd8d2623001b89caa4e74b7ed4db36 (diff)
parent37d4b1f14ebc692efe9a2744946ba2bfd8ccf6d3 (diff)
Merge branch 'master' of ssh://gnunet.org/gnunet
-rw-r--r--contrib/Makefile.am1
-rw-r--r--contrib/nssswitch.conf25
-rw-r--r--contrib/packages/guix/gnunet-doc.scm165
-rw-r--r--contrib/packages/guix/guix-env.scm15
-rw-r--r--contrib/packages/guix/packages/gnunet/packages/gnunet.scm15
-rw-r--r--doc/Makefile.am97
-rw-r--r--doc/README.txt42
-rw-r--r--doc/figs/Service.pdfbin7303 -> 0 bytes
-rw-r--r--doc/figs/System.pdfbin7897 -> 0 bytes
-rw-r--r--doc/gnunet-c-tutorial.pdfbin293947 -> 0 bytes
-rw-r--r--doc/gnunet-c-tutorial.texi6
-rw-r--r--doc/images/daemon_lego_block.svg126
-rw-r--r--doc/images/gnunet-tutorial-service.pngbin0 -> 40142 bytes
-rw-r--r--doc/images/gnunet-tutorial-system.pngbin0 -> 46982 bytes
-rw-r--r--doc/images/lego_stack.svg737
-rw-r--r--doc/images/service_lego_block.svg345
-rw-r--r--src/cadet/gnunet-service-cadet.c1
17 files changed, 1538 insertions, 37 deletions
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 9ce4b019d8..07cff424c0 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -48,6 +48,7 @@ EXTRA_DIST = \
no_forcestart.conf \
no_autostart_above_core.conf \
coverage.sh \
+ nssswitch.conf \
report.sh \
terminate.py.in \
gnunet_pyexpect.py.in \
diff --git a/contrib/nssswitch.conf b/contrib/nssswitch.conf
new file mode 100644
index 0000000000..89af6471ea
--- /dev/null
+++ b/contrib/nssswitch.conf
@@ -0,0 +1,25 @@
+# /etc/nsswitch.conf
+# Modified to support GNUnet's GNS (.gnu, .zkey etc)
+# Compare with your distributions' "nsswitch.conf" file.
+
+passwd: compat
+shadow: compat
+group: compat
+
+# passwd: db files nis
+# shadow: db files nis
+# group: db files nis
+
+hosts: files gns [NOTFOUND=return] dns
+networks: files dns
+
+services: db files
+protocols: db files
+rpc: db files
+ethers: db files
+netmasks: files
+netgroup: files
+bootparams: files
+
+automount: files
+aliases: files \ No newline at end of file
diff --git a/contrib/packages/guix/gnunet-doc.scm b/contrib/packages/guix/gnunet-doc.scm
new file mode 100644
index 0000000000..a2a9a2393c
--- /dev/null
+++ b/contrib/packages/guix/gnunet-doc.scm
@@ -0,0 +1,165 @@
+;;; This file is part of GNUnet.
+;;; Copyright (C) 2016, 2017 GNUnet e.V.
+;;;
+;;; GNUnet is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published
+;;; by the Free Software Foundation; either version 3, 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
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNUnet; see the file COPYING. If not, write to the
+;;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;;; Boston, MA 02110-1301, USA.
+;;;
+
+(use-modules
+ (ice-9 popen)
+ (ice-9 match)
+ (ice-9 rdelim)
+ (guix packages)
+ (guix build-system gnu)
+ (guix gexp)
+ ((guix build utils) #:select (with-directory-excursion))
+ (guix git-download)
+ (guix utils) ; current-source-directory
+ (gnu packages)
+ (gnu packages aidc)
+ (gnu packages autotools)
+ (gnu packages backup)
+ (gnu packages base)
+ (gnu packages compression)
+ (gnu packages curl)
+ (gnu packages databases)
+ (gnu packages file)
+ (gnu packages gettext)
+ (gnu packages glib)
+ (gnu packages gnome)
+ (gnu packages gnunet)
+ (gnu packages gnupg)
+ (gnu packages gnuzilla)
+ (gnu packages groff)
+ (gnu packages gstreamer)
+ (gnu packages gtk)
+ (gnu packages guile)
+ (gnu packages image)
+ (gnu packages image-viewers)
+ (gnu packages libidn)
+ (gnu packages libunistring)
+ (gnu packages linux)
+ (gnu packages maths)
+ (gnu packages multiprecision)
+ (gnu packages perl)
+ (gnu packages pkg-config)
+ (gnu packages pulseaudio)
+ (gnu packages python)
+ (gnu packages tex)
+ (gnu packages texinfo)
+ (gnu packages tex)
+ (gnu packages tls)
+ (gnu packages video)
+ (gnu packages web)
+ (gnu packages xiph)
+ ((guix licenses) #:prefix license:))
+
+(define %source-dir (string-append (current-source-directory)
+ "/../../../"))
+
+(define gnunet-doc
+ (let* ((revision "1")
+ (select? (delay (or (git-predicate
+ (string-append (current-source-directory)
+ "/../../../"))
+ source-file?))))
+ (package
+ (name "gnunet-doc")
+ (version (string-append "0.10.1-" revision "." "dev"))
+ (source
+ (local-file ;;"../../.."
+ ;;%source-dir
+ ;;(string-append (getcwd) "/../../../")
+ (string-append (getcwd)) ;drrty hack and this assumes one static position FIXME!
+ #:recursive? #t))
+ ;;#:select? (git-predicate %source-dir)))
+ ;;#:select? (force select?)))
+ (build-system gnu-build-system)
+ (inputs
+ `(("glpk" ,glpk)
+ ("gnurl" ,gnurl)
+ ("gstreamer" ,gstreamer)
+ ("gst-plugins-base" ,gst-plugins-base)
+ ("gnutls" ,gnutls) ;Change to gnutls/dane once it is merged.
+ ("libextractor" ,libextractor)
+ ("libgcrypt" ,libgcrypt)
+ ("libidn" ,libidn)
+ ("libmicrohttpd" ,libmicrohttpd)
+ ("libltdl" ,libltdl)
+ ("libunistring" ,libunistring)
+ ("openssl" ,openssl)
+ ("opus" ,opus)
+ ("pulseaudio" ,pulseaudio)
+ ("sqlite" ,sqlite)
+ ("postgresql" ,postgresql)
+ ("mysql" ,mysql)
+ ("zlib" ,zlib)
+ ("perl" ,perl)
+ ("python" ,python) ; tests and gnunet-qr
+ ("jansson" ,jansson)
+ ("nss" ,nss)
+ ("glib" ,glib "bin")
+ ("gmp" ,gmp)
+ ("bluez" ,bluez) ; for optional bluetooth feature
+ ("glib" ,glib)
+ ;;("texlive-minimal" ,texlive-minimal) ; optional.
+ ("texlive" ,texlive)
+ ("libogg" ,libogg)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)
+ ("autoconf" ,autoconf)
+ ("automake" ,automake)
+ ("gnu-gettext" ,gnu-gettext)
+ ("texinfo" ,texinfo)
+ ("libtool" ,libtool)))
+ (arguments
+ `(#:tests? #f ;Don't run tests
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'autoconf
+ (lambda _
+ (substitute* "bootstrap"
+ (("contrib/pogen.sh") "sh contrib/pogen.sh"))
+ (for-each (lambda (f) (chmod f #o755))
+ (find-files "po" ""))
+ (zero? (system* "sh" "bootstrap"))))
+ (replace 'build
+ (lambda _
+ (chdir "doc")
+ (zero? (system* "make" "doc-all-give-me-the-noise"))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (doc (string-append out "/share/doc/gnunet")))
+ (mkdir-p doc)
+ (mkdir-p (string-append doc "/gnunet"))
+ (install-file "gnunet.pdf" doc)
+ (install-file "gnunet.info" doc)
+ (copy-recursively "gnunet"
+ (string-append doc
+ "/gnunet"))
+ (install-file "gnunet-c-tutorial.pdf" doc)
+ (install-file "gnunet-c-tutorial.info" doc)
+ (copy-recursively "gnunet-c-tutorial"
+ (string-append doc
+ "/gnunet-c-tutorial")))
+ #t)))))
+ (synopsis "Documentation of GNUnet")
+ (description
+ "GNUnet documentation build")
+ (license (list license:fdl1.3+ license:gpl3+))
+ (home-page "https://gnunet.org/"))))
+
+gnunet-doc
diff --git a/contrib/packages/guix/guix-env.scm b/contrib/packages/guix/guix-env.scm
index cf7ccb85a2..6946fee570 100644
--- a/contrib/packages/guix/guix-env.scm
+++ b/contrib/packages/guix/guix-env.scm
@@ -81,6 +81,7 @@
(gnu packages python)
(gnu packages tex)
(gnu packages texinfo)
+ (gnu packages tex)
(gnu packages tls)
(gnu packages video)
(gnu packages web)
@@ -91,7 +92,7 @@
"/../../../"))
(define gnunet-git
- (let* ((revision "2")
+ (let* ((revision "3")
(select? (delay (or (git-predicate
(string-append (current-source-directory)
"/../../../"))
@@ -131,12 +132,14 @@
("python" ,python) ; tests and gnunet-qr
("jansson" ,jansson)
("nss" ,nss)
+ ("glib" ,glib "bin")
("gmp" ,gmp)
("bluez" ,bluez) ; for optional bluetooth feature
("glib" ,glib)
;; There are currently no binary substitutes for texlive on
;; hydra.gnu.org or its mirrors due to its size. Uncomment if you need it.
;;("texlive-minimal" ,texlive-minimal) ; optional.
+ ("texlive" ,texlive)
("libogg" ,libogg)))
(native-inputs
`(("pkg-config" ,pkg-config)
@@ -150,7 +153,7 @@
(outputs '("out" "debug"))
(arguments
`(#:configure-flags
- (list (string-append "--with-nssdir=" %output "/lib")
+ (list (string-append "--with-nssdir=" %output "/lib");"/lib/gnunet/nss")
"--enable-gcc-hardening"
"--enable-linker-hardening"
@@ -174,6 +177,14 @@
(add-after 'patch-bin-sh 'bootstrap
(lambda _
(zero? (system* "sh" "bootstrap"))))
+ ;; (add-after 'install 'install-lib-nss
+ ;; (lambda* (#:key outputs #:allow-other-keys)
+ ;; (let* ((out (assoc-ref outputs "out"))
+ ;; (lib (string-append out "/lib/nss/")))
+ ;; (mkdir-p lib)
+ ;; (copy-recursively "src/gns/nss/" lib)
+ ;; (install-file "ping" "combobreak"))
+ ;; #t))
(delete 'check))))
;; XXX: https://gnunet.org/bugs/view.php?id=4619
;; (add-after 'install 'set-path-for-check
diff --git a/contrib/packages/guix/packages/gnunet/packages/gnunet.scm b/contrib/packages/guix/packages/gnunet/packages/gnunet.scm
index 7de216f1df..7840705a63 100644
--- a/contrib/packages/guix/packages/gnunet/packages/gnunet.scm
+++ b/contrib/packages/guix/packages/gnunet/packages/gnunet.scm
@@ -61,8 +61,8 @@
;; Explanation for name scheme: UNIXPATH is capped at 108 characters,
;; this causes lots of tests to fail.
(define-public gnunetg
- (let* ((commit "292cc51b35bcb727fa80b7c95730dae02e41a7d4")
- (revision "28"))
+ (let* ((commit "b005d5e4dac03fcfdabf0d0de434da3b295f6d63")
+ (revision "30"))
(package
(inherit gnunet)
(name "gnunetg")
@@ -77,7 +77,7 @@
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
- "0sapap3y7bakmmbj5jijbp60xbmaqiliwcsk9qfgaz571wsccpy3"))))
+ "10wfb58pi55399cw100vplq3f8nxg2vl6sywcmvkx3wg1d3firla"))))
(build-system gnu-build-system)
(inputs
`(("glpk" ,glpk)
@@ -220,7 +220,7 @@
(replace 'build
(lambda _
(chdir "doc")
- (zero? (system* "make" "doc-all"))))
+ (zero? (system* "make" "doc-all-give-me-the-noise"))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
@@ -231,7 +231,12 @@
(install-file "gnunet.info" doc)
(copy-recursively "gnunet"
(string-append doc
- "/gnunet")))
+ "/gnunet"))
+ (install-file "gnunet-c-tutorial.pdf" doc)
+ (install-file "gnunet-c-tutorial.info" doc)
+ (copy-recursively "gnunet-c-tutorial"
+ (string-append doc
+ "/gnunet-c-tutorial")))
#t)))))
(synopsis "GNUnet documentation")
(description
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 72c0734961..07aafbb519 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -3,34 +3,41 @@ SUBDIRS = man doxygen
docdir = $(datadir)/doc/gnunet/
-gnunet_doc_images = \
- images/gnunet-gtk-0-10-gns-a-done.png \
- images/gnunet-gtk-0-10-gns-a.png \
- images/daemon_lego_block.png \
- images/gnunet-gtk-0-10-gns.png \
- images/gnunet-0-10-peerinfo.png \
- images/gnunet-gtk-0-10-identity.png \
- images/gnunet-fs-gtk-0-10-star-tab.png \
- images/gnunet-gtk-0-10.png \
- images/gnunet-gtk-0-10-download-area.png \
- images/gnunet-gtk-0-10-search-selected.png \
- images/gnunet-gtk-0-10-fs-menu.png \
- images/gnunet-gtk-0-10-traffic.png \
- images/gnunet-gtk-0-10-fs.png \
- images/gnunet-namestore-gtk-phone.png \
- images/gnunet-gtk-0-10-fs-publish-editing.png \
- images/gnunet-namestore-gtk-vpn.png \
- images/gnunet-gtk-0-10-fs-published.png \
- images/gnunet-setup-exit.png \
- images/gnunet-gtk-0-10-fs-publish.png \
- images/iceweasel-preferences.png \
- images/gnunet-gtk-0-10-fs-publish-select.png \
- images/iceweasel-proxy.png \
- images/gnunet-gtk-0-10-fs-publish-with-file_0.png \
- images/service_lego_block.png \
- images/gnunet-gtk-0-10-fs-publish-with-file.png \
- images/service_stack.png \
- images/gnunet-gtk-0-10-fs-search.png
+infoimagedir = $(infodir)/images
+
+dist_infoimage_DATA = \
+ %D%/images/gnunet-gtk-0-10-gns-a-done.png \
+ %D%/images/gnunet-gtk-0-10-gns-a.png \
+ %D%/images/daemon_lego_block.png \
+ %D%/images/gnunet-gtk-0-10-gns.png \
+ %D%/images/gnunet-0-10-peerinfo.png \
+ %D%/images/gnunet-gtk-0-10-identity.png \
+ %D%/images/gnunet-fs-gtk-0-10-star-tab.png \
+ %D%/images/gnunet-gtk-0-10.png \
+ %D%/images/gnunet-gtk-0-10-download-area.png \
+ %D%/images/gnunet-gtk-0-10-search-selected.png \
+ %D%/images/gnunet-gtk-0-10-fs-menu.png \
+ %D%/images/gnunet-gtk-0-10-traffic.png \
+ %D%/images/gnunet-gtk-0-10-fs.png \
+ %D%/images/gnunet-namestore-gtk-phone.png \
+ %D%/images/gnunet-gtk-0-10-fs-publish-editing.png \
+ %D%/images/gnunet-namestore-gtk-vpn.png \
+ %D%/images/gnunet-gtk-0-10-fs-published.png \
+ %D%/images/gnunet-setup-exit.png \
+ %D%/images/gnunet-gtk-0-10-fs-publish.png \
+ %D%/images/iceweasel-preferences.png \
+ %D%/images/gnunet-gtk-0-10-fs-publish-select.png \
+ %D%/images/iceweasel-proxy.png \
+ %D%/images/gnunet-gtk-0-10-fs-publish-with-file_0.png \
+ %D%/images/service_lego_block.png \
+ %D%/images/gnunet-gtk-0-10-fs-publish-with-file.png \
+ %D%/images/service_stack.png \
+ %D%/images/gnunet-gtk-0-10-fs-search.png \
+ %D%/images/gnunet-tutorial-service.png \
+ %D%/images/gnunet-tutorial-system.png \
+ %D%/images/daemon_lego_block.svg \
+ %D%/images/lego_stack.svg \
+ %D%/images/service_lego_block.svg
gnunet_tutorial_examples = \
001.c \
@@ -74,9 +81,22 @@ gnunet_TEXINFOS = \
EXTRA_DIST = \
$(gnunet_TEXINFOS) \
- $(gnunet_doc_images) \
$(gnunet_tutorial_examples) \
- outdated-and-old-installation-instructions.txt
+ outdated-and-old-installation-instructions.txt \
+ gnunet-c-tutorial-v1.pdf \
+ README.txt
+
+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
+
+service_lego_block.png: images/service_lego_block.svg
+ convert images/service_lego_block.svg images/service_lego_block.png &&
+ pngcrush images/service_lego_block.png images/serivce_lego_block.png
+
+lego_stack.png: images/lego_stack.svg
+ convert images/lego_stack.svg images/lego_stack.png &&
+ pngcrush images/lego_stack.png images/lego_stack.png
version.texi:
echo "@set UPDATED $(date +'%d %B %Y')" > $@
@@ -105,4 +125,21 @@ doc-clean:
doc-all: doc-pdf doc-html doc-info doc-pdf-tutorial doc-html-tutorial doc-info-tutorial
+doc-pdf-noise: version.texi
+ @makeinfo --pdf gnunet.texi
+doc-pdf-tutorial-noise: version.texi
+ @makeinfo --pdf gnunet-c-tutorial.texi
+
+doc-html-noise: version.texi
+ @makeinfo --html gnunet.texi
+doc-html-tutorial-noise: version.texi
+ @makeinfo --html gnunet-c-tutorial.texi
+
+doc-info-noise: version.texi
+ @makeinfo --no-split gnunet.texi
+doc-info-tutorial-noise: version.texi
+ @makeinfo --no-split gnunet-c-tutorial.texi
+
+doc-all-give-me-the-noise: doc-pdf-noise doc-html-noise doc-info-noise doc-pdf-tutorial-noise doc-html-tutorial-noise doc-info-tutorial-noise
+
.PHONY: version.texi
diff --git a/doc/README.txt b/doc/README.txt
new file mode 100644
index 0000000000..2abe479dd7
--- /dev/null
+++ b/doc/README.txt
@@ -0,0 +1,42 @@
+* What's left to do
+
+- Which Texlive modules are needed? Decrease the size.
+- Update the content of gnunet documentation.
+
+* How to use (hack) on this
+
+** with guix
+
+export the environment variable GUIX_PACKAGE_PATH as $GUIX_PACKAGE_PATH:gnunet/contrib/packages/guix/packages
+guix environment gnunet-doc
+
+** without guix
+
+You need to have Texinfo and Texlive in your path.
+sh bootstrap
+./configure
+cd doc
+make doc-all-give-me-the-noise
+
+* structure (relations)
+
+** gnunet.texi
+ -> chapters/developer.texi
+ -> chapters/installation.texi
+ -> chapters/philosophy.texi
+ -> chapters/user.texi
+ -> images/*
+ -> gpl-3.0.texi
+ -> fdl-1.3.texi
+
+** gnunet-c-tutorial.texi
+ -> figs/Service.pdf
+ -> figs/System.pdf
+ -> tutorial-examples/*.c
+ -> gpl-3.0.texi
+ -> fdl-1.3.texi
+
+- gnunet-c-tutorial-v1.pdf: original LaTeX "gnunet-c-tutorial.pdf".
+- man folder: the man pages.
+- doxygen folder
+- outdated-and-old-installation-instructions.txt: self described within the file.
diff --git a/doc/figs/Service.pdf b/doc/figs/Service.pdf
deleted file mode 100644
index e9569cc7a8..0000000000
--- a/doc/figs/Service.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/figs/System.pdf b/doc/figs/System.pdf
deleted file mode 100644
index 70dc6ff2b2..0000000000
--- a/doc/figs/System.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/gnunet-c-tutorial.pdf b/doc/gnunet-c-tutorial.pdf
deleted file mode 100644
index 115ed77028..0000000000
--- a/doc/gnunet-c-tutorial.pdf
+++ /dev/null
Binary files differ
diff --git a/doc/gnunet-c-tutorial.texi b/doc/gnunet-c-tutorial.texi
index 2e4bd9a45e..4f56ae5c49 100644
--- a/doc/gnunet-c-tutorial.texi
+++ b/doc/gnunet-c-tutorial.texi
@@ -228,6 +228,12 @@ a DHT).
@c** FXIME: See comment above.
@c** See figure ~\ref{fig:interaction} for an illustration of this approach.
+@c ** @image{filename[, width[, height[, alttext[, extension]]]]}
+
+@image{images/gnunet-tutorial-service,,5in,Service with API and network protocol,.png}
+
+@image{images/gnunet-tutorial-system,,5in,The layered system architecture of GNUnet,.png}
+
@c \begin{figure}[!h]
@c \begin{center}
@c % \begin{subfigure}
diff --git a/doc/images/daemon_lego_block.svg b/doc/images/daemon_lego_block.svg
new file mode 100644
index 0000000000..38ad90d134
--- /dev/null
+++ b/doc/images/daemon_lego_block.svg
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg6781"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="New document 58">
+ <defs
+ id="defs6783" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="375"
+ inkscape:cy="520"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="721"
+ inkscape:window-x="-2"
+ inkscape:window-y="-3"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata6786">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ transform="translate(-4.5298577,-148.04661)"
+ id="g6746">
+ <path
+ style="fill:#5fd38d;fill-opacity:1;stroke:#faf6a2;stroke-width:1.99014676;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 183.84284,595.7683 350.8064,0 0,202.04036 -350.8064,0 z"
+ id="path6693"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#faf6a2;stroke-width:2.22747946;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6695"
+ width="66.670067"
+ height="75.18058"
+ x="223.74881"
+ y="737.19458" />
+ <rect
+ y="737.19458"
+ x="331.83514"
+ height="67.323441"
+ width="66.670067"
+ id="rect6697"
+ style="fill:#ffffff;fill-opacity:1;stroke:#faf6a2;stroke-width:2.10787106;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#faf6a2;stroke-width:2.06117821;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6699"
+ width="66.670067"
+ height="64.373825"
+ x="434.8707"
+ y="737.19458" />
+ <path
+ style="fill:#37c871;fill-opacity:1;stroke:#faf6a2;stroke-width:0.98368376;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 223.60976,736.21851 67.23534,0.38374 0,23.63648 -67.23534,37.13818 z"
+ id="path6701"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6703"
+ d="m 331.69608,736.21851 67.23534,0.3894 0,23.98466 -67.23534,37.68524 z"
+ style="fill:#37c871;fill-opacity:1;stroke:#faf6a2;stroke-width:0.99090236;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ style="fill:#37c871;fill-opacity:1;stroke:#faf6a2;stroke-width:0.98368376;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 434.73164,736.21851 67.23534,0.38374 0,23.63648 -67.23534,37.13818 z"
+ id="path6705"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#37c871;fill-opacity:1;stroke:#faf6a2;stroke-width:1.92068994;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 533.72659,595.02309 56.12366,-29.34622 -1.01015,190.24271 -55.11351,41.45733 z"
+ id="path6707"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#37c871;fill-opacity:1;stroke:#faf6a2;stroke-width:1.99424875;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 245.46708,566.47881 345.46203,-1.01015 -56.56854,31.31472 -349.50264,-1.01014 z"
+ id="path6709"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text6715"
+ y="677.59558"
+ x="234.35539"
+ style="font-size:36px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="677.59558"
+ x="234.35539"
+ id="tspan6717"
+ sodipodi:role="line">User Interface</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/doc/images/gnunet-tutorial-service.png b/doc/images/gnunet-tutorial-service.png
new file mode 100644
index 0000000000..6daed2f35f
--- /dev/null
+++ b/doc/images/gnunet-tutorial-service.png
Binary files differ
diff --git a/doc/images/gnunet-tutorial-system.png b/doc/images/gnunet-tutorial-system.png
new file mode 100644
index 0000000000..8b54e16cf2
--- /dev/null
+++ b/doc/images/gnunet-tutorial-system.png
Binary files differ
diff --git a/doc/images/lego_stack.svg b/doc/images/lego_stack.svg
new file mode 100644
index 0000000000..a0e8017c39
--- /dev/null
+++ b/doc/images/lego_stack.svg
@@ -0,0 +1,737 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="System.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient6602">
+ <stop
+ style="stop-color:#df8060;stop-opacity:1;"
+ offset="0"
+ id="stop6604" />
+ <stop
+ style="stop-color:#df8002;stop-opacity:0;"
+ offset="1"
+ id="stop6606" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4392"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#faf6a6;stop-opacity:1;"
+ offset="0"
+ id="stop4394" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="883.99395 : 559.99673 : 1"
+ inkscape:vp_y="13.319386 : 993.87659 : 0"
+ inkscape:vp_z="285.3157 : 504.79962 : 1"
+ inkscape:persp3d-origin="481.39556 : 281.96355 : 1"
+ id="perspective3070" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="76.097926 : 349.87282 : 1"
+ inkscape:vp_y="-13.319386 : 979.366 : 0"
+ inkscape:vp_z="752.55793 : 376.31441 : 1"
+ inkscape:persp3d-origin="373.64045 : 350.98006 : 1"
+ id="perspective3012" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="322.06882"
+ inkscape:cy="568.82291"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="846"
+ inkscape:window-height="963"
+ inkscape:window-x="59"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="352.03815"
+ y="-190.12544"
+ id="text6623"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6625"
+ x="352.03815"
+ y="-190.12544" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="338.40109"
+ y="-300.73715"
+ id="text6627"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6629"
+ x="338.40109"
+ y="-300.73715" /></text>
+ <g
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ id="text6643" />
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="71.720833"
+ y="95.747719"
+ id="text6648"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6650"
+ x="71.720833"
+ y="95.747719" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="262.63965"
+ y="666.48389"
+ id="text6711"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6713"
+ x="262.63965"
+ y="666.48389" /></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path3506"
+ d="m 198.00647,673.76257 236.93358,0 0,158.2919 -236.93358,0 z"
+ style="fill:#000000;fill-opacity:1;stroke:#faf6a2;stroke-width:1.44768786;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path3432"
+ d="m 169.32669,654.90334 464.83332,-2.26992 -33.76593,25.73079 -483.97287,-0.12904 z"
+ style="fill:#deaa87;fill-opacity:1;stroke:#faf6a2;stroke-width:2.18398547;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:#59000c;stroke-width:1.35822594;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0.48230088;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3416"
+ width="28.495705"
+ height="172.2845"
+ x="464.19418"
+ y="518.96954" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:#59000c;stroke-width:1.36876941;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0.48230088;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3414"
+ width="34.729141"
+ height="170.67587"
+ x="340.86124"
+ y="517.93475" />
+ <path
+ style="fill:#deaa87;fill-opacity:1;stroke:#faf6a2;stroke-width:2.04969239;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 246.8138,499.06358 386.50295,-0.94821 -41.88736,26.04231 -413.96081,0 z"
+ id="rect6568-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffdd55;fill-opacity:1;stroke:#faf6a2;stroke-width:1.49989259;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 276.05867,399.52042 323.05541,0 0,124.61741 -323.05541,0 z"
+ id="rect5973"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffcc00;fill-opacity:1;stroke:#faf6a2;stroke-width:1.19094384;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 599.16863,399.06078 34.35465,-18.10059 0,117.34068 -34.35465,25.57066 z"
+ id="rect6542"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ style="fill:#c87137;fill-opacity:1;stroke:#c48069;stroke-width:1.50087094;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6557"
+ width="322.88623"
+ height="30.529778"
+ x="276.67755"
+ y="368.99368" />
+ <path
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:0.50882494;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 598.94047,368.99367 34.58281,-16.82253 0,28.66061 -34.58281,18.06864 z"
+ id="rect6561"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6564"
+ d="m 598.94047,369.07046 34.30741,-17.12981 0,29.18412 -34.30741,18.39868 z"
+ style="fill:#c87137;fill-opacity:1;stroke:#faf6a2;stroke-width:0.51140249;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ inkscape:transform-center-x="-70.147578"
+ inkscape:transform-center-y="15.429055" />
+ <path
+ style="fill:#d38d5f;fill-opacity:1;stroke:#faf6a2;stroke-width:1.47079194;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 330.2508,353.23478 302.87005,-0.62306 -38.33414,16.82253 -318.87597,0 z"
+ id="rect6568"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="391.63083"
+ y="461.858"
+ id="text6656"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ sodipodi:role="line"
+ id="tspan6658"
+ x="391.63083"
+ y="461.858">Service</tspan></text>
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6707"
+ d="m 598.75503,244.83802 34.98432,-18.10059 0.26082,125.2709 -35.24514,17.64044 z"
+ style="fill:#37c871;fill-opacity:1;stroke:#faf6a2;stroke-width:1.19094384;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6709"
+ d="m 419.07032,228.1132 214.71185,-1.24611 -34.63196,19.9378 L 381.29,246.18184 z"
+ style="fill:#37c871;fill-opacity:1;stroke:#faf6a2;stroke-width:1.23655474;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <rect
+ style="fill:#5fd38d;fill-opacity:1;stroke:#c48069;stroke-width:1.23640049;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect7224"
+ width="217.86653"
+ height="122.74216"
+ x="381.70358"
+ y="246.25151" />
+ <text
+ xml:space="preserve"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="409.16376"
+ y="302.05649"
+ id="text6715"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ sodipodi:role="line"
+ id="tspan6717"
+ x="409.16376"
+ y="302.05649">User Interface</tspan></text>
+ <g
+ id="g7219"
+ transform="matrix(0.62334353,0,0,0.61679464,281.18563,257.70936)">
+ <rect
+ y="119.99139"
+ x="198.49498"
+ height="60.609154"
+ width="66.670067"
+ id="rect6571"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text6631"
+ y="160.39748"
+ x="206.07112"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="206.07112"
+ id="tspan6633"
+ sodipodi:role="line">API</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.62334353,0,0,0.61679464,344.78251,257.70936)"
+ id="g7226">
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect7228"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text7230"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7232"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ </g>
+ <g
+ id="g7234"
+ transform="matrix(0.62334353,0,0,0.61679464,409.3239,257.70936)">
+ <rect
+ y="119.99139"
+ x="198.49498"
+ height="60.609154"
+ width="66.670067"
+ id="rect7236"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text7238"
+ y="160.39748"
+ x="206.07112"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="206.07112"
+ id="tspan7240"
+ sodipodi:role="line">API</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.62334353,0,0,0.61679464,175.75806,412.85048)"
+ id="g7242">
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect7244"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text7246"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7248"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ </g>
+ <g
+ id="g7250"
+ transform="matrix(0.62334353,0,0,0.61679464,240.79871,413.29105)">
+ <rect
+ y="119.99139"
+ x="198.49498"
+ height="60.609154"
+ width="66.670067"
+ id="rect7252"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text7254"
+ y="160.39748"
+ x="206.07112"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="206.07112"
+ id="tspan7256"
+ sodipodi:role="line">API</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.62334353,0,0,0.61679464,303.79756,412.40991)"
+ id="g7258">
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect7260"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text7262"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan7264"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ </g>
+ <g
+ id="g7266"
+ transform="matrix(0.62334353,0,0,0.61679464,369.88148,412.40991)">
+ <rect
+ y="119.99139"
+ x="198.49498"
+ height="60.609154"
+ width="66.670067"
+ id="rect7268"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text7270"
+ y="160.39748"
+ x="206.07112"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="206.07112"
+ id="tspan7272"
+ sodipodi:role="line">API</tspan></text>
+ </g>
+ <path
+ style="fill:#ffeeaa;fill-opacity:1;stroke:#faf6a2;stroke-width:0.91879815;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 478.56081,554.09281 121.22633,0 0,124.61741 -121.22633,0 z"
+ id="rect5973-1"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="matrix(0.62334353,0,0,0.61679464,422.424,566.60858)"
+ id="g3474">
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3476"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text3478"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3480"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ </g>
+ <path
+ style="fill:#ffe680;fill-opacity:1;stroke:#faf6a2;stroke-width:1.18771458;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 599.60339,554.02055 33.72575,-29.55535 0.88568,128.35487 -34.61143,26.01123 z"
+ id="rect6542-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6564-2"
+ d="m 598.92998,524.03024 34.30741,-25.94116 0,26.5407 -34.30741,29.85344 z"
+ style="fill:#d38d5f;fill-opacity:1;stroke:#faf6a2;stroke-width:0.51140249;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ inkscape:transform-center-x="-70.147578"
+ inkscape:transform-center-y="15.429055" />
+ <path
+ inkscape:transform-center-y="15.492457"
+ inkscape:transform-center-x="-70.147578"
+ style="fill:#c87137;fill-opacity:1;stroke:#faf6a2;stroke-width:0.51245213;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 598.92998,524.13683 34.30741,-26.04775 0,26.64977 -34.30741,29.97611 z"
+ id="path3402"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path3404"
+ d="m 599.82047,678.2289 34.30741,-25.94116 0,26.5407 -34.30741,34.25912 z"
+ style="fill:#c87137;fill-opacity:1;stroke:#faf6a2;stroke-width:0.51140249;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ inkscape:transform-center-x="-70.147578"
+ inkscape:transform-center-y="15.429055" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path3406"
+ d="m 600.04863,707.77865 33.90941,-29.55535 0.89049,128.35487 -34.7999,26.01123 z"
+ style="fill:#37c837;fill-opacity:1;stroke:#faf6a2;stroke-width:1.19094384;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3410"
+ d="m 356.56358,554.09281 120.92249,0 0,124.19268 -120.92249,0 z"
+ style="fill:#ffeeaa;fill-opacity:1;stroke:#faf6a2;stroke-width:0.91608089;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ style="fill:#ffeeaa;fill-opacity:1;stroke:#faf6a2;stroke-width:1.11023378;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 177.52518,554.09281 177.51841,0 0,124.25702 -177.51841,0 z"
+ id="path3412"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#c87137;fill-opacity:1;stroke:#c48069;stroke-width:1.11264122;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6557-7"
+ width="177.44882"
+ height="30.529778"
+ x="177.65657"
+ y="523.95343" />
+ <rect
+ y="678.1521"
+ x="116.73995"
+ height="29.53463"
+ width="177.54182"
+ id="rect3408"
+ style="fill:#c87137;fill-opacity:1;stroke:#c48069;stroke-width:1.09464383;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <rect
+ y="523.95343"
+ x="356.55023"
+ height="30.529778"
+ width="120.86897"
+ id="rect3420"
+ style="fill:#c87137;fill-opacity:1;stroke:#c48069;stroke-width:0.91828173;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <rect
+ style="fill:#c87137;fill-opacity:1;stroke:#c48069;stroke-width:0.91828173;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3422"
+ width="120.86897"
+ height="30.529778"
+ x="478.54919"
+ y="523.95343" />
+ <text
+ xml:space="preserve"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="372.34232"
+ y="622.53217"
+ id="text6656-2"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ sodipodi:role="line"
+ id="tspan6658-2"
+ x="372.34232"
+ y="622.53217">Service</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text3424"
+ y="622.53217"
+ x="220.56013"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ y="622.53217"
+ x="220.56013"
+ id="tspan3426"
+ sodipodi:role="line">Service</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="493.85532"
+ y="622.54492"
+ id="text3428"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ sodipodi:role="line"
+ id="tspan3430"
+ x="493.85532"
+ y="622.54492">Service</tspan></text>
+ <g
+ id="g3434"
+ transform="matrix(0.62334353,0,0,0.61679464,120.10238,566.60858)">
+ <rect
+ y="119.99139"
+ x="198.49498"
+ height="60.609154"
+ width="66.670067"
+ id="rect3436"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3438"
+ y="160.39748"
+ x="206.07112"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="206.07112"
+ id="tspan3440"
+ sodipodi:role="line">API</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.62334353,0,0,0.61679464,181.54625,566.60858)"
+ id="g3442">
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3444"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text3446"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3448"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ </g>
+ <g
+ id="g3450"
+ transform="matrix(0.62334353,0,0,0.61679464,242.09962,566.60858)">
+ <rect
+ y="119.99139"
+ x="198.49498"
+ height="60.609154"
+ width="66.670067"
+ id="rect3452"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3454"
+ y="160.39748"
+ x="206.07112"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="206.07112"
+ id="tspan3456"
+ sodipodi:role="line">API</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.62334353,0,0,0.61679464,303.54348,566.60858)"
+ id="g3458">
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3460"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text3462"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3464"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ </g>
+ <g
+ id="g3466"
+ transform="matrix(0.62334353,0,0,0.61679464,362.76112,566.60858)">
+ <rect
+ y="119.99139"
+ x="198.49498"
+ height="60.609154"
+ width="66.670067"
+ id="rect3468"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3470"
+ y="160.39748"
+ x="206.07112"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="206.07112"
+ id="tspan3472"
+ sodipodi:role="line">API</tspan></text>
+ </g>
+ <path
+ style="fill:#5fd35f;fill-opacity:1;stroke:#faf6a2;stroke-width:1.11993289;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 420.2626,707.53388 180.11119,0 0,124.61741 -180.11119,0 z"
+ id="path3490"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="matrix(0.62334353,0,0,0.61679464,62.665728,566.60858)"
+ id="g3492">
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3494"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text3496"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3498"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path3500"
+ d="m 116.52597,707.54132 177.63643,0 0,124.61741 -177.63643,0 z"
+ style="fill:#5fd35f;fill-opacity:1;stroke:#faf6a2;stroke-width:1.11221218;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ style="fill:#5fd35f;fill-opacity:1;stroke:#faf6a2;stroke-width:0.92545629;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 295.65636,707.63061 122.98965,0 0,124.61741 -122.98965,0 z"
+ id="path3502"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="162.54019"
+ y="779.76184"
+ id="text3508"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ sodipodi:role="line"
+ id="tspan3510"
+ x="162.54019"
+ y="779.76184">Service</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text3512"
+ y="779.7619"
+ x="313.56918"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ y="779.7619"
+ x="313.56918"
+ id="tspan3514"
+ sodipodi:role="line">Service</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:22.32217598px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="465.48401"
+ y="779.7619"
+ id="text3516"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0052948,0.9947331)"><tspan
+ sodipodi:role="line"
+ id="tspan3518"
+ x="465.48401"
+ y="779.7619">Service</tspan></text>
+ <rect
+ style="fill:#c87137;fill-opacity:1;stroke:#c48069;stroke-width:0.91063529;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3520"
+ width="122.86946"
+ height="29.53463"
+ x="295.75125"
+ y="678.1521" />
+ <rect
+ y="678.1521"
+ x="420.27423"
+ height="29.53463"
+ width="179.80205"
+ id="rect3522"
+ style="fill:#c87137;fill-opacity:1;stroke:#c48069;stroke-width:1.10158956;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ </g>
+</svg>
diff --git a/doc/images/service_lego_block.svg b/doc/images/service_lego_block.svg
new file mode 100644
index 0000000000..ef0d0234fd
--- /dev/null
+++ b/doc/images/service_lego_block.svg
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="Lego block 3.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient6602">
+ <stop
+ style="stop-color:#df8060;stop-opacity:1;"
+ offset="0"
+ id="stop6604" />
+ <stop
+ style="stop-color:#df8002;stop-opacity:0;"
+ offset="1"
+ id="stop6606" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4392"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#faf6a6;stop-opacity:1;"
+ offset="0"
+ id="stop4394" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="883.99395 : 559.99673 : 1"
+ inkscape:vp_y="13.319386 : 993.87659 : 0"
+ inkscape:vp_z="285.3157 : 504.79962 : 1"
+ inkscape:persp3d-origin="481.39556 : 281.96355 : 1"
+ id="perspective3070" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="76.097926 : 349.87282 : 1"
+ inkscape:vp_y="-13.319386 : 979.366 : 0"
+ inkscape:vp_z="752.55793 : 376.31441 : 1"
+ inkscape:persp3d-origin="373.64045 : 350.98006 : 1"
+ id="perspective3012" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.49497475"
+ inkscape:cx="385.59974"
+ inkscape:cy="826.03166"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="721"
+ inkscape:window-x="-2"
+ inkscape:window-y="-3"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ style="fill:#ffdd55;fill-opacity:1;stroke:#faf6a2;stroke-width:2.26315212;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 74.934278,230.09308 453.654042,0 0,202.04036 -453.654042,0 z"
+ id="rect5973"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffcc00;fill-opacity:1;stroke:#faf6a2;stroke-width:1.92068994;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 528.67583,229.34787 55.11351,-29.34622 0,190.24271 -55.11351,41.45733 z"
+ id="rect6542"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ style="fill:#d38d5f;fill-opacity:1;stroke:#c48069;stroke-width:2.2674458;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6557"
+ width="454.54535"
+ height="49.497475"
+ x="74.764442"
+ y="180.60052" />
+ <path
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:0.8206054;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 528.30981,180.60052 55.47954,-27.27412 0,46.46702 -55.47954,29.29442 z"
+ id="rect6561"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6564"
+ d="m 528.30981,180.72501 55.03773,-27.7723 0,47.31578 -55.03773,29.8295 z"
+ style="fill:#d38d5f;fill-opacity:1;stroke:#faf6a2;stroke-width:0.82476228;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ inkscape:transform-center-x="-70.147578"
+ inkscape:transform-center-y="15.429055" />
+ <path
+ style="fill:#deaa87;fill-opacity:1;stroke:#faf6a2;stroke-width:2.23265362;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 153.39374,154.33657 430.4643,-1.01015 -54.4837,27.27411 -453.213248,0 z"
+ id="rect6568"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="352.03815"
+ y="-190.12544"
+ id="text6623"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6625"
+ x="352.03815"
+ y="-190.12544" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="338.40109"
+ y="-300.73715"
+ id="text6627"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6629"
+ x="338.40109"
+ y="-300.73715" /></text>
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6571"
+ width="66.670067"
+ height="60.609154"
+ x="198.49498"
+ y="119.99139" />
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:#faf6a2;stroke-width:1.98413372;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 265.16503,119.45792 44.95179,-22.465406 0,57.057986 -44.95179,26.55003 z"
+ id="path6600"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:#c48069;stroke-width:1.99687159;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 243.06977,97.26295 66.86223,10e-7 -45.08135,22.728439 -66.3557,0 z"
+ id="path6617"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="206.07112"
+ y="160.39748"
+ id="text6631"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6633"
+ x="206.07112"
+ y="160.39748">API</tspan></text>
+ <rect
+ y="119.99139"
+ x="313.65237"
+ height="60.609154"
+ width="66.670067"
+ id="rect6573"
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6598"
+ d="m 379.81735,119.56755 44.95179,-22.425126 0,56.955676 -44.95179,26.50243 z"
+ style="fill:#ff6600;fill-opacity:1;stroke:#faf6a2;stroke-width:1.98235416;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6615"
+ d="m 358.25117,97.26295 66.89824,10e-7 -45.10563,22.728439 -66.39143,0 z"
+ style="fill:#ff6600;fill-opacity:1;stroke:#c48069;stroke-width:1.99740911;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text6635"
+ y="160.39748"
+ x="322.23865"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="160.39748"
+ x="322.23865"
+ id="tspan6637"
+ sodipodi:role="line">API</tspan></text>
+ <rect
+ style="fill:#ff9955;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6575"
+ width="66.670067"
+ height="60.609154"
+ x="428.80978"
+ y="119.99139" />
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:#faf6a2;stroke-width:1.98960423;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 494.97474,119.62537 44.95179,-22.589454 0,57.373054 -44.95179,26.69664 z"
+ id="rect6595"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:#c48069;stroke-width:1.99399996;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 473.25645,97.26295 66.67007,10e-7 -44.95179,22.728439 -66.16499,0 z"
+ id="rect6612"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="439.41635"
+ y="159.89241"
+ id="text6639"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6641"
+ x="439.41635"
+ y="159.89241">API</tspan></text>
+ <g
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ id="text6643" />
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="71.720833"
+ y="95.747719"
+ id="text6648"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6650"
+ x="71.720833"
+ y="95.747719" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="176.77669"
+ y="216.96603"
+ id="text6652"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6654"
+ x="176.77669"
+ y="216.96603">Network Protocol</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:36px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="233.34526"
+ y="312.93051"
+ id="text6656"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6658"
+ x="233.34526"
+ y="312.93051">Service</tspan></text>
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#faf6a2;stroke-width:2.09665918;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6660"
+ width="66.670067"
+ height="66.609154"
+ x="216.67773"
+ y="371.51938" />
+ <rect
+ y="371.51938"
+ x="322.74374"
+ height="64.373825"
+ width="66.670067"
+ id="rect6662"
+ style="fill:#ffffff;fill-opacity:1;stroke:#faf6a2;stroke-width:2.06117821;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#faf6a2;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect6664"
+ width="66.670067"
+ height="60.609154"
+ x="423.75903"
+ y="372.52951" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6666"
+ d="m 423.61996,372.56359 67.23534,-0.62641 0,19.59587 -68.24549,41.17879 z"
+ style="fill:#ffcc00;fill-opacity:1;stroke:#faf6a2;stroke-width:0.98368376;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ style="fill:#ffcc00;fill-opacity:1;stroke:#faf6a2;stroke-width:0.98368376;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 322.60471,371.55344 67.23534,0.38374 0,23.63648 -67.23534,37.13818 z"
+ id="path6668"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6670"
+ d="m 322.60471,371.55344 67.23534,0.38374 0,23.63648 -67.23534,37.13818 z"
+ style="fill:#ffcc00;fill-opacity:1;stroke:#faf6a2;stroke-width:0.98368376;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ <path
+ style="fill:#ffcc00;fill-opacity:1;stroke:#faf6a2;stroke-width:0.98368376;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0"
+ d="m 216.53869,371.55344 67.23534,0.38374 0,23.63648 -67.23534,37.13818 z"
+ id="path6672"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="262.63965"
+ y="666.48389"
+ id="text6711"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6713"
+ x="262.63965"
+ y="666.48389" /></text>
+ <rect
+ y="371.51938"
+ x="111.62187"
+ height="70.798637"
+ width="66.670067"
+ id="rect6721"
+ style="fill:#ffffff;fill-opacity:1;stroke:#faf6a2;stroke-width:2.1615901;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path6723"
+ d="m 111.48283,370.54329 67.23534,0.38374 0,23.63648 -67.23534,37.13818 z"
+ style="fill:#ffcc00;fill-opacity:1;stroke:#faf6a2;stroke-width:0.98368376;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0;stroke-dashoffset:0" />
+ </g>
+</svg>
diff --git a/src/cadet/gnunet-service-cadet.c b/src/cadet/gnunet-service-cadet.c
index af4cebfaac..c3e99e0ebe 100644
--- a/src/cadet/gnunet-service-cadet.c
+++ b/src/cadet/gnunet-service-cadet.c
@@ -638,6 +638,7 @@ handle_channel_destroy (void *cls,
"%s tried to destroy unknown channel %X\n",
GSC_2s(c),
(uint32_t) ntohl (msg->ccn.channel_of_client));
+ GNUNET_SERVICE_client_continue (c->client);
return;
}
LOG (GNUNET_ERROR_TYPE_DEBUG,