improved log messages
[oweals/gnunet.git] / doc / gnunet-c-tutorial.tex
index 659b869808e6ef58b95f3b6d627b6eda1c0b99ea..70981b1387999e24dec334dc9cea341ea7c849bf 100644 (file)
@@ -103,8 +103,25 @@ $ cd gnunet
 $ ./bootstrap
 \end{lstlisting}
 
+The remainder of this tutorial assumes that you have SVN HEAD checked out.
 
 \subsection{Compiling and Installing GNUnet}
+
+First, you need to install the latest {\tt
+  libgnupgerror}\footnote{\url{ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.11.tar.bz2}}
+and {\tt libgcrypt} version from Git.  The current GNUnet code uses
+ECC functions not available in any released version of libgcrypt.
+
+\lstset{language=bash}
+\begin{lstlisting}
+$ git clone git://git.gnupg.org/libgcrypt.git
+$ cd libgcrypt
+$ ./autogen.sh
+$ ./configure
+$ sudo make install 
+$ sudo ldconfig
+\end{lstlisting}
+
 \label{sub:install}
 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 \lstinline|--prefix| value when calling \lstinline|./configure|.  If you do not specifiy a prefix, GNUnet is installed in the directory \lstinline|/usr/local|. When developing new applications you may want to enable 
@@ -295,7 +312,10 @@ Now you have to edit {\tt peer2.conf} and change:
 \begin{itemize}
   \itemsep0em
   \item{\texttt{SERVICEHOME} under \texttt{PATHS}}
-  \item{Every value for ``\texttt{PORT}'' (add 10000) in any section (if \texttt{PORT} is enabled, may be disabled using "\#") }
+  \item{Every (uncommented) value for ``\texttt{PORT}'' (add 10000) in any
+        section (the option may be commented out if \texttt{PORT} is 
+        prefixed by "\#", in this case, UNIX domain sockets are used
+        and the PORT option does not need to be touched) }
   \item{Every value for ``\texttt{UNIXPATH}'' in any section (e.g. by adding a "-p2" suffix)}
 \end{itemize}
 to a fresh, unique value.  Make sure that the \texttt{PORT} numbers stay
@@ -402,7 +422,7 @@ The source code for the above listing can be found at
 \begin{lstlisting}
 $ export CPPFLAGS="-I/path/to/gnunet/headers"
 $ export LDFLAGS="-L/path/to/gnunet/libraries"
-$ gcc -o testbed-test -lgnunettestbed -lgnunetdht -lgnunetutil testbed_test.c
+$ gcc $CPPFLAGS $LDFLAGS -o testbed-test testbed_test.c  -lgnunettestbed -lgnunetdht -lgnunetutil
 \end{lstlisting}
 The \texttt{CPPFLAGS} and \texttt{LDFLAGS} are necessary if GNUnet is installed
 into a different directory other than \texttt{/usr/local}.
@@ -447,8 +467,9 @@ disconnect from the service with the provided service handle (\texttt{op\_result
 
 \exercise{Find out how many peers you can run on your system.}
 
-\exercise{Find out how to create connections from within {\tt run} and create a
-  2D torus topology.  Then use the DHT API to store and retrieve values in the
+\exercise{Find out how to create a 2D torus topology by changing the
+  options in the configuration file.\footnote{See \url{https://gnunet.org/content/supported-topologies}}
+  Then use the DHT API to store and retrieve values in the
   network.}
 
 \section{Developing Applications}
@@ -573,6 +594,8 @@ static int a_flag;
      &GNUNET_GETOPT_set_one, &a_flag},
     GNUNET_GETOPT_OPTION_END
   };
+  string_option = NULL;
+  a_flag = GNUNET_SYSERR;
 // ...
 \end{lstlisting}
 
@@ -581,7 +604,10 @@ the {\tt --help} argument and error handling are taken care of when
 using this approach.  Other {\tt 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.
+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 {\tt run} method, the program would perform the
 application-specific logic, which typically involves initializing and
@@ -685,7 +711,7 @@ static size_t
 transmit_cb (void *cls, size_t size, void *buf)
 {
   // ...
-  if (NULL == buf) { handle_error(); return 0; }
+  if (NULL == buf) { /* handle error here */; return 0; }
   GNUNET_assert (size >= msg_size);
   memcpy (buf, my_msg, msg_size);
   // ...