[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r687 - GNUnet-docs/WWW/test
From: |
durner |
Subject: |
[GNUnet-SVN] r687 - GNUnet-docs/WWW/test |
Date: |
Mon, 25 Apr 2005 11:49:42 -0700 (PDT) |
Author: durner
Date: 2005-04-25 11:48:28 -0700 (Mon, 25 Apr 2005)
New Revision: 687
Modified:
GNUnet-docs/WWW/test/commitMassTranslation.php
GNUnet-docs/WWW/test/commitTranslation.php
GNUnet-docs/WWW/test/documentation.php3
GNUnet-docs/WWW/test/download.php3
GNUnet-docs/WWW/test/editor.php
GNUnet-docs/WWW/test/encoding.php3
GNUnet-docs/WWW/test/faq.php3
GNUnet-docs/WWW/test/gnunet-design.fig
GNUnet-docs/WWW/test/gnunet-design.png
GNUnet-docs/WWW/test/hacking.php3
GNUnet-docs/WWW/test/hacking_afs.php3
GNUnet-docs/WWW/test/hacking_application.php3
GNUnet-docs/WWW/test/hacking_future.php3
GNUnet-docs/WWW/test/hacking_organization.php3
GNUnet-docs/WWW/test/hacking_rpc.php3
GNUnet-docs/WWW/test/hacking_server.php3
GNUnet-docs/WWW/test/hacking_ui.php3
GNUnet-docs/WWW/test/hacking_util.php3
GNUnet-docs/WWW/test/hacking_win32_build.php3
GNUnet-docs/WWW/test/html_footer.php3
GNUnet-docs/WWW/test/html_header.php3
GNUnet-docs/WWW/test/i18nhtml.inc
GNUnet-docs/WWW/test/links.php3
GNUnet-docs/WWW/test/mailinglist.php3
GNUnet-docs/WWW/test/menu.php3
GNUnet-docs/WWW/test/namespace.php3
GNUnet-docs/WWW/test/papers.php3
GNUnet-docs/WWW/test/philosophy.php3
GNUnet-docs/WWW/test/protocol_cs.php3
GNUnet-docs/WWW/test/protocol_p2p_afs.php3
GNUnet-docs/WWW/test/protocol_p2p_core.php3
GNUnet-docs/WWW/test/protocol_p2p_rpc.php3
GNUnet-docs/WWW/test/protocol_p2p_tracekit.php3
GNUnet-docs/WWW/test/scripts.php3
GNUnet-docs/WWW/test/states.fig
GNUnet-docs/WWW/test/states.png
GNUnet-docs/WWW/test/translate.php
GNUnet-docs/WWW/test/user_afs.php3
GNUnet-docs/WWW/test/user_gnunet.php3
GNUnet-docs/WWW/test/vote.php
Log:
update test site
Modified: GNUnet-docs/WWW/test/commitMassTranslation.php
===================================================================
--- GNUnet-docs/WWW/test/commitMassTranslation.php 2005-04-24 13:12:51 UTC
(rev 686)
+++ GNUnet-docs/WWW/test/commitMassTranslation.php 2005-04-25 18:48:28 UTC
(rev 687)
@@ -61,7 +61,8 @@
$query = "DELETE FROM pending WHERE lang=\"$lang\" AND c=\"$enc\"";
mysql_query($query, $connection);
//$t = urlencode($val);
- $t = urlencode(htmlentities($val, ENT_QUOTES, $charset));
+ $t = urlencode($val);
+ // $t = urlencode(htmlentities($val, ENT_QUOTES, $charset));
$query = "SELECT ranking FROM map WHERE name=\"$enc\" AND lang=\"$lang\" AND
translation=\"$t\"";
$result = mysql_query($query, $connection);
$num = 0;
Modified: GNUnet-docs/WWW/test/commitTranslation.php
===================================================================
--- GNUnet-docs/WWW/test/commitTranslation.php 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/commitTranslation.php 2005-04-25 18:48:28 UTC (rev
687)
@@ -18,25 +18,24 @@
Boston, MA 02111-1307, USA.
*/
include("i18nhtml.inc");
-echo "<html><head><title>GNUnet WWW translation: commit</title></head><body>";
-
+$text = $_REQUEST['text'];
+$translation = $_REQUEST['translation'];
+$back = $_REQUEST['back'];
if (!$connection) {
echo "Database is down. Cannot edit translations.";
- echo "</body></html>";
die();
}
if ($xlang == "English") {
- W("Translating to English currently not allowed.\n");
- echo "</body></html>";
+ W("Translating to English is not allowed.\n");
die();
}
// note: $text is already urlencoded (by submitting via form) and html
compatible
// ensure translation is stored in encoded form and html compatible
-if (get_magic_quotes_gpc()) $translation = stripslashes($translation);
-echo "translation originally = [" . $translation . "]<br>\n";
-$t = urlencode(htmlentities($translation, ENT_QUOTES, $charset));
+// if (get_magic_quotes_gpc()) $translation = stripslashes($translation);
+// $t = urlencode(htmlentities($translation, ENT_QUOTES, $charset));
+$t = urlencode($translation);
// check for identical translation
$query = "SELECT ranking FROM map WHERE name=\"$text\" AND lang=\"$lang\" AND
translation=\"$t\"";
$result = mysql_query($query, $connection);
@@ -45,26 +44,22 @@
$num = mysql_numrows($result);
}
if ($num > 0) {
- echo "<html><head><title>WWW translation: commit</title></head><body>";
+ echo "<html><body>";
W("Translation exists.");
extlink($back, "Back...");
+ generateFooter();
echo "</body></html>";
} else {
- if (!get_magic_quotes_gpc()) $t = addslashes($t); // ensure escaped before
adding to DB
+ // if (!get_magic_quotes_gpc()) $t = addslashes($t); // ensure escaped
before adding to DB
$query = "INSERT INTO map VALUES(\"$text\", \"$lang\", \"$t\", 1, \"" .
$_SERVER['REMOTE_ADDR'] . "\");";
$result = mysql_query($query, $connection);
if ($result) {
- echo "Commit successful.<br>text=\"" . $text . "\"<br>translation=\"" . $t
. "\"<br>";
- echo "ie: text=\"" . urldecode($text) . "\"<br>translation=\"" .
urldecode($t) . "\"<br>";
- }
- else {
- echo "Commit failed!<br>text=\"" . $text . "\"<br>translation=\"" . $t .
"\"<br>";
- }
- extlink($back, "Back...");
- echo "</body></html>";
-
-// header("Location: " . $back); /* Redirect browser */
-// exit; /* Make sure that code below does
-// not get executed when we redirect. */
+ header("Location: " . $back); /* Redirect browser */
+ } else {
+ echo "<html><body>";
+ W("Commit ('%s') failed: ", $query);
+ echo mysql_error();
+ echo "</body></html>";
+ }
}
?>
Modified: GNUnet-docs/WWW/test/documentation.php3
===================================================================
--- GNUnet-docs/WWW/test/documentation.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/documentation.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -5,7 +5,15 @@
include("html_header.php3");
H2("Documentation");
-W("This is an attempt to reorganize the GNUnet documentation.");
+W("Documentation is always work in progress.");
+W("The documentation is currently undergoing a major revision to reflect the
changes in the upcoming 0.7.0 release.");
+W("Some parts are identical between both releases, others reflect how things
will be in 0.7.0 and others still document how GNUnet 0.6.x works.");
+W("At this point, most of the text describes GNUnet 0.7.0.");
+W("So if you are using 0.6.x take everything with a grain of salt.");
+P();
+H3("i18nHTML");
+W("The GNUnet webpage uses %s to internationalize the documentation.",
+ extlink_("/i18nHTML/", "i18nHTML"));
W("Please feel encouraged to help, for example by translating some of the
pages to your native language.");
W("Just view the pages in your language and click on the "*" after a
sentence to translate it.");
W("You can start a new language by adding <tt>lang=LANGUAGE</tt> after the
<tt>.php3</tt> in the URL.");
@@ -25,7 +33,7 @@
P();
W("You can access the sourcecode of the documentation using CVS:");
P();
-PRE("# cvs -d :pserver:address@hidden:/var/cvs/GNUnet checkout GNUnet-docs");
+PRE("$ svn checkout https://gnunet.org/svn/GNUnet-docs/");
P();
W("Generated doxygen documentation can be found %s.",
extlink_("doxygen/html", "here"));
@@ -52,7 +60,7 @@
<li><?php intlink("encoding.php3","Content encoding"); ?></li>
</ol>
</ol>
-<p>
<?php
+P();
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/download.php3
===================================================================
--- GNUnet-docs/WWW/test/download.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/download.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -9,45 +9,38 @@
?>
<li>Pentium 100 Mhz, 32 MB RAM</li>
<li><a href="http://www.gnu.org/">GNU</a>/<a
href="http://www.kernel.org/">Linux</a>,
- <a href="http://www.sun.com/software/solaris/">Solaris (>= 8)</a>,
+ <a href="http://www.sun.com/software/solaris/">Solaris (>= 8)</a>, OS
X > 10.3, Win32,
<a href="http://www.freebsd.org/">FreeBSD (>= 5 recommended)</a>,
<a href="http://www.openbsd.org/">OpenBSD</a> <?php W("or"); ?>
<a href="http://www.netbsd.org/">NetBSD</a>.</li>
<li><strong><?php W("Required:"); ?></strong>
<a href="http://www.gnu.org/software/gmp/">GNU MP Bignum Library</a>
(>= 4.0.0)</li>
<li><strong><?php W("Required:"); ?></strong>
- <a href="http://www.openssl.org/">OpenSSL</a> (>= 0.95) <?php
W("or"); ?>
<a href="http://www.gnu.org/directory/security/libgcrypt.html">libgcrypt
(>= 1.2.0)</a></li>
+ <li><strong><?php W("Required:"); ?></strong>
+ <a href="/libextractor/">libextractor (>= 0.4.2)</a></li>
+ <li><strong><?php W("Required:"); ?></strong>
+ <a href="http://www.sqlite.com/">sqlite</a> (>= 3.0.0) <?php W("or");
?>
+ <a href="http://www.mysql.com/">mysql</a> (>= 4.1)</li>
<li><strong><?php W("Recommended:"); ?></strong>
<a href="http://www.gtk.org/">gtk+ >= 2.4</a></li>
- <li><strong><?php W("Recommended:"); ?></strong>
- <a href="http://ovmj.org/libextractor/">libextractor (>=
0.3.10)</a></li>
<li><strong><?php W("Optional:"); ?></strong>
- <a href="http://www.gnu.org/software/gettext/">GNU gettext (>=
0.14)</a></li>
- <li><strong><?php W("Optional:"); ?></strong>
- <a href="http://www.gnu.org/software/gdbm/">gdbm</a>,
- <a href="http://sourceforge.net/projects/tdb">tdb</a>,
- <a href="http://www.sqlite.com/">sqlite</a> (>= 3.0.0),
- <a href="http://www.mysql.com/">mysql</a> (>= 3.23.56) <?php W("or");
?>
- <a href="http://www.sleepycat.com/download/index.shtml">Berkeley
DB</a></li>
+ <a href="http://www.gnu.org/software/gettext/">GNU gettext (>=
0.14.1)</a></li>
<li><strong><?php W("for CVS:");?></strong>
- <a href="http://www.gnu.org/software/autoconf/">autoconf (>= 2.57)</a>
<?php W("and"); ?>
+ <a href="http://www.gnu.org/software/autoconf/">autoconf (>= 2.59)</a>
<?php W("and"); ?>
<a href="http://www.gnu.org/software/automake/">automake (>=
1.7.6)</a> <?php W("and"); ?>
- <a href="http://www.gnu.org/software/libtool/">libtool (>= 1.5)</a>
<?php W("and"); ?>
- <a href="http://www.gnu.org/software/gettext/">GNU gettext (>=
0.14)</a></li>
+ <a href="http://www.gnu.org/software/libtool/">libtool (>= 1.5.6)</a>
<?php W("and"); ?>
+ <a href="http://www.gnu.org/software/gettext/">GNU gettext (>=
0.14.1)</a></li>
<?php
echo "</ul>\n";
P();
H2("CVS access");
W("You can access the current CVS version of GNUnet using");
-PRE("# cvs -d :pserver:address@hidden:/var/cvs/GNUnet login");
-W("When CVS asks for the password, just press enter.");
-W("Then get the sources:");
-PRE("# cvs -d :pserver:address@hidden:/var/cvs/GNUnet checkout GNUnet");
+PRE("$ svn checkout https://gnunet.org/svn/GNUnet/");
+W("For access to the GNUnet 0.6.x branch use:");
+PRE("$ svn checkout https://gnunet.org/svn/branches/GNUnet06/");
W("For access to the freeway code use:");
-PRE("# cvs -d :pserver:address@hidden:/var/cvs/GNUnet checkout freeway");
-W("Developers with CVS <strong>write</strong> access must use a different way
to access the repository, please contact %s for instructions.",
- extlink_("mailto:address@hidden","address@hidden"));
+PRE("$ svn checkout https://gnunet.org/svn/freeway/");
BR();
P();
H2("Download");
@@ -66,25 +59,35 @@
BR();
W("A subscription to GNUnet mailinglists might be a good idea, use
<tt>help-gnunet</tt> or %s to report problems.",
- extlink_("http://ovmj.org/~mantis/","Mantis"));
+ extlink_("https://gnunet.org/mantis/","Mantis"));
P();
+W("RPM binaries for GNUnet and %s (x86 only) can be found %s.",
+ ARRAY(intlink_("/libextractor/index.php", "libextractor"),
+ extlink_("http://ovmj.org/~rpm/", "here")));
+W("OS X binaries are %s.",
+ extlink_("http://www.chem.jyu.fi/~eloranta/GNUnet.html", "here"));
+W("The installer for Win32 Systems is %s (9 MB).",
+ extlink_("download/win/Setup-0.6.6b.exe", "here"));
P();
+W("If you want to build GNUnet from source, use these links:");
+echo "<ul>\n";
+LIV(extlink_("download/GNUnet-0.6.6b.tar.bz2","GNUnet-0.6.6b.tar.bz2 (1291
kb)"));
+LIV(extlink_("download/GNUnet-0.6.6b.tar.gz","GNUnet-0.6.6b.tar.gz (1737
kb)"));
+LIV(extlink_("/libextractor/download/libextractor-0.4.2.tar.bz2",
+ "libextractor-0.4.2.tar.bz2 (6245 kb)"));
+LIV(extlink_("/libextractor/download/libextractor-0.4.2.tar.gz",
+ "libextractor-0.4.2.tar.gz (5868 kb)"));
+echo "</ul>\n";
+P();
W("The next major release will be %s and is expected %s.",
- ARRAY("0.7.0", "2005"));
-/* Too outdated:
- W("RPM binaries for GNUnet and %s (x86 only) can be found %s.",
- ARRAY(extlink_("http://ovmj.org/libextractor/", "libextractor"),
- extlink_("http://ovmj.org/~rpm/", "here"))); */
-P();
+ ARRAY("0.7.0", "07-2005"));
+W("A pre-release (alpha-quality) is available:");
echo "<ul>\n";
-LIV(extlink_("download/GNUnet-0.6.5.tar.bz2","GNUnet-0.6.5.tar.bz2 (1268
kb)"));
-LIV(extlink_("download/GNUnet-0.6.5.tar.gz","GNUnet-0.6.5.tar.gz (1710 kb)"));
-LIV(extlink_("http://ovmj.org/libextractor/download/libextractor-0.3.11.tar.bz2",
- "libextractor-0.3.11.tar.bz2 (6212 kb)"));
-LIV(extlink_("http://ovmj.org/libextractor/download/libextractor-0.3.11.tar.gz",
- "libextractor-0.3.11.tar.gz (5766 kb)"));
+LIV(extlink_("download/GNUnet-0.7.0pre0.tar.bz2","GNUnet-0.7.0pre0.tar.bz2
(1142 kb)"));
+LIV(extlink_("download/GNUnet-0.7.0pre0.tar.gz","GNUnet-0.7.0pre0.tar.gz (1626
kb)"));
echo "</ul>\n";
+
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/editor.php
===================================================================
--- GNUnet-docs/WWW/test/editor.php 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/editor.php 2005-04-25 18:48:28 UTC (rev 687)
@@ -30,7 +30,7 @@
echo "Cannot translate to English.";
die();
}
-
+$start = $_REQUEST['start'];
H2("Mass translation to %s", $xlang);
W("This page is for translating lots of sentences at once.");
W("The sentences are ordered by the frequency that they are requested by
users.");
Modified: GNUnet-docs/WWW/test/encoding.php3
===================================================================
--- GNUnet-docs/WWW/test/encoding.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/encoding.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -5,7 +5,7 @@
include("html_header.php3");
H2("The GNUnet AFS Encoding");
-
+// FIXME: update for 0.7.0
W("This page is intended to describe the revised GNUnet content encoding which
was implemented in version 0.5.0.");
P();
Modified: GNUnet-docs/WWW/test/faq.php3
===================================================================
--- GNUnet-docs/WWW/test/faq.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/faq.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -18,6 +18,7 @@
LIV(extlink_("#anonymity","What do you mean by “anonymity”?"));
LIV(extlink_("#accounting","How does “accounting” work?"));
LIV(extlink_("#shapers","Why should I not use an external traffic shaper?"));
+LIV(extlink_("#firewall","How do I have to configure my firewall?"));
LIV(extlink_("#speed","Isn’t all this encryption going to make things
totally slow?"));
LIV(extlink_("#lastblocks", "Why is downloading the last few blocks so
slow?"));
LIV(extlink_("#attacks","Are there any known attacks?"));
@@ -29,7 +30,6 @@
LIV(extlink_("#knownbugs","Are there any known bugs?"));
LIV(extlink_("#bugs","How do I report a bug?"));
LIV(extlink_("#keywords","Is it possible to automatically enter keywords for
files?"));
-LIV(extlink_("#1k","Isn’t a block size of 1 KiB really bad?"));
LIV(extlink_("#framework","Why did you change the project description from an
anonymous file-sharing network to a peer-to-peer framework?"));
echo "</ul>\n";
P();
@@ -98,8 +98,8 @@
W("How can I test if it works?");
W("Searches can return no results if no matching content is found.");
W("For a simple test, it is suggested to search for <tt>GPL</tt>.");
-W("The GNU Public License was inserted under that keyword on the permanent
node on <tt>ovmj.org</tt>.");
-W("This test may of course fail if <tt>ovmj.org</tt> is temporarily not
available.");
+W("The GNU Public License was inserted under that keyword on the permanent
node on <tt>gnunet.org</tt>.");
+W("This test may of course fail if <tt>gnunet.org</tt> is temporarily not
available.");
W("Common other problems are:");
echo "<ul>\n";
LI("firewall (UDP and TCP ports 2086 should be open)");
@@ -328,6 +328,14 @@
W("It’s much better to have the limits tight inside GNUnet than outside
it.");
P();
+ANCHOR("firewall");H3("How do I have to configure my firewall?");
+W("GNUnet uses port 2086 by default.");
+W("Configure your packet filter to accept packets to port 2086 if the GNUnet
background process gnunetd is running on the same machine.");
+W("If your firewall is a NAT box, forward packets to port 2086 to your GNUnet
machine and tweak the configuration file gnunet.conf (Sections NETWORK, LOAD,
UDP, TCP and NAT).");
+W("Port 2087 is used for communication between gnunetd and the client tools as
gnunet-gtk, gnunet-search etc.");
+W("It must not be exposed to the internet.");
+P();
+
ANCHOR("speed"); H3("Isn’t all this encryption going to make things
totally slow?");
W("The answer to this is, that encryption is incredibly fast.");
@@ -415,7 +423,7 @@
P();
W("Since this is a project in development, you can find a list of problems or
report them using the %s system.",
- extlink_("http://www.ovmj.org/~mantis/","Mantis"));
+ extlink_("https://gnunet.org/mantis/","Mantis"));
P();
@@ -424,8 +432,9 @@
W("GNUnet is being developed and tested under GNU/Linux for i386.");
W("The current CVS version and version 0.3.2 and higher have been reported to
work under Solaris, FreeBSD, NetBSD and OpenBSD.");
W("Since 0.4.1, GNUnet should also work on big-endian architectures, 0.4.2 has
been reported to work on Linux/PPC and Solaris.");
+W("GNUnet 0.6.5 has been reported to run successfully on Win32.");
+W("People have reported interest in porting GNUnet to OS X, but we have no
reports of completely successful efforts for this platform (yet).");
W("Patches to make it work on other platforms are always appreciated.");
-W("People have reported interest in porting GNUnet to OS X and Win32, but we
have no reports of successful efforts for these proprietary platforms.");
W("If you had success running GNUnet on any other platform, please report!");
P();
@@ -461,22 +470,14 @@
BR();
-W("You may also receive messages that will print CRC errors from clients that
run versions of GNUnet before 0.5.0.");
+W("You may also receive messages that will print CRC errors from clients that
run versions of GNUnet before 0.7.0 (version mismatch).");
W("Finally, if two nodes simultaneously perform a sessionkey exchange (A sends
a new key to B and B at the same time sends a new key to A), there might be a
short period of time where the nodes disagree on which key is the correct one,
also causing CRC errors (the probability of this happening is very low, and we
do use a timestamp in the SKEY message and use it to see which key is more
recent, but there is still a very small probability that both nodes really send
it at the same point in time).");
P();
ANCHOR("database"); H3("What is the right database for me?");
-W("If you are not experienced with databases or GNUnet and have gdbm, tdb or
bdb installed, pick whatever <tt>configure</tt> found, giving preference to
<tt>gdbm</tt> and <tt>bdb</tt> (in this order).");
-W("<tt>gdbm</tt> is the default and it should be the right choice for most
people, especially if they have gdbm installed.");
-P();
-
-W("<tt>directory</tt> has horrible performance but will work fine if you just
want to test GNUnet and don’t want to install any of the other three
simple databases (gdbm, tdb, bdb).");
-W("Note that if you can do “configure; make; make install”, you
can install these databases.");
-P();
-
-W("As of GNUnet v0.6.1, <tt>mysql</tt> database is fully usable and has no
known problems.");
+W("If you are not experienced with databases or GNUnet, you should stick to
the default which is <tt>sqlite</tt>.");
W("The <tt>mysql</tt> module requires manual setup, which is described %s.",
- extlink_("http://www.ovmj.org/GNUnet/user_afs.php3#mysql","here"));
+ extlink_("user_afs.php3#mysql","here"));
W("<tt>mysql</tt> has good performance and the database can be repaired from
internal failures, but its more difficult to install than any of the
alternatives.");
P();
@@ -496,8 +497,7 @@
W("For highly structured content it is possible in practice that two blocks
are identical.");
W("GNUnet will then share the stoarge space for these two blocks.");
W("When deleteing a file that contains such shared blocks, GNUnet can
currently not recognize the sharing and will remove the block even if it is
still used in another context.");
-W("The resulting inconsistencies can result in warnings from
<tt>gnunet-delete</tt> or <tt>gnunet-check</tt> as well as in downloads that do
not complete.");
-W("<tt>gnunet-check</tt> can be used to find and resolve such problems (by
re-inserting such missing blocks).");
+W("The resulting inconsistencies can result in warnings from
<tt>gnunet-delete</tt>, as well as in downloads that do not complete.");
W("In general, <tt>gnunet-delete</tt> should be used with caution at this
point.");
@@ -505,9 +505,9 @@
P();
ANCHOR("spam"); H3("How does GNUnet handle spam? or: what are namespaces and
directories good for?");
-W("GNUnet′s ESED2 encoding/query strategy doesn′t allow peers to
benefit from false replies.");
-W("Even 1 KiB of incorrect response data can be detected instantly, resulting
in no trust gain for the malicious node.");
-W("If you know the correct AFS URI for the file you want, no intermediate node
can cheat by false replies.");
+W("GNUnet′s ECRS encoding/query strategy doesn′t allow peers to
benefit from false replies.");
+W("Even small blocks of incorrect response data can be detected instantly,
resulting in no trust gain for the malicious node.");
+W("If you know the correct ECRS URI for the file you want, no intermediate
node can cheat by false replies.");
W("However, this leaves the problem of obtaining the URIs in the first place,
and unfortunately if anyone can insert files under common keywords, false data
can be inserted as well.");
W("There doesn′t seem to be any easy solution to this problem.");
W("Ranking search results by trust could be one answer in the future.");
@@ -551,7 +551,7 @@
DT("Use our bug-tracking system");
echo "<dd>";
W("You should use the %s system for any bug reporting.",
- extlink_("http://www.ovmj.org/~mantis/","Mantis"));
+ extlink_("https://gnunet.org/mantis/","Mantis"));
W("Also, please check first if a bug has already been reported.");
W("If the bug has been reported, you may want to add comments to the report,
even if it just a statement that tells the developers that you encountered the
same problem.");
P();
@@ -596,6 +596,7 @@
W("Please include this information in the bugreport.");
W("A simple way to do this is to add a platform to your user profile and
select that platform when reporting bugs.");
W("You can also post the report.sh output in a comment, especially if you
reproduced the bug on a different system or are not the original reporter.");
+W("Just reporting that you reproduced a bug can be helpful since it may narrow
down the list of possible causes and will give us an idea of how frequent a
particular problem is.");
echo "</dd>";
DT("Include log messages");
echo "<dd>";
@@ -642,9 +643,6 @@
W("If <tt>gnunetd</tt> is still running, always try to also run the
<tt>gnunet-stats</tt> tool.");
W("If the tool still works, report the output.");
W("If it does not work anymore, this can also be an important hint towards
where the problem is.");
-P();
-W("Some development versions of <tt>gnunetd</tt> print the connection table, a
central internal datastructure of every GNUnet peer, whenever
<tt>gnunet-stats</tt> is run.");
-W("This information can also sometimes be helpful.");
echo "</dd>";
DT("Reporting Problems with Mantis");
echo "<dd>";
@@ -656,12 +654,13 @@
ANCHOR("knownbugs"); H3("Are there any known bugs?");
W("The list of currently known bugs is available in the %s system.",
- extlink_("http://www.ovmj.org/~mantis/","Mantis"));
+ extlink_("https://gnunet.org/mantis/","Mantis"));
P();
W("Some bugs are occasionally reported directly to developers or the developer
mailing list.");
-W("While this is discouraged, developers often do not have the time to feed
these bugs back into the Mantis database.");
+W("This is discouraged since developers often do not have the time to feed
these bugs back into the Mantis database.");
W("Please report bugs directly to the bug tracking system.");
+W("If you believe a bug is sensitive, you can set its view status to private
(this should be the exception).");
P();
ANCHOR("keywords"); H3("Is it possible to automatically enter keywords for
files?");
@@ -675,7 +674,7 @@
W("GNUnet uses a better approach, which is <strong>keyword
extraction</strong>.");
W("The library %s was developed for the purpose of extracting keywords from
arbitrary files. If keywords can easily be extracted from your files, you
don’t have to supply keywords by hand.",
- extlink_("http://www.ovmj.org/libextractor/","libextractor"));
+ extlink_("/libextractor/","libextractor"));
W("libextractor can also use the filename as a source for keywords.");
BR();
@@ -685,56 +684,6 @@
P();
-ANCHOR("1k"); H3("Isn’t a block size of 1 KiB really bad?");
-
-W("If you have to transfer 4 KiB, you have to transfer 4 KiB.");
-W("It does not matter if the 4 KiB are transfered as 1 KiB four times or 4 KiB
once.");
-W("As you can parallelize requests, you don’t get a significant slowdown
even if network latency (and not capacity) is the only delay you have.");
-W("Also, using 1 KiB, it is possible to have packets be of the size of
Ethernet frames.");
-W("This way, the transport layer doesn’t have to reassemble fragments
(not to mention retransmissions of the entire packet due to lost pieces of
fragments).");
-
-BR();
-
-W("More important, a uniform packet size makes traffic analysis much harder.");
-W("If we went to say 4k, we would either have to increase the size of all
packets (including queries), making the queues even slower (GNUnet must wait
for more queries before it can send a bunch of them out).");
-W("If we do not want to wait to fill the queue, we may fill the packet up with
garbage.");
-W("Both options reduce the effectivity of the system.");
-W("Thus for uniform traffic with respect to queries, the smaller the blocksize
the better.");
-
-BR();
-
-W("Of course, larger block sizes reduce the number of queries that must be
performed.");
-W("Anyway, the size of a query for a large file is only %% of the filesize, an
insignificant amount.");
-W("The real problem here is, that if a query takes a long time to hit the node
that stores the answer, it may be send many times more often than the
content.");
-W("Certain existing designs reduce the number of times that a query must be
forwarded to.");
-W("Sadly, these schemes usually have other problems, mostly with security.");
-W("For GNUnet, we try to find ways to be nearly as fast and still not suffer
from the problems the other schemes have.");
-W("While the developers would not claim success at the moment, improving the
routing scheme for queries is still the better answer compared to increasing
the blocksize.");
-
-P();
-
-W("Another possible problem related to 1 KiB blocks is that the hard disk must
function as a random access device.");
-W("If not done properly, this might stress the disk a bit too much.");
-W("For example, requests for a 10 KiB file cause 10 seek-reads or more.");
-W("However, in GNUnet the actual number of seeks and reads are limited by
-memory-resident probabilistic structures called Bloom filters, which <i>almost
always</i> prevent read attempts for blocks that are not available locally.");
-W("Also, the reads/seeks are limited by the upstream bandwidth allocated.");
-W("If you allocate e.g. 5kb/sec, it is unlikely that more than 5 reads
-are done per second, and for larger bandwidths, the amount can be much less
than your bandwidth, depending on the popularity of the content in your node
cache.");
-W("You can measure the reads/sec value of your node by dividing the amount of
lookups reported by <em>gnunet-stats</em> by the reported uptime.");
-
-P();
-
-W("We conclude that the choice of a 1 KiB block size is known to be
controversial, but there are a number of good reasons for it.");
-W("There are benefits for any blocksize, no matter if 4 KiB, 64 KiB or 1
MiB.");
-W("But the <em>as small as possible</em> approach has unique benefits, from
security to distribution of load.");
-W("Furthermore, the current code is written in a way that would allow changing
the blocksize by updating a single constant.");
-W("But so far, nobody was able to convince the developers to do so.");
-W("Any formal proof that 42 byte blocks would be optimal would be
appreciated.");
-echo ":-)";
-
-P();
-
ANCHOR("framework");
H3("Why did you change the project description from an anonymous file-sharing
network to a peer-to-peer framework?");
P();
Modified: GNUnet-docs/WWW/test/gnunet-design.fig
===================================================================
--- GNUnet-docs/WWW/test/gnunet-design.fig 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/gnunet-design.fig 2005-04-25 18:48:28 UTC (rev
687)
@@ -37,20 +37,19 @@
4 0 0 50 0 4 20 0.0000 0 270 2250 3450 4800 Transport Service\001
4 0 0 50 0 4 20 0.0000 0 210 480 6000 4800 API\001
4 0 0 50 0 4 20 0.0000 0 210 990 5850 900 Chat UI\001
-4 0 0 50 0 4 20 0.0000 0 210 945 3450 900 AFS UI\001
-4 0 0 50 0 4 10 1.5708 0 150 840 7500 1200 gnunet-chat\001
-4 0 0 50 0 4 10 1.5708 0 150 765 2850 1200 gnunet-gtk\001
+4 0 0 50 0 4 10 1.5708 0 150 885 7500 1200 gnunet-chat\001
+4 0 0 50 0 4 10 1.5708 0 150 810 2850 1200 gnunet-gtk\001
4 0 0 50 0 4 10 1.5708 0 150 570 8175 4200 gnunetd\001
4 0 8 50 0 4 20 0.0000 0 210 585 2580 5700 TCP\001
4 0 8 50 0 4 20 0.0000 0 210 615 3600 5700 UDP\001
4 0 8 50 0 4 20 0.0000 0 210 810 4650 5700 SMTP\001
4 0 8 50 0 4 20 0.0000 0 210 765 5850 5700 HTTP\001
4 0 8 50 0 4 20 0.0000 0 210 585 7050 5700 IPv6\001
-4 0 8 50 0 4 20 0.0000 0 210 930 3450 2400 AFS lib\001
4 0 8 50 0 4 20 0.0000 0 210 975 5850 2400 Chat lib\001
4 0 8 50 0 4 20 0.0000 0 210 975 3450 1605 TCP IO\001
4 0 8 50 0 4 20 0.0000 0 210 975 5850 1605 TCP IO\001
-4 0 8 50 0 4 20 0.0000 0 270 2640 5250 6450 Blue: dynamic library\001
-4 0 0 50 0 4 20 0.0000 0 270 2250 5250 6750 Black: application\001
4 0 0 50 0 4 20 0.0000 0 210 1950 4125 3750 GNUnet CORE\001
4 0 0 50 0 4 20 0.0000 0 270 2685 3750 4200 encryption, discovery\001
+4 0 8 50 0 4 20 0.0000 0 210 735 3525 2400 FS lib\001
+4 0 0 50 0 4 20 0.0000 0 210 750 3525 900 FS UI\001
+4 0 8 50 0 4 20 0.0000 0 270 3735 4425 6450 Blue: optional dynamic library\001
Modified: GNUnet-docs/WWW/test/gnunet-design.png
===================================================================
(Binary files differ)
Modified: GNUnet-docs/WWW/test/hacking.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/hacking.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -12,7 +12,7 @@
W("GNUnet has a layered design.");
W("The basic goal for the layering is this:");
-img("gnunet-design.png", "GNUnet layering", "CENTER", 339, 441, 0, 10, 10);
+img("gnunet-design.png", "GNUnet layering", "CENTER", 401, 421, 0, 10, 10);
P();
?>
<table border=5>
@@ -22,13 +22,13 @@
<th><?php W("code in"); ?></th>
<tr>
<th><?php W("User Interface(s)"); ?></th>
-<td><?php W("gnunet-gtk"); ?></td>
-<td>apps/afs/tools/, apps/afs/gtkui/</td>
+<td><?php W("gnunet-search"); ?></td>
+<td>applications/fs/tools/</td>
</tr>
<tr>
<th><?php W("Application Logic"); ?></th>
-<td><?php W("anonymous file sharing"); echo ", "; W("statistics"); ?></td>
-<td>apps/afs/esed2/, apps/afs/module/</td>
+<td><?php W("file sharing"); echo ", "; W("statistics"); ?></td>
+<td>applications/fs/module/, applications/stats/</td>
</tr>
<tr>
<th><?php W("Core"); ?></th>
@@ -44,9 +44,36 @@
<br clear=all>
<?php
P();
+W("The GNUnet core is structured into a complex set of smaller modules.");
+W("These modules are responsible for specific aspects of the system, like
sessionkey exchange, peer advertisements, topology management or the
transports.");
+W("The following picture illustrates the dependencies between these
fundamental modules in the GNUnet core:");
+P();
+img("overview.png", "GNUnet Core Overview", "CENTER", 746, 598, 0, 10, 10);
+P();
+W("The responsibilities of the individual modules are split as follows:");
+echo "<dl>";
+DT("identity");
+DD("Keeping track of known peers, how much we trust them and what their
current addresses are");
+DT("advertising");
+DD("Telling other peers about our addresses and forwarding advertisements");
+DT("pingpong");
+DD("Sending PING messages to confirm that another peer is alive and
notifications if other peers respond to our PINGs.");
+DT("session");
+DD("Establishing encrypted sessions with other peers");
+DT("transport");
+DD("Hanlding of multiple low-level transports for direct communication with
other peers (with UDP-like semantics)");
+DT("topology");
+DD("Maintaining a diverse set of connections with other peers, that is
deciding with which peers to establish connections at what time");
+DT("bootstrap");
+DD("Using external means to learn about other peers to initially connect to
the network (i.e. HTTP download of the hostlist)");
+DT("fragmentation");
+DD("Breaking of large (up to 64k) messages into smaller messages that fit the
constraints of the MTU of the transport");
+DT("core");
+DD("Loading of modules, registering of handlers, event loops.");
+echo "</dl>";
+P();
W("The following sections describe various aspects of the GNUnet code in more
detail:");
include("hacking_index.inc");
include("html_footer.php3");
-?>
-
+?>
\ No newline at end of file
Modified: GNUnet-docs/WWW/test/hacking_afs.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_afs.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/hacking_afs.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -1,51 +1,67 @@
<?php
include("scripts.php3");
-$title = "GNUnet Documentation: Hacking AFS";
-$description="GNUnet Documentation - a secure peer-to-peer framework starring
anonymous file sharing with an excess based trust-economy";
+$title = "GNUnet Documentation: Hacking GNUnet File-Sharing";
+$description="Overview of the File-sharing code in GNUnet";
include("html_header.php3");
-H2("The AFS code");
+H2("The File-Sharing code in GNUnet");
+afslogo();
P();
-
-W("The AFS code falls roughly into three main groups: the ESED2 encoding, the
AFS module and the user interface.");
-W("The ESED2 code is responsible for breaking the file into blocks,
encryption, decryption, requesting blocks, retransmission of requests and other
fundamental functions.");
-W("The AFS module primarily processes AFS related requests from other peers
and injects requests from local clients into the peer-to-peer network.");
-W("The user interface consists of a bunch of command line interfaces and a
graphical user interface.");
-W("The user interface code consists mostly of straight-forward wrappers around
the ESED2 library and is thus not documented any further.");
+W("The file-sharing code falls roughly into five main groups: the ECRS
encoding, the SQSTORE database, the FS module, GAP and DHT routing and the user
interface(s).");
+W("The ECRS code is responsible for breaking the file into blocks, encoding,
decoding and verification of these blocks, inserting and requesting blocks and
other fundamental functions.");
+W("The SQSTORE database services are responsible for storing the blocks.");
+W("The user interface consists of a shared library (FSUI) that does the actual
work and several user interfaces (gnunet-insert, gnunet-gtk) which provide a
way for the user to access the functionality provided by FSUI.");
+W("The GAP and DHT routing services are responsible for deciding which peers
should receive which queries (and where to send replies back to).");
+W("The major difference between GAP and DHT is that GAP is expected to achieve
anonymity whereas DHT is mostly concerned with performance.");
+W("The user interface code consists mostly of straight-forward wrappers around
the FSUI and ECRS libraries.");
W("For a description of the user interface from the point of the user, see the
%s.",
intlink_("user_afs.php3", "AFS user documentation"));
+W("The FS module is what holds the file-sharing system together, connecting
ECRS, the SQSTORE, the local clients and the routing services.");
+W("The FS module selects between the GAP and DHT routing services depending on
the desired level of anonymity.");
P();
-H3("libgnunet_afs_esed2");
-
-W("The primary reference for the ESED2 library is the %s.",
- extlink_("download/esed2.ps", "ESED2 paper"));
+H3("libgnunet_ecrs");
+W("The primary reference for the ECRS library is the %s.",
+ extlink_("download/ecrs.ps", "ECRS paper"));
W("The paper describes how files are encoded, searched-for, requested and
assembled.");
-W("The bulk of the encoding related code is in %s (splitting of the file into
blocks), %s (retransmission of requests), %s (handling of SBlocks) and %s
(handling of directories).",
- ARRAY(extlink_("doxygen/html/block_8c.html", "block.c"),
- extlink_("doxygen/html/requestmanager_8c.html", "requestmanager.c"),
- extlink_("doxygen/html/sblock_8c.html", "sblock.c"),
+W("The bulk of the encoding related code is in %s (splitting of the file into
blocks), %s (retransmission of requests), %s (handling of namespaces) and %s
(handling of directories).",
+ ARRAY(extlink_("doxygen/html/upload_8c.html", "upload.c"),
+ extlink_("doxygen/html/download_8c.html", "download.c"),
+ extlink_("doxygen/html/namespace_8c.html", "namespace.c"),
extlink_("doxygen/html/directory_8c.html", "directory.c")));
-W("For each of the four fundamental modes of operation (insert, search,
download and delete) a corresponding helper module exists which can be used to
drive the process (%s, %s, %s and %s).",
- ARRAY(extlink_("doxygen/html/insertutil_8c.html", "insertutil.c"),
- extlink_("doxygen/html/searchutil_8c.html", "searchutil.c"),
- extlink_("doxygen/html/downloadutil_8c.html", "downloadutil.c"),
- extlink_("doxygen/html/deleteutil_8c.html", "deleteutil.c")));
P();
-H3("The AFS Module");
+H3("The GAP Module");
+W("The %s provides the code for anonymous routing of file-sharing requests.");
+ extlink_("doxygen/html/gap_8c.html", "gap module"));
+W("GAP queues requests and keeps track of the previous node on the path for
sending replies.");
+W("GAP uses the blockstore provided by the file-sharing module to communicate
replies to local clients, to migrate content and to verify that replies match
the queries (ECRS verification).");
-W("While the primary entry point for loading the module is defined in %s,
during the actual operation of the module all requests enter the module via the
functions defined in %s.",
- ARRAY(extlink_("doxygen/html/afs_8c.html", "afs.c"),
- extlink_("doxygen/html/applications_2afs_2module_2handler_8c.html",
"handler.c")));
-W("From there, queries are added to the %s and then queued for transmission by
the %s.",
- ARRAY(extlink_("doxygen/html/routing_8c.html", "routing table"),
- extlink_("doxygen/html/querymanager_8c.html", "query manager.")));
-W("The local storage of the node is controlled by the %s.",
- extlink_("doxygen/html/manager_8c.html", "database manager"));
-W("Two %s are used to reduce the number of accesses to the database.",
- extlink_("download/bloomfilter.ps", "bloomfilters"));
+P();
+H3("The SQStore Module");
+W("The local storage of the node is provided by the %s.",
+ extlink_("doxygen/html/gnunet__sqstore_8h.html", "SQstore modules"));
+W("Currently, two SQStore implementations are available, one using mysql and
one using sqlite for the database.");
+
+ANCHOR("fs");H3("FS application module");
+W("The code in this directory contains the shared library (or plugin) that
gnunetd loads in order to participate in (anonymous) file sharing.");
+W("It uses GAP or RPC for routing requests and the SQStore to store
information about shared files.");
+W("The FS module itself is responsible for deciding which content should be
stored locally.");
+W("The decision is based on the frequency and priority of requests for the
content and the available diskspace.");
+W("A %s is used to reduce the number of accesses to the database.",
+ extlink_("download/bloomfilter.ps", "bloomfilter"));
+W("Content migration is also controlled by the FS module.");
+P();
+
+ANCHOR("FSUI");H3("libgnunet_fsui");
+W("The FSUI library is a high-level library for writing user interfaces.");
+W("The client is expected to be event-driven.");
+W("When the FSUI library is initialized, the user-interface code must provide
a callback function.");
+W("This function is called for all FSUI events, such as progress (downloading,
inserting), search results or completed actions (download complete, upload
complete).");
+W("After initializing FSUI, clients can initiate various actions, such as
searching, downloading or uploading data.");
+W("Note that many FSUI operations are asynchronous, that is the client calls a
function to initiate a transaction, and the function will return instantly
while using additional threads to continue the operation.");
+W("Some of these asynchronous operations can be aborted early, but not all.");
+
include("html_footer.php3");
-
?>
Modified: GNUnet-docs/WWW/test/hacking_application.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_application.php3 2005-04-24 13:12:51 UTC
(rev 686)
+++ GNUnet-docs/WWW/test/hacking_application.php3 2005-04-25 18:48:28 UTC
(rev 687)
@@ -38,7 +38,7 @@
extlink_("doxygen/html/printhelp_8c-source.html","parsing the command
line options")));
echo "</li></ol>";
P();
-H4("Portability");
+ANCHOR("portability");H4("Portability");
W("The official GNUnet source maintained by the GNUnet developers supports the
platforms listed on the downloads page.");
W("These ports require some guidelines to be obeyed:");
echo "<ul>";
@@ -71,6 +71,7 @@
W("GTK functions may only be called from the main thread. Use gtkSaveCall().");
echo "</li>";
echo "</ul>";
+P();
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/hacking_future.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_future.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/hacking_future.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -9,37 +9,24 @@
W("Before writing a larger patch, you may want to discuss the idea on the
developer mailinglist first.");
BR();
W("Some ideas (in random order, contacts listed are people that seem to have
given the idea some thought and/or may even have some code):");
-echo "<ul><li>";
-W("improve performance (create simulator/testbed, improve heuristics)");
-echo "</li><li>";
-W("improve documentation");
-echo "</li><li>";
-W("translate (documentation, user interface, messages, man-pages)");
-echo "</li><li>";
-W("more powerful user-interfaces (preferences, non-gtk+).");
-echo "</li><li>";
-W("write more extractors for %s (%s)",
- ARRAY(extlink_("http://ovmj.org/libextractor/","libextractor"),
- extlink_("mailto:address@hidden","contact")));
-echo "</li><li>";
-W("How about pseudonym based E-mail with accounting to fight Spam?");
-W("E-mail without a central server at some ISP would also get rid of the pain
with changing the address ever again.");
-echo "</li><li>";
-W("port to win32",
- extlink_("mailto:address@hidden","contact"));
-echo "</li><li>";
-W("fix %s",
- extlink_("http://ovmj.org/~mantis/","bugs"));
-echo "</li><li>";
-W("port to OS X");
-echo "</li><li>";
-W("improve HTTP compatibility of HTTP transport service");
-echo "</li></ul>";
+echo "<ul>";
+LI("improve performance (create simulator/testbed, improve heuristics)");
+LI("improve documentation");
+LI("translate (documentation, user interface, messages, man-pages)");
+LI("more powerful user-interfaces (preferences, non-gtk+).");
+LI("write more extractors for %s (%s)",
+ ARRAY(extlink_("/libextractor/","libextractor"),
+ extlink_("mailto:address@hidden","contact")));
+LI("How about pseudonym based E-mail with accounting to fight Spam? E-mail
without a central server at some ISP would also get rid of the pain with
changing the address ever again.");
+LI("fix %s",
+ extlink_("https://gnunet.org/mantis/","bugs"));
+LI("port to OS X");
+LI("improve HTTP compatibility of HTTP transport service");
+echo "</ul>";
W("And if you want to go totally crazy:");
-echo "<ul><li>";
-W("distributed computation (sandboxing!?)");
-echo "</li><li>";
-W("add steganography to existing transport protocols");
-echo "</li></ul>";
+echo "<ul>";
+LI("distributed computation (sandboxing!?)");
+LI("add steganography to existing transport protocols");
+echo "</ul>";
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/hacking_organization.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_organization.php3 2005-04-24 13:12:51 UTC
(rev 686)
+++ GNUnet-docs/WWW/test/hacking_organization.php3 2005-04-25 18:48:28 UTC
(rev 687)
@@ -1,140 +1,90 @@
<?php
include("scripts.php3");
$title = "GNUnet Documentation: Code Organization";
-$description="GNUnet Documentation - a secure peer-to-peer framework starring
anonymous file sharing with an excess based trust-economy";
+$description="Overview over the GNUnet source code for developers";
include("html_header.php3");
-ANCHOR("modules");H3("Code Modules");
+ANCHOR("libraries");H3("GNUnet libraries");
+
+W("GNUnet is divided into several libraries.");
+W("Some libraries are statically linked (rare), some are shared libraries and
many are plugins into the GNUnet core.");
+BR();
+W("Static libraries are used for more internal re-use of code.");
+W("For example, the static gnunet-core library is used by the GNUnet deaemon
and by various testcases and diagnostic tools.");
+BR();
+W("Shared libraries are used whenever multiple tools share code.");
+W("The general OS abstraction library, gnunet-util as well as libraries like
libgnunet-ecrs that are used by multiple user interfaces belong into this
category.");
+BR();
+W("Finally, plugins are used for all of the code that is dynamically loaded by
the gnunet daemon when needed.");
+W("This keeps the code for gnunetd small and modular.");
+W("Modules fall into two subcategories, services and applications.");
+W("Services are useless by themselves and only provide functionality for
applications.");
+W("A simple example for a service is message fragmentation, which is a module
that breaks larger messages into smaller messages and re-assembles them at the
destination.");
+W("Some services are required by the GNUnet core, others are purely
optional.");
+W("By convention, the names for header files for service plugins end in
<tt>_service.h</tt>.");
+W("Application modules provide useful services that are exposed to the user
via user interfaces.");
+W("Examples for application modules are the file-sharing or the chat
application modules.");
+W("Application modules typically also provide one or more shared libraries to
make it easier to write user interfaces for these applications.");
+W("By convention, the names of the header files for these convenience
libraries end in <tt>_lib.h</tt>.");
+W("Note that the application modules themselves do not define a header file
since they are accessed using a set of client-server messages exchanged using
code from gnunet-util and the GNUnet core.");
+P();
+
+ANCHOR("overview");H3("Important header files and libraries");
+
W("The most important modules in GNUnet are:");
-?>
-<ul>
- <li><?php extlink("#configuration","util/configuration");?></li>
- <li><?php extlink("#handler","server/handler");?></li>
- <li><?php extlink("#tcpserver","server/tcpserver");?></li>
- <li><?php extlink("#heloexchange","server/heloexchange");?></li>
- <li><?php extlink("#trustservice","server/trustservice");?></li>
- <li><?php extlink("#connection","server/connection");?></li>
- <li><?php extlink("#keyservice","server/keyservice");?></li>
- <li><?php extlink("#pingpong","server/pingpong");?></li>
- <li><?php extlink("#knownhosts","server/knownhosts");?></li>
- <li><?php extlink("#module","afs/module/");?></li>
- <li><?php extlink("#esed2","afs/esed2/");?></li>
-</ul>
-<?php
-W("There are two typical flows for data.");
-W("Note that this is the flow of the data, several threads are involved in
this.");
+echo "<ul>\n";
+LI(extlink_("#protocols","gnunet_protocols.h"));
+LI(intlink_("hacking_util.php3","gnunet_util.h"));
+LI(extlink_("#transport","gnunet_transport.h"));
+LI(extlink_("#core","gnunet_core.h"));
+echo "</ul>\n";
+
+
+ANCHOR("protocols");H4("gnunet_protocols.h");
+W("The <tt>gnunet_protocols.h</tt> include file also defines all GNUnet
message ID numbers.");
+W("While these ID numbers belong to individual modules, defining them all in
one place makes it trivial to avoid conflicting assignments.");
+W("Thus, whenever a new type of message is defined, it should be given a
globally unique number in <tt>gnunet_protocols.h</tt> as soon as possible.");
+W("The most important sets of constants are the client-server protocol message
types, the peer-to-peer protocol message types, the transport service
identifiers and the ECRS block types.");
+
+P();
+ANCHOR("transport");H4("gnunet_transport.h");
+W("This header primarily defines the functions that any GNUnet transport
service must implement.");
+W("The semantic of the transport service are essentially those of UDP:");
+W("out-of-order, unreliable, unencrypted delivery of bounded-size messages.");
+W("Each transport type can also define its own addressing scheme.");
+P();
+ANCHOR("core");H4("gnunet_core.h");
+W("This header defines the API that can be used by GNUnet modules.");
+W("It provides functions to register listeners for certain events (like
messages from peers and local user interface clients), to load additional
services, and to send messages to other peers.");
+
+P();
+ANCHOR("flow");H3("Global data-flow in GNUnet");
+
+W("There are two typical flows for data in GNUnet.");
+W("Note that this text describes the flow of the data, several threads and
processes are involved in this.");
BR();
W("First, a client such as %s or %s connects (via a secure TCP connection,
typically
-loopback) to the %s module.",
+loopback) to the %s.",
ARRAY(extlink_("doxygen/html/gnunetsearch_8c.html","gnunet-search"),
- extlink_("doxygen/html/insertmain_8c.html","gnunet-insert"),
- extlink_("#tcpserver","tcpserver")));
-W("The most common request is a %s which is handed by the CORE to the AFS
service and remembered in %s.",
+ extlink_("doxygen/html/gnunetinsert_8c.html","gnunet-insert"),
+ extlink_("doxygen/html/tcpserver_8c.html","tcpserver")));
+W("A common request is a %s which is handed by the TCPSERVER in the GNUnet
CORE to the FS service, which then passes the query to the %s for routing.",
ARRAY(extlink_("doxygen/html/structTCP__Query__Request.html","query"),
- extlink_("#routing","routing")));
-W("The AFS service then produces a query which is enqueued in the %s module.",
+ extlink_("doxygen/html/gnunet__gap__service_8h.html","GAP service")));
+W("The GAP service then produces a query which is enqueued in the %s module of
the CORE for transmission to other peers.",
extlink_("#connection","connection"));
-W("After a while, the entire buffer is flushed and send to the destination(s)
with a little help from the %s module.",
- extlink_("#knownhosts","knownhosts"));
-W("This transaction goes over the untrusted (but authenticated and encrypted)
UDP channel.");
+W("After a while, the entire buffer is flushed and send to the destination(s)
with a help from the %s and %s modules.",
+ ARRAY(extlink_("doxygen/html/gnunet__identity__service_8h.html","identity"),
+
extlink_("doxygen/html/gnunet__transport__service_8h.html","transport")));
+W("The peer-to-peer message is then transmitted via a transport service, such
as the %s transport.",
+ extlink_("doxygen/html/udp_8c.html","udp"));
BR();
-W("The second path comes into play after gnunetd %s a message on any transport
mechanism.",
- extlink_("doxygen/html/udp_8c.html","receives"));
-W("The message is %s.",
+W("The second path comes into play after gnunetd receives a message on any
transport mechanism.");
+W("The message is %s according to its message type.",
extlink_("doxygen/html/handler_8c.html#a14","demultiplexed"));
-W("If it is a %s the %s module performs a lookup and eventually sends a
reply.",
- ARRAY(extlink_("doxygen/html/structQUERY__Message.html","query"),
- extlink_("#lookup","lookup")));
-W("If the %s of the query is not expired, the query is remembered in the %s
module and forwarded using the %s module.",
- ARRAY(extlink_("doxygen/html/structQUERY__Message.html#a2","time-to-live"),
- extlink_("#routing","routing"),
- extlink_("#connection","connection")));
-W("If the message is a reply, the %s module is considered for where to send
the reply to (local client(s) and/or other nodes).",
- extlink_("#routing","routing"));
+W("If it is a query the GAP and FS modules perform a lookup and eventually
send a reply.");
+W("The reply goes the same path back, eventually reaching the other peer where
it is then passed to the user interface.");
P();
-ANCHOR("configuration");H4("util/configuration");
-W("The %s module reads the configuration and provides configuration
information to the rest of GNUnet.",
- extlink_("doxygen/html/configuration_8c.html","configuration"));
-P();
-ANCHOR("handler");H4("server/handler");
-W("This %s %s the integrity of incoming node-to-node traffic and %s the
traffic to the appropriate handlers.",
- ARRAY(extlink_("doxygen/html/handler_8c.html","module"),
- extlink_("doxygen/html/handler_8c.html#a6","verifies"),
- extlink_("doxygen/html/handler_8c.html#a14","demultiplexes")));
-W("The verification process decrypts encrypted packets and performs a CRC
check.");
-P();
-ANCHOR("tcpserver");H4("server/tcpserver");
-W("This module performs the appropriate operations for incoming CS traffic.");
-W("Since the connection is trusted, there is only a limited amount of
verification taking place.");
-W("The %s starts one %s per TCP connection.",
- ARRAY(extlink_("doxygen/html/tcpserver_8c.html","tcpserver module"),
- extlink_("doxygen/html/tcpserver_8c.html#a7","thread")));
-P();
-ANCHOR("heloexchange");H4("server/heloexchange");
-W("This %s is responsible for %s the presence of the current node to others.",
- ARRAY(extlink_("doxygen/html/heloexchange_8c.html","module"),
- extlink_("doxygen/html/heloexchange_8c.html#a3","advertising")));
-W("It also occasionally %s foreign HELOs.",
- extlink_("doxygen/html/heloexchange_8c.html#a4","forwards"));
-W("HELO messages that have expired are deleted by heloexchange.");
-P();
-ANCHOR("trustservice");H4("server/trustservice");
-W("The %s provides access to information about how much the local node trusts
another node.",
- extlink_("doxygen/html/trustservice_8c.html","trustservice"));
-P();
-ANCHOR("connection");H4("server/connection");
-W("The %s stores information about to which other nodes the local node is
connected.",
- extlink_("doxygen/html/connection_8c.html","connection module"));
-W("It buffers outgoing traffic and keeps %s, like the sequence number and the
session key.",
- extlink_("doxygen/html/structBufferEntry.html","session information"));
-W("The connection API provides means to unicast a message to a specific node,
to forward a query to a subset of the nodes or to broadcast a message to all
other nodes.");
-P();
-ANCHOR("keyservice");H4("server/keyservice");
-W("The %s module manages the private key of the local node and is used for
signing, encrypting and decrypting messages with the RSA key.",
- extlink_("doxygen/html/keyservice_8c.html","keyservice"));
-P();
-ANCHOR("pingpong");H4("server/pingpong");
-W("The %s module is responsible to record which ping messages were sent and to
trigger actions after a corresponding pong is received.",
- extlink_("doxygen/html/pingpong_8c.html","ping-pong"));
-P();
-ANCHOR("knownhosts");H4("server/knownhosts");
-W("The %s module keeps track of the known GNUnet nodes and provides an API to
operate on that list.",
- extlink_("doxygen/html/knownhosts_8c.html","knownhosts"));
-W("This module maps node %s (the hash of the public key of the node) to all
the information that can be obtained from the %s including the current address
and the full %s.",
- ARRAY(extlink_("doxygen/html/structPeerIdentity.html","identities"),
- extlink_("doxygen/html/structHELO__Message.html","HELO"),
- extlink_("doxygen/html/structPublicKey.html","public key")));
-P();
-afslogo();
-ANCHOR("module");H4("afs/module/");
-
-W("The code in this directory contains the shared library (or plugin) that
gnunetd loads in order to participate in anonymous file sharing.");
-W("It provides both database functionality (for storing or indexing the shared
files) and routing code.");
-W("The database %s module is responsible to check if content matching an
incoming query is available locally.",
- extlink_("doxygen/html/manager_8c.html","manager"));
-W("The manager code is responsible for performing the lookup and building the
response.");
-W("It is also there to decide which content to store locally (manages the
resource disk space).");
-W("Content migration is also controlled by the database manager module.");
-W("The content storage is abstracted into a high-level special purpose
database abstraction, the %s.",
- extlink_("doxygen/html/high__backend_8h.html","high backend"));
-W("There are two implementations of the high backend.");
-W("The %s uses %s.",
- ARRAY(extlink_("doxygen/html/high__mysql_8c.html","first one"),
- extlink_("http://www.mysql.com/","mysql")));
-W("The %s maps the high backend interface to a %s ("low backend")
that matches the interface provided by standard trivial databases such as %s or
%s or %s.",
- ARRAY(extlink_("doxygen/html/high__simple_8c.html","second implementation"),
- extlink_("doxygen/html/low__backend_8h.html","simpler API"),
- extlink_("http://www.gnu.org/software/gdbm/","gdbm"),
- extlink_("http://sourceforge.net/projects/tdb/","tdb"),
- extlink_("http://www.sleepycat.com/download/index.shtml","bdb")));
-
-P();
-
-ANCHOR("esed2");H4("afs/module/esed2/");
-W("The code in this directory is responsible for encoding files.");
-W("It contains code for the block encoding, pseudonyms, namespaces and
directories.");
-W("In essence, the ESED2 library is the shared code (the part that does the
actual work) for all AFS user interfaces.");
-
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/hacking_rpc.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_rpc.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/hacking_rpc.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -32,7 +32,7 @@
W("RPC_Param also assigns each parameter an index.");
W("This is useful if multiple values of the same kind need to be passed.");
W("The %s header file defines various helper functions to access RPC_Param
datastructures.",
- extlink_("http://ovmj.org/GNUnet/doxygen/html/gnunet__rpc__service_8h.html",
+ extlink_("doxygen/html/gnunet__rpc__service_8h.html",
"gnunet_rpc_service.h"));
H3("Using the RPC service");
Modified: GNUnet-docs/WWW/test/hacking_server.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_server.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/hacking_server.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -7,19 +7,21 @@
H2("Understanding gnunetd");
P();
-W("In GNUnet, the server <tt>gnunetd</tt> is responsible for accounting,
routing and link-to-link encryption.");
+W("In GNUnet, the server <tt>gnunetd</tt> is responsible for loading modules,
demultiplexing messages from clients and other peers and queueing (encrypted)
messages for other peers.");
+W("The core also performs bandwidth allocation and scheduling.");
W("The core relies on implementations of the %s for the actual transport of
packets.",
extlink_("doxygen/html/structTransportAPI.html","TransportAPI"));
-W("The transport layer has, like the internet protocol (IP), best-effort
semantics.");
+W("The transport layer has, like the internet protocol (IP) and UDP,
best-effort semantics.");
W("There is no guarantee that a message will be delivered.");
BR();
-W("Services (like anonymous file-sharing) are build on top of GNUnet.");
-W("Services use the %s to access the GNUnet core.",
+W("Applications (like file-sharing) are build on top of GNUnet.");
+W("Applications may consist of multiple services and use the %s to access the
GNUnet core.",
extlink_("doxygen/html/structCoreAPIForApplication.html","CoreAPIForApplication"));
-W("Services are responsible for adding reliability (through retransmission) to
the networking layer.");
-W("The service is also responsible for avoiding congestion (see TCP).");
+W("If necessary, applications are responsible for adding reliability (through
retransmission) to the networking layer.");
+W("A common way to do this is by using the RPC service.");
+W("The applications are also responsible for avoiding congestion (see TCP).");
W("While the core will enforce bandwidth limitations set by the user, services
should implement better strategies.");
-W("Services communicate these strategies to the core by giving their message a
priority.");
+W("Applications communicate these strategies to the core by giving their
message a priority and a desired time for transmission.");
W("The core then considers the available bandwidth, deadlines and priorities,
solves the resulting knapsack problem and schedules the messages.");
W("The following picture shows that the knapsack solver actually works to
reduce noise.");
W("It was obtained by first runnung GNUnet with very high CPU load (knapsack
disabled).");
@@ -27,13 +29,17 @@
IMG("knapsack_works.png", "Traffic percentages with and without knapsack",
"CENTER", 653, 841);
BR();
-W("In order to ease the implementation of a service, GNUnet splits services in
two parts.");
-W("The first part resides in the process space of <tt>gnunetd</tt> and is
always available to the GNUnet core.");
+W("In order to ease the implementation, GNUnet splits applications in two main
parts.");
+W("The first part resides in the process space of <tt>gnunetd</tt>.");
+W("This part is implemented as a plugin.");
W("The core will notify this lowest layer of the service of messages that have
arrived for the service.");
-W("This layer of the service is responsible for all node-to-node interactions
(for AFS, this layer provides routing, content lookup and handles QUERY/CONTENT
messages).");
-W("The second part of every service is an application which is invoked by the
user.");
+W("This layer of the application is responsible for all node-to-node
interactions.");
+W("Typically, the layer consists of multiple service modules.");
+W("For example, the file-sharing application (FS) uses the GAP service for
routing and the sqstore service for the database.");
+W("The second part of every service is a user-interface which is invoked by
the user.");
W("The idea is that the user starts a sepearate program (like gnunet-search,
gnunet-download or gnunet-gtk) which provides a user interface to the
service.");
-W("This user interface uses a trusted (local) TCP connection to talk to the
in-process part of the service.");
+W("Typically, the user interface is split into a shared library that provides
the actual implementation and a concrete client.");
+W("The idea is that the shared library focuses on performing the interaction
with <tt>gnunetd</tt> via the trusted (local) TCP connection to talk to the
in-process part of the service, whereas the concrete client handles the actual
user interaction (i.e. performs GTK+ calls).");
BR();
W("The GNUnet core provides an easy way for services to %s for certain types
of messages from the application.",
extlink_("doxygen/html/structCoreAPIForApplication.html#m21","register"));
@@ -43,5 +49,4 @@
W("You can specify the list of trusted IP addresses (i.e. the LAN) that are
allowed to connect as clients to GNUnetd.");
include("html_footer.php3");
-
?>
Modified: GNUnet-docs/WWW/test/hacking_ui.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_ui.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/hacking_ui.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -1,16 +1,16 @@
<?php
include("scripts.php3");
$title = "GNUnet Documentation: Writing a User-Interface";
-$description="GNUnet Documentation - a secure peer-to-peer framework starring
anonymous file sharing with an excess based trust-economy";
+$description="How to write user interfaces for GNUnet";
include("html_header.php3");
H4("How do I write a new user interface for GNUnet?");
W("Typically, you will not want to write a user interface for the gnunetd
peer-to-peer deamon but for some specific GNUnet application.");
W("The first step is typically to factor the application code into a library
that implements the core functionality (like talking to gnunetd via tcpio) and
a simple shell application.");
-W("For anonymous file-sharing, the primary libraries for the user interface
are in <tt>src/applications/encoding/</tt>.");
+W("For file-sharing, the primary libraries for the user interfaces are in
<tt>src/applications/fs/fsui/</tt> and <tt>src/applications/fs/ecrs/</tt>.");
P();
W("The next step is to examine the small shell-tools to get an idea how the
application specific libraries work and to evolve the shell-tools into a user
interface.");
W("You may also decide to just invoke the shell-tools as separate processes
that do the real work, though this is much less efficient and less powerful
(thus this is not the recommended approach).");
P();
include("html_footer.php3");
-?>
+?>
\ No newline at end of file
Modified: GNUnet-docs/WWW/test/hacking_util.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_util.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/hacking_util.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -49,15 +49,26 @@
</ul>
<?php
-W("The <tt>gnunet_util.h</tt> include file also defines all GNUnet message ID
numbers.");
-W("While, technically speaking, these ID numbers belong to individual modules,
defining them all in one place makes it trivial to avoid conflicting
assignments.");
-W("Thus, whenever a new type of message is defined, it should be given a
globally unique number in <tt>gnunet_util.h</tt> as soon as possible.");
-P();
W("Ideally, porting GNUnet should only require porting the gnunet_util
library.");
W("More testcases for the gnunet-util APIs are therefore a great way to make
porting of GNUnet easier.");
+BR();
+ANCHOR("crypto");
+H3("Cryptography");
+
+W("The gnunet-util APIs also provide the cryptographic primitives used in
GNUnet.");
+W("GNUnet uses 2048 bit RSA keys for the session key exchange and for signing
messages by peers.");
+W("Most researchers in cryptography consider 2048 bit RSA keys as very secure
and practically unbreakable for a very long time unless extraordinary advances
in cryptography are made.");
+W("For the encryption of the files and the symmetric peer-to-peer
communication GNUnet uses 128 bit keys with blowfish.");
+W("Fresh session keys are negotiated for every new connection.");
+W("Again, there is no published technique to break this cipher in any
realistic amount of time.");
+W("Note that GNUnet does not use RSA to encrypt files or ordinary individual
peer-to-peer messages.");
+W("No sane protocol uses public key cryptography for the bulk of the messages
since public key encryption is extremely expensive compared to symmetric
ciphers.");
+W("GNUnet follows the well-established practice to use public key cryptography
to exchange an initial pair of symmetric keys that is then used for the rest of
the communication).");
+
+
include("html_footer.php3");
?>
\ No newline at end of file
Modified: GNUnet-docs/WWW/test/hacking_win32_build.php3
===================================================================
--- GNUnet-docs/WWW/test/hacking_win32_build.php3 2005-04-24 13:12:51 UTC
(rev 686)
+++ GNUnet-docs/WWW/test/hacking_win32_build.php3 2005-04-25 18:48:28 UTC
(rev 687)
@@ -1,7 +1,7 @@
<?php
include("scripts.php3");
$title = "GNUnet Documentation: Building on Microsoft Windows 32-bit
Platforms";
-$description="GNUnet Documentation - a secure peer-to-peer framework starring
anonymous file sharing with an excess based trust-economy";
+$description="A step-by-step guide on how to build and run GNUnet on Win32
platforms.";
include("html_header.php3");
H3("Building GNUnet and libextractor on Microsoft Windows 32-bit Platforms");
@@ -16,14 +16,13 @@
W("We regret any inconvenience, and if you have problems, please %s or ask the
%s for assistance.",
ARRAY(extlink_("faq.php3#bugs", "report them"), extlink_("mailinglist.php3",
"mailinglist")));
H4("Hardware and OS requirements");
-?>
-<ul>
- <li><?php W("Pentium II or equivalent processor, 350 MHz or better"); ?></li>
- <li><?php W("128 MB RAM"); ?></li>
- <li><?php W("600 MB free disk space"); ?></li>
- <li><?php W("Windows 2000 or Windows XP are recommended"); ?></li>
-</ul>
-<?php H4("Software installation"); ?>
+echo "<ul>";
+LI("Pentium II or equivalent processor, 350 MHz or better");
+LI("128 MB RAM");
+LI("600 MB free disk space");
+LI("Windows 2000 or Windows XP are recommended");
+echo "</ul>";
+H4("Software installation"); ?>
<ol>
<li>
<b><?php W("Compression software");?></b>
@@ -98,44 +97,7 @@
extlink_("http://sourceforge.net/projects/mingwrep/", "MinGW
repository"));
?>
</li>
-<!--
<li>
- <b><?php W("GNU dbm"); ?></b>
- <?php BR();
- W("One of the supported database systems is GDBM.");
- BR();
- W("If you want to use GDBM, get it from the %s and unpack it to the MinGW
directory (c:\mingw\mingw)",
- extlink_("http://sourceforge.net/projects/mingwrep/", "MinGW
repository"));
- BR();
- W("Please note that GDBM is not recommended and does not run on Windows
2000 and XP.");
- ?>
- </li>
- <li>
- <b><?php W("Berkeley DB"); ?></b>
- <?php BR();
- W("Another supported database is the Berkeley DB.");
- BR();
- W("If you want to use BDB, get the source from %s and build & install
it with:",
- extlink_("http://www.sleepycat.com/download/db/index.shtml", "Sleepycat
Software"));
- BR();
- PRE("# cd build_unix && ../dist/configure --prefix= --enable-mingw
&& make install");
- W("The static lib built in this way is known to corrupt databases under
Windows 98.");
- BR();
- W("To create executables that are compatible with Windows 98, create a
dynamic
- library (DLL) using Microsoft Visual C, rename it to libdb.dll and copy
- it to /usr/local/lib (c:\mingw\mingw\lib)");
- BR();
- W("You can get a prebuilt DLL from %s (%s)",
-
ARRAY(extlink_("http://www.ovmj.org/GNUnet/download/win/libdb-4.2.52-win32.zip",
- "here"),
extlink_("http://www.ovmj.org/GNUnet/download/win/libdb-4.2.52-win32.zip.asc",
"Signature")));
- BR();
- W("It requires the Microsoft C Runtime library which can be obtained from
%s",
-
extlink_("http://support.microsoft.com/default.aspx?scid=kb;en-us;259403",
- "Microsoft"));
- ?>
- </li>
--->
- <li>
<b><?php W("SQLite");?></b>
<?php BR();W("GNUnet uses the SQLite database to store content.");BR();
W("Get the source from the %s (version 3, \"complete source code\"
package) and
@@ -146,6 +108,46 @@
?>
</li>
<li>
+ <b><?php W("MySQL");?></b>
+ <?php BR();W("As an alternative to SQLite, GNUnet also supports MySQL.");
?>
+ <ol>
+ <li>
+ <?php W("Get the binary installer from the %s (version 4.1),
+ install it and follow the instructions in %s.",
+
ARRAY(extlink_("http://dev.mysql.com/downloads/mysql/4.1.html#Windows", "MySQL
project"),
+
extlink_("https://gnunet.org/svn/GNUnet/doc/README.mysql", "README.mysql"))); ?>
+ </li>
+ <li>
+ <?php W("Create a temporary build directory (c:\mysql)"); ?>
+ </li>
+ <li>
+ <?php W("Copy the directories include\ and lib\ from the MySQL
directory to the new directory"); ?>
+ </li>
+ <li>
+ <?php W("Get the patches from %s and %s and apply them: ",
+
ARRAY(extlink_("http://bugs.mysql.com/bug.php?id=8906&files=1", "Bug #8906"),
+
extlink_("http://bugs.mysql.com/bug.php?id=8872&files=1", "Bug #8872")));
+ BR();
+ PRE("patch -p 0 < mysql01.diff
+patch -p 0 < mysql_def03.diff"); ?>
+ </li>
+ <li>
+ <?php W("Move lib\opt\libmysql.dll to lib\libmysql.dll"); ?>
+ </li>
+ <li>
+ <?php W("Change to lib\ and create an import library:");
+ BR();
+ PRE("dlltool --input-def ../include/libmySQL.def --dllname
libmysql.dll --output-lib libmysqlclient.a -k"); ?>
+ </li>
+ <li>
+ <?php W("Copy include\* to include\mysql\\"); ?>
+ </li>
+ <li>
+ <?php W("Pass \"--with-mysql=/c/mysql\" to ./configure and copy
libmysql.dll to your PATH or GNUnet's bin\ directory"); ?>
+ </li>
+ </ol>
+ </li>
+ <li>
<b><?php W("GTK+"); ?></b>
<?php BR();
W("GTK+ is a portable library for GUIs.");
@@ -157,8 +159,8 @@
W("Do <em>not</em> overwrite gettext files that are already present (use
the 7-Zip option \"Skip existing files\").");
BR();
W("The GTK binaries require the Microsoft Visual C 7 runtime library which
can be obtained from %s (%s).",
- ARRAY(extlink_("http://www.ovmj.org/GNUnet/download/win/msvcr70.zip",
"here"),
- extlink_("http://www.ovmj.org/GNUnet/download/win/msvcr70.zip.asc",
"Signature")));
+ ARRAY(extlink_("download/win/msvcr70.zip", "here"),
+ extlink_("download/win/msvcr70.zip.asc", "Signature")));
?>
</li>
<li>
@@ -182,22 +184,18 @@
?>
</li>
<li>
- <b><?php W("OpenSSL");?></b>
- <?php BR();W("OpenSSL provides the cryptographic functions used by
GNUnet");BR();
- W("Get the source from the %s and build & install it with:",
- extlink_("http://www.openssl.org/source/", "OpenSSL project"));
- BR();
- PRE("./Configure mingw && make install");
- BR();
- W("If the build fails, you can get OpenSSL precompiled from %s (%s).",
-
ARRAY(extlink_("http://www.ovmj.org/GNUnet/download/win/openssl-0.9.7e-win32.zip",
"here"),
-
extlink_("http://www.ovmj.org/GNUnet/download/win/openssl-0.9.7e-win32.zip.asc",
"Signature")));
+ <b><?php W("Libgcrypt");?></b>
+ <?php BR();W("Libgcrypt provides the cryptographic functions used by
GNUnet");BR();
+ W("Get Libgcrypt from %s (%s) and unpack it to the MinGW directory
(c:\mingw\mingw)",
+ ARRAY(extlink_("download/win/libgcrypt-1.2.1.zip", "here"),
+ extlink_("download/win/libgcrypt-1.2.1.zip.asc", "Signature")));
?>
</li>
</ol>
<?php H4("Building libextractor and GNUnet");
-W("See %s for basic instructions on building libextractor and GNUnet.",
extlink_("user_gnunet.php3",
- "Installation"));
+W("See %s for basic instructions on building libextractor and GNUnet.",
+ extlink_("user_gnunet.php3",
+ "Installation"));
BR();
W("By default, all modules that are created in this way contain debug
information and are quite large.");
W("To compile release versions (small and fast) set the variable CFLAGS:");
Modified: GNUnet-docs/WWW/test/html_footer.php3
===================================================================
--- GNUnet-docs/WWW/test/html_footer.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/html_footer.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -7,7 +7,7 @@
include("menu.php3");
}
HR();
- PRE("Copyright (C) 2002, 2003, 2004 Christian Grothoff.\n" .
+ PRE("Copyright (C) 2002, 2003, 2004, 2005 Christian Grothoff.\n" .
"Verbatim copying and distribution of this entire article\n" .
"is permitted in any medium, provided this notice is preserved.");
BR();
Modified: GNUnet-docs/WWW/test/html_header.php3
===================================================================
--- GNUnet-docs/WWW/test/html_header.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/html_header.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -32,7 +32,7 @@
<meta http-equiv="expires" content="43200">
<meta http-equiv="content-type" content="text/html">
<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel=stylesheet type="text/css" href="http://ovmj.org/GNUnet/gnunet.css">
+<link rel=stylesheet type="text/css" href="gnunet.css">
</head>
<body>
<?php
Modified: GNUnet-docs/WWW/test/i18nhtml.inc
===================================================================
--- GNUnet-docs/WWW/test/i18nhtml.inc 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/i18nhtml.inc 2005-04-25 18:48:28 UTC (rev 687)
@@ -115,6 +115,7 @@
// If no language is specified, use english.
if ( (! $lang) || ($lang=="") )
$lang = "English";
+$xlang = $_REQUEST['xlang'];
if ($xlang)
$lang = $xlang;
$lang = ucfirst(strtolower($lang));
@@ -192,12 +193,11 @@
if ($hasTranslation == "")
$hasTranslation = $i18nHTMLhasTranslation;
-
- if ( ($editor) && ($i18nHTMLallowedits || ($i18nHTMLhasTranslation == 0)) ) {
+ if ( ($editor) || ($i18nHTMLhasTranslation == 0) ) {
$back = "http://" . $HTTP_SERVER_VARS["HTTP_HOST"] .
$HTTP_SERVER_VARS["REQUEST_URI"];
return "<a href=\"" . $i18nHTMLbase . "translate.php?xlang="
. $lang
- . "&text=" . urlencode(htmlentities($a, ENT_QUOTES, $charset))
+ . "&text=" . urlencode($a)
. "&back=" . urlencode($back)
. "\">" . $i18nHTMLmarker . "</a>\n";
} else
@@ -225,6 +225,11 @@
$query = "SELECT translation FROM map WHERE name=\"$u\" AND lang=\"$lang\"
ORDER BY ranking DESC";
$result = mysql_query($query, $connection);
+ if (!$result) {
+ if ($i18nHTMLdebug != 0)
+ echo 'Unable to execute query $query: ' . mysql_error();
+ }
+
$num = 0;
if ($result)
$num = mysql_numrows($result);
@@ -347,7 +352,7 @@
if ($a == "")
return 0;
- echo W_($a, $args);
+ echo W_($a, $args) . "\n";
return $i18nHTMLhasTranslation;
}
@@ -363,6 +368,9 @@
function DT($a,$b="") {
echo "<dt>" . W_($a,$b) . "</dt>\n";
}
+function DD($a,$b="") {
+ echo "<dd>" . W_($a,$b) . "</dd>\n";
+}
function H1($a,$b="") {
echo "<h1>" . W_($a,$b) . "</h1>\n";
}
@@ -428,7 +436,10 @@
function HR() {
echo "<hr>\n";
}
-
+function DTDD($a,$b) {
+ DT($a);
+ DD($b);
+}
function IMG($src, $alt, $align="CENTER", $width, $height, $border=0,
$hspace=0, $vspace=0) {
echo IMG_($src, $alt, $align, $width, $height, $border, $hspace, $vspace);
}
@@ -529,7 +540,7 @@
global $HTTP_SERVER_VARS;
P();
- echo "Translation engine based on <a
href=\"http://ovmj.org/i18nHTML/\">i18nHTML</a> (C) 2003, 2004 Christian
Grothoff.<br />\n";
+ echo "Translation engine based on <a
href=\"http://gnunet.org/i18nHTML/\">i18nHTML</a> (C) 2003, 2004, 2005
Christian Grothoff.<br />\n";
if ( ($xlang) && ($xlang != "English") ) {
$back = "http://" . $HTTP_SERVER_VARS["HTTP_HOST"] .
$HTTP_SERVER_VARS["REQUEST_URI"];
// echo "<span align=\"center\"><small>";
Modified: GNUnet-docs/WWW/test/links.php3
===================================================================
--- GNUnet-docs/WWW/test/links.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/links.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -9,10 +9,9 @@
?>
<ul>
<li><a href="http://freshmeat.net/projects/gnunet/">GNUnet on
freshmeat</a></li>
- <li><a href="http://www.ovmj.org/GNUnet/freeway/">freeway (GNUnet port to
Java)</a></li>
+ <li><a href="/freeway/">freeway (GNUnet port to Java)</a></li>
<li><a href="http://xnap.org/">xnap (GNUnet-freeway plugin is under
development)</a></li>
- <li><a href="http://www.ovmj.org/libextractor/">libextractor</a></li>
- <li><a href="http://www.boardy.de/forumdisplay.php?forumid=104104">GNUnet
forum</a></li>
+ <li><a href="/libextractor/">libextractor</a></li>
<li><a href="http://shell.franken.de/~dg1nsw/gnunet/faq/">Another GNUnet
FAQ</a></li>
<li><a href="http://www.angelfire.com/super2/duologue/gnunet/">Tom
Barnes-Lewrence’s GNUnet page with FAQ and informal keyword
standard</a></li>
<li><a href="http://gnunet.wensley.org.uk/">GNUnet hostlist and various
tips</a></li>
@@ -73,6 +72,7 @@
<li><a href="http://www.gnu.org/brave-gnu-world/issue-40.en.html">Brave GNU
World</a></li>
<li><a href="http://www.heise.de/newsticker/data/jk-28.03.03-003/">Heise
reporting</a> about <a href="http://petworkshop.org/">PET</a></li>
<li><a href="http://lwn.net/Articles/61329/">LWN</a></li>
+ <li><a href="http://www.root.cz/clanek/2551">Article about GNUnet on
root.cz</a></li>
</ul>
<?php
Modified: GNUnet-docs/WWW/test/mailinglist.php3
===================================================================
--- GNUnet-docs/WWW/test/mailinglist.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/mailinglist.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -4,10 +4,17 @@
$description="Ways to get in contact with the GNUnet developers and to keep in
touch with the development.";
include("html_header.php3");
+H2("Blogs, Forum, Stories and Polls");
+W("GNUnet uses %s as a community content management system.",
+ extlink_("http://gnunet.org/drupal/", "drupal"));
+W("There, you can read the latest stories, participate in the forums and polls
and even start your own blogs.");
+W("Everything related to GNUnet is welcome, as long as it is respectful and
legal.");
+P();
+
H2("Bugtrack");
W("GNUnet uses Mantis for bugtracking.");
W("Visit %s to report bugs.",
- extlink_("http://www.ovmj.org/~mantis/","http://www.ovmj.org/~mantis/"));
+ extlink_("https://gnunet.org/mantis/","https://gnunet.org/mantis/"));
W("You need to sign up for a reporter account.");
W("Please make sure you report bugs under <strong>GNUnet</strong> and not
under any of the other projects.");
P();
@@ -39,24 +46,32 @@
echo "<center>";
extlink("http://mail.gnu.org/mailman/listinfo/info-gnunet","Announcements");
echo "</center>";
+
+P();H2("GNUnet Diffs");
+W("This mailinglist is used to instantly publish all commits to the %s.",
+ extlink_("/svn/", "GNUnet subversion repository"));
+W("So if you want to be notified about any change to the GNUnet codebase, you
can subscribe to this mailinglist.");
+W("Only subversion-diffs should (and hopefully can) be posted on this list.");
+W("All other mail will be discareded.");
+echo "<center>";
+extlink("http://mail.gnu.org/mailman/listinfo/gnunet-sv","Diffs");
+echo "</center>";
P();
-H2("Discussion Forum");
+H2("Other Discussion Forums");
W("The %s is a webpage for discussions of GNUnet and related topics.",
extlink_("http://www.boardy.de/forumdisplay.php?forumid=104104","GNUnet
Forum"));
W("The forum was started by German GNUnet users and hence many postings are in
German, but contributions in English are welcome.");
W("Note that the forum is not the place for reporting bugs, please use
Mantis.");
-W("");
+W("Also, the main forum for GNUnet is now %s.",
+ extlink_("/drupal/", "here"));
W("%s is an international P2P board with GNUnet related subcategories.",
extlink_("http://board.planetpeer.de/", "Planet Peer"));
-/* // down? unused? dead?
H2("Chat");
-W("The official GNUnet chat server is <tt>daemon.ecn.purdue.edu</tt>.");
-W("The server is running SILC which you can access using the %s software.",
- extlink_("http://silcnet.org/","silc"));
-W("Use <tt>/server daemon.ecn.purdue.edu</tt> and <tt>/join #GNUnet</tt>.");
-*/
+W("Various GNUnet people are regularly hanging out on the %s.",
+ extlink_("http://www.freenode.net/","Freenode IRC Network"));
+W("The channel name is <tt>#GNUnet</tt>.");
P();
include("html_footer.php3");
Modified: GNUnet-docs/WWW/test/menu.php3
===================================================================
--- GNUnet-docs/WWW/test/menu.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/menu.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -5,8 +5,9 @@
<center>
<table border=0 rules=none width="90%">
<tr>
- <th><?php intlink("index.php3","Welcome") ?></th>
+ <th><?php intlink("index.php","Welcome") ?></th>
<th><?php intlink("mailinglist.php3","Contact"); ?></th>
+ <th><?php extlink("https://gnunet.org/drupal/", "Community"); ?></th>
<th><?php intlink("faq.php3","FAQ"); ?></th>
<th><?php intlink("download.php3","Download"); ?></th>
<th><?php intlink("documentation.php3","Documentation"); ?></th>
@@ -17,4 +18,4 @@
</center>
<?php
}
-?>
\ No newline at end of file
+?>
Modified: GNUnet-docs/WWW/test/namespace.php3
===================================================================
--- GNUnet-docs/WWW/test/namespace.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/namespace.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -3,7 +3,7 @@
$title = "GNUnet Subspaces and Directories";
$description = "Page for the discussion of how to implement private subspaces
and directories in GNUnet.";
include("html_header.php3");
-
+// FIXME: update for 0.7.0?
H2("Subspaces and Directories in GNUnet");
P();
Modified: GNUnet-docs/WWW/test/papers.php3
===================================================================
--- GNUnet-docs/WWW/test/papers.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/papers.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -107,6 +107,19 @@
W("Given such an adversary that legally enforces content filtering on a
per-block level, GNUnet can be censored.");
echo "</font>\n";
echo "</dd>\n";
+
+DT("Enhancing Web privacy and anonymity in the digital era (%s), %s.",
+ ARRAY(extlink_("papers/p255.pdf", "pdf"),
+ "Information Management & Computer Security, 12-3 2004"));
+echo "<dd>"; echo "Stefanos Gritzalis";
+BR();
+echo "<font class=desc>\n";
+W("This paper presents a review of various privacy and anonymity enhancing
systems, including GNUnet (GAP).");
+W("The review highlights the advantages and disadvantages of the various
systems.");
+W("This paper is probably a good introduction for people interested in
anonymity and privacy in general and can be used as a guide towards which
systems maybe the right choice for a particular application.");
+echo "</font>\n";
+echo "</dd>\n";
+
DT("Efficient Sharing of Encrypted Data (%s), %s",
ARRAY(extlink_("download/esed.ps","PS"),
extlink_("http://www.cm.deakin.edu.au/ACISP’02/","ACISP 2002")));
@@ -169,6 +182,10 @@
"Towards an Information Theoretic Metric for Anonymity",
ARRAY("Andrei Serjantov", "George Danezis"),
"This paper proposes a metric that is essentially equivalent to
<em>Towards measuring anonymity</em> but focuses on the analysis of mixes.");
+bibEntry("papers/borisov_waddle.pdf",
+ "Anonymity in Structured Peer-to-Peer Networks",
+ ARRAY("Nikita Borisov", "Jason Waddle"),
+ "This paper discusses how much anonymity structured peer-to-peer
networks (based on Chord) can achieve. It uses the entropy metric for
anonymity and discusses attacker placement and various variations on the
routing algorithms. Well written.");
bibEntry("papers/shields_degration.ps",
"An Analysis of the Degradation of Anonymous Protocols",
ARRAY("Matthew Wrigt", "Micah Adler", "Brian Levine", "Clay Shields"),
@@ -237,6 +254,10 @@
"Anonymity, Unobservability, Pseudonymity, and Identity Management - A
Proposal for Terminology v0.18",
ARRAY("Andreas Pfitzmann", "Marit Hansen"),
"");
+bibEntry("papers/flash-mix.pdf",
+ "Flash Mixing",
+ ARRAY("Markus Jakobsson"),
+ "");
echo "</dl>";
@@ -286,14 +307,10 @@
"Sloppy hashing and self-organizing clusters",
ARRAY("Michael J. Freedman", "David Mazieres"),
"");
-bibEntry("papers/flash-mix.pdf",
- "Flash Mixing",
- ARRAY("Markus Jakobsson"),
- "");
-bibEntry("papers/introducing-morphmix-peer-to.pdf",
- "Introducing MorphMix: Peer-to-Peer based Anonymous Internet Usage
with Collsion Detection",
- ARRAY("Marc Rennhard", "Bernhard Plattner"),
- "The paper describes the design of a peer-to-peer based mix network.
The authors attempt to solve the problem of an adversary joining the network
and collecting data using probabilistic assumptions about the behavior of the
adversary. The problem with this approach of detecting malicious nodes is that
a good adversary can always just adapt to the detection scheme and thereby
avoid detection.");
+bibEntry("papers/p207-damiani.pdf",
+ "A Reputation-Based Approach for Choosing Reliable Resources in
Peer-to-Peer Networks",
+ ARRAY("Ernesto Damiani", "Sabrina De Capitani di Vimercati", "Stefano
Paraboschi", "Pierangela Samarati", "Fabio Violante"),
+ "");
echo "</dl>";
H3("Replication and Migration");
@@ -394,6 +411,10 @@
"Incentives for Cooperation in Peer-to-Peer Networks",
ARRAY("Kevin Lai", "Michael Feldman", "Ion Stoica", "John Chuang"),
"This paper discusses distributed incentive systems for peer-to-peer
networks with zero-cost identities. It compares decision making based on
private histories (like in GNUnet) with shared histories and concludes that
private histories do not scale to larger networks (since a given pair of peers
is unlikely to interact repeatedly as the size of the network grows). They
note that shared histories also have problems (such as solving maximum-flow
problems to establish reputation transitively in a secure fashion). Note that
they ignore properties like locality, which, in particular in an anonymizing
network like GNUnet where interactions are hardly ever end-to-end, increases
the chances that peers will interact repeatedly even in very large networks.");
+bibEntry("papers/when-can-autonomous.pdf",
+ "When Can an Autonomous Reputation Scheme Discourage Free-riding in a
Peer-to-Peer System?",
+ ARRAY("Nazareno Andrade", "Miranda Mowbray", "Walfredo Cirne",
"Francisco Brasilerio"),
+ "This work describes a scheme that is remarkably similar to the
economic model used by GNUnet to discourage free-riding and enocurage
contribution. The major difference to GNUnet seems to be that resource
consumption does not seem to result in penalizing the requester: all peers only
total up the contributions received and allocate their resources to the highest
donor, irrespective of the resources requested by that peer previously. The
discussion of related work in this paper is severely lacking.");
echo "</dl>";
H3("Legal issues");
@@ -442,6 +463,10 @@
"A New Generation of File Sharing Tools",
ARRAY("Dan Klinedinst"),
"Discussion of the advantages of Freenet and GNUnet over more
traditional peer-to-peer networks.");
+bibEntry("papers/introducing-morphmix-peer-to.pdf",
+ "Introducing MorphMix: Peer-to-Peer based Anonymous Internet Usage
with Collsion Detection",
+ ARRAY("Marc Rennhard", "Bernhard Plattner"),
+ "The paper describes the design of a peer-to-peer based mix network.
The authors attempt to solve the problem of an adversary joining the network
and collecting data using probabilistic assumptions about the behavior of the
adversary. The problem with this approach of detecting malicious nodes is that
a good adversary can always just adapt to the detection scheme and thereby
avoid detection.");
// coral-iptps-03
echo "</dl>";
@@ -451,6 +476,10 @@
"Infranet: Circumventing Web Censorship and Surveillance",
ARRAY("Nick Feamster", "Magdalena Baazinska", "Greg Harfst", "Hari
Balakrishnan", "David Karger"),
"How to steganographically hide prohibited accesses to the WWW in
"legitimate" HTTP traffic.");
+bibEntry("papers/nat.pdf",
+ "Peer-to-Peer Communication Across Network Address Translators",
+ ARRAY("Bryan Ford", "Pyda Srisuresh", "Dan Kegel"),
+ "How to establish connections in a peer-to-peer network in the
presence of NAT, with an empirical study of various NAT implementations. Good
stuff. And Ian, with a bit of native code it can even be done in Java.");
echo "</dl>";
H3("Publish-Subscribe");
Modified: GNUnet-docs/WWW/test/philosophy.php3
===================================================================
--- GNUnet-docs/WWW/test/philosophy.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/philosophy.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -22,33 +22,49 @@
BR();
-
ANCHOR("goals");
H3("Design Goals and Philosophy");
-W("The goal of the GNUnet project is to become the ultimate system for free
information exchange in a world hostile toward uncontrolled communication.");
+W("The foremost goal of the GNUnet project is to become a widely used,
reliable, open, nondiscriminating, egalitarian, unfettered and
censorship-resistant system of free information exchange.");
W("We value free speech above state secrets, law-enforcement or intellectual
property.");
W("GNUnet is supposed to be an anarchistic network, where the only limitation
for peers is that they must contribute enough back to the network such that
their resource consumption does not have a significant impact on other users.");
P();
+
+ANCHOR("Privacy");
+H4("Privacy");
W("GNUnet’s primary design goals are to protect the privacy of its users
and to guard itself against attacks or abuse.");
W("GNUnet does not have any mechanisms to control, track or censor users.");
W("Instead, the GNUnet protocols aim to make it as hard as possible to find
out what is happening on the network or to disrupt operations.");
P();
-W("We call GNUnet a network because we want to support any operation that is
typically performed on a network.");
-W("While the first versions only support anonymous file-sharing, other
applications such as mail, news or distributed computation will hopefully
follow in the future.");
-W("Running additional applications over the link-to-link encrypted
peer-to-peer infrastructure increases the anonymity of the peers as the set of
users and the amount of encrypted traffic grows.");
-W("Increasing privacy is the primary reason why GNUnet is developed to become
a peer-to-peer framework.");
-W("A rudimentary chat client has been implemented as reference code for how to
implement other applications
-on top of the GNUnet peer-to-peer infrastructure.");
+
+ANCHOR("Versatility");
+H4("Versatility");
+W("We call GNUnet a network because we want to support many different forms of
peer-to-peer applications.");
+W("GNUnet uses a plugin architecture to make the system extensible and to
encourage code reuse.");
+W("While the first versions of the system only supported anonymous
file-sharing, other applications are being worked on and more will hopefully
follow in the future.");
+W("A powerful synergy regarding anonymity services is created by a large
community utilizing many diverse applications over the same software
infrastructure.");
+W("The reason is that link encryption hides the specifics of the traffic for
non-participating observers.");
+W("This way, anonymity can get stronger with additional (GNUnet) traffic, even
if the additional traffic is not related to anonymous communication.");
+W("Increasing anonymity is the primary reason why GNUnet is developed to
become a peer-to-peer framework.");
P();
+
+
+ANCHOR("Practicality");
+H4("Pracicality");
+
+W("GNUnet allows participants to trade various amounts of security in exchange
for increased efficiency.");
+W("However, it is not possible for any user's security and efficiency
requirements to compromise the security and efficiency of any other user.");
+
W("For GNUnet, efficiency is not paramount.");
W("If there is a more secure and still practical approach, we would choose to
take the more secure alternative.");
W("<tt>telnet</tt> is more efficient than <tt>ssh</tt>, yet it is obsolete.");
W("Hardware gets faster, and code can be optimized.");
W("Fixing security issues as an afterthought is much harder.");
-P();
+BR();
W("While security is paramount, practicability is still a requirement.");
W("The most secure system is always the one that nobody can use.");
+W("Similarly, any anonymous system that is extremely inefficient will only
find few users.");
+W("However, good anonymity requires a large and diverse userbase.");
W("Since individual security requirements may vary, the only good solution
here is to allow individuals to trade-off security and efficiency.");
W("The primary challenge in allowing this is to ensure that the economic
incentives work properly.");
W("In particular, this means that it must be impossible for a user to gain
security at the expense of other users.");
@@ -56,51 +72,109 @@
W("GNUnet should avoid whereever possible to rely on protocols that will only
work if the participants are benevolent.");
W("While some designs have had widespread success while relying on parties to
observe a protocol that may be sub-optimal for the individuals (e.g. TCP
Nagle), a protocol that ensures that individual goals never conflict with the
goals of the group is always preferable.");
P();
-W("Anonymity can always only be achieved with large numbers of participants.");
-W("Thus it is important that we make GNUnet easy to use and well-documented.");
-
-
ANCHOR("concepts");
H3("Concepts");
W("In this section, the fundamental concepts of GNUnet are explained.");
W("Most of them are also described in our research papers.");
+W("First, some of the concepts used in the GNUnet framework are detailed.");
+W("The second part describes concepts specific to anonymous file-sharing.");
+gnunetlogo();
+H4("Authentication");
+
+W("Almost all peer-to-peer communications in GNUnet are between mutually
authenticated peers.");
+W("The authentication works by having each peer sign a secret session key with
its RSA key.");
+W("Furthermore, the session key is encrypted with the public key of the other
peer.");
+W("That session key is then used to encrypt the communication between the two
peers using Blowfish.");
+W("As only the two participating hosts know the session key, this
authenticates each packet without requiring signatures each time.");
+
+BR();
+W("In GNUnet, the identity of a host is the hash of its public key.");
+W("For that reason, man-in-the-middle attacks will not break the
authentication or accounting goals.");
+W("Essentially, for GNUnet, the IP of the host does not matter.");
+W("As the public key is the only thing that truly matters, faking an IP, a
port or any other property of the underlying transport protocol is
irrelevant.");
+
+BR();
+
+W("GNUnet uses a special type of message to communicate a binding between
public (RSA) keys to their current network address.");
+W("For the UDP and TCP transport layers, a network address is an IP and a
port.");
+W("GNUnet can also use other transport mechanisms (HTTP, SMTP, etc.) which use
various other forms of addresses.");
+W("Note that any node can have multiple addresses at the same time for the
various transport mechanisms.");
+W("Binding messages expire after at most a week (the timeout can be shorter if
the user configures the node appropriately).");
+
P();
+H4("Accounting to Encourage Resource Sharing");
+W("Most distributed P2P networks suffer from a lack of defenses or precautions
against attacks in the form of freeloading.");
+W("While the intentions of an attacker and a freeloader are different, their
effect on the network is the same; they both render it useless.");
+W("Most simple attacks on networks such as Gnutella involve flooding the
network with traffic, particularly with queries that are, in the worst case,
multiplied by the network.");
+
+BR();
+
+W("In order to ensure that freeloaders or attackers have a minimal impact on
the network, GNUnet tries to distinguish good (contributing) nodes from
malicious (freeloading) nodes.");
+W("In GNUnet, every node keeps track of the behavior of every other node it
has been in contact with.");
+W("Many requests (depending on the application) are transmitted with a
priority (or importance) level.");
+W("That priority is used to establish how important the sender believes this
request is.");
+W("If a peer responds to an important request, the recipient will increase its
trust in the responder: the responder contributed resources.");
+W("If a peer is too busy to answer all requests, it needs to prioritize.");
+W("For that, peers to not take the priorities of the requests received at face
value.");
+W("First, they check how much they trust the sender, and depending on that
amount of trust they assign the request a (possibly lower) effective
priority.");
+W("Then, they drop the requests with the lowest effective priority to satisfy
their resource constraints.");
+W("This way, GNUnet’s economic model ensures that nodes that are not
currently considered to have a surplus in contributions will not be served if
the network load is high.");
+W("More details can be found in %s.",
+ extlink_("download/ebe.ps", "this paper"));
+
+P();
+H4("Confidentiality");
+
+W("Adversaries outside of GNUnet are not supposed to know what kind of actions
a peer is involved in.");
+W("Only the specific neighbor of a peer that is the corresponding sender or
recipient of a message may know its contents, and even then application
protocols may place further restrictions on that knowledge.");
+W("In order to ensure confidentiality, GNUnet uses link encryption, that is
each message exchanged between two peers is encrypted using a key only known to
these two peers.");
+W("Encrypting traffic like this makes any kind of traffic analysis much
harder.");
+W("Naturally, for some applications, it may still be desirable if even
neighbors cannot determine the concrete contents of a message.");
+W("In GNUnet, this problem is addressed by the specific application-level
protocols (see for example, %s and %s in anonymous file sharing).",
+ ARRAY(extlink_("#deniability", "deniability"),
+ extlink_("#anonymity", "anonymity")));
+
+
+P();
+afslogo();
+ANCHOR("anonymity");
H4("Anonymity");
-W("Providing anonymity for users is a central goal behind the GNUnet system.");
+W("Providing anonymity for users is the central goal for the anonymous
file-sharing application.");
W("Many other design decisions follow in the footsteps of this requirement.");
//W("(Nevertheless, it is possible to forego anonymity when this is not
required.)");
+// some more about anonymity in general here!
P();
-W("Anonymity in GNUnet is achieved even when facing powerful adversaries.");
W("Contrary to other designs, we do not believe that users achieve strong
anonymity just because their requests are obfuscated by a couple of
indirections.");
W("This is not sufficient if the adversary uses traffic analysis.");
-W("In our model, the adversary is very powerful.");
-W("We assume that the adversary can see all the traffic on the Internet.");
+W("The thread model used for anonymous file sharing in GNUnet assumes that the
adversary is quite powerful.");
+W("In particular, we assume that the adversary can see all the traffic on the
Internet.");
W("And while we assume that the adversary can not break our encryption, we
assume that the adversary has many participating nodes in the network and that
it can thus see many of the node-to-node interactions since it controls some of
the nodes.");
BR();
-W("GNUnet is build on the idea that users can be anonymous if they can hide
their actions in the traffic created by other users.");
+W("The system tries to achieve anonymity based on the idea that users can be
anonymous if they can hide their actions in the traffic created by other
users.");
W("Hiding actions in the traffic of other users requires participating in the
traffic, bringing back the traditional technique of using indirection and
source rewriting.");
W("Source rewriting is required to gain anonymity since otherwise an adversary
could tell if a message originated from a host by looking at the source
address.");
W("If all packets look like they originate from a node, the adversary can not
tell which ones originate from that node and which ones were routed.");
-W("Note that in this midset, any node can decide to break the source-rewriting
paradigm without violating the protocol, as this only reduces the amount of
traffic that a node can hide its own traffic in.");
+W("Note that in this mindset, any node can decide to break the
source-rewriting paradigm without violating the protocol, as this only reduces
the amount of traffic that a node can hide its own traffic in.");
P();
W("If we want to hide our actions in the traffic of other nodes, we must make
our traffic indistinguishable from the traffic that we route for others.");
W("As our queries must have us as the receiver of the reply (otherwise they
would be useless), we must put ourselves as the receiver of replies that
actually go to other hosts; in other words, we must indirect replies.");
-W("Unlike other systems, with GNUnet we do not have to indirect the replies if
we don’t think we need more traffic to hide our own actions.");
+W("Unlike other systems, in anonymous file-sharing as implemented on top of
GNUnet we do not have to indirect the replies if we don’t think we need
more traffic to hide our own actions.");
W("This increases the efficiency of the network as we can indirect less under
higher load.");
+
P();
-
+ANCHOR("deniability");
H4("Deniability");
W("Even if the user that downloads data and the server that provides data are
anonymous, the intermediaries may still be targets.");
@@ -108,70 +182,12 @@
BR();
-W("With GNUnet, this problem does not arise because queries and content are
transmitted in an encrypted format such that intermediaries cannot tell what
the query is for or what the content is about.");
+W("With the file-encoding used by GNUnet's anonymous file-sharing, this
problem does not arise.");
+W("The reason is that queries and replies are transmitted in an encrypted
format such that intermediaries cannot tell what the query is for or what the
content is about.");
W("Mind that this is not the same encryption as the link-encryption between
the nodes.");
-W("In GNUnet, the traffic between the nodes is encrypted on each link to
provide authentication and confidentiality (see below).");
-W("But the queries and the content that the nodes transport over these links
are also encrypted.");
W("GNUnet has encryption on the network layer (link encryption,
confidentiality, authentication) and again on the application layer (provided
by <tt>gnunet-insert</tt>, <tt>gnunet-download</tt>, <tt>gnunet-search</tt> and
<tt>gnunet-gtk</tt>).");
-P();
-H4("Authentication");
-W("As GNUnet requires accounting (see next section), we need to authenticate
all communications.");
-W("This is achieved using an RSA-based exchange of a secret session-key.");
-W("That session-key is then used to encrypt the communication between the two
hosts using Blowfish.");
-W("As only the two participating hosts know the session-key, this
authenticates each packet without requiring signatures.");
-W("Furthermore, encrypted traffic makes any kind of traffic analysis much
harder.");
-BR();
-
-W("In GNUnet, the identity of a host is the hash of its public key.");
-W("For that reason, man-in-the-middle attacks will not break the
authentication or accounting goals.");
-W("Essentially, for GNUnet, the IP of the host does not matter.");
-W("As the public key is the only thing that truly matters, faking an IP, a
port or any other property of the underlying transport protocol is
irrelevant.");
-
-BR();
-
-W("GNUnet uses a special type of message to bind public keys to their current
address.");
-W("For the UDP and TCP transport layers, an address is an IP and a port.");
-W("GNUnet can also use other transport mechanisms (HTTP, SMTP, etc.) which use
various other forms of addresses.");
-W("Note that any node can have multiple addresses for the various transport
mechanisms.");
-
-BR();
-ANCHOR("crypto");
-H4("Cryptography");
-
-W("GNUnet uses 2048 bit RSA keys for the session key exchange and for signing
messages by peers.");
-W("Most researchers in cryptography consider 2048 bit RSA keys as very secure
and practically unbreakable for a very long time unless extraordinary advances
in cryptography are made.");
-W("For the encryption of the files and the symmetric peer-to-peer
communication GNUnet uses 128 bit keys with blowfish.");
-W("Fresh session keys are negotiated for every new connection.");
-W("Again, there is no published technique to break this cipher in any
realistic amount of time.");
-W("Note that GNUnet does not use RSA to encrypt files or ordinary individual
peer-to-peer messages (no sane protocol uses public key cryptography for the
bulk of the messages since public key encryption is extremely expensive
compared to symmetric ciphers; GNUnet follows the well-established practice to
use public key cryptography to exchange an initial symmetric key that is then
used for the rest of the messages).");
-
-
-P();
-H4("Accounting");
-
-W("Most distributed P2P networks suffer from a lack of defenses or precautions
against attacks in the form of freeloading.");
-W("While the intentions of an attacker and a freeloader are different, their
effect on the network is the same; they both render it useless.");
-W("Most simple attacks on networks such as Gnutella involve flooding the
network with traffic, particularly with queries that are, in the worst case,
multiplied by the network.");
-
-BR();
-
-W("In order to ensure that freeloaders or attackers have a minimal impact on
the network, GNUnet must between distinguish good (contributing) nodes from
malicious (freeloading) nodes.");
-W("In GNUnet, every node keeps track of the behavior of every other node it
has been in contact with.");
-W("GNUnet’s economic model ensures that nodes that are not currently
considered to have a surplus in contributions will not be served if the network
load is high.");
-
-P();
-H4("Confidentiality");
-
-W("Adversaries outside of GNUnet are not supposed to know what kind of action
a node is performing, and even participating nodes can never tell what an
action is about (which data is transferred or what the query is for) nor who
initiated the action.");
-W("This helps GNUnet to be hard to compromise even with attacks that use
traffic analysis and malicious nodes in combination.");
-W("Of course, the fact that a node is performing a request will still be
revealed if all other nodes in the network collaborate aganist it.");
-W("In this situation, the only recourse the node has is that the other nodes
may not be able to determine the contents of the action.");
-W("As far as we know, this determination is only possible if the adversary can
guess the contents or break cryptographic primitives.");
-
-P();
-
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/protocol_cs.php3
===================================================================
--- GNUnet-docs/WWW/test/protocol_cs.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/protocol_cs.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -15,10 +15,9 @@
rowIntEntry("(size - 4) bytes of data");
echo "</table>\n";
P();
-W("The message type constants are defined in <tt>gnunet_util.h</tt> and all
have names starting with <tt>CS_PROTO_</tt>.");
+W("The message type constants are defined in <tt>gnunet_protocols.h</tt> and
all have names starting with <tt>CS_PROTO_</tt>.");
W("The suffix <tt>REQUEST</tt> is used for messages from the client to
<tt>gnunetd</tt>.");
W("<tt>REPLY</tt> is used for messages from <tt>gnunetd</tt> to the client.");
-W("While <tt>gnunetd</tt> should not send data without being asked first, the
client must silently ignore REPLY messages that were not requested.");
W("If <tt>gnunetd</tt> receives a REQUEST that it does not understand, it
closes the connection (to prevent the client from blocking on a reply that may
never come).");
BR();
W("See also %s.",
Modified: GNUnet-docs/WWW/test/protocol_p2p_afs.php3
===================================================================
--- GNUnet-docs/WWW/test/protocol_p2p_afs.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/protocol_p2p_afs.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -6,8 +6,8 @@
afslogo();
P();
-ANCHOR("ROUTING");H4("Anonymous Routing");
-W("First, a "correct" implementation of the GNUnet protocol does not
have to implement routing exactly as described henceforth.");
+ANCHOR("ROUTING");H4("Anonymous Routing: GAP");
+W("First, a "correct" implementation of the GAP protocol does not
have to implement routing exactly as described henceforth.");
W("The described algorithm is the best we could come up with so far (while
achieving good anonymity).");
W("Peers can implement a different algorithm and still be protocol
compatible.");
BR();
@@ -16,15 +16,15 @@
W("First, it may decide to just ignore the query.");
W("This is done if the local load is far too high, if the query is expired or
if the query has already been processed recently.");
W("This first question is among the most difficult.");
-W("GNUnet uses a time-to-live per query, which is a relative, possibly
negative lifetime in milliseconds.");
-W("From this timestamp GNUnet computes an absolute time and compares it with
its (finite) routing table.");
+W("GAP uses a time-to-live per query, which is a relative, possibly negative
lifetime in milliseconds.");
+W("From this timestamp GAP computes an absolute time and compares it with its
(finite) routing table.");
W("If the query has less time to live than an existing query in the table, it
is dropped.");
W("Note that this is only an approximative description (lacking aspects like
economics, queries with seen replies, multi-queries, and so on), for details
see the %s.\n",
extlink_("doxygen/html/routing_8c.html#a31",
"code (routing.c, needsForwarding)"));
BR();
-W("Once GNUnet has decided that a query will be processed, it decides on
performing a local lookup.");
+W("Once GAP has decided that a query will be processed, it decides on
performing a local lookup.");
W("Potential replies are send back (with a random delay) if the bandwidth
allocation code permits it.");
W("The code then decides on forwarding the query (with decremented
time-to-live) to a subset of the connected peers.");
W("At most four peers are selected based on a biased random selection.");
@@ -40,7 +40,7 @@
W("The query management then selects suitable recent queries that were so far
not forwarded to the peer in question.");
BR();
-W("If GNUnet receives a reply, it checks its routing table for a matching
entry.");
+W("If GAP receives a reply, it checks its routing table for a matching
entry.");
W("It is possible that there is no corresponding query in the routing table
(anymore), in which case the reply is dropped (or, given enough space,
replicated in the local datastore anyway).");
W("If there is a routing table entry, it is used to evaluate the economic
importance of the reply, which again may or may not lead to replicating the
reply in the local datastore.");
W("Furthermore, the reply is scheduled for delivery to all peers (and local
client processes) waiting for the response.");
@@ -56,154 +56,57 @@
extlink_("download/ecrs.ps", "content encoding"));
P();
-W("The anonymous file-sharing service (AFS) defines the following messages:");
-?>
-<ul>
- <li><a href="#QUERY">P2P_QUERY</a></li>
- <li><a href="#3HASH">P2P_RESULT_3HASH</a></li>
- <li><a href="#CHK">P2P_RESULT_CHK</a></li>
- <li><a href="#NSQUERY">P2P_NSQUERY</a></li>
- <li><a href="#SBLOCK">P2P_RESULT_SBLOCK</a></li>
-</ul>
-<?php
-
-
+W("The GAP protocol defines the following messages:");
+echo "<ul>";
+LI(intlink_("#QUERY","GAP_QUERY"));
+LI(intlink_("#RESULT","GAP_RESULT"));
+echo "</ul>";
ANCHOR("QUERY");H4("QUERY");
-W("GNUnet’s anonymous file sharing uses two basic types of queries,
queries that search unknown content and queries for downloading.");
-W("The search queries contain the triple-hash of the keyword and the response
is a %s message.",
- extlink_("#3HASH","3HASH"));
-W("The download queries contain the hash of the encrypted block, the response
is a %s message.",
- extlink_("#CHK","CHK"));
-W("In their simple form, both types of queries can not be distinguished, only
after a reply was found, the responder can tell which form of query was
encountered.");
-BR();
-W("The download-query has a variant, the multi-query with super-hash.");
-W("In this form, a single query message contains multiple hash-code requesting
multiple blocks of the same file.");
-W("A multi-query message does not have a different protocol number but can be
identified by looking at the size-field of the query message, which is 32+n*20
bytes.");
-W("If n is greater than 1, the query must be a multi-query.");
-W("A multi-query groups multiple hash codes from the same IBlock.");
-W("The first hash code of a multi-query is called the "super"
hash.");
-W("It is the hash of the concatenation of all hash-codes of the IBlock.");
-W("It is followed by up to 25 hash codes from that IBlock.");
-W("The super-hash can be used to speed-up the lookup process since it can be
treated as a summary of the other hash codes that follow.");
-W("Note that even if the IBlock had 25 hash codes, not all must be included in
the multi-query.");
-W("Thus the super-hash can typically not be obtained from the following
queries.");
-P();
-W("Multi-queries can not be used for queries that search for content.");
+W("GAP queries consists of several GAP specific fields, a hash which is used
for routing and for the database lookup, and possibly additional hash codes.");
+W("The semantics of these additional hash codes depend on the query type.");
+W("As far as GAP is concerend, the query type and those additional hash codes
are merely passed along.");
+W("Peers that receive a GAP QUERY can respond with one or more GAP REPLY
messages.");
+W("The GAP protocol uses the ECRS-core to verify that a response matches a
query.");
+W("The details of how replies are verified are discussed in the %s paper.",
+ extlink_("download/ecrs.ps","ECRS"));
echo "<table border=3>\n";
include("bittable.inc");
-rowSizeType("32+20*n","16");
+rowSizeType("36+20*n","16");
+rowIntEntryNBO("type");
rowIntEntryNBO("priority");
rowIntEntryNBO("time-to-live");
fiveRowIntEntries("return to");
-fiveRowIntEntries("query [n]");
+fiveRowIntEntries("query [n > 1]");
echo "</table>\n";
-W("Note that a query with only one hash code can be both the triple-hash for a
search or the hash of the encrypted block for a download.");
-W("The receiver can not tell the difference until a reply is found.");
-W("Depending on if the query matches a triple-hash or a CHK query, the
receiver sends back a %s or a %s reply.",
- ARRAY(extlink_("#CHK","CHK"),
- extlink_("#3HASH","3HASH")));
+W("The priority is used to determine the value of the query.");
+W("Queries with lower priorities are more likely to be dropped.");
+W("For details see the paper on the %s for GNUnet.",
+ extlink_("download/ebe.ps", "economic model"));
+W("The time-to-live determines how long the peer is going to route replies.");
+W("Replies are transmitted to the peer that is specified in the <tt>return
to</tt> field.");
+W("For details see the %s paper.",
+ extlink_("download/gap.ps", "GAP"));
+W("The type field and all hash codes after the first query are only passed
along and used by the %s.",
+ extlink_("download/ecrs.ps", "ECRS encoding"));
P();
-ANCHOR("3HASH");H4("3HASH");
-W("A 3HASH content message is a reply of a GNUnet node to a %s that is a
search.",
+ANCHOR("RESULT");H4("RESULT");
+W("A GAP RESULT message is a reply of a GNUnet node to a %s that was used to
request a specific block of a file.",
extlink_("#QUERY","QUERY"));
-W("The difference between a search and a download is that there can be
multiple results to a search, whereas there can only be one, unique result for
a download.");
-W("The 3HASH reply contains the encrypted data E<sub>K</sub>D and the
double-hash H<sup>2</sup> = H(K).");
-W("The encrypted data is always 1k in size.");
-W("The receiver computes the double-hash and verifies that it matches the
triple-hash of the %s that was originally sent.",
- extlink_("#QUERY","QUERY"));
-W("If that is the case, the receiver trusts that the content matches the query
(the sender was able to invert the hash) and forwards it to the next
destination.");
-BR();
-
-W("%s may only be exchanged via an encrypted channel (to make traffic analysis
harder).",
- extlink_("doxygen/html/structAFS__p2p__3HASH__RESULT.html","3HASH
messages"));
+W("The GAP RESULT message contains the type and first hash code from the
respective QUERY.");
+W("Note that the type is necessary since the QUERY may specify <em>any</em>
for the type.");
+W("The data portion of the result depends on the query type and is again
defined by ECRS.");
W("See also the %s and the %s for the way data is transmitted in GNUnet.",
ARRAY(extlink_("download/esed.ps","GNUnet encoding paper"),
extlink_("encoding.php3","encoding page")));
echo "<table border=3>\n";
include("bittable.inc");
-rowSizeType("1048","17");
-fiveRowIntEntries("proof (double hash)");
-rowIntEntry("1024 octets of encrypted content");
+rowSizeType("28+N","17");
+rowIntEntry("N bytes content");
echo "</table>\n";
-P();
-ANCHOR("CHK");H4("CHK");
-W("A CHK content message is a reply of a GNUnet node to a %s that was used to
download a specific block of a file.",
- extlink_("#QUERY","QUERY"));
-W("It contains the encrypted data E<sub>H(D)</sub>(D).");
-W("The hash of the encrypted data must match the original query,
H(E<sub>H(D)</sub>(D)).");
-W("The encrypted data is always 1k in size.");
-W("The plaintext was padded with zeros if necessary.");
-W("The receiver computes the hash of the content and verifies that it matches
the query of the %s that was originally sent.",
- extlink_("#QUERY","QUERY"));
-W("If that is the case, the receiver forwards the reply to the next
destination.");
-BR();
-W("%s may only be exchanged via an encrypted channel (to make traffic analysis
harder).",
- extlink_("doxygen/html/structAFS__p2p__CHK__RESULT.html","CHK messages"));
-
-W("See also the %s and the %s for the way data is transmitted in GNUnet.",
- ARRAY(extlink_("download/esed.ps","GNUnet encoding paper"),
- extlink_("encoding.php3","encoding page")));
-
-echo "<table border=3>\n";
-include("bittable.inc");
-rowSizeType("1048","18");
-rowIntEntry("1024 octets of encrypted content");
-echo "</table>\n";
-
-
-P();
-ANCHOR("NSQUERY");H4("NS-QUERY");
-W("An NSQuery is a query for content in a specific namespace.");
-W("It differs from ordinary queries in that it also contains the identifier of
the namespace N.");
-W("Furthermore, an NSQUERY can only contain one identifier that is
requested.");
-W("The SBlock identifier R that is used in an NSQUERY is derived from the
namespace identifier N and the key K that is used to encrypt the corresponding
SBlock by the following formula:");
-P();
-PRE("R := H(K) XOR N");
-P();
-W("The format of an NSQUERY is:");
-echo "<table border=3>\n";
-include("bittable.inc");
-rowSizeType("52","19");
-rowIntEntryNBO("priority");
-rowIntEntryNBO("time-to-live");
-fiveRowIntEntries("N (namespace id)");
-fiveRowIntEntries("R (SBlock identifier)");
-echo "</table>\n";
-
-P();
-ANCHOR("SBLOCK");H4("SBLOCK");
-W("An SBLOCK message is the response to a prior %s.",
- extlink_("#NSQUERY","NSQUERY."));
-W("The basic format of an SBLOCK message is:");
-
-echo "<table border=3>\n";
-include("bittable.inc");
-rowSizeType("1028","20");
-rowIntEntry("encrypted data (484 bytes)");
-fiveRowIntEntries("R (routing identifier)");
-rowIntEntryVerbatim(extlink_("doxygen/html/structSignature.html",
- "RSA signature (256 octets)"));
-row(shortEntryVerbatim_(extlink_("doxygen/html/structPublicKey.html","Public
Key") .
- " " . W_("length of N + E + 2 (256+2+2 = 260)") .
NBO_()),
- shortEntryVerbatim_(W_("Public Key, length of N (256)") . NBO_()));
-rowIntEntry("Public Key, N (256 octets)");
-row(shortEntry_("Public Key, E"),
- shortEntry_("padding (must be 0)"));
-echo "</table>\n";
-
-W("The receiver of an SBLOCK first verifies that the signature correctly signs
the first 504 bytes following the header (encrypted data plus routing
identifier).");
-W("Then the receiver can compute the namespace identifier N which is the hash
of the public key.");
-W("Finally, now knowing R and N, the peer checks the routing table if it
contains a matching NSQUERY and possibly forwards the response to the next
hop.");
-W("Note that intermediaries learn nothing about the contents of the encrypted
portion of the %s.",
- extlink_("doxygen/html/structSBlock.html",
- "SBlock"));
-W("In particular, only the end-points can decide about the semantics of the
SBlock with respect to expiration or updates.");
-
include("html_footer.php3");
-?>
-
+?>
\ No newline at end of file
Modified: GNUnet-docs/WWW/test/protocol_p2p_core.php3
===================================================================
--- GNUnet-docs/WWW/test/protocol_p2p_core.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/protocol_p2p_core.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -6,17 +6,15 @@
ANCHOR("protocol");H3("GNUnet Protocol: node-to-node: core messages");
-W("The GNUnet node-to-node (peer-to-peer) procotol currently defines eight
different messages that must be supported by all peers:");
+W("The GNUnet node-to-node (peer-to-peer) procotol currently defines seven
different messages that must be supported by all peers:");
echo "<ul>\n";
LIV(extlink_("#HELO","HELO"));
LIV(extlink_("#SKEY","SKEY"));
LIV(extlink_("#PING","PING"));
LIV(extlink_("#PONG","PONG"));
-LIV(extlink_("#TIMESTAMP","TIMESTAMP"));
-LIV(extlink_("#SEQUENCE","SEQUENCE"));
-LIV(extlink_("#NOISE","NOISE"));
LIV(extlink_("#HANGUP","HANGUP"));
-LIV(extlink_("#CAPABILITY","CAPABILITY"));
+LIV(extlink_("#FRAGMENT","FRAGMENT"));
+LIV(extlink_("#NOISE","NOISE"));
echo "</ul>\n";
W("The most basic sequence is that a host sends a %s to any other host to
notify it of its existance on the network.",
extlink_("#HELO","HELO"));
@@ -25,14 +23,15 @@
W("The receiver of the PING always sends back a %s to confirm receit.",
extlink_("#PONG","PONG"));
BR();
-W("Later, either of the hosts sends the other host a %s message to initiate a
connection.",
- extlink_("#SKEY","SKEY"));
-W("The receiver acknowledges this with a %s, just this time using the
encrypted channel that was established with the session key.",
- extlink_("#PING","PING"));
-W("Again, the PING is answered with a %s, which is also encrypted.",
+W("Later, either of the hosts sends the other host an %s message with an
encrypted %s to initiate a connection.",
+ ARRAY(extlink_("#SKEY","SKEY"),
+ extlink_("#PING", "PING")));
+W("The receiver acknowledges this with another SKEY, which also contains a new
PING and a %s that corresponds to the PING that was received earlier.",
extlink_("#PONG","PONG"));
-W("If no PING is received, the initiator can send another SKEY.");
-W("If no PONG is received, the responder can send another PING.");
+W("Again, the PING is answered with an encrypted %s.",
+ extlink_("#PONG","PONG"));
+W("If no PONG is received, either side can send another SKEY and PING.");
+W("If an SKEY is repeated after a short period of time, the secret key should
not be changed.");
W("This sequence is pretty much equivalent to the initial three-way handshake
in TCP.");
P();
W("The following diagram illustrates a possible sequence of messages:");
@@ -45,9 +44,6 @@
P();
W("Nodes then exchange application specific mesages.");
-W("%s and %s messages can be used to prevent a malicious adversary to replay
packets.",
- ARRAY(extlink_("#TIMESTAMP","TIMESTAMP"),
- extlink_("#SEQUENCE","SEQUENCE")));
W("%s must be used to make packets look uniform in size.",
extlink_("#NOISE","NOISE"));
W("The MTU is determined by the transport layer and advertised in the HELO
message.");
@@ -59,16 +55,26 @@
P();
W("A packet exchanged between GNUnet hosts can contain any number of messages
(only limited by the MTU of the transport layer).");
P();
+
+W("In addition to the message itself, the transport mechanism must communicate
the identity of the sender.");
W("The transport layer implementation is responsible for encapsulating the
message appropriately.");
-W("In addition to the message itself, the transport mechanism must
communicate:");
-echo "<ul>\n";
-LI("The sender identity (hash of public key)");
-LI("If the message is in plaintext or encrypted");
-LI("The CRC of the (plaintext) message");
-LI("The size of the message");
-echo "</ul>\n";
-W("Depending on the implementation of the transport mechanism, not all of
these must be transmitted for each message, for example, a stateful transport
such as TCP may only transmit the sender identity once and use special messages
to switch between plaintext and encrypted messages.");
+W("Depending on the implementation of the transport mechanism, the sender
identity may not be transmitted for each message.");
+W("For example, a stateful transport such as TCP may only transmit the sender
identity once at the beginning of the exchange.");
P();
+W("In addition to encrypting the message, the GNUnet core also extends each
message with additional information.");
+W("The GNUnet core adds a checksum, information about bandwidth limitations
and sequencing information to prevent processing messages twice.");
+W("The encryption, decryption and verification is done by the GNUnet core and
neither the application nor the transport code need to worry about it.");
+W("The format of the header that is added by the GNUnet core to each message
is the following:");
+echo "<table border=3>\n";
+include("bittable.inc");
+fiveRowIntEntries("hash of the plaintext (RipeMD160)");
+rowIntEntryNBO("sequence number, 0 for plaintext");
+rowIntEntryNBO("timestamp (seconds), 0 for plaintext");
+rowIntEntryNBO("desired bandwidth (bytes per minute), 0 for plaintext");
+echo "</table>\n";
+P();
+W("This header is followed by individual messages.");
+W("Note again that the identity of the sender must also be communicated, but
how this is done depends on the specific transport.");
P();
ANCHOR("HELO");H4("HELO");
@@ -111,7 +117,8 @@
echo "<table border=3>\n";
include("bittable.inc");
rowSizeType("556 + " . W_("sender address size"),"0");
-rowIntEntryVerbatim(extlink_("doxygen/html/structSignature.html","RSA
signature (256 octets)"));
+rowIntEntryVerbatim(extlink_("doxygen/html/structSignature.html",
+ "RSA signature (256 octets)"));
row(shortEntryVerbatim_(extlink_("doxygen/html/structPublicKey.html","Public
Key") .
" " . W_("length of N + E + 2 (256+2+2 = 260)") .
NBO_()),
shortEntryVerbatim_(W_("Public Key, length of N (256)") . NBO_()));
@@ -120,9 +127,9 @@
shortEntry_("padding (must be 0)"));
fiveRowIntEntries("sender identity");
rowIntEntryNBO("expiration time");
+rowIntEntryNBO("MTU");
row(shortEntry_("sender address size (octets)", NBO_()),
shortEntry_("transport protocol number", NBO_()));
-rowIntEntryNBO("MTU");
rowIntEntryNBO("sender address (sender address size bytes)");
echo "</table>\n";
P();
@@ -131,16 +138,25 @@
W("Sessionkeys are 128 bit keys for blowfish, a symmetric cipher that is used
for all communication between GNUnet nodes except %ss and SKEYs themselves (for
those, RSA with 2048 bit keys is used).",
extlink_("#HELO","HELO"));
BR();
-W("A session between two GNUnet nodes is the existance of a common, active
sessionkey between the two nodes.");
+W("A session between two GNUnet nodes is the existance of a pair of
sessionkeys between the two nodes that have been confirmed by receiving an
encrypted PONG response to an encrypted PING challenge.");
W("Even if the underlying protocol may be connectionless, the notion of a
session is still meaningful for GNUnet.");
BR();
W("A session key exchange may be initiated by either node.");
W("SKEYS are always encrypted with the public key of the receiving node.");
-W("They are usually not send through an encrypted channel (if nodes that
already have an SKEY pair decide to exchange a fresh sessionkey, that key may
be send via the encrypted channel; even in that case, the key must also be
encrypted with the public key of the receiving node).");
-P();
W("The sender of a session key not only encrypts the key with the public key
of the receiver but also signs it (together with an creation time) with its own
private key.");
-W("The sender must remember the sessionkey and can start using it after
receiving an acknowledgement (in the form of a %s from the receiver.",
- extlink_("#PING","PING"));
+W("The transmitted key is the key that the sender will use in the future.");
+W("An SKEY always contains an encrypted PING message.");
+W("An SKEY may furthermore contain an encrypted PONG message, in particular if
the SKEY is transmitted in response to an SKEY+PING message.");
+W("The encrypted portion is part of the SKEY message since the overall message
is still in plaintext.");
+W("While the symmetric key is encrypted and signed using RSA, the PING (and
PONG) are encrypted with the symmetric cipher.");
+W("SKEY messages are usually not send through an encrypted channel.");
+W("If nodes that already have an SKEY pair decide to exchange a fresh
sessionkey, that key may be send via the encrypted channel.");
+W("However, even in that case, the key must also be encrypted with the public
key of the receiving node.");
+P();
+
+W("The sender must remember the sessionkey and can start using it after
receiving an acknowledgement in the form of a %s from the receiver.",
+ extlink_("#PONG","PONG"));
+W("The PONG must be encrypted and can be transmitted either as part of the
symmetrically encrpyted portion of another SKEY or as an ordinary encrypted
message.");
BR();
W("The format of an %s is the following:",
extlink_("doxygen/html/structSKEY__Message.html","SKEY message"));
@@ -148,19 +164,22 @@
echo "<table border=3>\n";
include("bittable.inc");
-rowSizeType("520","1");
+rowSizeType("520+N","1");
rowIntEntryNBO("creation time (not expiration!)");
rowIntEntry("RSA Encrypted data (256 octets)");
rowIntEntry("Signature (256 octets)");
+rowIntEntry("N bytes symmetrically encrypted PING (and possibly PONG)");
echo "</table>\n";
+W("Note that N is always either 28 or 56 bytes.");
-W("Notice that while SKEY is not aligned, there should be nothing following an
SKEY Message in a packet since afterwards the new sessionkey is used.");
P();
ANCHOR("PING");H4("PING");
W("PINGs are used to test if a node receives messages correctly.");
-W("PINGs are exchanged in encrypted form and in plaintext.");
+W("PINGs are exchanged in encrypted messages, as part of SKEYs and in
plaintext.");
W("The receit of a PING must be answered by a PONG with identical body (the
receiver just changes the type).");
+W("An encrypted PING must be answered by an encrypted PONG.");
+W("It does not matter if the encrypted PONG is encrypted as part of an SKEY or
part of an ordinary encrypted message.");
W("The challenge number in a PING is a random number that is used to make it
impractical for an adversary to guess the contents of the PING and thus hard to
fake a PONG response.");
BR();
W("The identity stored in the PING is the identity of the receiver.");
@@ -168,7 +187,7 @@
echo "<table border=3>\n";
include("bittable.inc");
-rowSizeType("24","2");
+rowSizeType("28","2");
fiveRowIntEntries("receiver identity");
rowIntEntryNBO("challenge");
echo "</table>\n";
@@ -180,50 +199,49 @@
echo "<table border=3>\n";
include("bittable.inc");
-rowSizeType("24","3");
+rowSizeType("28","3");
fiveRowIntEntries("receiver identity");
rowIntEntryNBO("challenge");
echo "</table>\n";
-
P();
-ANCHOR("TIMESTAMP");H4("TIMESTAMP");
-W("TIMESTAMPs can be used by GNUnet nodes to make replay attacks harder.");
-W("If a message contains a TIMESTAMP, the receiver checks that the current
time is before the given time.");
-W("If that is not the case, the rest of the message is discarded silently.");
-BR();
-W("Senders are advised to use rather generous timespans for the timestamps
because GNUnet nodes may not be perfectly synchronized in time.");
-W("The current implementation honors timestamps but does not generate them
itself.");
-W("%s numbes are used to guard against replay attacks instead.",
- extlink_("#SEQUENCE","SEQUENCE"));
-W("For UDP with a low chance of reordered messages, this is appropriate.");
-W("Other transport protocols (like E-Mail) may work better with TIMESTAMPs.");
-BR();
-W("The format of a timestamp message is:");
+
+ANCHOR("HANGUP");H4("HANGUP");
+W("The format of the HANGUP message is:");
+
echo "<table border=3>\n";
include("bittable.inc");
-rowSizeType("8","4");
-rowIntEntryNBO("expiration time (seconds after 1970)");
+rowSizeType("24","4");
+fiveRowIntEntries("sender identity");
echo "</table>\n";
-W("Timestamps numbers may only be used in encrypted traffic (HELOs and SKEYS
have another form of timestamps integrated into the signed part of the
message).");
-
+W("When a HANGUP message is received, the node must stop using the current
sessionkey (assuming the receiver is the other node involved in the
corresponding session with the sender).");
+W("If the receiving node desires further communication with the sender, a new
sessionkey must be exchanged.");
P();
-ANCHOR("SEQUENCE");H4("SEQUENCE");
-W("The format of a sequence number message is:");
+
+
+ANCHOR("FRAGMENT");H4("FRAGMENT");
+W("Fragments are used to communicate messages that are larger than the MTU of
the transport.");
+W("The peer sending fragments should make sure to transmit all fragments in
sequence.");
+W("No peer is expected to reassemble multiple fragments for the same sender at
any time.");
+W("If the receiving peer does not receive all parts of a fragment, the entire
message has to be discarded.");
+W("The messages constructed from fragments cannot be larger than 64k.");
+W("The format for fragments is:");
+
echo "<table border=3>\n";
include("bittable.inc");
-rowSizeType("8","5");
-rowIntEntryNBO("sequence number");
+rowSizeType("12 + N","5");
+rowIntEntryNBO("fragment id");
+row(shortEntry_("offset"),
+ shortEntry_("total size"));
+rowIntEntry("N bytes of data");
echo "</table>\n";
-
-W("A node may keep track of the last sequence number that another node was
using.");
-W("If it receives a packet with a lower sequence number, that packet must be
discarded.");
-W("Whenever a sessionkey exchange takes place, this last sequence number must
be reset to 0.");
-W("A sequence number of 0 is invalid.");
-W("Sequence numbers are unsigned 32 bit integers.");
-W("Sequence numbers may only be used in encrypted traffic.");
+W("The N bytes of data from the fragment belong to a larger message of the
given total size and are to be placed at the given offset.");
+W("Unlike IP fragmentation, GNUnet fragments should never be overlapping.");
P();
+
+
+
ANCHOR("NOISE");H4("NOISE");
W("Noise is used to make it harder for adversaries to perform traffic
analysis.");
W("A node receiving noise should just silently ignore it.");
@@ -237,45 +255,10 @@
rowIntEntry("noise");
echo "</table>\n";
-W("The number of bytes of noise should be a multiple of 4 to preserve
alignment, except at the end of a packet where perfectly identical packet sizes
are more important.");
+W("The number of bytes of noise should be a multiple of 4 to preserve
alignment.");
W("The noise in the packet should be (pseudo) random.");
P();
-ANCHOR("HANGUP");H4("HANGUP");
-W("The format of the HANGUP message is:");
-
-echo "<table border=3>\n";
-include("bittable.inc");
-rowSizeType("24","7");
-fiveRowIntEntries("sender identity");
-echo "</table>\n";
-
-W("When a HANGUP message is received, the node must stop using the current
sessionkey (assuming the receiver is the other node involved in the
corresponding session with the sender).");
-W("If the receiving node desires further communication with the sender, a new
sessionkey must be exchanged.");
-
-
-P();
-ANCHOR("CAPABILITY");H4("CAPABILITY");
-
-W("With a CAPABILITY message a peer notifies another peer about its message
processing capabilities.");
-W("The only capability type currently defined is the amount of bandwidth (per
minute) available for receiving.");
-W("It is used to notify another peer to not send more traffic than a certain
amount.");
-W("Initially peers severely limit the amount of traffic they transmit on each
connection, thus this message is used in practice to raise that limit.");
-W("The limit for any given connection is asymmetric and can be changed
(increased or lowered) at any time.");
-W("Since messages can be lost, CAPABILITY messages cannot be expected to go
into full effect always or instantly.");
-W("Nevertheless, peers that fail to honor restrictions imposed by CAPABILITY
messages on a continuous basis are likely to have their connections dropped by
the other side.");
-W("The format of the CAPABILITY message is:");
-
-echo "<table border=3>\n";
-include("bittable.inc");
-rowSizeType("12","8");
-rowIntEntry("capability type (CAP_ constants)");
-rowIntEntry("value");
-echo "</table>\n";
-
-W("When a HANGUP message is received, the node must stop using the current
sessionkey (assuming the sender that is given in the message matches the sender
of the message).");
-W("If further communication is desired, a new sessionkey may be exchanged.");
-
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/protocol_p2p_rpc.php3
===================================================================
--- GNUnet-docs/WWW/test/protocol_p2p_rpc.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/protocol_p2p_rpc.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -61,7 +61,7 @@
echo "</table>\n";
W("The format of the arguments is first a zero-terminated parameter name,
followed by the size of the parameter (as an unsigned int in network byte
order) followed by the actual argument.");
W("The helper functions defined in %s should be used to serialize and
deserialize the arguments.",
- extlink_("http://ovmj.org/GNUnet/doxygen/html/gnunet__rpc__service_8h.html",
+ extlink_("doxygen/html/gnunet__rpc__service_8h.html",
"gnunet_rpc_service.h"));
W("Each peer is expected to use strictly monotonically increasing sequence
numbers.");
W("There are currently no provisions to handle the integer overflow at
2<sup>32</sup>-1.");
@@ -89,7 +89,7 @@
W("The sequence number must be identical to the number from the REQ message.");
W("The format of the return values is first a zero-terminated return value
identifier, followed by the size of the return value (as an unsigned int in
network byte order) followed by the actual value.");
W("The helper functions defined in %s should be used to serialize and
deserialize the return values.",
- extlink_("http://ovmj.org/GNUnet/doxygen/html/gnunet__rpc__service_8h.html",
+ extlink_("doxygen/html/gnunet__rpc__service_8h.html",
"gnunet_rpc_service.h"));
W("Note that GNUnet RPCs can have multiple return values.");
W("The most common error code returned by the RPC service is to indicate that
no function under the given name has been registered at this peer.");
@@ -108,4 +108,4 @@
P();
include("html_footer.php3");
-?>
\ No newline at end of file
+?>
Modified: GNUnet-docs/WWW/test/protocol_p2p_tracekit.php3
===================================================================
--- GNUnet-docs/WWW/test/protocol_p2p_tracekit.php3 2005-04-24 13:12:51 UTC
(rev 686)
+++ GNUnet-docs/WWW/test/protocol_p2p_tracekit.php3 2005-04-25 18:48:28 UTC
(rev 687)
@@ -25,7 +25,7 @@
ANCHOR("PROBE");H4("PROBE");
W("The format of the %s is:",
-
extlink_("http://ovmj.org/GNUnet/doxygen/html/structTRACEKIT__p2p__PROBE.html",
"PROBE message"));
+ extlink_("doxygen/html/structTRACEKIT__p2p__PROBE.html", "PROBE message"));
echo "<table border=3>\n";
include("bittable.inc");
rowSizeType("40","36");
@@ -50,7 +50,7 @@
ANCHOR("REPLY");H4("REPLY");
W("The format of the %s is:",
-
extlink("http://ovmj.org/GNUnet/doxygen/html/structTRACEKIT__p2p__REPLY.html",
"REPLY message"));
+ extlink("doxygen/html/structTRACEKIT__p2p__REPLY.html", "REPLY message"));
echo "<table border=3>\n";
include("bittable.inc");
rowSizeType("size","37");
@@ -68,4 +68,4 @@
P();
include("html_footer.php3");
-?>
\ No newline at end of file
+?>
Modified: GNUnet-docs/WWW/test/scripts.php3
===================================================================
--- GNUnet-docs/WWW/test/scripts.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/scripts.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -4,4 +4,3 @@
include("scripts.inc");
}
?>
-
Modified: GNUnet-docs/WWW/test/states.fig
===================================================================
--- GNUnet-docs/WWW/test/states.fig 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/states.fig 2005-04-25 18:48:28 UTC (rev 687)
@@ -39,13 +39,13 @@
4 0 0 50 0 0 20 0.0000 4 195 795 3600 3600 PONG\001
4 0 0 50 0 0 20 0.0000 4 195 675 3600 3000 PING\001
4 0 0 50 0 0 20 0.0000 4 195 1215 3600 8100 HANGUP\001
-4 0 0 50 0 0 20 0.0000 4 195 765 3600 5100 SKEY\001
-4 0 0 50 0 0 20 0.0000 4 195 675 3600 5700 PING\001
4 0 0 50 0 0 20 0.0000 4 195 1065 6300 9150 AWARE\001
4 0 0 50 0 0 20 0.0000 4 195 1065 975 9300 AWARE\001
4 0 0 50 0 0 20 0.0000 4 195 930 1050 1875 START\001
4 0 0 50 0 0 20 0.0000 4 195 1065 6375 1875 AWARE\001
4 0 0 50 0 0 20 0.0000 4 195 1065 900 4575 AWARE\001
4 0 0 50 0 0 20 0.0000 4 195 525 1200 7650 EST\001
+4 0 0 50 0 0 20 0.0000 4 195 525 6600 6675 EST\001
+4 0 0 50 0 0 20 0.0000 4 195 1590 3600 5100 SKEY+PING\001
4 0 0 50 0 0 20 0.0000 4 195 795 3675 7050 PONG\001
-4 0 0 50 0 0 20 0.0000 4 195 525 6600 6675 EST\001
+4 0 0 50 0 0 20 0.0000 4 195 2535 3075 5700 SKEY+PING+PONG\001
Modified: GNUnet-docs/WWW/test/states.png
===================================================================
(Binary files differ)
Modified: GNUnet-docs/WWW/test/translate.php
===================================================================
--- GNUnet-docs/WWW/test/translate.php 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/translate.php 2005-04-25 18:48:28 UTC (rev 687)
@@ -22,16 +22,24 @@
echo "Database is down. Cannot edit translations.";
die();
}
-$title = "WWW translation";
-$description = "Help translating this webpage.";
-generateLanguageBar();
+$text = $_REQUEST['text'];
+$back = $_REQUEST['back'];
+
+DOCTYPE("HTML", "Transitional");
+echo "<html><head>\n";
+echo "<title>";
+TRANSLATE("WWW translation");
+echo "</title>";
+echo "<meta name=\"description\" content=\"";
+TRANSLATE("Help translating this webpage.");
+echo "\">";
+echo "</head><body>";
if ($lang == "English") {
echo "Cannot translate to English.";
die();
}
-
H2("Original Text");
-if (get_magic_quotes_gpc()) $text = stripslashes($text);
+// if (get_magic_quotes_gpc()) $text = stripslashes($text);
echo $text;
H2("Translation");
W("Destination language: ");
@@ -41,8 +49,10 @@
echo "<input type=hidden name=\"text\" value=\"" . urlencode($text) . "\">\n";
echo "<input type=hidden name=\"xlang\" value=\"$xlang\">\n";
echo "<input type=hidden name=\"back\" value=\"$back\">\n";
-?>
-charset:<select size="1" name="charset">
+/*
+P();
+W("Character set:");
+<select size="1" name="charset">
<option value="UTF-8">Unicode UTF-8 encoding</option>
<option selected value="ISO-8859-1">ISO-8859-1 Western European,
Latin-1</option>
<option value="ISO-8859-15">ISO-8859-15 Extended Western European</option>
@@ -54,8 +64,10 @@
<option value="GB2312">GB2312 Simplified Chinese</option>
<option value="Shift-JIS">Shift-JIS Japanese</option>
<option value="EUC-JP">EUC-JP Japanese</option>
-</select><br>
-Translated text:<input size="80" maxlength="65535" name="translation">
+</select><br> */
+W("Translated text:");
+?>
+<input size="80" maxlength="65535" name="translation">
<input type=submit value="I hereby give this translation into the Public
Domain (commit)">
</form>
<?php
@@ -109,4 +121,4 @@
generateFooter();
echo "</body></html>";
-?>
+?>
\ No newline at end of file
Modified: GNUnet-docs/WWW/test/user_afs.php3
===================================================================
--- GNUnet-docs/WWW/test/user_afs.php3 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/user_afs.php3 2005-04-25 18:48:28 UTC (rev 687)
@@ -8,38 +8,38 @@
<ul>
<li><?php extlink("#concepts","Concepts"); ?>
<ul>
- <li><?php extlink("#files","Files"); ?></li>
- <li><?php extlink("#keywords","Keywords"); ?></li>
- <li><?php extlink("#directories","Directories"); ?></li>
- <li><?php extlink("#namespaces","Namespaces"); ?></li>
- <li><?php extlink("#advertisements","Advertisements"); ?></li>
- <li><?php extlink("#collections","Collections"); ?></li>
- <li><?php extlink("#example","Example"); ?></li>
- </ul></li>
-
- <li><?php extlink("#configuration","Configuration"); ?>
+<?php
+ LI(extlink_("#files","Files"));
+ LI(extlink_("#keywords","Keywords"));
+ LI(extlink_("#directories","Directories"));
+ LI(extlink_("#namespaces","Namespaces"));
+ LI(extlink_("#advertisements","Advertisements"));
+ LI(extlink_("#collections","Collections"));
+ LI(extlink_("#example","Example"));
+?>
+</ul></li>
+<li><?php extlink("#configuration","Configuration"); ?>
<ul>
<li><?php extlink("#mysql","Setting up the mysql database"); ?></li>
</ul></li>
<li><?php extlink("#afscommands","Commands for Anonymous File Sharing"); ?>
<ul>
- <li><?php extlink("#gnunetinsert","gnunet-insert"); ?></li>
- <li><?php extlink("#gnunetsearch","gnunet-search"); ?></li>
- <li><?php extlink("#gnunetdownload","gnunet-download"); ?></li>
- <li><?php extlink("#gnunetdelete","gnunet-delete"); ?></li>
- <li><?php extlink("#gnunetdirectory","gnunet-directory"); ?></li>
- <li><?php extlink("#gnunetpseudonym","gnunet-pseudonym"); ?></li>
- <li><?php extlink("#GUI","gnunet-gtk"); ?></li>
- </ul>
- </li>
-</ul>
<?php
+ LI(extlink_("#gnunetinsert","gnunet-insert"));
+ LI(extlink_("#gnunetsearch","gnunet-search"));
+ LI(extlink_("#gnunetdownload","gnunet-download"));
+ LI(extlink_("#gnunetdelete","gnunet-delete"));
+ LI(extlink_("#gnunetdirectory","gnunet-directory"));
+ LI(extlink_("#gnunetpseudonym","gnunet-pseudonym"));
+ LI(extlink_("#GUI","gnunet-gtk"));
+echo "</ul></li></ul>\n";
-
+P();
ANCHOR("concepts"); H3("Concepts");
W("Sharing files in GNUnet is not quite as simple as in traditional file
sharing systems.");
+W("For example, it is not sufficient to just place files into a specific
directory to share them.");
W("In addition to anonymous routing GNUnet attempts to give users a better
experience in searching for content.");
W("GNUnet uses cryptography to safely break content into smaller pieces that
can be obtained from different sources without allowing participants to corrupt
files.");
W("GNUnet makes it difficult for an adversary to send back bogus search
results.");
@@ -49,8 +49,9 @@
ANCHOR("files"); H4("Files");
W("A file in GNUnet is just a sequence of bytes.");
-W("Any file-format is allowed, but GNUnet is currently limited to files that
are smaller than 4 GB.");
-W("GNUnet itself never interprets the contents of shared files, except when
using <tt>libextractor</tt> to obtain keywords.");
+W("Any file-format is allowed and the maximum file size is theoretically
2<sup>64</sup> bytes, except that it would take an impractical amount of time
to share such a file.");
+W("GNUnet itself never interprets the contents of shared files, except when
using %s to obtain keywords.",
+ intlink_("/libextractor/index.php", "libextractor"));
ANCHOR("keywords"); H4("Keywords");
W("Keywords are the most simple mechanism to find files on GNUnet.");
@@ -58,10 +59,11 @@
W("Keywords are never transmitted in plaintext, for details see the %s paper.",
extlink_("download/ecrs.ps", "ECRS"));
W("Since providing keywords by hand for each shared file is tedious, GNUnet
uses %s to help automate this process.",
- intlink_("http://ovmj.org/libextractor/index.php3", "libextractor"));
+ intlink_("/libextractor/index.php", "libextractor"));
+W("Starting a keyword search on a slow machine can take a while since the
keyword search involves computing a fresh RSA key to fomulate the request.");
ANCHOR("directories"); H4("Directories");
-W("A directory in GNUnet is a list of file identifiers.");
+W("A directory in GNUnet is a list of file identifiers with meta-data.");
W("The file identifiers provide sufficient information about the files to
allow downloading the contents.");
W("Once a directory has been created, it cannot be changed since it is treated
just like an ordinary file by the network.");
@@ -70,7 +72,7 @@
W("A pseudonym is essentially a public-private RSA key.");
W("Note that a pseudonym is NOT bound to a GNUnet peer.");
W("There can be multiple pseudonyms for a single user, and users could share
pseudonym keys (out-of-band).");
-W("Files that have been signed and placed into a namespace can be updated.");
+W("Files (or directories) that have been signed and placed into a namespace
can be updated.");
W("Updates are identified as authentic if the same secret key was used to sign
the update.");
W("Namespaces are also useful to establish a reputation, since all of the
content in the namespace comes from the same entity (which does not have to be
the same person).");
@@ -241,30 +243,6 @@
<td><?php W("300 kb/s"); ?></td>
<td><?php W("113 MB"); ?></td>
</tr>
- <tr>
- <td><?php W("gdbm"); ?></td>
- <td><?php W("500 kb/s"); ?></td>
- <td><?php W("400 kb/s"); ?></td>
- <td><?php W("148 MB"); ?></td>
- </tr>
- <tr>
- <td><?php W("tdb"); ?></td>
- <td><?php W("27 kb/s"); ?></td>
- <td><?php W("12 kb/s"); ?></td>
- <td><?php W("118 MB"); ?></td>
- </tr>
- <tr>
- <td><?php W("bdb"); ?></td>
- <td><?php W("340 kb/s"); ?></td>
- <td><?php W("260 kb/s"); ?></td>
- <td><?php W("435 MB"); ?></td>
- </tr>
- <tr>
- <td><?php W("directory"); ?></td>
- <td><?php W("100 kb/s"); ?></td>
- <td><?php W("300 kb/s"); ?></td>
- <td><?php W("450 MB"); ?></td>
- </tr>
</table>
</center>
<?php
@@ -280,13 +258,6 @@
<th><?php W("Space used (279 MB file)"); ?></th>
</tr>
<tr>
- <td><?php W("bdb"); ?></td>
- <td><?php W("40,402 kb/s"); ?></td>
- <td><?php W("20,788 kb/s"); ?></td>
- <td><?php W("173,8 MB"); ?></td>
- <td><?php W("689 MB"); ?></td>
- </tr>
- <tr>
<td><?php W("SQLite"); ?></td>
<td><?php W("70,562 kb/s"); ?></td>
<td><?php W("24,255 kb/s"); ?></td>
@@ -300,7 +271,7 @@
W("Nevertheless, they should help you pick the right database for you (the
choice is between work required to do the setup vs. performance).");
W("The <tt>mysql</tt> module requires manual setup, described %s.",
extlink_("#mysql","here"));
-W("The other databases only require the installation of the respective
database (with header files) before running configure.");
+W("The sqlite databases only requires the installation of the respective
database (with header files) before running configure.");
ANCHOR("gnunet.conf.content-priority");H4("GNUNET-INSERT: CONTENT-PRIORITY");
@@ -324,15 +295,13 @@
echo "<ul><li>";
W("On up-to-date hardware where mysql can be used comfortably, the overall
performance is fairly good (according to our tests).");
echo "</li><li>";
-W("Its often possible to recover the mysql database from internal
inconsistencies.");
-W("The other db choices do not support repair (<tt>gnunet-check</tt> cannot
fix problems internal to the database manager!).");
-W("For example, we have seen several cases where power failure has ruined a
gdbm database beyond repair.");
+W("It is often possible to recover the mysql database from internal
inconsistencies.");
echo "</li></ul>";
P();
W("Cons:");
BR();
echo "<ul><li>";
-W("Memory usage (although gdbm also takes quite a bit of memory)");
+W("Memory usage");
echo "</li><li>";
W("Manual setup");
echo "</li></ul>";
@@ -423,7 +392,7 @@
W("You can supply any number of keywords, and each of the keywords will be
sufficient to locate and retrieve the file.");
W("The description (option -D, text with spaces must be in quotes) is
displayed to other users when they select which files to download.");
W("The description and the keywords are optional and can be inferred if you
have %s installed and libextractor is able to infer keywords and a description
from the file.",
- extlink_("http://www.ovmj.org/libextractor/", "libextactor"));
+ intlink_("/libextractor/index.php", "libextactor"));
P();
W("By default, GNUnet indexes a file instead of copying it.");
Modified: GNUnet-docs/WWW/test/user_gnunet.php3
===================================================================
--- GNUnet-docs/WWW/test/user_gnunet.php3 2005-04-24 13:12:51 UTC (rev
686)
+++ GNUnet-docs/WWW/test/user_gnunet.php3 2005-04-25 18:48:28 UTC (rev
687)
@@ -19,13 +19,15 @@
<?php
ANCHOR("installation");
H3("Installation");
-W("First, in addition to the %s you should download the latest version of %s
and install that library.",
- ARRAY(intlink_("../download.php3", "GNUnet sources"),
- extlink_("http://www.ovmj.org/libextractor/", "libextractor")));
+W("First, in addition to the %s you must download the latest version of %s and
install that library.",
+ ARRAY(intlink_("download.php3", "GNUnet sources"),
+ extlink_("/libextractor/", "libextractor")));
+W("Libextractor requires glib (also required for GNUnet) and zlib (compression
library, highly likely that you already have it).");
W("Installing libextractor should be as simple as:");
PRE("# ./configure --prefix=\$HOME\n" .
"# make\n" .
"# make install\n");
+W("For GNUnet, you should install gtk+ and either mysql or sqlite.");
W("Now compile and install GNUnet using:");
PRE("# ./configure --prefix=\$HOME --with-extractor=\$HOME\n" .
"# make\n" .
@@ -35,8 +37,9 @@
PRE("# gnunet-transport-check\n");
W("As a side-effect, this will generate the configuration file
<tt>/etc/gnunet.conf</tt>.");
W("If the test fails, you should edit the file to configure your network.");
-W("Note that the message "Could not create HELO" is ok, if it occurs
only once.");
-W("Once the network is configured, start the server using:");
+W("If you are using the mysql database, edit the configuration from the
default (sqlite) to mysql.");
+W("After changing the configuration, you should always run
<tt>gnunet-update</tt> to allow GNUnet to perform necessary internal updates.");
+W("Once configuration is complete and <tt>gnunet-update</tt> is done, start
the server using:");
PRE("# gnunetd -d\n");
W("The "-d" option causes <tt>gnunetd</tt> to print all errors to
the console and prevents <tt>gnunetd</tt> from detaching from the console.");
W("If you get no error messages, press "CTRL-C" to abort
<tt>gnunetd</tt> and restart it without the "-d" option.");
@@ -314,7 +317,7 @@
W("Each file is about 550 bytes long (different transport protocols may have
different address sizes).");
W("A %s of GNUnet hosts can be obtained from the GNUnet webpage.",
extlink_("download/hosts.tar.gz", "list"));
-W("On startup, GNUnet downloads a list of initial hosts from
<tt>http://www.ovmj.org/GNUnet/download/hostlist</tt>.");
+W("On startup, GNUnet downloads a list of initial hosts from
<tt>http://ovmj.org/GNUnet/download/hostlist</tt>.");
W("This list is generated using");
PRE("# cat ~/.gnunet/data/hosts/* > hostlist");
@@ -339,8 +342,11 @@
W("Which applications should gnunetd support?");
W("Specify the name of the dynamic shared object (DSO) that implements the
service in the gnunetd core here.");
W("Multiple DSOs can be specified, separated by spaces.");
+W("You should always specify "advertising getoption topology" since
these are rather fundamental applications.");
+W("Add "stats" in order to be able to obtain statistics using
<tt>gnunet-stats</tt>.");
+W("Further additions depend on which specific applications you want to use.");
W("Possible choices are "%s chat tbench tracekit".",
- intlink_("user_afs.php3","afs"));
+ intlink_("user_afs.php3","fs"));
P();
ANCHOR("gnunet.conf.transports");H4("GNUNETD: TRANSPORTS");
@@ -446,9 +452,9 @@
W("<tt>gnunet-stats</tt> is a little tool that displays statistics.");
W("Unlike the other core tools, it uses the client configuration and only
works if <tt>gnunetd</tt> is already running.");
+W("<tt>gnunet-stats</tt> also only works if the <tt>stats</tt> module is
loaded as an application.");
W("The numbers are for the current gnunetd process only.");
W("The output looks similar to the following example, but depends on which
modules you have loaded and what your node has been doing so far.");
-W("The example below is what you get when no transport services and no
applications are loaded:");
P();
PRE("$ gnunet-stats\n" .
@@ -481,10 +487,7 @@
W("The number of connected hosts is the nummber of hosts that the local node
is directly connected to (1 hop).");
W("The total number of hosts in the network must be larger or equal to this
number.");
-W("Note that TIMESTAMP messages are not send by the current implementation and
thus the counter is pretty much always zero.");
P();
-
-
include("html_footer.php3");
?>
Modified: GNUnet-docs/WWW/test/vote.php
===================================================================
--- GNUnet-docs/WWW/test/vote.php 2005-04-24 13:12:51 UTC (rev 686)
+++ GNUnet-docs/WWW/test/vote.php 2005-04-25 18:48:28 UTC (rev 687)
@@ -28,6 +28,8 @@
echo "Database is down. Cannot edit translations.";
die();
}
+$text = $_REQUEST['text'];
+$translation = $_REQUEST['translation'];
$u = urlencode($text);
$t = urlencode($translation);
echo "text = " . $text . "<br>\n";
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r687 - GNUnet-docs/WWW/test,
durner <=