Author: grothoff Date: 2008-02-16 17:16:22 -0700 (Sat, 16 Feb 2008) New Revision: 6332
Removed: GNUnet-docs/WWW/protocol_cs_testbed.php3 Modified: GNUnet-docs/WWW/protocol_cs_index.inc GNUnet-docs/WWW/protocol_p2p.php3 GNUnet-docs/WWW/protocol_p2p_afs.php3 GNUnet-docs/WWW/protocol_p2p_core.php3 GNUnet-docs/WWW/protocol_p2p_dht.php3 GNUnet-docs/WWW/protocol_p2p_tracekit.php3 GNUnet-docs/WWW/protocol_transport_tcp.php3 GNUnet-docs/WWW/protocol_transport_udp.php3 Log: documenting P2P protocol changes Modified: GNUnet-docs/WWW/protocol_cs_index.inc =================================================================== --- GNUnet-docs/WWW/protocol_cs_index.inc 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_cs_index.inc 2008-02-17 00:16:22 UTC (rev 6332) @@ -7,5 +7,4 @@ <!-- li><?php intlink("protocol_cs_chat.php3","chat"); ?></li --> <!-- li><?php intlink("protocol_cs_tbench.php3","tbench"); ?></li --> <!-- li><?php intlink("protocol_cs_tracekit.php3","tracekit"); ?></li --> -<!-- li><?php intlink("protocol_cs_testbed.php3","testbed"); ?></li --> </ol> Deleted: GNUnet-docs/WWW/protocol_cs_testbed.php3 =================================================================== --- GNUnet-docs/WWW/protocol_cs_testbed.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_cs_testbed.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -1,95 +0,0 @@ -<?php -include("scripts.php3"); -$title = "GNUnet Documentation: Testbed Client-to-Node protocol"; -$description="GNUnet Documentation - the Testbed client-server protocol"; -include("html_header.php3"); - -ANCHOR("CSprotocolTestbed");H3("GNUnet Protocol: client-to-node: testbed"); -BP(); -W("The testbed protocol encapsulates all of its messages within two global message types, <tt>CS_TESTBED_REQUEST</tt> and <tt>CS_TESTBED_REPLY</tt>."); -W("Also note that the testbed module does not define peer-to-peer messages by itself."); -W("The testbed protocol is used to instrument the peer-to-peer network, but does not use peer-to-peer protocols to achieve that."); -W("The testbed setup itself is inherently client-server."); -EP(); - -ANCHOR("CS_TESTBED_REQUEST");H4("CS_TESTBED_REQUEST"); -BP(); -W("The CS_TESTBED_REQUEST message is used to request a specific action from the peer."); -W("The action itself is specified in the <tt>message type</tt> field."); -W("Depending on the message type, the testbed-request message is further parametrized by variable-size data."); -W("Thus CS_TESTBED_REQUEST is inherently a variable-size message."); -W("The general format of the CS_TESTBED_REQUEST message is:"); -EP(); - -echo "<table class=\"border\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n"; -include("bittable.inc"); -rowSizeType("size","50"); -rowIntEntryNBO("message type"); -rowIntEntry("(size - 8) bytes of data"); -echo "</table>\n"; - -BP(); -W("The possible parametrizations are (see also %s):", - extlink_("doxygen/html/testbed_8h.html", "testbed.h")); -EP(); -echo "<ul>"; -$messages = ARRAY(1=>"ADD_PEER", - 2=>"DEL PEER", - 3=>"DEL_ALL_PEERS", - 4=>"GET_HELO", - 5=>"SET_TVALUE", - 6=>"GET_TVALUE", - 7=>"BLACKLIST", - 8=>"SET_IN_BW", - 9=>"SET_OUT_BW", - 10=>"SET_LOSS_RATE", - 11=>"LOAD_MODULE", - 12=>"UNLOAD_MODULE"); -foreach($messages as $i=>$b) - printf("<li><a href=\"#%s\">TESTBED_%s</a></li>", - $b, $b); -echo "</ul>"; - -ANCHOR("ADD_PEER"); H5("TESTBED_ADD_PEER"); -ANCHOR("DEL_PEER"); H5("TESTBED_DEL_PEER"); -ANCHOR("DEL_ALL_PEERS"); H5("TESTBED_DEL_ALL_PEERS"); -ANCHOR("GET_HELO"); H5("TESTBED_GET_HELO"); -ANCHOR("SET_TVALUE"); H5("TESTBED_SET_TVALUE"); -ANCHOR("GET_TVALUE"); H5("TESTBED_GET_TVALUE"); -ANCHOR("BLACKLIST"); H5("BLACKLIST"); -ANCHOR("SET_IN_BW"); H5("SET_IN_BW"); -ANCHOR("SET_OUT_BW"); H5("SET_OUT_BW"); -ANCHOR("SET_LOSS_RATE"); H5("SET_LOSS_RATE"); -ANCHOR("LOAD_MODULE"); H5("LOAD_MODULE"); -ANCHOR("UNLOAD_MODULE"); H5("UNLOAD_MODULE"); - -ANCHOR("CS_TESTBED_REPLY");H4("CS_TESTBED_REPLY"); -BP(); -W("The CS_TESTBED_REPLY message is used as a response from the peer to some of the CS_TESTBED_REQUEST messages."); -W("Specifics of the response are encoded in the <tt>message type</tt> field."); -W("Depending on the message type, the testbed-reply message is further parametrized by variable-size data."); -W("Overall, CS_TESTBED_REPLY is very similar to CS_TESTBED_REQUEST, only that it is send in the other direction."); -W("The general format of the CS_TESTBED_REPLY message is:"); -EP(); - -echo "<table class=\"border\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n"; -include("bittable.inc"); -rowSizeType("size","51"); -rowIntEntryNBO("message type"); -rowIntEntry("(size - 8) bytes of data"); -echo "</table>\n"; - -BP(); -W("The possible parametrizations are:"); -EP(); -echo "<ul>"; -$messages = ARRAY(0=>"HELO_RESPONSE"); -foreach($messages as $i=>$b) - printf("<li><a href=\"#%s\">TESTBED_%s</a></li>", - $b, $b); -echo "</ul>"; - -ANCHOR("HELO_RESPONSE"); H5("TESTBED_HELO_RESPONSE"); - -include("html_footer.php3"); -?> \ No newline at end of file Modified: GNUnet-docs/WWW/protocol_p2p.php3 =================================================================== --- GNUnet-docs/WWW/protocol_p2p.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_p2p.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -25,7 +25,7 @@ W("Each of the messages in the plaintext packet has the following header:"); EP(); -LAYOUT("MESSAGE_HEADER", +LAYOUT("GNUNET_MessageHeader", F(ARRAY(N("message size", NBO_()) => 2, N("request type", NBO_()) => 2, N("(size - 4) bytes of data", "") => 0))); @@ -37,6 +37,8 @@ P(); W("The following groups of peer-to-peer messages are documented:"); include("protocol_p2p_index.inc"); +W("Note that peers are guaranteed to support the core protocols, but all others are optional."); +W("Peers that do not support a protocol are expected to simply ignore those unsupported messages."); EP(); include("html_footer.php3"); Modified: GNUnet-docs/WWW/protocol_p2p_afs.php3 =================================================================== --- GNUnet-docs/WWW/protocol_p2p_afs.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_p2p_afs.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -18,25 +18,16 @@ 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)")); P(); W("Once GAP has decided that a query will be processed, it performs a local lookup."); W("Potential replies are sent 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."); +W("A number of peers is selected based on a biased random selection."); W("The selection is biased towards peers that have recently replied to other queries that had the same predecessor as the current query."); W("The exact code can be found %s.", - extlink_("doxygen/html/querymanager_8c.html#a21", - "here (querymanager.c, forwardQuery)")); -W("Furthermore, queries may be forwarded to other peers if this is possible for free."); -W("Sending queries for free typically happens when assembling a (uniform size) message has sufficient unused room for a query."); -W("In that case, the bandwidth allocation code polls the %s for possible bandwidth-fillers.", - extlink_("doxygen/html/querymanager_8c.html#a16", - "query management code (querymanager.c, fillInQuery)")); -W("The query management system then selects suitable recent queries that have so far not been given to the peer in question."); + extlink_("doxygen/html/plan_8c.html", + "here (plan.c)")); P(); W("If GAP receives a reply, it checks its routing table for a matching entry."); @@ -44,8 +35,7 @@ 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."); W("The response is delivered instantly to local clients and with a (random) delay to other peers."); -W("The query stays in the routingtable since there is still a possibility for loops routing the query back to the peer."); -W("Also some queries can yield multiple results."); +W("The query stays in the routing table if there is a possibility that it may yield additional results."); W("In order to handle queries that can yield multiple results, each peer remembers which results have already been processed for a given query."); P(); @@ -74,14 +64,17 @@ EP(); LAYOUT("P2P_gap_query_MESSAGE", - F(ARRAY(N("message size", NBO_()) => 2, + F(ARRAY(N("message size (152 + (Q-1) * 64 + X)", NBO_()) => 2, V("request type", 16, NBO_()) => 2, N("ECRS block type", NBO_()) => 4, N("priority", NBO_()) => 4, N("time-to-live", NBO_()) => 4, + N("filter mutator", NBO_()) => 4, + N("number of queries (Q = 1 or 2)", NBO_()) => 4, N("return-to peer identity", NBO_()) => 64, N("query hash", NBO_()) => 64, - N("namespace (optional, depending on block type)", NBO_()) => 64))); + N("namespace (optional, depending on block type, only if Q=2)", NBO_()) => 64, + N("Bloom filter", "") => 0))); BP(); W("The priority is used to determine the value of the query."); W("Queries with lower priorities are more likely to be dropped."); @@ -93,16 +86,21 @@ 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")); -W("The current protocol uses at most one additional hash code for the namespace, but the GAP code should allow for any number of additional hash codes to be passed around."); +W("The current protocol uses at most one additional hash code for the namespace, but the GAP code should allow for any number of additional hash codes to be passed around (depending on the value of <tt>number of queries</tt>)."); +W("Finally, the query is optionally followed by a Bloom filter."); +W("Its size can be determined from the size field of the request (and maybe zero)."); +W("The Bloom filter is used to communicate that certain results are not legal."); +W("In order to determine if a result is not legal, the receiver is to hash the result, hash the <tt>filter mutator</tt>, XOR the two hash codes and test if the resulting value is matched by the Bloom filter."); +W("If the Bloom filter matches the XOR'ed hash codes, the result is not acceptable."); EP(); ANCHOR("RESULT");H4("RESULT"); BP(); 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 GAP RESULT message contains the first hash code from the respective QUERY (also called the primary key)."); -W("Note that the type is encoded by ECRS in the data portion."); +W("Note that the type of the result is encoded by ECRS in the data portion (in the first four bytes)."); W("The size of the data portion of the result depends on the query type and is again defined by ECRS."); +W("The hash for checking against the bloomfilter of a query should be done only over the ECRS-encoded data."); 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"))); @@ -110,7 +108,7 @@ LAYOUT("P2P_gap_reply_MESSAGE", F(ARRAY(N("message size", NBO_()) => 2, V("request type", 17, NBO_()) => 2, - N("primary key", NBO_()) => 64, + N("expiration time (unsigned, relative, in ms)", NBO_()) => 8, N("ECRS-encoded data", NBO_()) => 0))); include("html_footer.php3"); Modified: GNUnet-docs/WWW/protocol_p2p_core.php3 =================================================================== --- GNUnet-docs/WWW/protocol_p2p_core.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_p2p_core.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -67,7 +67,7 @@ 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:"); EP(); -LAYOUT("P2P_PACKET_HEADER", +LAYOUT("GNUNET_TransportPacket_HEADER", F(ARRAY(N("hash of the plaintext (SHA-512)", "") => 64, N("sequence number, 0 for plaintext", 11, NBO_()) => 4, N("timestamp (in seconds)", NBO_()) => 4, @@ -92,7 +92,7 @@ W("An SMTP transport implementation may choose to use an E-mail address."); W("GNUnet nodes can have multiple addresses and change addresses at any time, e.g. if the IP is dynamically assigned, like in DHCP or on dialup."); W("The %s is used to notify other hosts of a changed address.", - extlink_("doxygen/html/structHELLO__Message.html","HELLO message")); + extlink_("doxygen/html/structGNUNET__MessageHello.html","HELLO message")); P(); W("<strong>Security considerations</strong>."); W("Malicious nodes could disrupt GNUnet by telling nodes fake addresses."); @@ -116,7 +116,7 @@ EXTLINK_("#SETKEY","SETKEY")); W("Once an encrypted channel was formed, nodes can exchange HELLOs via that channel."); EP(); -LAYOUT("P2P_hello_MESSAGE", +LAYOUT("GNUNET_MessageHello", F(ARRAY(N("message size (600 + X)", NBO_()) => 2, V("request type", 0, NBO_()) => 2, N("RSA signature (signing data starting from sender id to end of HELLO)","") => 256, @@ -162,15 +162,18 @@ W("The format of an SETKEY message is the following:"); EP(); LAYOUT("P2P_setkey_MESSAGE", - F(ARRAY(N("message size (520 + X)", NBO_()) => 2, + F(ARRAY(N("message size (584 + X)", NBO_()) => 2, V("request type", 1, NBO_()) => 2, N("creation time (seconds)", NBO_()) => 4, N("RSA encrypted data", "") => 256, + N("Intended recipient", "") => 64, N("RSA signature", "") => 256, N("AES-512 encrypted PINGs and PONGs", "") => 0))); BP(); W("Note that X is always either 72 or 144 bytes."); W("The RSA encrypted data decrypts with the hostkey of the receiver to an AES-256 session key."); +W("Before decrypting, the recipient checks that its own identity matches the intended recpient field."); +W("This helps avoid wasting CPU time if the sender is mistaken about the identity of the target."); W("Using the RSA signature as the initialization vector, this key can be used to decrypt the PINGs and PONGs (if present)."); W("The sessionkey is also used for all future communication with the peer (until HANGUP or timeout)."); W("If PINGs are transmitted, the peer should respond by sending an encrypted PONG."); @@ -253,7 +256,7 @@ W("Noise should only be used in encrypted traffic."); W("The format for noise is:"); EP(); -LAYOUT("MESSAGE_HEADER", +LAYOUT("GNUNET_MessageHeader", F(ARRAY(N("message size", NBO_()) => 2, V("request type", 6, NBO_()) => 2, N("(size - 4) random bytes", "") => 0))); Modified: GNUnet-docs/WWW/protocol_p2p_dht.php3 =================================================================== --- GNUnet-docs/WWW/protocol_p2p_dht.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_p2p_dht.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -3,85 +3,73 @@ $title = "GNUnet Documentation: The Peer-to-Peer Protocols: DHT"; $description="The distributed hash table (DHT) protocol in GNUnet"; include("html_header.php3"); - ANCHOR("protocol");H3("GNUnet Protocol: node-to-node: DHT"); - BP(); -W("DHT is a service that can be run by a subset of the GNUnet network."); -W("In other words, not all GNUnet peers necessarily support this service."); -W("The DHT service is implemented on top of the %s.", - intlink_("protocol_p2p_rpc.php3", "RPC service")); -W("The DHT service provides an implementation of a distributed hash table."); -W("It does provide anything that is directly useful to an end-user."); -W("The DHT service is intended to be used by other GNUnet protocols that need this kind of primitive."); -// link to 'hacking_dht' here (once that part is written). -W("Since the DHT service uses RPC it does not define any new node-to-node network messages but rather defines five RPC functions:"); EP(); - -echo "<ul>\n"; -LIV(extlink_("#ping","DHT_ping")); -LIV(extlink_("#findNode","DHT_findNode")); -LIV(extlink_("#findValue","DHT_findValue")); -LIV(extlink_("#store","DHT_store")); -LIV(extlink_("#remove","DHT_remove")); -echo "</ul>\n"; - +ANCHOR("DHT_DISCOVERY");H4("DHT DISCOVERY"); BP(); -W("GNUnets DHT implementation is based on ideas from %s.", - extlink_("http://en.wikipedia.org/wiki/Kademlia", "Kademlia")); -W("There are various differences between Kademlia and the implementation in GNUnet."); -W("The primary difference results from the fact that GNUnet extends the protocol with subtables."); -W("Other differences result from adaptations of the original work to GNUnet."); -W("Finally, the Kademlia paper describes the basic idea behind a protocol whereas GNUnet provides a concrete implementation."); -W("As such GNUnet needs to deal with some of the quirks and specific details that the paper does not address."); +W("A DISCOVERY message is used to let another peer know that the sender supports the DHT protocol and also to exchange topology information."); +W("A DISCOVERY message contains the amount of space available for the DHT at the sender as well as the identities of other DHT participants known to the sender."); +W("The format of the DISCOVERY message is the following:"); EP(); - -ANCHOR("ping"); H4("DHT_ping"); +LAYOUT("P2P_DHT_Discovery", + F(ARRAY(N("message size (8 + N * 64)", NBO_()) => 2, + V("request type", 18, NBO_()) => 2, + N("available space (in bytes)", NBO_()) => 4, + N("known DHT participants", "") => 0))); +ANCHOR("DHT_ASK_HELLO");H4("DHT ASK HELLO"); BP(); -W("A <tt>ping</tt> message is used to determine if another peer participates in the DHT network and to find out which tables that peer supports."); -W("The proper response to a <tt>ping</tt> is to send back the list of tables for which the responder is storing data for."); -W("The <tt>ping</tt> request currently uses no arguments."); -W("The resulting table list is stored in under the name <tt>tables</tt>."); +W("ASK HELLO messages are used by DHT peers if they would like to contact another peer in the network but do not have the necessary address information."); +W("If possible, other peers respond to ASK HELLO messages with the respective HELLO message."); +W("The format of the ASK HELLO message is the following:"); EP(); +LAYOUT("P2P_DHT_ASK_HELLO", + F(ARRAY(V("message size", 72, NBO_()) => 2, + V("request type", 19, NBO_()) => 2, + V("resreved", 0, NBO_()) => 4, + N("identity of peer", "") => 64))); -ANCHOR("findNode"); H4("DHT_findNode"); +ANCHOR("DHT_GET");H4("DHT GET"); BP(); -W("The <tt>findNode</tt> requests is used to find peers in the DHT overlay that participate in a particular table and that are close to a given key."); -W("The arguments to <tt>findNode</tt> are the <tt>key</tt> and the specific <tt>table</tt> (both in the form of a hash code)."); -W("The response consists of a list of peer identities <tt>peers</tt> which are the best matching peers found by the responder for this query."); -W("Optionally the response may have an entry <tt>list</tt> that lists the tables that the responder supports."); +W("A DHT_GET message is used to ask other peers to find content matching a particular type and key."); +W("Other peers should respond with the respective DHT RESULT message if they can find the data."); EP(); - -ANCHOR("findValue"); H4("DHT_findValue"); +LAYOUT("DHT_MESSAGE", + F(ARRAY(V("message size", 80, NBO_()) => 2, + V("request type", 20, NBO_()) => 2, + N("type of requested content", NBO_()) => 4, + N("hop count", NBO_()) => 4, + N("network size estimate", NBO_()) => 4, + N("key", "") => 64))); +ANCHOR("DHT_PUT");H4("DHT PUT"); BP(); -W("The <tt>findValue</tt> requests asks the peer to perform a DHT lookup on a particular <tt>key</tt> in a particular <tt>table</tt>."); -W("<tt>findValue</tt> requests are only transmitted to peers that have previously indicated that they participate in the given <tt>table</tt>."); -W("Peers that participate in a table may only send <tt>findValue</tt> requests to peers that are closer to the given <tt>key</tt>."); -W("The <tt>findValue</tt> request also specifies a <tt>timeout</tt> and the maximum number of results <tt>maxResults</tt>."); -W("The RPC returns the result of the lookup operation in fields named <tt>data</tt>."); -W("Optionally the response may have an entry <tt>list</tt> that lists the tables that the responder supports."); -W("Peers that receive a <tt>findValue</tt> request and that do not have the data locally may forward the request to other peers that participate in the given <tt>table</tt> if those peers have an ID that is closer and if there is a good chance to obtain a result before the timeout."); +W("A DHT PUT message is used to store data in the DHT."); +W("Peers should make an effort to store the data either in their own datastore or in the datastore of other peers (by forwarding the request)."); +W("Peers do not send any response or confirmation to a DHT PUT request."); +W("Peers can validate the success of a PUT by issuing the corresponding GET request and wainting for results."); EP(); - -ANCHOR("store"); H4("DHT_store"); +LAYOUT("DHT_MESSAGE", + F(ARRAY(N("message size (80 + X)", NBO_()) => 2, + V("request type", 21, NBO_()) => 2, + N("type of requested content", NBO_()) => 4, + N("hop count", NBO_()) => 4, + N("network size estimate", NBO_()) => 4, + N("key", "") => 64, + N("data", NBO_()) => 0))); +ANCHOR("DHT_RESULT");H4("DHT RESULT"); BP(); -W("The <tt>store</tt> requests asks the peer to store a particular <tt>value</tt> under a particular <tt>key</tt> in a particular <tt>table</tt>."); -W("<tt>store</tt> requests are only transmitted to peers that have previously indicated that they participate in the given <tt>table</tt>."); -W("Peers that participate in a table may only send <tt>store</tt> requests to peers that are closer to the given <tt>key</tt>."); -W("If the peer stores the data locally it returns its own peer identity."); -W("If the peer forwards the store message and the storage is confirmed, it returns the identity of all peers that confirmed storing the data."); -W("Optionally the response may have an entry <tt>list</tt> that lists the tables that the responder supports."); -W("Peers that receive a <tt>store</tt> request and that do not have the capacity to store the data locally may forward the request to other peers that participate in the given <tt>table</tt> if those peers have an ID that is closer and if there is a good chance to obtain a confirmation for storing the data before the timeout."); +W("A DHT RESULT message is transmitted in response to a DHT GET request."); +W("Peers should forward the result to the previous peer in the request chain (or the respective local client for local requests)."); +W("Peers do not send any response or confirmation to a DHT RESULT request."); EP(); - -ANCHOR("remove"); H4("DHT_remove"); -BP(); -W("The <tt>remove</tt> message works just like the <tt>store</tt> message, only that the content is removed."); -W("If no content is specified with the <tt>remove</tt> message this indicates that any kind of content under the given key is to be removed."); -W("The <tt>remove</tt> operation may not be supported by all tables."); - -EP(); - +LAYOUT("DHT_MESSAGE", + F(ARRAY(N("message size (80 + X)", NBO_()) => 2, + V("request type", 22, NBO_()) => 2, + N("type of requested content", NBO_()) => 4, + N("hop count", NBO_()) => 4, + N("network size estimate", NBO_()) => 4, + N("key", "") => 64, + N("result data", NBO_()) => 0))); include("html_footer.php3"); -?> \ No newline at end of file +?> Modified: GNUnet-docs/WWW/protocol_p2p_tracekit.php3 =================================================================== --- GNUnet-docs/WWW/protocol_p2p_tracekit.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_p2p_tracekit.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -27,7 +27,7 @@ BP(); W("The format of the %s is:", extlink_("doxygen/html/structTRACEKIT__p2p__PROBE.html", "PROBE message")); -LAYOUT("TRACEKIT_p2p_PROBE", +LAYOUT("P2P_tracekit_probe_MESSAGE", F(ARRAY(V("message size", 40, NBO_()) => 2, V("message type", 36, NBO_()) => 2, N("timestamp (unsigned)", NBO_()) => 4, @@ -50,10 +50,9 @@ ANCHOR("REPLY");H4("REPLY"); BP(); -W("The format of the %s is:", - extlink_("doxygen/html/structTRACEKIT__p2p__REPLY.html", "REPLY message")); -LAYOUT("TRACEKIT_p2p_REPLY", - F(ARRAY(N("message size", NBO_()) => 2, +W("The format of the REPLY is:"); +LAYOUT("P2P_tracekit_reply_MESSAGE", + F(ARRAY(N("message size (140 + N * 64)", NBO_()) => 2, V("request type", 37, NBO_()) => 2, N("initiator peer identity", NBO_()) => 64, N("responder peer identity", NBO_()) => 64, Modified: GNUnet-docs/WWW/protocol_transport_tcp.php3 =================================================================== --- GNUnet-docs/WWW/protocol_transport_tcp.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_transport_tcp.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -16,9 +16,9 @@ BP(); W("The individual messages exchanged over TCP then have the format:"); EP(); -LAYOUT("TCPP2P_PACKET", +LAYOUT("GNUNET_MessageHeader", F(ARRAY(N("size", NBO_()) => 2, - V("reserved", 0, NBO_()) => 2, + V("type", 0, NBO_()) => 2, N("data", "") => 0))); BP(); W("Here, <tt>data</tt> is the message as passed down by the GNUnet core."); Modified: GNUnet-docs/WWW/protocol_transport_udp.php3 =================================================================== --- GNUnet-docs/WWW/protocol_transport_udp.php3 2008-02-17 00:08:16 UTC (rev 6331) +++ GNUnet-docs/WWW/protocol_transport_udp.php3 2008-02-17 00:16:22 UTC (rev 6332) @@ -16,7 +16,7 @@ BP(); W("Note that the actual data appears before this struct."); P(); -W("For the UDP transport service, the sender address in the HELO has this format:"); +W("For the UDP transport service, the sender address in the HELLO has this format:"); EP(); LAYOUT("HostAddress", F(ARRAY(N("IPv6 address", "") => 16, _______________________________________________ GNUnet-SVN mailing list GNUnet-SVN@gnu.org http://lists.gnu.org/mailman/listinfo/gnunet-svn