gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r32613 - in gnunet-java: . bin gradle/wrapper lib src/main/


From: gnunet
Subject: [GNUnet-SVN] r32613 - in gnunet-java: . bin gradle/wrapper lib src/main/java/org/gnunet/arm src/main/java/org/gnunet/consensus src/main/java/org/gnunet/consensus/messages src/main/java/org/gnunet/construct src/main/java/org/gnunet/construct/parsers src/main/java/org/gnunet/core src/main/java/org/gnunet/dht src/main/java/org/gnunet/gns src/main/java/org/gnunet/gns/callbacks src/main/java/org/gnunet/gns/messages src/main/java/org/gnunet/identity src/main/java/org/gnunet/identity/messages src/main/java/org/gnunet/mesh src/main/java/org/gnunet/mq src/main/java/org/gnunet/nse src/main/java/org/gnunet/peerinfo src/main/java/org/gnunet/requests src/main/java/org/gnunet/secretsharing src/main/java/org/gnunet/secretsharing/messages src/main/java/org/gnunet/statistics src/main/java/org/gnunet/testbed src/main/java/org/gnunet/testing src/main/java/org/gnunet/transport src/main/java/org/gnunet/transport/callbacks src/main/java/org/gnunet/transport/messages src/main/java/org/gnunet/util src/m ain/java /org/gnunet/util/crypto src/main/java/org/gnunet/util/getopt src/main/java/org/gnunet/voting src/main/java/org/gnunet/voting/messages src/main/java/org/gnunet/voting/simulation src/main/resources/org/gnunet/construct src/test/java/org/gnunet/consensus src/test/java/org/gnunet/construct src/test/java/org/gnunet/core src/test/java/org/gnunet/dht src/test/java/org/gnunet/mesh src/test/java/org/gnunet/nse src/test/java/org/gnunet/peerinfo src/test/java/org/gnunet/statistics src/test/java/org/gnunet/testbed src/test/java/org/gnunet/transport src/test/java/org/gnunet/util src/test/python
Date: Tue, 11 Mar 2014 02:24:03 +0100

Author: dold
Date: 2014-03-11 02:24:03 +0100 (Tue, 11 Mar 2014)
New Revision: 32613

Added:
   gnunet-java/bin/gnunet-dht-java
   gnunet-java/bin/gnunet-nse-java
   gnunet-java/bin/gnunet-peerinfo-java
   gnunet-java/bin/gnunet-resolver-java
   gnunet-java/bin/gnunet-statistics-java
   gnunet-java/gradlew.bat
Removed:
   gnunet-java/bin/gnunet-dht
   gnunet-java/bin/gnunet-nse
   gnunet-java/bin/gnunet-peerinfo
   gnunet-java/bin/gnunet-resolver
   gnunet-java/bin/gnunet-statistics
Modified:
   gnunet-java/ISSUES
   gnunet-java/README
   gnunet-java/gradle/wrapper/gradle-wrapper.jar
   gnunet-java/gradle/wrapper/gradle-wrapper.properties
   gnunet-java/lib/log4j-1.2.16.jar
   gnunet-java/lib/slf4j-api-1.6.4.jar
   gnunet-java/lib/slf4j-log4j12-1.6.4.jar
   gnunet-java/src/main/java/org/gnunet/arm/Arm.java
   gnunet-java/src/main/java/org/gnunet/consensus/Consensus.java
   
gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeDoneMessage.java
   gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeMessage.java
   gnunet-java/src/main/java/org/gnunet/consensus/messages/JoinMessage.java
   
gnunet-java/src/main/java/org/gnunet/consensus/messages/NewElementMessage.java
   gnunet-java/src/main/java/org/gnunet/construct/FrameSize.java
   
gnunet-java/src/main/java/org/gnunet/construct/MessageIdAnnotationProcessor.java
   
gnunet-java/src/main/java/org/gnunet/construct/ProtocolViolationException.java
   gnunet-java/src/main/java/org/gnunet/construct/ReflectUtil.java
   gnunet-java/src/main/java/org/gnunet/construct/parsers/FillParser.java
   gnunet-java/src/main/java/org/gnunet/construct/parsers/UnionParser.java
   
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeArrayParser.java
   
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeStringParser.java
   gnunet-java/src/main/java/org/gnunet/core/Core.java
   gnunet-java/src/main/java/org/gnunet/core/NotifyInboundTrafficMessage.java
   gnunet-java/src/main/java/org/gnunet/core/RequestIdentification.java
   gnunet-java/src/main/java/org/gnunet/core/SendMessage.java
   gnunet-java/src/main/java/org/gnunet/core/SendMessageReady.java
   gnunet-java/src/main/java/org/gnunet/dht/ClientPutConfirmationMessage.java
   gnunet-java/src/main/java/org/gnunet/dht/ClientPutMessage.java
   gnunet-java/src/main/java/org/gnunet/dht/DistributedHashTable.java
   gnunet-java/src/main/java/org/gnunet/dht/MonitorGetMessage.java
   gnunet-java/src/main/java/org/gnunet/dht/MonitorGetRespMessage.java
   gnunet-java/src/main/java/org/gnunet/dht/MonitorPutMessage.java
   gnunet-java/src/main/java/org/gnunet/dht/MonitorStartStop.java
   gnunet-java/src/main/java/org/gnunet/dht/RouteOption.java
   gnunet-java/src/main/java/org/gnunet/gns/GNS.java
   gnunet-java/src/main/java/org/gnunet/gns/Gns.java
   gnunet-java/src/main/java/org/gnunet/gns/GnsRecord.java
   gnunet-java/src/main/java/org/gnunet/gns/GnsTool.java
   gnunet-java/src/main/java/org/gnunet/gns/LookupResultProcessor.java
   gnunet-java/src/main/java/org/gnunet/gns/callbacks/LookupResultProcessor.java
   gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupMessage.java
   
gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupResultMessage.java
   gnunet-java/src/main/java/org/gnunet/identity/Identity.java
   gnunet-java/src/main/java/org/gnunet/identity/messages/ResultCodeMessage.java
   gnunet-java/src/main/java/org/gnunet/mesh/ClientConnectMessage.java
   gnunet-java/src/main/java/org/gnunet/mesh/ConnectHandler.java
   gnunet-java/src/main/java/org/gnunet/mesh/DataMessage.java
   gnunet-java/src/main/java/org/gnunet/mesh/MeshRunabout.java
   gnunet-java/src/main/java/org/gnunet/mesh/TunnelDestroyMessage.java
   gnunet-java/src/main/java/org/gnunet/mq/Envelope.java
   gnunet-java/src/main/java/org/gnunet/mq/MessageQueue.java
   gnunet-java/src/main/java/org/gnunet/nse/NetworkSizeEstimation.java
   gnunet-java/src/main/java/org/gnunet/nse/UpdateMessage.java
   gnunet-java/src/main/java/org/gnunet/peerinfo/ListAllPeersMessage.java
   gnunet-java/src/main/java/org/gnunet/peerinfo/PeerInfo.java
   gnunet-java/src/main/java/org/gnunet/requests/MatchingRequestContainer.java
   gnunet-java/src/main/java/org/gnunet/requests/RequestContainer.java
   gnunet-java/src/main/java/org/gnunet/requests/SequentialRequestContainer.java
   gnunet-java/src/main/java/org/gnunet/requests/package-info.java
   gnunet-java/src/main/java/org/gnunet/secretsharing/Ciphertext.java
   gnunet-java/src/main/java/org/gnunet/secretsharing/KeyGeneration.java
   gnunet-java/src/main/java/org/gnunet/secretsharing/Plaintext.java
   
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/ClientDecryptMessage.java
   
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/GenerateMessage.java
   gnunet-java/src/main/java/org/gnunet/statistics/GetRequest.java
   gnunet-java/src/main/java/org/gnunet/statistics/Statistics.java
   gnunet-java/src/main/java/org/gnunet/statistics/StatisticsWatcher.java
   gnunet-java/src/main/java/org/gnunet/statistics/WatchRequest.java
   gnunet-java/src/main/java/org/gnunet/statistics/package-info.java
   gnunet-java/src/main/java/org/gnunet/testbed/Controller.java
   gnunet-java/src/main/java/org/gnunet/testing/TestingServer.java
   gnunet-java/src/main/java/org/gnunet/testing/TestingSetup.java
   gnunet-java/src/main/java/org/gnunet/transport/Transport.java
   
gnunet-java/src/main/java/org/gnunet/transport/callbacks/PeerAddressListCallback.java
   
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateMessage.java
   
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessage.java
   gnunet-java/src/main/java/org/gnunet/util/AbsoluteTime.java
   gnunet-java/src/main/java/org/gnunet/util/Client.java
   gnunet-java/src/main/java/org/gnunet/util/Connection.java
   gnunet-java/src/main/java/org/gnunet/util/Helper.java
   gnunet-java/src/main/java/org/gnunet/util/MessageStreamTokenizer.java
   gnunet-java/src/main/java/org/gnunet/util/MessageTransmitter.java
   gnunet-java/src/main/java/org/gnunet/util/Program.java
   gnunet-java/src/main/java/org/gnunet/util/RelativeTime.java
   gnunet-java/src/main/java/org/gnunet/util/Resolver.java
   gnunet-java/src/main/java/org/gnunet/util/Scheduler.java
   gnunet-java/src/main/java/org/gnunet/util/Server.java
   gnunet-java/src/main/java/org/gnunet/util/Service.java
   gnunet-java/src/main/java/org/gnunet/util/crypto/Ed25519.java
   gnunet-java/src/main/java/org/gnunet/util/getopt/Parser.java
   gnunet-java/src/main/java/org/gnunet/voting/Ballot.java
   gnunet-java/src/main/java/org/gnunet/voting/BallotTool.java
   gnunet-java/src/main/java/org/gnunet/voting/CertifyGroupTool.java
   gnunet-java/src/main/java/org/gnunet/voting/EncryptedVote.java
   gnunet-java/src/main/java/org/gnunet/voting/GroupCert.java
   gnunet-java/src/main/java/org/gnunet/voting/TallyAuthorityDaemon.java
   
gnunet-java/src/main/java/org/gnunet/voting/messages/ResultQueryResponseMessage.java
   gnunet-java/src/main/java/org/gnunet/voting/messages/SubmitMessage.java
   gnunet-java/src/main/java/org/gnunet/voting/simulation/CryptoUtil.java
   gnunet-java/src/main/java/org/gnunet/voting/simulation/VotingParameters.java
   gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt
   gnunet-java/src/test/java/org/gnunet/consensus/ConsensusTestbedTest.java
   gnunet-java/src/test/java/org/gnunet/construct/FrameSizeTest.java
   gnunet-java/src/test/java/org/gnunet/construct/OptionalUnionTest.java
   gnunet-java/src/test/java/org/gnunet/construct/StringTuple.java
   gnunet-java/src/test/java/org/gnunet/core/CoreTest.java
   gnunet-java/src/test/java/org/gnunet/dht/DHTTest.java
   gnunet-java/src/test/java/org/gnunet/mesh/MeshTest.java
   gnunet-java/src/test/java/org/gnunet/nse/NSETest.java
   gnunet-java/src/test/java/org/gnunet/peerinfo/PeerInfoTest.java
   gnunet-java/src/test/java/org/gnunet/statistics/StatisticsTest.java
   gnunet-java/src/test/java/org/gnunet/testbed/TestbedTest.java
   gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java
   gnunet-java/src/test/java/org/gnunet/util/ClientServerTest.java
   gnunet-java/src/test/java/org/gnunet/util/EcdsaTest.java
   gnunet-java/src/test/java/org/gnunet/util/ResolverTest.java
   gnunet-java/src/test/java/org/gnunet/util/ServerExample.java
   gnunet-java/src/test/python/test_voting_single.py
Log:
- simplify request containers
- statistics bugs
- fix missing annotation in consensus api
- work on voting


Modified: gnunet-java/ISSUES
===================================================================
--- gnunet-java/ISSUES  2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/ISSUES  2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,38 +1,34 @@
-testbed:
-Could it be possible that there are some issues with operation scheduling?
-I'm currently having problems executing a ~15-peer testbed
+coverage:
+gradle now has built-in support for JaCoCo => no cobertura, smaller build 
file, smaller repo
+(gradle downloads jacoco on demand)
 
-crypto in java:
-public class EddsaSignedMessage<M extends Message> implements Message {
-    @NestedMessage
-    public EddsaSignature signature;
-    @UInt32
-    public int purpose;
-    @NestedMessage
-    public M innerMessage;
-// ...
-}
+dependencies and packaging:
+ * svn does not have any dependencies anymore, use gradle to fetch them (as 
discussed)
+ * 'gradle publish' creates an ivy repository, containing
+  * the gnunet-java-<version>.jar
+  * transitive dependency information
+ * we might want to host the repo directly on gnunet.org (via http)
 
-Unfortunately, this does not work, as the type of 'M' is erased,
-reflection will give 'Message' as type of the 'innerMessage' field
-=> ditch generics
+gnunet-java-ext:
+ * build.gradle simply specifies the ivy repository
+  * choices: user must edit, https on gnunet.org, $GNUNET_JAVA_IVY
 
-voting:
-As discussed, the key generation is done after the ballot has been registered,
-one threshold key pair per election.
+gnunet-java shell wrappers and dependencies:
+ * as deps of gnunet-java.jar are stored _somewhere_,
+   wrappers are problematic
+ * proposal 1 (what most large java apps do):
+  * require that bin/ is always relative to lib/
+  * advantage: no dependency hell, easy
+  * disadvantage: more/redundant jars
+ * proposal 2:
+  * template wrapper
+  * gradle script generates one wrapper for the
+    developer (with deps from the local gradle repo),
+    and one for the end user, relative to installation $PREFIX
 
-gnunet-ballot -k <ballotfile> # fetch threshold pubkey from authority
-(preferably the issuer should do that)
 
-ballots are now actually encrypted
+I'm working on a more powerful machine now -- a LOT of stuff goes wrong with 
mesh now that I can
+run larger testbeds
+(and Sree demonstrated to me that playing around with which transport plugin 
to use can have interesting effects)
+also, mesh constantly changes => new bugs
 
-testing voting:
-python test case with arbitrary number of authorities and voters
-
-close to working ...
-
-misc:
-gnunet-config always writes the whole default configuration with the
-requested change. What if, however, I don't want the default part to be 
written?
-
-

Modified: gnunet-java/README
===================================================================
--- gnunet-java/README  2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/README  2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,7 +1,7 @@
 Building gnunet-java
 ====================
 
-For building gnunet-java, gradle>=1.7 is required, see http://gradle.org/.
+For building gnunet-java, gradle>=1.11 is required, see http://gradle.org/.
 
 
 Extending gnunet-java

Deleted: gnunet-java/bin/gnunet-dht
===================================================================
--- gnunet-java/bin/gnunet-dht  2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/bin/gnunet-dht  2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if [ "%GNJ_INSTALLED" = "true" ];
-then
-    export CLASSPATH="%INSTALL_PATH/share/java/*"
-else
-    DIR=`dirname $0`
-    # if we are in the development environment use class files directly 
instead of jar
-    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
-fi
-
-java -ea org.gnunet.dht.DistributedHashTable "$@"

Copied: gnunet-java/bin/gnunet-dht-java (from rev 32594, 
gnunet-java/bin/gnunet-dht)
===================================================================
--- gnunet-java/bin/gnunet-dht-java                             (rev 0)
+++ gnunet-java/bin/gnunet-dht-java     2014-03-11 01:24:03 UTC (rev 32613)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ "%GNJ_INSTALLED" = "true" ];
+then
+    export CLASSPATH="%INSTALL_PATH/share/java/*"
+else
+    DIR=`dirname $0`
+    # if we are in the development environment use class files directly 
instead of jar
+    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
+fi
+
+java -ea org.gnunet.dht.DistributedHashTable "$@"

Deleted: gnunet-java/bin/gnunet-nse
===================================================================
--- gnunet-java/bin/gnunet-nse  2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/bin/gnunet-nse  2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if [ "%GNJ_INSTALLED" = "true" ];
-then
-    export CLASSPATH="%INSTALL_PATH/share/java/*"
-else
-    DIR=`dirname $0`
-    # if we are in the development environment use class files directly 
instead of jar
-    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
-fi
-
-java -ea org.gnunet.nse.NetworkSizeEstimation "$@"

Copied: gnunet-java/bin/gnunet-nse-java (from rev 32594, 
gnunet-java/bin/gnunet-nse)
===================================================================
--- gnunet-java/bin/gnunet-nse-java                             (rev 0)
+++ gnunet-java/bin/gnunet-nse-java     2014-03-11 01:24:03 UTC (rev 32613)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ "%GNJ_INSTALLED" = "true" ];
+then
+    export CLASSPATH="%INSTALL_PATH/share/java/*"
+else
+    DIR=`dirname $0`
+    # if we are in the development environment use class files directly 
instead of jar
+    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
+fi
+
+java -ea org.gnunet.nse.NetworkSizeEstimation "$@"

Deleted: gnunet-java/bin/gnunet-peerinfo
===================================================================
--- gnunet-java/bin/gnunet-peerinfo     2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/bin/gnunet-peerinfo     2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if [ "%GNJ_INSTALLED" = "true" ];
-then
-    export CLASSPATH="%INSTALL_PATH/share/java/*"
-else
-    DIR=`dirname $0`
-    # if we are in the development environment use class files directly 
instead of jar
-    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
-fi
-
-java -ea org.gnunet.peerinfo.PeerInfo "$@"

Copied: gnunet-java/bin/gnunet-peerinfo-java (from rev 32594, 
gnunet-java/bin/gnunet-peerinfo)
===================================================================
--- gnunet-java/bin/gnunet-peerinfo-java                                (rev 0)
+++ gnunet-java/bin/gnunet-peerinfo-java        2014-03-11 01:24:03 UTC (rev 
32613)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ "%GNJ_INSTALLED" = "true" ];
+then
+    export CLASSPATH="%INSTALL_PATH/share/java/*"
+else
+    DIR=`dirname $0`
+    # if we are in the development environment use class files directly 
instead of jar
+    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
+fi
+
+java -ea org.gnunet.peerinfo.PeerInfo "$@"

Deleted: gnunet-java/bin/gnunet-resolver
===================================================================
--- gnunet-java/bin/gnunet-resolver     2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/bin/gnunet-resolver     2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if [ "%GNJ_INSTALLED" = "true" ];
-then
-    export CLASSPATH="%INSTALL_PATH/share/java/*"
-else
-    DIR=`dirname $0`
-    # if we are in the development environment use class files directly 
instead of jar
-    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
-fi
-
-java -ea org.gnunet.util.Resolver "$@"

Copied: gnunet-java/bin/gnunet-resolver-java (from rev 32594, 
gnunet-java/bin/gnunet-resolver)
===================================================================
--- gnunet-java/bin/gnunet-resolver-java                                (rev 0)
+++ gnunet-java/bin/gnunet-resolver-java        2014-03-11 01:24:03 UTC (rev 
32613)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ "%GNJ_INSTALLED" = "true" ];
+then
+    export CLASSPATH="%INSTALL_PATH/share/java/*"
+else
+    DIR=`dirname $0`
+    # if we are in the development environment use class files directly 
instead of jar
+    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
+fi
+
+java -ea org.gnunet.util.Resolver "$@"

Deleted: gnunet-java/bin/gnunet-statistics
===================================================================
--- gnunet-java/bin/gnunet-statistics   2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/bin/gnunet-statistics   2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if [ "%GNJ_INSTALLED" = "true" ];
-then
-    export CLASSPATH="%INSTALL_PATH/share/java/*"
-else
-    DIR=`dirname $0`
-    # if we are in the development environment use class files directly 
instead of jar
-    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
-fi
-
-java -ea org.gnunet.statistics.Statistics "$@"

Copied: gnunet-java/bin/gnunet-statistics-java (from rev 32594, 
gnunet-java/bin/gnunet-statistics)
===================================================================
--- gnunet-java/bin/gnunet-statistics-java                              (rev 0)
+++ gnunet-java/bin/gnunet-statistics-java      2014-03-11 01:24:03 UTC (rev 
32613)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ "%GNJ_INSTALLED" = "true" ];
+then
+    export CLASSPATH="%INSTALL_PATH/share/java/*"
+else
+    DIR=`dirname $0`
+    # if we are in the development environment use class files directly 
instead of jar
+    export 
CLASSPATH="$DIR/../build-gradle/classes/main/:$DIR/../build-gradle/resources/main/:$DIR/../lib/*"
+fi
+
+java -ea org.gnunet.statistics.StatisticsTool "$@"

Modified: gnunet-java/gradle/wrapper/gradle-wrapper.jar
===================================================================
(Binary files differ)

Modified: gnunet-java/gradle/wrapper/gradle-wrapper.properties
===================================================================
--- gnunet-java/gradle/wrapper/gradle-wrapper.properties        2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/gradle/wrapper/gradle-wrapper.properties        2014-03-11 
01:24:03 UTC (rev 32613)
@@ -1,6 +1,6 @@
-#Thu Aug 22 19:26:08 CEST 2013
+#Mon Mar 10 17:26:40 CET 2014
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-1.7-bin.zip
+distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip

Added: gnunet-java/gradlew.bat
===================================================================
--- gnunet-java/gradlew.bat                             (rev 0)
+++ gnunet-java/gradlew.bat     2014-03-11 01:24:03 UTC (rev 32613)
@@ -0,0 +1,90 @@
address@hidden "%DEBUG%" == "" @echo off
address@hidden 
##########################################################################
address@hidden
address@hidden  Gradle startup script for Windows
address@hidden
address@hidden 
##########################################################################
+
address@hidden Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
address@hidden Add default JVM options here. You can also use JAVA_OPTS and 
GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
address@hidden Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your 
PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
address@hidden Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "address@hidden" == "4" goto 4NT_args
+
+:win9xME_args
address@hidden Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
address@hidden Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
address@hidden Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
address@hidden Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% 
"-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" 
org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
address@hidden End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code 
instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

Modified: gnunet-java/lib/log4j-1.2.16.jar
===================================================================
(Binary files differ)

Modified: gnunet-java/lib/slf4j-api-1.6.4.jar
===================================================================
(Binary files differ)

Modified: gnunet-java/lib/slf4j-log4j12-1.6.4.jar
===================================================================
(Binary files differ)

Modified: gnunet-java/src/main/java/org/gnunet/arm/Arm.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/arm/Arm.java   2014-03-11 01:22:11 UTC 
(rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/arm/Arm.java   2014-03-11 01:24:03 UTC 
(rev 32613)
@@ -53,7 +53,7 @@
      * further connection attempts.
      *
      * @param serviceName name of the service
-     * @param resultHandler called with the result of the request
+     * @param resultHandler called with the result of the getRequestIdentifier
      */
     public void requestServiceStop(String serviceName, ResultHandler 
resultHandler) {
 

Modified: gnunet-java/src/main/java/org/gnunet/consensus/Consensus.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/consensus/Consensus.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/consensus/Consensus.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -89,7 +89,11 @@
                      AbsoluteTime startTime, AbsoluteTime deadline) {
         client = new Client("consensus", cfg);
         client.installReceiver(new ConsensusMessageReceiver());
+        String peersString = "";
+        for (PeerIdentity pi : peers)
+            peersString += pi + ", ";
 
+        logger.info("starting consensus with {} peers given to consensus 
({})", peers.length, peersString);
         JoinMessage m = new JoinMessage();
         m.numPeers = peers.length;
         m.peers = peers;

Modified: 
gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeDoneMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeDoneMessage.java
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeDoneMessage.java
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,7 +21,6 @@
 package org.gnunet.consensus.messages;
 
 
-import org.gnunet.construct.MessageUnion;
 import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
 

Modified: 
gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeMessage.java    
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/consensus/messages/ConcludeMessage.java    
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,8 +20,8 @@
 
 package org.gnunet.consensus.messages;
 
-import org.gnunet.construct.*;
-import org.gnunet.util.*;
+import org.gnunet.construct.UnionCase;
+import org.gnunet.util.GnunetMessage;
 
 /**
  * Notify the client of a new element.

Modified: 
gnunet-java/src/main/java/org/gnunet/consensus/messages/JoinMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/consensus/messages/JoinMessage.java    
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/consensus/messages/JoinMessage.java    
2014-03-11 01:24:03 UTC (rev 32613)
@@ -37,6 +37,7 @@
     public HashCode sessionId;
     @NestedMessage
     public AbsoluteTimeMessage startTime;
+    @NestedMessage
     public AbsoluteTimeMessage deadline;
     @VariableSizeArray(lengthField = "numPeers")
     public PeerIdentity[] peers;

Modified: 
gnunet-java/src/main/java/org/gnunet/consensus/messages/NewElementMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/consensus/messages/NewElementMessage.java  
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/consensus/messages/NewElementMessage.java  
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,7 +20,10 @@
 
 package org.gnunet.consensus.messages;
 
-import org.gnunet.construct.*;
+import org.gnunet.construct.FillWith;
+import org.gnunet.construct.UInt16;
+import org.gnunet.construct.UInt8;
+import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
 
 /**

Modified: gnunet-java/src/main/java/org/gnunet/construct/FrameSize.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/construct/FrameSize.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/construct/FrameSize.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,7 +20,10 @@
 
 package org.gnunet.construct;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Marker for the field storing the size of the enclosing frame in bytes.

Modified: 
gnunet-java/src/main/java/org/gnunet/construct/MessageIdAnnotationProcessor.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/construct/MessageIdAnnotationProcessor.java
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/construct/MessageIdAnnotationProcessor.java
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -35,10 +35,11 @@
 import javax.tools.StandardLocation;
 import java.io.IOException;
 import java.io.Writer;
-import java.lang.Integer;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
 
 
 /**

Modified: 
gnunet-java/src/main/java/org/gnunet/construct/ProtocolViolationException.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/construct/ProtocolViolationException.java  
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/construct/ProtocolViolationException.java  
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,8 +21,6 @@
 package org.gnunet.construct;
 
 
-import java.util.LinkedList;
-
 /**
  * Thrown when a received message is invalid.
  * 

Modified: gnunet-java/src/main/java/org/gnunet/construct/ReflectUtil.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/construct/ReflectUtil.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/construct/ReflectUtil.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,7 +21,6 @@
 package org.gnunet.construct;
 
 
-import java.lang.Integer;
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;

Modified: gnunet-java/src/main/java/org/gnunet/construct/parsers/FillParser.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/construct/parsers/FillParser.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/construct/parsers/FillParser.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -22,6 +22,7 @@
 
 import org.gnunet.construct.Message;
 import org.gnunet.construct.ReflectUtil;
+
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.nio.ByteBuffer;

Modified: 
gnunet-java/src/main/java/org/gnunet/construct/parsers/UnionParser.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/construct/parsers/UnionParser.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/construct/parsers/UnionParser.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,7 +21,6 @@
 package org.gnunet.construct.parsers;
 
 import org.gnunet.construct.*;
-import org.gnunet.construct.ProtocolViolationException;
 
 import java.lang.reflect.Field;
 import java.nio.ByteBuffer;

Modified: 
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeArrayParser.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeArrayParser.java
 2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeArrayParser.java
 2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,7 +21,6 @@
 package org.gnunet.construct.parsers;
 
 import org.gnunet.construct.Message;
-import org.gnunet.construct.ProtocolViolationException;
 import org.gnunet.construct.ReflectUtil;
 
 import java.lang.reflect.Array;

Modified: 
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeStringParser.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeStringParser.java
        2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/construct/parsers/VariableSizeStringParser.java
        2014-03-11 01:24:03 UTC (rev 32613)
@@ -44,7 +44,6 @@
 import org.gnunet.construct.ReflectUtil;
 import org.gnunet.construct.StringTerminationType;
 
-import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.nio.ByteBuffer;
 import java.util.List;

Modified: gnunet-java/src/main/java/org/gnunet/core/Core.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/core/Core.java 2014-03-11 01:22:11 UTC 
(rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/core/Core.java 2014-03-11 01:24:03 UTC 
(rev 32613)
@@ -25,7 +25,8 @@
 import org.gnunet.construct.MessageLoader;
 import org.gnunet.mq.Envelope;
 import org.gnunet.requests.MatchingRequestContainer;
-import org.gnunet.requests.RequestContainer;
+import org.gnunet.requests.Request;
+import org.gnunet.requests.RequestIdentifier;
 import org.gnunet.util.*;
 import org.grothoff.Runabout;
 import org.slf4j.Logger;
@@ -99,7 +100,7 @@
 
     /**
      * Peers that we were notified about being connected to them.
-     * Every connected peer is mapped to a generator for unique request IDs.
+     * Every connected peer is mapped to a generator for unique 
getRequestIdentifier IDs.
      */
     private HashMap<PeerIdentity, Integer> connectedPeers = Maps.newHashMap();
 
@@ -108,7 +109,7 @@
      */
     private MatchingRequestContainer<RequestIdentification, 
NotifyTransmitReadyRequest> ntrRequests;
 
-    public static class NotifyTransmitReadyRequest extends 
RequestContainer.Request {
+    public static class NotifyTransmitReadyRequest extends Request {
         private final int size;
         final public PeerIdentity target;
         final public long priority;
@@ -136,7 +137,7 @@
             return new Envelope(m);
         }
 
-        public void cancel() {
+        public void onCancel() {
             // do nothing
         }
     }
@@ -200,7 +201,8 @@
         public void visit(SendMessageReady m) {
             logger.debug("got SendMessageReady");
             RequestIdentification rid = new RequestIdentification(m.smrId, 
m.peer);
-            NotifyTransmitReadyRequest req = ntrRequests.getRequest(rid);
+            RequestIdentifier<NotifyTransmitReadyRequest> reqId = 
ntrRequests.getRequestIdentifier(rid);
+            NotifyTransmitReadyRequest req = reqId.getRequest();
 
             final SendMessage sm = new SendMessage();
             sm.cork = 0;
@@ -279,7 +281,7 @@
      * @param target      the identity of the receiver
      * @param size        the size of the message we want to transmit
      * @param transmitter called once the core service is ready to send message
-     * @return a handle to cancel the notification
+     * @return a handle to onCancel the notification
      */
     public Cancelable notifyTransmitReady(int priority, RelativeTime maxdelay,
                                           PeerIdentity target, int size, final 
MessageTransmitter transmitter) {

Modified: 
gnunet-java/src/main/java/org/gnunet/core/NotifyInboundTrafficMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/core/NotifyInboundTrafficMessage.java  
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/core/NotifyInboundTrafficMessage.java  
2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,8 +20,10 @@
 
 package org.gnunet.core;
 
-import org.gnunet.construct.*;
-import org.gnunet.util.ATSInformation;
+import org.gnunet.construct.FillWith;
+import org.gnunet.construct.NestedMessage;
+import org.gnunet.construct.UInt8;
+import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
 import org.gnunet.util.PeerIdentity;
 

Modified: gnunet-java/src/main/java/org/gnunet/core/RequestIdentification.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/core/RequestIdentification.java        
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/core/RequestIdentification.java        
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,6 +1,5 @@
 package org.gnunet.core;
 
-import org.gnunet.peerinfo.PeerInfo;
 import org.gnunet.util.PeerIdentity;
 
 

Modified: gnunet-java/src/main/java/org/gnunet/core/SendMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/core/SendMessage.java  2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/core/SendMessage.java  2014-03-11 
01:24:03 UTC (rev 32613)
@@ -22,7 +22,6 @@
 
 import org.gnunet.construct.NestedMessage;
 import org.gnunet.construct.UInt32;
-import org.gnunet.construct.UInt64;
 import org.gnunet.construct.UnionCase;
 import org.gnunet.util.AbsoluteTimeMessage;
 import org.gnunet.util.GnunetMessage;

Modified: gnunet-java/src/main/java/org/gnunet/core/SendMessageReady.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/core/SendMessageReady.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/core/SendMessageReady.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -36,14 +36,14 @@
     /**
      * How many bytes are allowed for transmission?
      * Guaranteed to be at least as big as the requested size,
-     * or ZERO if the request is rejected (will timeout,
+     * or ZERO if the getRequestIdentifier is rejected (will timeout,
      * peer disconnected, queue full, etc.).
      */
     @UInt16
     public int size;
 
     /**
-     * smrId from the request.
+     * smrId from the getRequestIdentifier.
      */
     @UInt16
     public int smrId;

Modified: 
gnunet-java/src/main/java/org/gnunet/dht/ClientPutConfirmationMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/ClientPutConfirmationMessage.java  
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/ClientPutConfirmationMessage.java  
2014-03-11 01:24:03 UTC (rev 32613)
@@ -31,7 +31,7 @@
     @UInt32
     public int reserved;
     /**
-     * UID used to identify request with the response
+     * UID used to identify getRequestIdentifier with the response
      */
     @UInt64
     public long uid;

Modified: gnunet-java/src/main/java/org/gnunet/dht/ClientPutMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/ClientPutMessage.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/ClientPutMessage.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -41,7 +41,7 @@
     @UInt32
     public int desiredReplicationLevel;
     /**
-     * UID used to identify request with the response
+     * UID used to identify getRequestIdentifier with the response
      */
     @UInt64
     public long uid;

Modified: gnunet-java/src/main/java/org/gnunet/dht/DistributedHashTable.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/DistributedHashTable.java  
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/DistributedHashTable.java  
2014-03-11 01:24:03 UTC (rev 32613)
@@ -23,7 +23,8 @@
 import com.google.common.base.Charsets;
 import org.gnunet.mq.Envelope;
 import org.gnunet.requests.MatchingRequestContainer;
-import org.gnunet.requests.RequestContainer;
+import org.gnunet.requests.Request;
+import org.gnunet.requests.RequestIdentifier;
 import org.gnunet.requests.SequentialRequestContainer;
 import org.gnunet.util.*;
 import org.gnunet.util.getopt.Argument;
@@ -31,7 +32,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.*;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * API for the gnunet dht service.
@@ -54,7 +57,7 @@
     private MatchingRequestContainer<Long, GetRequest> getRequests;
     private SequentialRequestContainer<MonitorRequest> monitorRequests;
 
-    private class PutRequest extends RequestContainer.Request {
+    private class PutRequest extends Request {
         public byte[] data;
         public HashCode key;
         public int replicationLevel;
@@ -79,12 +82,12 @@
             return new Envelope(cpm);
         }
 
-        public void cancel() {
+        public void onCancel() {
         }
     }
 
 
-    private class GetRequest extends RequestContainer.Request {
+    private class GetRequest extends Request {
         public long uid;
         public HashCode key;
         public ResultCallback cb;
@@ -106,12 +109,12 @@
             gm.uniqueId = uid;
             return new Envelope(gm);
         }
-        public void cancel() {
+        public void onCancel() {
 
         }
     }
 
-    private class MonitorRequest extends RequestContainer.Request {
+    private class MonitorRequest extends Request {
         public int blockType;
         public HashCode key;
         public MonitorGetHandler getHandler;
@@ -140,7 +143,7 @@
             return new Envelope(mss);
         }
 
-        public void cancel() {
+        public void onCancel() {
             // todo: use priority requests
             MonitorRequest cancelRequest = new MonitorRequest();
             cancelRequest.getHandler = null;
@@ -154,9 +157,9 @@
 
     private class DHTMessageReceiver extends RunaboutMessageReceiver {
         public void visit(ClientPutConfirmationMessage pcm) {
-            PutRequest thePutRequest = putRequests.getRequest(pcm.uid);
+            PutRequest thePutRequest = 
putRequests.getAndRetireRequest(pcm.uid);
             if (thePutRequest == null) {
-                logger.warn("request UID not found");
+                logger.warn("getRequestIdentifier UID not found");
                 return;
             }
             if (thePutRequest.cont != null) {
@@ -165,9 +168,9 @@
         }
 
         public void visit(ClientResultMessage rm) {
-            GetRequest theGetRequest = getRequests.getRequest(rm.uid);
+            GetRequest theGetRequest = getRequests.getAndRetireRequest(rm.uid);
             if (theGetRequest == null) {
-                logger.warn("request UID not found");
+                logger.warn("getRequestIdentifier UID not found");
                 return;
             }
             
theGetRequest.cb.handleResult(AbsoluteTime.fromNetwork(rm.expiration), rm.key, 
null, null,
@@ -176,14 +179,14 @@
         }
 
         public void visit(MonitorGetMessage monitorGetMessage) {
-            for (MonitorRequest monitorRequest : monitorRequests.iter()) {
+            for (RequestIdentifier<MonitorRequest> monitorRequest : 
monitorRequests.iter()) {
                 boolean typeOk = (monitorGetMessage.type == BlockType.ANY.val)
-                        || (monitorGetMessage.type == 
monitorRequest.blockType);
+                        || (monitorGetMessage.type == 
monitorRequest.getRequest().blockType);
                 boolean keyOk = monitorGetMessage.key.isAllZero()
-                        || monitorGetMessage.key.equals(monitorRequest.key);
+                        || 
monitorGetMessage.key.equals(monitorRequest.getRequest().key);
 
-                if (keyOk && typeOk && monitorRequest.getHandler != null) {
-                    monitorRequest.getHandler.onGet(monitorGetMessage.options, 
monitorGetMessage.type,
+                if (keyOk && typeOk && monitorRequest.getRequest().getHandler 
!= null) {
+                    
monitorRequest.getRequest().getHandler.onGet(monitorGetMessage.options, 
monitorGetMessage.type,
                             monitorGetMessage.hopCount, 
monitorGetMessage.desiredReplicationLevel, monitorGetMessage.getPath,
                             monitorGetMessage.key);
                 }
@@ -191,14 +194,14 @@
         }
 
         public void visit(MonitorGetRespMessage monitorGetRespMessage) {
-            for (MonitorRequest monitorRequest : monitorRequests.iter()) {
+            for (RequestIdentifier<MonitorRequest> monitorRequest : 
monitorRequests.iter()) {
                 boolean typeOk = (monitorGetRespMessage.type == 
BlockType.ANY.val)
-                        || (monitorGetRespMessage.type == 
monitorRequest.blockType);
+                        || (monitorGetRespMessage.type == 
monitorRequest.getRequest().blockType);
                 boolean keyOk = monitorGetRespMessage.key.isAllZero()
-                        || 
monitorGetRespMessage.key.equals(monitorRequest.key);
+                        || 
monitorGetRespMessage.key.equals(monitorRequest.getRequest().key);
 
-                if (keyOk && typeOk && monitorRequest.getResponseHandler != 
null) {
-                    monitorRequest.getResponseHandler.onGetResponse(
+                if (keyOk && typeOk && 
monitorRequest.getRequest().getResponseHandler != null) {
+                    
monitorRequest.getRequest().getResponseHandler.onGetResponse(
                             monitorGetRespMessage.type,
                             monitorGetRespMessage.getPath,
                             monitorGetRespMessage.putPath,
@@ -211,14 +214,14 @@
         }
 
         public void visit(MonitorPutMessage monitorPutMessage) {
-            for (MonitorRequest monitorRequest : monitorRequests.iter()) {
+            for (RequestIdentifier<MonitorRequest> monitorRequest : 
monitorRequests.iter()) {
                 boolean typeOk = (monitorPutMessage.type == BlockType.ANY.val)
-                        || (monitorPutMessage.type == 
monitorRequest.blockType);
+                        || (monitorPutMessage.type == 
monitorRequest.getRequest().blockType);
                 boolean keyOk = monitorPutMessage.key.isAllZero()
-                        || monitorPutMessage.key.equals(monitorRequest.key);
+                        || 
monitorPutMessage.key.equals(monitorRequest.getRequest().key);
 
-                if (keyOk && typeOk && monitorRequest.putHandler != null) {
-                    monitorRequest.putHandler.onPut(monitorPutMessage.options, 
monitorPutMessage.type,
+                if (keyOk && typeOk && monitorRequest.getRequest().putHandler 
!= null) {
+                    
monitorRequest.getRequest().putHandler.onPut(monitorPutMessage.options, 
monitorPutMessage.type,
                             monitorPutMessage.hopCount, 
monitorPutMessage.expirationTime,
                             monitorPutMessage.putPath, monitorPutMessage.key, 
monitorPutMessage.data);
                 }
@@ -274,14 +277,14 @@
     /**
      * Request results from the DHT.
      *
-     * @param timeout      timeout for the request
+     * @param timeout      timeout for the getRequestIdentifier
      * @param type         which type of data do we want to query for? (the 
DHT does not support TYPE_ANY)
      * @param key          the key we want to query
      * @param replication  how many peers do we want to ask?
      * @param routeOptions extra routing options, null for default
      * @param xquery       extra query parameters, defaults to null
      * @param cb           the callback object for results or failure 
indication
-     * @return a handle to cancel the request
+     * @return a handle to onCancel the getRequestIdentifier
      */
     public Cancelable startGet(RelativeTime timeout, int type, HashCode key,
                                int replication, EnumSet<RouteOption> 
routeOptions,
@@ -320,7 +323,7 @@
     }
 
     public static void main(String[] args) {
-        new Program(args) {
+        new Program() {
             @Argument(action = ArgumentAction.SET,
                     shortname = "p",
                     longname = "put",
@@ -390,7 +393,7 @@
                         @Override
                         public void cont(boolean success) {
                             if (success) {
-                                System.out.println("put request sent");
+                                System.out.println("put getRequestIdentifier 
sent");
                             } else {
                                 System.out.println("error");
                             }
@@ -444,6 +447,6 @@
                     });
                 }
             }
-        }.start();
+        }.start(args);
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/dht/MonitorGetMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/MonitorGetMessage.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/MonitorGetMessage.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -40,7 +40,7 @@
     public int options;
 
     /**
-     * The type of data in the request.
+     * The type of data in the getRequestIdentifier.
      */
     @UInt32
     public int type;

Modified: gnunet-java/src/main/java/org/gnunet/dht/MonitorGetRespMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/MonitorGetRespMessage.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/MonitorGetRespMessage.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -56,7 +56,7 @@
     public AbsoluteTimeMessage expiration;
 
     /**
-     * The key of the corresponding GET request.
+     * The key of the corresponding GET getRequestIdentifier.
      */
     @NestedMessage
     public HashCode key;

Modified: gnunet-java/src/main/java/org/gnunet/dht/MonitorPutMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/MonitorPutMessage.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/MonitorPutMessage.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -38,7 +38,7 @@
     public int options;
 
     /**
-     * The type of data in the request.
+     * The type of data in the getRequestIdentifier.
      */
     @UInt32
     public int type;

Modified: gnunet-java/src/main/java/org/gnunet/dht/MonitorStartStop.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/MonitorStartStop.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/MonitorStartStop.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -28,7 +28,7 @@
 import org.gnunet.util.HashCode;
 
 /**
- * Message to request monitoring messages, clients --> DHT service.
+ * Message to getRequestIdentifier monitoring messages, clients --> DHT 
service.
  */
 @UnionCase(153)
 public class MonitorStartStop implements GnunetMessage.Body {

Modified: gnunet-java/src/main/java/org/gnunet/dht/RouteOption.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/dht/RouteOption.java   2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/dht/RouteOption.java   2014-03-11 
01:24:03 UTC (rev 32613)
@@ -39,7 +39,7 @@
      */
     RECORD_ROUTE(2),
     /**
-     * This is a 'FIND-PEER' request, so approximate results are fine.
+     * This is a 'FIND-PEER' getRequestIdentifier, so approximate results are 
fine.
      */
     FIND_PEER(4),
     /**

Modified: gnunet-java/src/main/java/org/gnunet/gns/GNS.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/gns/GNS.java   2014-03-11 01:22:11 UTC 
(rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/gns/GNS.java   2014-03-11 01:24:03 UTC 
(rev 32613)
@@ -24,8 +24,12 @@
 import org.gnunet.gns.messages.ClientLookupResultMessage;
 import org.gnunet.mq.Envelope;
 import org.gnunet.requests.MatchingRequestContainer;
-import org.gnunet.requests.RequestContainer;
-import org.gnunet.util.*;
+import org.gnunet.requests.Request;
+import org.gnunet.requests.RequestIdentifier;
+import org.gnunet.util.Cancelable;
+import org.gnunet.util.Client;
+import org.gnunet.util.Configuration;
+import org.gnunet.util.RunaboutMessageReceiver;
 import org.gnunet.util.crypto.EcdsaPrivateKey;
 import org.gnunet.util.crypto.EcdsaPublicKey;
 import org.slf4j.Logger;
@@ -42,7 +46,7 @@
      */
     private MatchingRequestContainer<Long, LookupRequest> lookupRequests;
 
-    private class LookupRequest extends RequestContainer.Request {
+    private class LookupRequest extends Request {
         long uid;
         String name;
         EcdsaPublicKey zone;
@@ -85,12 +89,13 @@
 
     public class GNSMessageReceiver extends RunaboutMessageReceiver {
         public void visit(ClientLookupResultMessage m) {
-            LookupRequest r = lookupRequests.pollRequest(m.id);
+            RequestIdentifier<LookupRequest> r = 
lookupRequests.getRequestIdentifier(m.id);
             if (null == r) {
-                logger.warn("no matching request for lookup result");
+                logger.warn("no matching getRequestIdentifier for lookup 
result");
                 return;
             }
-            r.proc.process(m.records);
+            r.getRequest().proc.process(m.records);
+            r.retire();
         }
 
         @Override
@@ -132,7 +137,7 @@
      *                    shorten zone, we automatically add the respective 
zone
      *                    under that name)
      * @param proc function to call on result
-     * @return handle to the queued request
+     * @return handle to the queued getRequestIdentifier
      */
     public Cancelable lookup(String name,
                              EcdsaPublicKey zone,

Modified: gnunet-java/src/main/java/org/gnunet/gns/Gns.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/gns/Gns.java   2014-03-11 01:22:11 UTC 
(rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/gns/Gns.java   2014-03-11 01:24:03 UTC 
(rev 32613)
@@ -23,8 +23,9 @@
 import org.gnunet.gns.callbacks.LookupResultProcessor;
 import org.gnunet.gns.messages.ClientLookupMessage;
 import org.gnunet.gns.messages.ClientLookupResultMessage;
+import org.gnunet.requests.FixedMessageRequest;
 import org.gnunet.requests.MatchingRequestContainer;
-import org.gnunet.requests.SimpleRequest;
+import org.gnunet.requests.RequestIdentifier;
 import org.gnunet.util.*;
 import org.gnunet.util.crypto.EcdsaPrivateKey;
 import org.gnunet.util.crypto.EcdsaPublicKey;
@@ -40,7 +41,7 @@
     /**
      * All pending and active lookup requests.
      */
-    private MatchingRequestContainer<Long, 
SimpleRequest<LookupResultProcessor>> lookupRequests;
+    private MatchingRequestContainer<Long, 
FixedMessageRequest<LookupResultProcessor>> lookupRequests;
 
     /**
      * Request ID for lookup requests.
@@ -57,12 +58,12 @@
 
     public class GNSMessageReceiver extends RunaboutMessageReceiver {
         public void visit(ClientLookupResultMessage m) {
-            SimpleRequest<LookupResultProcessor> r = 
lookupRequests.pollRequest(m.id);
+            RequestIdentifier<FixedMessageRequest<LookupResultProcessor>> r = 
lookupRequests.getRequestIdentifier(m.id);
             if (null == r) {
-                logger.warn("no matching request for lookup result");
+                logger.warn("no matching getRequestIdentifier for lookup 
result");
                 return;
             }
-            r.getContext().process(m.records);
+            r.getRequest().getContext().process(m.records);
         }
 
         @Override
@@ -87,7 +88,7 @@
      */
     public Gns(Configuration cfg) {
         client = new Client("gns", cfg);
-        lookupRequests = new MatchingRequestContainer<Long, 
SimpleRequest<LookupResultProcessor>>(client);
+        lookupRequests = new MatchingRequestContainer<Long, 
FixedMessageRequest<LookupResultProcessor>>(client);
         client.installReceiver(new GNSMessageReceiver());
     }
 
@@ -104,7 +105,7 @@
      *                    shorten zone, we automatically add the respective 
zone
      *                    under that name)
      * @param proc function to call on result
-     * @return handle to the queued request
+     * @return handle to the queued getRequestIdentifier
      */
     public Cancelable lookup(String name,
                              EcdsaPublicKey zone,
@@ -126,7 +127,7 @@
         m.type = type;
         m.zone = zone;
 
-        return lookupRequests.addRequest(m.id, new 
SimpleRequest<LookupResultProcessor>(m, proc));
+        return lookupRequests.addRequest(m.id, new 
FixedMessageRequest<LookupResultProcessor>(m, proc));
     }
 
 

Modified: gnunet-java/src/main/java/org/gnunet/gns/GnsRecord.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/gns/GnsRecord.java     2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/gns/GnsRecord.java     2014-03-11 
01:24:03 UTC (rev 32613)
@@ -34,7 +34,6 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.HashMap;
 import java.util.Map;
 
 public class GnsRecord implements Message {

Modified: gnunet-java/src/main/java/org/gnunet/gns/GnsTool.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/gns/GnsTool.java       2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/gns/GnsTool.java       2014-03-11 
01:24:03 UTC (rev 32613)
@@ -10,7 +10,7 @@
 
 public class GnsTool {
     public static void main(String[] args) {
-        int ret = new Program(args) {
+        int ret = new Program() {
             @Argument(
                     shortname = "u",
                     longname = "lookup",
@@ -75,7 +75,7 @@
                 });
 
             }
-        }.start();
+        }.start(args);
         System.exit(ret);
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/gns/LookupResultProcessor.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/gns/LookupResultProcessor.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/gns/LookupResultProcessor.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -22,7 +22,7 @@
 
 
 /**
- * Processor for GNS request results.
+ * Processor for GNS getRequestIdentifier results.
  */
 public interface LookupResultProcessor {
     /**

Modified: 
gnunet-java/src/main/java/org/gnunet/gns/callbacks/LookupResultProcessor.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/gns/callbacks/LookupResultProcessor.java   
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/gns/callbacks/LookupResultProcessor.java   
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -23,7 +23,7 @@
 import org.gnunet.gns.GnsRecord;
 
 /**
- * Processor for GNS request results.
+ * Processor for GNS getRequestIdentifier results.
  */
 public interface LookupResultProcessor {
     /**

Modified: 
gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupMessage.java  
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupMessage.java  
2014-03-11 01:24:03 UTC (rev 32613)
@@ -31,7 +31,7 @@
 @UnionCase(500)
 public class ClientLookupMessage implements GnunetMessage.Body {
     /**
-     * Unique identifier for this request (for key collisions).
+     * Unique identifier for this getRequestIdentifier (for key collisions).
      */
     @UInt32
     public long id;

Modified: 
gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupResultMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupResultMessage.java
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/gns/messages/ClientLookupResultMessage.java
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -40,17 +40,19 @@
 
 package org.gnunet.gns.messages;
 
-import org.gnunet.construct.*;
+import org.gnunet.construct.UInt32;
+import org.gnunet.construct.UnionCase;
+import org.gnunet.construct.VariableSizeArray;
 import org.gnunet.gns.GnsRecord;
 import org.gnunet.util.GnunetMessage;
 
 /**
- * Message GNS service to client as a response to a lookup request.
+ * Message GNS service to client as a response to a lookup 
getRequestIdentifier.
  */
 @UnionCase(501)
 public class ClientLookupResultMessage implements GnunetMessage.Body {
     /**
-     * Unique identifier for this request.
+     * Unique identifier for this getRequestIdentifier.
      */
     @UInt32
     public long id;

Modified: gnunet-java/src/main/java/org/gnunet/identity/Identity.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/identity/Identity.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/identity/Identity.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -24,7 +24,8 @@
 import com.google.common.collect.Lists;
 import org.gnunet.identity.messages.*;
 import org.gnunet.mq.Envelope;
-import org.gnunet.requests.RequestContainer;
+import org.gnunet.requests.Request;
+import org.gnunet.requests.RequestIdentifier;
 import org.gnunet.requests.SequentialRequestContainer;
 import org.gnunet.util.*;
 import org.gnunet.util.crypto.EcdsaPrivateKey;
@@ -124,7 +125,7 @@
         }
     }
 
-    public abstract class IdentityRequest extends RequestContainer.Request {
+    public abstract class IdentityRequest extends Request {
 
         public void onError(String errorMessage) {
             throw new AssertionError("unexpected error message: " + 
errorMessage);
@@ -353,7 +354,8 @@
         }
 
         public void visit(ResultCodeMessage m) {
-            IdentityRequest r = requests.getRequest();
+            RequestIdentifier<IdentityRequest> rId = 
requests.getRequestIdentifier();
+            IdentityRequest r = rId.getRequest();
             if (null == r) {
                 logger.warn("unsolicited result code message");
                 return;
@@ -363,11 +365,12 @@
             } else {
                 r.onResult();
             }
-            requests.next();
+            rId.retire();
         }
 
         public void visit(SetDefaultMessage m) {
-            IdentityRequest r = requests.getRequest();
+            RequestIdentifier<IdentityRequest> rId = 
requests.getRequestIdentifier();
+            IdentityRequest r = rId.getRequest();
             if (!(r instanceof GetDefaultRequest)) {
                 logger.error("unexpected 'default ego' response");
                 return;
@@ -376,6 +379,7 @@
             Ego ego = getEgoForKey(m.privateKey);
             if (null != ego)
                 gdr.identityCallback.onEgo(ego);
+            rId.retire();
         }
 
         public void visit(final UpdateListMessage m) {

Modified: 
gnunet-java/src/main/java/org/gnunet/identity/messages/ResultCodeMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/identity/messages/ResultCodeMessage.java   
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/identity/messages/ResultCodeMessage.java   
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -100,7 +100,9 @@
 
 package org.gnunet.identity.messages;
 
-import org.gnunet.construct.*;
+import org.gnunet.construct.UInt32;
+import org.gnunet.construct.UnionCase;
+import org.gnunet.construct.ZeroTerminatedString;
 import org.gnunet.util.GnunetMessage;
 
 /**

Modified: gnunet-java/src/main/java/org/gnunet/mesh/ClientConnectMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/mesh/ClientConnectMessage.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/mesh/ClientConnectMessage.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,6 +1,7 @@
 package org.gnunet.mesh;
 
-import org.gnunet.construct.*;
+import org.gnunet.construct.IntegerFill;
+import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
 
 /**

Modified: gnunet-java/src/main/java/org/gnunet/mesh/ConnectHandler.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/mesh/ConnectHandler.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/mesh/ConnectHandler.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,6 +1,5 @@
 package org.gnunet.mesh;
 
-import org.gnunet.peerinfo.PeerInfo;
 import org.gnunet.util.PeerIdentity;
 
 /**

Modified: gnunet-java/src/main/java/org/gnunet/mesh/DataMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/mesh/DataMessage.java  2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/mesh/DataMessage.java  2014-03-11 
01:24:03 UTC (rev 32613)
@@ -1,8 +1,10 @@
 package org.gnunet.mesh;
 
-import org.gnunet.construct.*;
+import org.gnunet.construct.FillWith;
+import org.gnunet.construct.UInt32;
+import org.gnunet.construct.UInt8;
+import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
-import org.gnunet.util.PeerIdentity;
 
 /**
  * ...

Modified: gnunet-java/src/main/java/org/gnunet/mesh/MeshRunabout.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/mesh/MeshRunabout.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/mesh/MeshRunabout.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -1,6 +1,5 @@
 package org.gnunet.mesh;
 
-import org.gnunet.util.PeerIdentity;
 import org.grothoff.Runabout;
 
 /**

Modified: gnunet-java/src/main/java/org/gnunet/mesh/TunnelDestroyMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/mesh/TunnelDestroyMessage.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/mesh/TunnelDestroyMessage.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,11 +1,9 @@
 package org.gnunet.mesh;
 
 import org.gnunet.construct.FixedSizeIntegerArray;
-import org.gnunet.construct.NestedMessage;
 import org.gnunet.construct.UInt32;
 import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
-import org.gnunet.util.PeerIdentity;
 
 /**
  * ...

Modified: gnunet-java/src/main/java/org/gnunet/mq/Envelope.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/mq/Envelope.java       2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/mq/Envelope.java       2014-03-11 
01:24:03 UTC (rev 32613)
@@ -26,10 +26,10 @@
 
     public void cancel() {
         if (parentQueue == null)
-            throw new AssertionError("can not cancel an unqueued message");
+            throw new AssertionError("can not onCancel an unqueued message");
     }
 
-    /* pkg-private */ void invokeSentNotification() {
+    void invokeSentNotification() {
         if (null != notifySentHandler)
             notifySentHandler.onSent();
     }

Modified: gnunet-java/src/main/java/org/gnunet/mq/MessageQueue.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/mq/MessageQueue.java   2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/mq/MessageQueue.java   2014-03-11 
01:24:03 UTC (rev 32613)
@@ -88,7 +88,7 @@
     /**
      * Cancel sending an envelope. The envelope must be queued in this message 
queue.
      *
-     * @param ev the envelope to cancel
+     * @param ev the envelope to onCancel
      */
     /* pkg-private */ void cancelEnvelope(Envelope ev) {
         if (null == currentEnvelope)

Modified: gnunet-java/src/main/java/org/gnunet/nse/NetworkSizeEstimation.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/nse/NetworkSizeEstimation.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/nse/NetworkSizeEstimation.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -83,7 +83,7 @@
 
 
     /**
-     * A handle for a subscription to the network size estimation service, may 
be used to cancel the
+     * A handle for a subscription to the network size estimation service, may 
be used to onCancel the
      * subscription.
      */
     public class Subscription implements Cancelable {
@@ -112,7 +112,7 @@
      * Subscribe for updates from the service.
      *
      * @param s callback for updates
-     * @return a subscription handle that may be used to cancel the 
subscription
+     * @return a subscription handle that may be used to onCancel the 
subscription
      */
     public Cancelable subscribe(Subscriber s) {
         subscribers.add(s);
@@ -141,7 +141,7 @@
     }
 
     public static void main(String[] args) {
-        new Program(args) {
+        new Program() {
             @Argument(action = ArgumentAction.SET,
                     shortname = "w",
                     longname = "watch",
@@ -162,6 +162,6 @@
                 };
                 svc.subscribe(subscriber);
             }
-        }.start();
+        }.start(args);
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/nse/UpdateMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/nse/UpdateMessage.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/nse/UpdateMessage.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -1,7 +1,9 @@
 package org.gnunet.nse;
 
-import org.gnunet.construct.*;
 import org.gnunet.construct.DoubleValue;
+import org.gnunet.construct.NestedMessage;
+import org.gnunet.construct.UInt32;
+import org.gnunet.construct.UnionCase;
 import org.gnunet.util.AbsoluteTimeMessage;
 import org.gnunet.util.GnunetMessage;
 

Modified: gnunet-java/src/main/java/org/gnunet/peerinfo/ListAllPeersMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/peerinfo/ListAllPeersMessage.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/peerinfo/ListAllPeersMessage.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,11 +20,9 @@
 
 package org.gnunet.peerinfo;
 
-import org.gnunet.construct.NestedMessage;
 import org.gnunet.construct.UInt32;
 import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
-import org.gnunet.util.PeerIdentity;
 
 /**
  * Message requesting a listing of all known peers,

Modified: gnunet-java/src/main/java/org/gnunet/peerinfo/PeerInfo.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/peerinfo/PeerInfo.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/peerinfo/PeerInfo.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -22,7 +22,7 @@
 
 import org.gnunet.hello.HelloMessage;
 import org.gnunet.mq.Envelope;
-import org.gnunet.requests.RequestContainer;
+import org.gnunet.requests.Request;
 import org.gnunet.requests.SequentialRequestContainer;
 import org.gnunet.util.*;
 import org.slf4j.Logger;
@@ -47,7 +47,7 @@
      */
     private SequentialRequestContainer<PeerIterateRequest> iterateRequests;
 
-    private class PeerIterateRequest extends RequestContainer.Request {
+    private class PeerIterateRequest extends Request {
         public PeerIdentity peer;
         public PeerProcessor peerProcessor;
         public boolean friendOnly;
@@ -72,17 +72,16 @@
             }
         }
 
-        public void cancel() {
+        public void onCancel() {
             canceled = true;
         }
     }
 
     private class PeerInfoMessageReceiver extends RunaboutMessageReceiver {
         public void visit(InfoEnd infoEnd) {
-            PeerIterateRequest r = iterateRequests.getRequest();
+            PeerIterateRequest r = iterateRequests.getAndRetireRequest();
             if (!r.canceled)
                 r.peerProcessor.onEnd();
-            iterateRequests.next();
         }
         public void visit(InfoMessage infoMessage) {
             PeerIterateRequest r = iterateRequests.getRequest();
@@ -102,9 +101,6 @@
         client = new Client("peerinfo", cfg);
         client.installReceiver(new PeerInfoMessageReceiver());
         iterateRequests = new 
SequentialRequestContainer<PeerIterateRequest>(client);
-        // Make sure that new requests are only sent once the old request has 
finished.
-        // Otherwise, the peerinfo service would send the answers interleaved.
-        iterateRequests.setOverlap(false);
     }
 
     /**
@@ -136,7 +132,7 @@
     }
 
     public static void main(String... args) {
-        new Program(args) {
+        new Program() {
             @Override
             public void run() {
                 final PeerInfo peerInfo = new PeerInfo(getConfiguration());
@@ -153,6 +149,6 @@
                     }
                 });
             }
-        }.start();
+        }.start(args);
     }
 }

Modified: 
gnunet-java/src/main/java/org/gnunet/requests/MatchingRequestContainer.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/requests/MatchingRequestContainer.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/requests/MatchingRequestContainer.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,3 +1,24 @@
+/*
+ This file is part of GNUnet.
+ (C) 2014 Christian Grothoff (and other contributing authors)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ */
+
+
 package org.gnunet.requests;
 
 import com.google.common.collect.Maps;
@@ -8,13 +29,13 @@
 
 
 /**
- * Container for requests that are responded to with a matching request 
identification
+ * Container for requests that are responded to with a matching 
getRequestIdentifier identification
  */
-public class MatchingRequestContainer<K, T extends RequestContainer.Request> 
extends RequestContainer {
+public class MatchingRequestContainer<K, T extends Request> extends 
RequestContainer {
     /**
      * All queued requests.
      */
-    private Map<K,T> requests = Maps.newHashMap();
+    private Map<K,Identifier> requests = Maps.newHashMap();
 
     /**
      * Message queue to send to requests over.
@@ -25,48 +46,48 @@
         this.mq = mq;
     }
 
+    private class Identifier extends SimpleRequestIdentifier<T> {
+        final K key;
+
+        public Identifier(T request, K key) {
+            super(request);
+            this.key = key;
+        }
+
+        @Override
+        public void retire() {
+            super.retire();
+            requests.remove(key);
+        }
+    }
+
     public Cancelable addRequest(K key, final T request) {
         if (requests.containsKey(key))
-            throw new AssertionError("key already present in request 
container");
-        requests.put(key, request);
-        mq.send(request.assembleRequest());
-        return new Cancelable() {
-            @Override
-            public void cancel() {
-                setRequestCancelled(request);
-                if (isRequestTransmitting(request)) {
-                    cancelRequestTransmission(request);
-                } else {
-                    request.cancel();
-                }
-            }
-        };
+            throw new AssertionError("key already present in 
getRequestIdentifier container");
+        Identifier identifier = new Identifier(request, key);
+        requests.put(key, identifier);
+        identifier.send(mq);
+        return identifier;
     }
 
     @Override
     public void restart() {
-        Map<K,T> requestsOld = requests;
+        Map<K, Identifier> requestsOld = requests;
         requests = Maps.newHashMap();
-        for (Map.Entry<K,T> e : requestsOld.entrySet()) {
-            if (!isRequestCancelled(e.getValue())) {
-                setRequestTransmitting(e.getValue(), false);
-                addRequest(e.getKey(), e.getValue());
-            }
+        for (Map.Entry<K,Identifier> e : requestsOld.entrySet()) {
+            addRequest(e.getKey(), e.getValue().getRequest());
         }
     }
 
-    public T getRequest(K key) {
+    public RequestIdentifier<T> getRequestIdentifier(K key) {
         return requests.get(key);
     }
 
-    /**
-     * Retrieve the request matching the given key, and remove it.
-     * Return null if there is no matching request.
-     *
-     * @param key key to look for
-     * @return request, or null
-     */
-    public T pollRequest(K key) {
-        return requests.remove(key);
+    public T getAndRetireRequest(K key) {
+        RequestIdentifier<T> i = getRequestIdentifier(key);
+        if (null == i)
+            return null;
+        i.retire();
+        return i.getRequest();
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/requests/RequestContainer.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/requests/RequestContainer.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/requests/RequestContainer.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,90 +1,31 @@
-package org.gnunet.requests;
+/*
+ This file is part of GNUnet.
+ (C) 2014 Christian Grothoff (and other contributing authors)
 
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
 
-import org.gnunet.mq.Envelope;
-import org.gnunet.util.Cancelable;
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
 
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ */
+
+package org.gnunet.requests;
+
 /**
  * Container for requests to a service.
  */
 public abstract class RequestContainer {
     /**
-     * Do we allow sending pending requests while
-     * other requests are still active (true), or do we send
-     * requests one-by-one (false)?
+     * Re-send all active and pending requests.
      */
-    protected boolean overlap = true;
-
-    /**
-     * A request that can be put in a request container.
-     */
-    public abstract static class Request {
-        private boolean transmitting;
-        private boolean canceled;
-        private Cancelable cancelRequest;
-
-        /**
-         * Create an envelope for executing the request.
-         *
-         * @return Envelope to be sent to the service with the request message.
-         */
-        public abstract Envelope assembleRequest();
-
-        /**
-         * Implement cancellation logic for requests.
-         * Only called when the request has already been sent to the service.
-         *
-         * By default, canceling a request throws an exception.
-         */
-        public void cancel() {
-            throw new AssertionError("request of type " + this.getClass() + " 
can not be canceled (not implemented)");
-        }
-    }
-
-    /**
-     * Re-send all requests in the queue that have not been canceled.
-     */
     public abstract void restart();
-
-    /**
-     * Allow or disallow requests to be send while other requests in the queue 
have not been completed.
-     *
-     * @param overlap true to allow overlapped requests, false to disallow them
-     */
-    public void setOverlap(boolean overlap) {
-        this.overlap = overlap;
-    }
-
-    /**
-     * Check if the given request is transmitting, that is, the request
-     * is waiting to be sent to the service.
-     *
-     * @param r request
-     * @return whether the request is still being transmitted
-     */
-    protected boolean isRequestTransmitting(Request r) {
-        return r.transmitting;
-    }
-
-    protected void setRequestTransmitting(Request r, boolean transmitting) {
-        r.transmitting = transmitting;
-    }
-
-    protected void setRequestTransmissionCancel(Request request, Cancelable 
cancel) {
-        request.cancelRequest = cancel;
-    }
-
-    protected void cancelRequestTransmission(Request r) {
-        r.cancelRequest.cancel();
-        r.cancelRequest = null;
-    }
-
-    protected void setRequestCancelled(Request r) {
-        r.canceled = true;
-    }
-
-    protected boolean isRequestCancelled(Request r) {
-        return r.canceled;
-    }
-
 }

Modified: 
gnunet-java/src/main/java/org/gnunet/requests/SequentialRequestContainer.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/requests/SequentialRequestContainer.java   
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/requests/SequentialRequestContainer.java   
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,86 +1,153 @@
+/*
+ This file is part of GNUnet.
+ (C) 2014 Christian Grothoff (and other contributing authors)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ */
+
 package org.gnunet.requests;
 
-import org.gnunet.mq.Envelope;
 import org.gnunet.mq.MessageQueue;
-import org.gnunet.mq.NotifySentHandler;
-import org.gnunet.util.Cancelable;
 
 import java.util.LinkedList;
 
 /**
  * Container for requests that are responded to in sequential order.
  */
-public class SequentialRequestContainer<T extends RequestContainer.Request> 
extends RequestContainer {
-    private LinkedList<T> requests = new LinkedList<T>();
-    private MessageQueue mq;
+public class SequentialRequestContainer<T extends Request> extends 
RequestContainer {
+    /**
+     * Allow overlapping requests.
+     */
+    private boolean overlap;
+    /**
+     * Request in our queue with information about them.
+     */
+    private LinkedList<Identifier> requests = new LinkedList<Identifier>();
+    /**
+     * Message queue that is used to send envelopes.
+     */
+    private final MessageQueue mq;
 
-    int requestsActive = 0;
+    /**
+     * Number of active requests.
+     */
+    private int requestsActive = 0;
 
-    public SequentialRequestContainer(MessageQueue mq) {
+    /**
+     * Create a sequential request container that sends messages with the given
+     * message queue.
+     *
+     * @param mq message queue to send messages with
+     * @param overlap allow sending requests while other request have not yet 
completed
+     */
+    public SequentialRequestContainer(MessageQueue mq, boolean overlap) {
         this.mq = mq;
+        this.overlap = overlap;
     }
+    /**
+     * Create a sequential request container that sends messages with the given
+     * message queue.  Do not allow other requests to be send while the 
current request
+     * is still active.
+     *
+     * @param mq message queue to send messages with
+     */
+    public SequentialRequestContainer(MessageQueue mq) {
+       this(mq, false);
+    }
+    /**
+     * Get the current request's identifier.
+     *
+     * @return current request
+     */
+    public RequestIdentifier<T> getRequestIdentifier() {
+        return requests.peekFirst();
+    }
 
+    /**
+     * Get the current request and retire it.
+     * If there is no current request, null will be returned.
+     *
+     * @return current request
+     */
+    public T getAndRetireRequest() {
+        RequestIdentifier<T> i = getRequestIdentifier();
+        if (null == i)
+            return null;
+        i.retire();
+        return i.getRequest();
+    }
+
+    public Iterable<RequestIdentifier<T>> iter() {
+        return (Iterable) requests;
+    }
+
+    /**
+     * Get the current request.
+     *
+     * @return the current request.
+     */
     public T getRequest() {
-        return requests.getFirst();
+        RequestIdentifier<T> i = getRequestIdentifier();
+        if (null == i)
+            return null;
+        return i.getRequest();
     }
 
-    public void next() {
-        if (requestsActive == 0 || requests.isEmpty())
-            throw new AssertionError();
-        requestsActive--;
-        requests.removeFirst();
-        if (requestsActive == 0 && !requests.isEmpty()) {
-            Request r = requests.getFirst();
-            setRequestTransmitting(r, true);
-            Envelope ev = r.assembleRequest();
-            setRequestTransmissionCancel(r, ev);
-            mq.send(r.assembleRequest());
-            requestsActive++;
+    /**
+     * A request identifier in a sequential request container.
+     */
+    private class Identifier extends SimpleRequestIdentifier<T> {
+        public Identifier(T request) {
+            super(request);
         }
+
+        @Override
+        public void retire() {
+            super.retire();
+            if (requestsActive == 0 || requests.isEmpty())
+                throw new AssertionError();
+            boolean found = requests.remove(this);
+            if (!found)
+                throw new AssertionError("request not in queue");
+            requestsActive--;
+            Identifier next = requests.peekFirst();
+            if (null == next || next.queued)
+                return;
+            if (requestsActive == 0 || overlap)
+                next.send(mq);
+        }
     }
 
-    public Cancelable addRequest(final T request) {
-        requests.addLast(request);
+    public RequestIdentifier<T> addRequest(final T request) {
+        final Identifier identifier = new Identifier(request);
+        requests.addLast(identifier);
+        // only send immediately if we are allowed to
         if (overlap || requestsActive == 0) {
-            requestsActive++;
-            setRequestTransmitting(request, true);
-            Envelope ev = request.assembleRequest();
-            ev.notifySent(new NotifySentHandler() {
-                @Override
-                public void onSent() {
-                    setRequestTransmitting(request, false);
-                }
-            });
-            setRequestTransmissionCancel(request, ev);
-            mq.send(request.assembleRequest());
+            identifier.send(mq);
+            requestsActive += 1;
         }
-        return new Cancelable() {
-            @Override
-            public void cancel() {
-                setRequestCancelled(request);
-                if (isRequestTransmitting(request)) {
-                    cancelRequestTransmission(request);
-                } else {
-                    request.cancel();
-                }
-            }
-        };
+        return identifier;
     }
 
     @Override
     public void restart() {
-        LinkedList<T> requestsOld = requests;
-        requests = new LinkedList<T>();
-        for (T r : requestsOld) {
-            if (!isRequestCancelled(r)) {
-                setRequestTransmitting(r, false);
-                addRequest(r);
-            }
+        LinkedList<Identifier> requestsOld = requests;
+        requests = new LinkedList<Identifier>();
+        for (Identifier r : requestsOld) {
+            addRequest(r.getRequest());
         }
     }
-
-
-    public Iterable<T> iter() {
-        return requests;
-    }
 }

Modified: gnunet-java/src/main/java/org/gnunet/requests/package-info.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/requests/package-info.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/requests/package-info.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,6 +1,6 @@
 /*
  This file is part of GNUnet.
- (C) 2011, 2012 Christian Grothoff (and other contributing authors)
+ (C) 2014 Christian Grothoff (and other contributing authors)
 
  GNUnet is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
@@ -18,7 +18,6 @@
  Boston, MA 02111-1307, USA.
  */
 
-
 /**
  * General mechanism for queueing requests to a service.
  */

Modified: gnunet-java/src/main/java/org/gnunet/secretsharing/Ciphertext.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/secretsharing/Ciphertext.java  
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/secretsharing/Ciphertext.java  
2014-03-11 01:24:03 UTC (rev 32613)
@@ -28,7 +28,7 @@
 import java.math.BigInteger;
 
 /**
- * ElGamal ciphertext
+ * ElGamal ciphertext.
  */
 public class Ciphertext implements Message {
     @FixedSizeIntegerArray(signed = true, bitSize = 8, length = 
Parameters.elgamalBits / 8)
@@ -82,4 +82,17 @@
                 Parameters.elgamalBits);
         return ciphertext;
     }
+
+    /**
+     * Get the ciphertext that is the identity for multiplication.
+     *
+     * @return multiplicative identity ciphertext
+     */
+    public static Ciphertext identity() {
+        Ciphertext ciphertext = new Ciphertext();
+        ciphertext.allocate();
+        ciphertext.c_1 = BigIntegers.serializeUnsigned(BigInteger.ONE, 
Parameters.elgamalBits);
+        ciphertext.c_2 = BigIntegers.serializeUnsigned(BigInteger.ONE, 
Parameters.elgamalBits);
+        return ciphertext;
+    }
 }

Modified: gnunet-java/src/main/java/org/gnunet/secretsharing/KeyGeneration.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/secretsharing/KeyGeneration.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/secretsharing/KeyGeneration.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -76,7 +76,7 @@
     }
 
     /**
-     * Disconnect from the secretsharing service and cancel the operation.
+     * Disconnect from the secretsharing service and onCancel the operation.
      * The SecretReadyCallback will not be called after calling disconnect.
      */
     public void disconnect() {

Modified: gnunet-java/src/main/java/org/gnunet/secretsharing/Plaintext.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/secretsharing/Plaintext.java   
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/secretsharing/Plaintext.java   
2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,7 +20,6 @@
 
 package org.gnunet.secretsharing;
 
-import com.google.common.base.Preconditions;
 import org.gnunet.construct.FixedSizeIntegerArray;
 import org.gnunet.construct.Message;
 import org.gnunet.util.BigIntegers;
@@ -42,13 +41,13 @@
 
     public long bruteForceDiscreteLog(final long l) {
         BigInteger needle = new BigInteger(1, bits);
-        for (long i = -l; i < l; i++) {
+        for (long i = -l; i <= l; i++) {
             BigInteger val;
             val = Parameters.elgamalG.modPow(BigInteger.valueOf(l), 
Parameters.elgamalP);
             if (val.equals(needle))
                 return i;
         }
-        throw new ArithmeticException("discrete log has no solution in given 
range");
+        throw new ArithmeticException(String.format("discrete log has no 
solution in range [%s, %s]", -l, l));
     }
 
     public Ciphertext encrypt(ThresholdPublicKey publicKey) {

Modified: 
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/ClientDecryptMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/ClientDecryptMessage.java
       2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/ClientDecryptMessage.java
       2014-03-11 01:24:03 UTC (rev 32613)
@@ -28,7 +28,7 @@
 import org.gnunet.util.GnunetMessage;
 
 /**
- * Sent by the client to the service to request the cooperative decryption of a
+ * Sent by the client to the service to getRequestIdentifier the cooperative 
decryption of a
  * ciphertext.
  */
 @UnionCase(781)

Modified: 
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/GenerateMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/GenerateMessage.java
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/secretsharing/messages/GenerateMessage.java
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -26,7 +26,10 @@
 import org.gnunet.construct.UInt16;
 import org.gnunet.construct.UnionCase;
 import org.gnunet.construct.VariableSizeArray;
-import org.gnunet.util.*;
+import org.gnunet.util.AbsoluteTimeMessage;
+import org.gnunet.util.GnunetMessage;
+import org.gnunet.util.HashCode;
+import org.gnunet.util.PeerIdentity;
 
 
 @UnionCase(780)

Modified: gnunet-java/src/main/java/org/gnunet/statistics/GetRequest.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/statistics/GetRequest.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/statistics/GetRequest.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,16 +1,13 @@
 package org.gnunet.statistics;
 
 import org.gnunet.mq.Envelope;
-import org.gnunet.mq.MessageQueue;
-import org.gnunet.requests.RequestContainer;
+import org.gnunet.requests.Request;
+import org.gnunet.statistics.messages.GetMessage;
 
-/**
- */
-public class GetRequest extends RequestContainer.Request {
+class GetRequest extends Request {
     private final String subsystem;
     private final String name;
     public final StatisticsReceiver receiver;
-    private RequestContainer parent;
 
     public GetRequest(String subsystem, String name, StatisticsReceiver 
receiver) {
         this.subsystem = subsystem;
@@ -27,5 +24,6 @@
     }
 
     public void cancel() {
+        // nothing we can do here (statistics service has no message to cancel 
requests)
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/statistics/Statistics.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/statistics/Statistics.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/statistics/Statistics.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -18,19 +18,17 @@
  Boston, MA 02111-1307, USA.
  */
 
-/*
- * The stuff below does nothing whatsoever, first milestone of
- * this project is to implement the StatisticsService api
- * 
- */
-
 package org.gnunet.statistics;
 
 import org.gnunet.requests.MatchingRequestContainer;
+import org.gnunet.requests.RequestIdentifier;
 import org.gnunet.requests.SequentialRequestContainer;
+import org.gnunet.requests.TimeoutHandler;
+import org.gnunet.statistics.messages.GetResponseEndMessage;
+import org.gnunet.statistics.messages.GetResponseMessage;
+import org.gnunet.statistics.messages.SetMessage;
+import org.gnunet.statistics.messages.WatchResponseMessage;
 import org.gnunet.util.*;
-import org.gnunet.util.getopt.Argument;
-import org.gnunet.util.getopt.ArgumentAction;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,39 +46,68 @@
     /**
      * Client connecting us to the statistics service.
      */
-    private final Client client;
+    private Client client;
 
-    SequentialRequestContainer<SetRequest> setRequests;
-    SequentialRequestContainer<GetRequest> getRequests;
-    MatchingRequestContainer<Long,WatchRequest> watchRequests;
+    /**
+     * All request to the service for getting a value.
+     */
+    private final SequentialRequestContainer<GetRequest> getRequests;
 
+    /**
+     * All requests to the service for watching a value.
+     */
+    private final MatchingRequestContainer<Long,WatchRequest> watchRequests;
+
+    /**
+     * Do we wait for the final 'TestMessage' from the service and
+     * do not accept any new requests?
+     */
     private boolean destroyRequested;
 
-    private long wid = 0;
+    /**
+     * Next unused ID to identity watch requests/responses.
+     */
+    private long nextWatchId = 0;
 
+    /**
+     * Timeout when waiting for the TestMessage after destruction of
+     * this statistics handle has been requested.
+     */
+    private Scheduler.TaskIdentifier destroyTimeout;
+
+    /**
+     * Messages from the statistics service are dispatched to an instance of 
this class.
+     */
     public class StatisticsMessageReceiver extends RunaboutMessageReceiver {
         public void visit(GetResponseMessage m) {
-            GetRequest r = getRequests.getRequest();
+            RequestIdentifier<GetRequest> r = 
getRequests.getRequestIdentifier();
             if (r != null)
-                   r.receiver.onReceive(m.subsystemName, m.statisticName, 
m.value);
+                   r.getRequest().receiver.onReceive(m.subsystemName, 
m.statisticName, m.value);
         }
 
-        public void visit(GetResponseEndMessage m) {
-            GetRequest r = getRequests.getRequest();
-            if (r != null)
-                r.receiver.onDone();
-            //noinspection ConstantConditions
-            if (getRequests != null)
-                getRequests.next();
+        public void visit(@SuppressWarnings("UnusedParameters") 
GetResponseEndMessage m) {
+            RequestIdentifier<GetRequest> r = 
getRequests.getRequestIdentifier();
+            if (r != null) {
+                r.retire();
+                r.getRequest().receiver.onDone();
+            }
         }
 
-        public void visit(TestMessage m) {
-            System.out.println("got back TEST message");
+        public void visit(@SuppressWarnings("UnusedParameters") TestMessage m) 
{
+            // The TestMessage indicates that the statistics service received 
all our
+            // messages, we can disconnect.
+            if (null != destroyTimeout) {
+                destroyTimeout.cancel();
+                destroyTimeout = null;
+            } else {
+                logger.error("protocol violation: destroy timeout is 'null' 
but got test message");
+            }
             client.disconnect();
         }
 
         public void visit(WatchResponseMessage wrm) {
-            WatchRequest r = watchRequests.getRequest((long) wrm.wid);
+            RequestIdentifier<WatchRequest> ri = 
watchRequests.getRequestIdentifier((long) wrm.wid);
+            WatchRequest r = ri.getRequest();
             if (r != null) {
                 r.watcher.onReceive(r.subsystem, r.name, wrm.value);
             }
@@ -88,12 +115,19 @@
 
         @Override
         public void handleError() {
+            if (null == client)
+                throw new AssertionError();
             if (!destroyRequested) {
                 client.reconnect();
                 getRequests.restart();
-                setRequests.restart();
                 watchRequests.restart();
             }
+            // if everything is shutting down, maybe the statistics service
+            // was shut down, and can't respond with the TestMessage anymore.
+            if (null != destroyTimeout) {
+                destroyTimeout.cancel();
+                destroyTimeout = null;
+            }
         }
     }
 
@@ -101,26 +135,32 @@
         client = new Client("statistics", cfg);
         client.installReceiver(new StatisticsMessageReceiver());
         getRequests = new SequentialRequestContainer<GetRequest>(client);
-        setRequests = new SequentialRequestContainer<SetRequest>(client);
         watchRequests = new MatchingRequestContainer<Long, 
WatchRequest>(client);
     }
 
     /**
      * Retrieve values from statistics.
-     * Only one instance of this request may be active simultaneously.
+     * Only one instance of this getRequestIdentifier may be active 
simultaneously.
      * Upon cancellation
      *
      * @param timeout      time after we give up and call receiver.onTimeout
      * @param subsystem    the subsystem of interest
      * @param name         name of the statistics value belongs to
      * @param receiver     callback
-     * @return handle to cancel the request
+     * @return handle to onCancel the getRequestIdentifier
      */
     public Cancelable get(RelativeTime timeout, final String subsystem, final 
String name,
                           final StatisticsReceiver receiver) {
-        if (destroyRequested)
+        if (destroyRequested || client == null)
             throw new AssertionError("already destroyed");
-        return getRequests.addRequest(new GetRequest(subsystem, name, 
receiver));
+        RequestIdentifier<GetRequest> identifier = getRequests.addRequest(new 
GetRequest(subsystem, name, receiver));
+        identifier.setTimeout(timeout, new TimeoutHandler() {
+            @Override
+            public void onTimeout() {
+                receiver.onTimeout();
+            }
+        });
+        return identifier;
     }
 
     /**
@@ -129,12 +169,17 @@
      * @param name    name of the entry
      * @param value   desired value
      * @param persist keep value even if the statistics service restarts
-     * @return a handle to cancel the request
      */
-    public Cancelable set(final String subsystem, final String name, final 
long value, boolean persist) {
-        if (destroyRequested)
+    public void set(final String subsystem, final String name, final long 
value, boolean persist) {
+        if (destroyRequested || client == null)
             throw new AssertionError("already destroyed");
-        return setRequests.addRequest(new SetRequest(subsystem, name, value, 
false, persist));
+        SetMessage m = new SetMessage();
+        m.statisticName = name;
+        m.subsystemName = subsystem;
+        m.value = value;
+        if (persist)
+            m.flags |= SetMessage.SETFLAG_PERSIST;
+        client.send(m);
     }
 
     /**
@@ -143,12 +188,18 @@
      * @param name    name of the entry
      * @param delta   relative difference to the old value
      * @param persist keep value even if the statistics service restarts
-     * @return a handle to cancel the request
      */
-    public Cancelable update(final String subsystem, final String name, final 
long delta, boolean persist) {
-        if (destroyRequested)
+    public void update(final String subsystem, final String name, final long 
delta, boolean persist) {
+        if (destroyRequested || null == client)
             throw new AssertionError("already destroyed");
-        return setRequests.addRequest(new SetRequest(subsystem, name, delta, 
true, persist));
+        SetMessage m = new SetMessage();
+        m.statisticName = name;
+        m.subsystemName = subsystem;
+        m.value = delta;
+        if (persist)
+            m.flags |= SetMessage.SETFLAG_PERSIST;
+        m.flags |= SetMessage.SETFLAG_RELATIVE;
+        client.send(m);
     }
 
     /**
@@ -157,154 +208,48 @@
      * @param subsystem the subsystem to watch
      * @param name the value to watch
      * @param watcher the object that receives the updates
-     * @return a handle to cancel the request
+     * @return a handle to onCancel the getRequestIdentifier
      */
     public Cancelable watch(final String subsystem, final String name, 
StatisticsWatcher watcher) {
-        if (destroyRequested)
+        if (destroyRequested || null == client)
             throw new AssertionError("already destroyed");
         WatchRequest r = new WatchRequest(subsystem, name, watcher);
-        return watchRequests.addRequest(wid++, r);
+        return watchRequests.addRequest(nextWatchId++, r);
     }
 
+
     /**
      * Destroy handle to the statistics service. Always finishes writing 
pending values.
      */
     public void destroy() {
-        destroyRequested = true;
-        client.send(new TestMessage());
-        // wait until the service responds
-        // TODO: or timeout
-        System.out.println("destroying statistics");
+      destroy(true);
     }
 
-
     /**
-     * Statistics command line utility entry point
+     * Destroy handle to the statistics service. Always finishes writing 
pending values.
      *
-     * @param args command line arguments
+     * @param syncFirst Wait until the statistics service has received all our 
updates.
      */
-    public static void main(String[] args) {
-        new Program(args) {
-            @Argument(
-                    shortname = "x",
-                    longname = "set",
-                    action = ArgumentAction.SET,
-                    description = "watch a value")
-            boolean set;
-            @Argument(
-                    shortname = "w",
-                    longname = "watch",
-                    action = ArgumentAction.SET,
-                    description = "set a value")
-            boolean watch;
-            @Argument(
-                    shortname = "n",
-                    longname = "name",
-                    action = ArgumentAction.STORE_STRING,
-                    argumentName = "NAME",
-                    description = "statistics name")
-            String statisticsName = "";
-            @Argument(
-                    shortname = "s",
-                    longname = "subsystem",
-                    argumentName = "SUBSYS",
-                    action = ArgumentAction.STORE_STRING,
-                    description = "subsystem name")
-            String subsystemName = "";
-            @Argument(
-                    shortname = "p",
-                    longname = "persistent",
-                    action = ArgumentAction.SET,
-                    description = "set value persistently (used with -x)")
-            boolean persistent = false;
-            @Argument(
-                    shortname = "r",
-                    longname = "relative",
-                    action = ArgumentAction.SET,
-                    description = "set value relative to old value (used with 
-x)")
-            boolean relative = false;
-
+    public void destroy(boolean syncFirst) {
+        if (destroyRequested)
+            throw new AssertionError("already destroyed");
+        destroyRequested = true;
+        logger.debug("destroying statistics");
+        if (!syncFirst || !client.isConnected()) {
+            client.disconnect();
+            client = null;
+            return;
+        }
+        client.send(new TestMessage());
+        // wait until the service responds or a timeout occurs
+        destroyTimeout = Scheduler.addDelayed(RelativeTime.fromSeconds(5), new 
Scheduler.Task() {
             @Override
-            protected String makeHelpText() {
-                return "Get, set and watch GNUnet's statistics.";
-            }
-
-            public void run() {
-                final Statistics statistics = new Statistics(cfg);
-
-                if (set && watch) {
-                    System.err.println("--watch/-w and --set/-s cannot be used 
together");
+            public void run(Scheduler.RunContext ctx) {
+                if (null == client)
                     return;
-                }
-
-                if (set) {
-                    if (subsystemName.isEmpty() || statisticsName.isEmpty()) {
-                        System.err.println("both subsystem and name must be 
given for --set/-x");
-                        return;
-                    }
-                    if (unprocessedArgs.length != 1) {
-                        System.err.println("must specify exactly one value to 
set");
-                        return;
-                    }
-                    long value;
-                    try {
-                        value = Long.parseLong(unprocessedArgs[0]);
-                    } catch (NumberFormatException e) {
-                        System.err.println("invalid value (not a long)");
-                        return;
-                    }
-                    if (relative)
-                        statistics.update(subsystemName, statisticsName, 
value, persistent);
-                     else
-                        statistics.set(subsystemName, statisticsName, value, 
persistent);
-                    statistics.destroy();
-                    return;
-                }
-
-                if (unprocessedArgs.length != 0) {
-                    System.err.println("dumping statistics does not take any 
positional parameters");
-                    return;
-                }
-
-                if (watch) {
-                    if (subsystemName.isEmpty() || statisticsName.isEmpty()) {
-                        System.err.println("both subsystem and name must be 
given for --watch/-w");
-                        return;
-                    }
-                    statistics.watch(subsystemName, statisticsName,
-                            new StatisticsWatcher() {
-                                @Override
-                                public void onReceive(String subsystem, String 
name, long value) {
-                                    System.out.println(subsystem + "(" + name 
+ ") = " + value);
-                                }
-
-                                @Override
-                                public void onTimeout() {
-                                   System.err.println("timeout");
-                                }
-                            }
-                    );
-                } else {
-                    statistics.get(RelativeTime.SECOND, subsystemName, 
statisticsName,
-                            new StatisticsReceiver() {
-                                @Override
-                                public void onReceive(String subsystem, String 
name, long value) {
-                                    System.out.println(subsystem + "(" + name 
+ ") = " + value);
-                                }
-
-                                @Override
-                                public void onTimeout() {
-                                    System.err.println("timeout");
-                                }
-
-                                @Override
-                                public void onDone() {
-                                    statistics.destroy();
-                                }
-                            }
-                    );
-                }
+                client.disconnect();
+                client = null;
             }
-        }.start();
+        });
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/statistics/StatisticsWatcher.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/statistics/StatisticsWatcher.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/statistics/StatisticsWatcher.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -2,5 +2,4 @@
 
 public interface StatisticsWatcher {
     public void onReceive(String subsystem, String name, long value);
-    public void onTimeout();
 }

Modified: gnunet-java/src/main/java/org/gnunet/statistics/WatchRequest.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/statistics/WatchRequest.java   
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/statistics/WatchRequest.java   
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,16 +1,15 @@
 package org.gnunet.statistics;
 
 import org.gnunet.mq.Envelope;
-import org.gnunet.mq.MessageQueue;
-import org.gnunet.requests.RequestContainer;
+import org.gnunet.requests.Request;
+import org.gnunet.statistics.messages.WatchMessage;
 
-/**
- */
-public class WatchRequest extends RequestContainer.Request {
-    public String subsystem;
-    public String name;
-    public StatisticsWatcher watcher;
 
+class WatchRequest extends Request {
+    public final String subsystem;
+    public final String name;
+    public final StatisticsWatcher watcher;
+
     public WatchRequest(String subsystem, String name, StatisticsWatcher 
watcher) {
         this.subsystem = subsystem;
         this.name = name;
@@ -25,7 +24,9 @@
         return new Envelope(m);
     }
 
+    @Override
     public void cancel() {
-
+        // do nothing, incoming changes with the watch id of this request
+        // will simply be ignured
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/statistics/package-info.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/statistics/package-info.java   
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/statistics/package-info.java   
2014-03-11 01:24:03 UTC (rev 32613)
@@ -19,6 +19,6 @@
  */
 
 /**
- * API for the gnunet statistics service.
+ * API for the GNUnet statistics service.
  */
 package org.gnunet.statistics;

Modified: gnunet-java/src/main/java/org/gnunet/testbed/Controller.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/testbed/Controller.java        
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/testbed/Controller.java        
2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,7 +21,8 @@
 
 import org.gnunet.mq.Envelope;
 import org.gnunet.requests.MatchingRequestContainer;
-import org.gnunet.requests.RequestContainer;
+import org.gnunet.requests.Request;
+import org.gnunet.requests.RequestIdentifier;
 import org.gnunet.testbed.callbacks.*;
 import org.gnunet.testbed.messages.*;
 import org.gnunet.util.*;
@@ -82,7 +83,7 @@
      */
     private MatchingRequestContainer<Long,OperationRequest> requests;
 
-    abstract class OperationRequest extends RequestContainer.Request {
+    abstract class OperationRequest extends Request {
         protected final long operationId;
         public OperationRequest() {
             operationId = (((long) host.id) << 32) | (long) operationCounter++;
@@ -121,7 +122,7 @@
             m.peerId = peerId;
             m.compressedConfig = ccfg.compressedData;
             m.configSize = ccfg.getUncompressedSize();
-            System.out.println("create request with opid " + m.operationId);
+            System.out.println("create getRequestIdentifier with opid " + 
m.operationId);
             return new Envelope(m);
         }
     }
@@ -139,7 +140,7 @@
             m.operationId = operationId;
             m.peerId = peerId;
 
-            System.out.println("destroy request with opid " + m.operationId);
+            System.out.println("destroy getRequestIdentifier with opid " + 
m.operationId);
             return new Envelope(m);
         }
     }
@@ -263,9 +264,10 @@
 
     public class ControllerMessageReceiver extends RunaboutMessageReceiver {
         public void visit(PeerEventMessage m) {
-            RequestContainer.Request r = requests.getRequest(m.operationId);
+            RequestIdentifier<OperationRequest> rId = 
requests.getRequestIdentifier(m.operationId);
+            OperationRequest r = rId.getRequest();
             if (null == r) {
-                logger.error("no matching peer event request for op id %s", 
m.operationId);
+                logger.error("no matching peer event getRequestIdentifier for 
op id %s", m.operationId);
                 return;
             }
             if (r instanceof PeerStartRequest && m.eventType == 
EventTypes.PEER_START) {
@@ -275,14 +277,15 @@
                 PeerStopRequest psr = (PeerStopRequest) r;
                 psr.peerChurnCallback.onChurnSuccess();
             } else {
-                logger.error("unexpected peer event message, event type %s and 
request %s",
+                logger.error("unexpected peer event message, event type %s and 
getRequestIdentifier %s",
                              m.eventType, r);
             }
         }
         public void visit(PeerCreateSuccessMessage m) {
-            RequestContainer.Request r = requests.getRequest(m.operationId);
+            RequestIdentifier<OperationRequest> rId = 
requests.getRequestIdentifier(m.operationId);
+            OperationRequest r = rId.getRequest();
             if (!(r instanceof PeerCreateRequest)) {
-                logger.warn("response to peer create request does not match");
+                logger.warn("response to peer create getRequestIdentifier does 
not match");
                 return;
             }
             PeerCreateRequest pcr = (PeerCreateRequest) r;
@@ -290,13 +293,14 @@
             pcr.cb.onPeerCreated(p);
         }
         public void visit(PeerInformationMessage m) {
-            RequestContainer.Request r = requests.getRequest(m.operationId);
+            RequestIdentifier<OperationRequest> rId = 
requests.getRequestIdentifier(m.operationId);
+            OperationRequest r = rId.getRequest();
             if (null == r) {
                 logger.error("unexpected peer information message (opid={})", 
m.operationId);
                 return;
             }
             if (!(r instanceof PeerInformationRequest)) {
-                logger.warn("response to peer create request does not match");
+                logger.warn("response to peer create getRequestIdentifier does 
not match");
                 return;
             }
             PeerInformationRequest pir = (PeerInformationRequest) r;
@@ -304,14 +308,15 @@
             pir.cb.onSuccess(m.peerIdentity, ccfg.decompress());
         }
         public void visit(GenericOperationSuccessMessage m) {
-            OperationRequest r = requests.getRequest(m.operationId);
+            RequestIdentifier<OperationRequest> rId = 
requests.getRequestIdentifier(m.operationId);
+            OperationRequest r = rId.getRequest();
             if (null == r) {
                 logger.error("unexpected generic success message (opid={})", 
m.operationId);
                 return;
             }
             if (!(r instanceof GenericOperationRequest)) {
                 logger.error(String.format(
-                               "got GenericOperationSuccessMessage as response 
to request '%s', opid %s; event type %s",
+                               "got GenericOperationSuccessMessage as response 
to getRequestIdentifier '%s', opid %s; event type %s",
                                r.getClass(), m.operationId, m.eventType));
                 return;
             }
@@ -319,7 +324,8 @@
             gr.onSuccess();
         }
         public void visit(ConnectionEventMessage m) {
-            OperationRequest r = requests.getRequest(m.operationId);
+            RequestIdentifier<OperationRequest> rId = 
requests.getRequestIdentifier(m.operationId);
+            OperationRequest r = rId.getRequest();
             if (null == r) {
                 logger.error("unexpected connection event message (opid={})", 
m.operationId);
                 return;
@@ -408,7 +414,7 @@
     /**
      * Create a link from slave controller to delegated controller. Whenever 
the
      * master controller is asked to start a peer at the delegated controller 
the
-     * request will be routed towards slave controller (if a route exists). The
+     * getRequestIdentifier will be routed towards slave controller (if a 
route exists). The
      * slave controller will then route it to the delegated controller. The
      * configuration of the delegated controller is given and is used to either
      * create the delegated controller or to connect to an existing 
controller. Note
@@ -445,7 +451,7 @@
      * @param cc the completion callback to call to inform the status of
      *          registration. After calling this callback the registration 
handle
      *          will be invalid. Cannot be NULL
-     * @return handle to the host registration which can be used to cancel the
+     * @return handle to the host registration which can be used to onCancel 
the
      *           registration; NULL if another registration handle is present 
and
      *           is not cancelled
      */
@@ -475,7 +481,7 @@
          * Start this peer
          *
          * @param peerChurnCallback completion callback
-         * @return handle to cancel the operation
+         * @return handle to onCancel the operation
          */
         public Cancelable start(PeerChurnCallback peerChurnCallback) {
             PeerStartRequest r = new PeerStartRequest(this, peerChurnCallback);
@@ -486,7 +492,7 @@
          * Stop this peer
          *
          * @param peerChurnCallback completion callback
-         * @return handle to cancel the operation
+         * @return handle to onCancel the operation
          */
         public Cancelable stop(PeerChurnCallback peerChurnCallback) {
             PeerStopRequest r = new PeerStopRequest(this, peerChurnCallback);
@@ -530,7 +536,7 @@
          *
          * @param otherPeer peer to connect this peer to
          * @param cb callback object to signal completion or failure
-         * @return token to cancel the request
+         * @return token to onCancel the getRequestIdentifier
          *
          */
         public Cancelable connectOverlay(Peer otherPeer, 
OperationCompletionCallback cb) {
@@ -541,7 +547,7 @@
 
         /**
          * Connect to a service offered by the given peer.  Will ensure that
-         * the request is queued to not overwhelm our ability to create and
+         * the getRequestIdentifier is queued to not overwhelm our ability to 
create and
          * maintain connections with other systems.  The actual service
          * handle is then returned via the 'op_result' member in the event
          * callback.  The 'ca' callback is used to create the connection

Modified: gnunet-java/src/main/java/org/gnunet/testing/TestingServer.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/testing/TestingServer.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/testing/TestingServer.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -5,7 +5,6 @@
 import org.gnunet.util.Server;
 
 import java.io.IOException;
-import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.nio.channels.ServerSocketChannel;

Modified: gnunet-java/src/main/java/org/gnunet/testing/TestingSetup.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/testing/TestingSetup.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/testing/TestingSetup.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,7 +21,6 @@
 package org.gnunet.testing;
 
 import org.gnunet.util.Program;
-import org.gnunet.util.RelativeTime;
 
 /**
  * A testing setup is responsible for configuring the loggers during testing, 
and can

Modified: gnunet-java/src/main/java/org/gnunet/transport/Transport.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/transport/Transport.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/transport/Transport.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -5,7 +5,6 @@
 import org.gnunet.mq.NotifySentHandler;
 import org.gnunet.transport.callbacks.HelloUpdateCallback;
 import org.gnunet.transport.callbacks.OfferHelloContinuation;
-import org.gnunet.transport.callbacks.PeerIterateCallback;
 import org.gnunet.transport.callbacks.TryConnectCallback;
 import org.gnunet.transport.messages.RequestConnectMessage;
 import org.gnunet.transport.messages.StartMessage;
@@ -40,7 +39,7 @@
     private List<GetHelloHolder> getHelloHolderList = new 
LinkedList<GetHelloHolder>();
 
     /**
-     * Wrapper to give each get hello request a unique identity.
+     * Wrapper to give each get hello getRequestIdentifier a unique identity.
      */
     private class GetHelloHolder {
         HelloUpdateCallback cb;
@@ -89,9 +88,9 @@
      * the given peer.
      *
      * @param target who we should try to connect to
-     * @param cb     callback to be called when request was transmitted to 
transport
+     * @param cb     callback to be called when getRequestIdentifier was 
transmitted to transport
      *               service
-     * @return a handle to cancel the operation
+     * @return a handle to onCancel the operation
      */
     Cancelable tryConnect(PeerIdentity target, final TryConnectCallback cb) {
         RequestConnectMessage m = new RequestConnectMessage();
@@ -119,7 +118,7 @@
      * Obtain the HELLO message for this peer.
      *
      * @param rec function to call with the HELLO
-     * @return handle to cancel the operation
+     * @return handle to onCancel the operation
      */
     Cancelable getHello(final HelloUpdateCallback rec) {
         if (myHello != null) {

Modified: 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/PeerAddressListCallback.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/PeerAddressListCallback.java
       2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/PeerAddressListCallback.java
       2014-03-11 01:24:03 UTC (rev 32613)
@@ -42,7 +42,6 @@
 
 
 import org.gnunet.transport.HelloAddress;
-import org.gnunet.util.PeerIdentity;
 
 public interface PeerAddressListCallback {
     void onPeerAddress(HelloAddress helloAddress);

Modified: 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateMessage.java
  2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateMessage.java
  2014-03-11 01:24:03 UTC (rev 32613)
@@ -4,7 +4,6 @@
 import org.gnunet.construct.NestedMessage;
 import org.gnunet.construct.UInt32;
 import org.gnunet.construct.UnionCase;
-import org.gnunet.util.AbsoluteTime;
 import org.gnunet.util.AbsoluteTimeMessage;
 import org.gnunet.util.GnunetMessage;
 import org.gnunet.util.PeerIdentity;

Modified: 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessage.java
  2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessage.java
  2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,12 +20,9 @@
 
 package org.gnunet.transport.messages;
 
-import org.gnunet.construct.IntegerFill;
 import org.gnunet.construct.NestedMessage;
-import org.gnunet.construct.UInt32;
 import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
-import org.gnunet.util.PeerIdentity;
 
 @UnionCase(383)
 public class AddressIterateResponseMessage implements GnunetMessage.Body {

Modified: gnunet-java/src/main/java/org/gnunet/util/AbsoluteTime.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/AbsoluteTime.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/AbsoluteTime.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -278,7 +278,7 @@
     }
 
     public String toFancyString() {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         return sdf.format(new Date(getMilliseconds()));
     }
 

Modified: gnunet-java/src/main/java/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Client.java       2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Client.java       2014-03-11 
01:24:03 UTC (rev 32613)
@@ -77,7 +77,7 @@
     private boolean notifyTransmitReadyDelayed;
 
     /**
-     * When notifyTransmitReadyDelayed is true, This can be used to cancel the 
task
+     * When notifyTransmitReadyDelayed is true, This can be used to onCancel 
the task
      * waiting for the connection to be established.
      */
     private Cancelable delayedNotifyTransmitHandle;
@@ -91,7 +91,7 @@
     private boolean receiverActive;
 
     /**
-     * Handle to cancel the message currently submitted in the queue,
+     * Handle to onCancel the message currently submitted in the queue,
      */
     private Cancelable currentSubmit;
     private Scheduler.TaskIdentifier receiverLifenessTask;
@@ -163,9 +163,9 @@
      *                    for example because the protocol is stateless
      * @param size        size of the message we want to transmit, can be an 
upper bound
      * @param transmitter the MessageTransmitter object to call once the 
client is ready to transmit or
-     *                    when the timeout is over. Guaranteed to be called 
*after* notifyTransmitReady has returned.  @return a handle that can be used to 
cancel the transmit request
+     *                    when the timeout is over. Guaranteed to be called 
*after* notifyTransmitReady has returned.  @return a handle that can be used to 
onCancel the transmit getRequestIdentifier
      *
-     * @return a handle to cancel the notification
+     * @return a handle to onCancel the notification
      */
     public Cancelable notifyTransmitReady(final RelativeTime timeout,
                                           final boolean autoRetry, int size, 
final MessageTransmitter transmitter) {
@@ -230,7 +230,7 @@
      * @param timeout when should we give up sending the message, and call 
cont.cont(false)
      * @param message the message to send
      * @param cont called when the message has been sent successfully or on 
error
-     * @return a handle to cancel sending the message
+     * @return a handle to onCancel sending the message
      */
     public Cancelable transmitWhenReady(final RelativeTime timeout, final 
GnunetMessage.Body message, final Continuation cont) {
         return notifyTransmitReady(timeout, false, 0, new MessageTransmitter() 
{
@@ -256,7 +256,7 @@
      *
      * @param message the message to send
      * @param cont called when the message has been sent successfully or on 
error
-     * @return a handle to cancel sending the message
+     * @return a handle to onCancel sending the message
      */
     public Cancelable transmitWhenReady(final GnunetMessage.Body message, 
final Continuation cont) {
         return transmitWhenReady(RelativeTime.FOREVER, message, cont);
@@ -270,12 +270,9 @@
     }
 
     /**
-     * Disconnect from the service. Cancel all pending receive/transmit 
requests.
+     * Disconnect from the service. Cancels all pending receive/transmit 
requests.
      */
     public void disconnect() {
-        if (notifyTransmitReadyDelayed) {
-            logger.error("disconnecting while notifyTransmitReady is pending");
-        }
         connection.disconnect();
         connection = null;
         if (receiverLifenessTask != null) {

Modified: gnunet-java/src/main/java/org/gnunet/util/Connection.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Connection.java   2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Connection.java   2014-03-11 
01:24:03 UTC (rev 32613)
@@ -141,12 +141,12 @@
     }
 
     /**
-     * Represents a request for transmission.
+     * Represents a getRequestIdentifier for transmission.
      */
     public interface TransmitHandle extends Cancelable {
         /**
-         * Cancel a request for the transmit ready notification.
-         * This does *not* cancel a transmission that already has been started.
+         * Cancel a getRequestIdentifier for the transmit ready notification.
+         * This does *not* onCancel a transmission that already has been 
started.
          */
         public void cancel();
     }
@@ -298,7 +298,7 @@
             }
             // timeout is forever, because there is no way to directly limit 
the transmission time
             // of a message, only the max. wait time before transmission.
-            // cancel must be called on the transmitTask if we disconnect
+            // onCancel must be called on the transmitTask if we disconnect
             Scheduler.TaskConfiguration tc = new 
Scheduler.TaskConfiguration(RelativeTime.FOREVER, this);
             tc.addSelectEvent(connectionChannel, SelectionKey.OP_WRITE);
             this.transmitTask = tc.schedule();
@@ -549,7 +549,7 @@
      * @param timeout     after how long should we give up (and call 
transmitter.transmit(null))
      * @param transmitter the MessageTransmitter object to call once the 
client is ready to transmit or
      *                    when the timeout is over. Guaranteed to be called 
*after* notifyTransmitReady has returned.
-     * @return a handle that can be used to cancel the transmit request, null 
if request could be satisfied immediately
+     * @return a handle that can be used to onCancel the transmit 
getRequestIdentifier, null if getRequestIdentifier could be satisfied 
immediately
      */
     public TransmitHandle notifyTransmitReady(int size, RelativeTime timeout, 
final MessageTransmitter transmitter) {
         if (disconnected) {
@@ -557,7 +557,7 @@
         }
         if (nextTransmitHelper != null) {
             throw new AssertionError(
-                    "previous transmit request must have completed before 
calling notifyTransmitReady again");
+                    "previous transmit getRequestIdentifier must have 
completed before calling notifyTransmitReady again");
         }
 
         if (timeout.getMicroseconds() <= 0) {
@@ -593,7 +593,7 @@
      * @param cont    continuation to call
      * @return
      */
-    /* package-protected */ Cancelable notifyConnected(RelativeTime timeout, 
final Continuation cont) {
+    Cancelable notifyConnected(RelativeTime timeout, final Continuation cont) {
         if (notifyConnectedTimeout != null) {
             throw new AssertionError();
         }
@@ -621,6 +621,10 @@
             logger.error("disconnect called twice");
         }
         disconnected = true;
+        if (notifyConnectedTimeout != null) {
+            notifyConnectedTimeout.cancel();
+            notifyConnectedTimeout = null;
+        }
         if (receiveTaskId != null) {
             receiveTaskId.cancel();
             receiveTaskId = null;

Modified: gnunet-java/src/main/java/org/gnunet/util/Helper.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Helper.java       2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Helper.java       2014-03-11 
01:24:03 UTC (rev 32613)
@@ -26,7 +26,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOError;
 import java.io.IOException;
 import java.nio.ByteBuffer;

Modified: gnunet-java/src/main/java/org/gnunet/util/MessageStreamTokenizer.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/MessageStreamTokenizer.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/MessageStreamTokenizer.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -26,12 +26,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOError;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.nio.channels.Channel;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.Pipe;
 import java.nio.channels.ReadableByteChannel;
 
 /**

Modified: gnunet-java/src/main/java/org/gnunet/util/MessageTransmitter.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/MessageTransmitter.java   
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/MessageTransmitter.java   
2014-03-11 01:24:03 UTC (rev 32613)
@@ -35,9 +35,9 @@
 
 
     /**
-     * Called when the transmit request could not be fullfilled.
+     * Called when the transmit getRequestIdentifier could not be fullfilled.
      *
-     * After transmit has been called, handleError will not be called anymore 
(until the next transmit request)
+     * After transmit has been called, handleError will not be called anymore 
(until the next transmit getRequestIdentifier)
      */
     void handleError();
 }

Modified: gnunet-java/src/main/java/org/gnunet/util/Program.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Program.java      2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Program.java      2014-03-11 
01:24:03 UTC (rev 32613)
@@ -73,31 +73,19 @@
             action = ArgumentAction.STORE_STRING)
     public String logFile;
 
-
+    /**
+     * Positional arguments, excluding those that have been processed
+     * by the command line parser.
+     */
     protected String[] unprocessedArgs;
 
-    private final String[] args;
-
-    private int returnValue = 0;
-
-
     /**
-     * A program with the desired environment for a GNUnet utility.
-     * While executing, the scheduler is guaranteed to run, command arguments 
are parsed,
-     * the default configuration is loaded and the DNS Resolver is initialized.
-     *
-     * @param args array of command line arguments to parse. used to 
automatically load additional settings
-     *             and configure log levels.
+     * Return value for the program.
+     * We prefer setting the return value, as System.exit(...) does bad things 
sometimes.
+     * (In JUnit test cases, for instance)
      */
-    public Program(String... args) {
-        this.args = args;
+    private int returnValue = 0;
 
-        /*
-         * Remember: We can't parse command line arguments here, as java's 
initialization order
-         * dictates that member variables of subclasses are initialized 
*after* the superclass constructor (here).
-         */
-    }
-
     /**
      * Configure logging with the given log level and log file.
      *
@@ -202,7 +190,7 @@
      *                      is invoked inside a scheduler task or not
      * @return the exit value of the program
      */
-    public final int start(boolean withScheduler) {
+    public final int start(boolean withScheduler, String... args) {
         Parser optParser = new Parser(this);
         unprocessedArgs = optParser.parse(args);
 
@@ -246,8 +234,8 @@
      *
      * @return the exit value of the program
      */
-    public final int start() {
-        return start(true);
+    public final int start(String... args) {
+        return start(true, args);
     }
 
 
@@ -256,7 +244,7 @@
      *
      * @return the exit value of the program
      */
-    public final int startWithoutScheduler() {
-        return start(false);
+    public final int startWithoutScheduler(String... args) {
+        return start(false, args);
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/util/RelativeTime.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/RelativeTime.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/RelativeTime.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -236,4 +236,9 @@
     public long getSeconds() {
         return rel_value_us / (1000 * 1000);
     }
+
+    public static RelativeTime fromSeconds(long i) {
+        RelativeTime relativeTime = new RelativeTime(i * 1000 * 1000);
+        return relativeTime;
+    }
 }

Modified: gnunet-java/src/main/java/org/gnunet/util/Resolver.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Resolver.java     2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Resolver.java     2014-03-11 
01:24:03 UTC (rev 32613)
@@ -22,7 +22,6 @@
 
 import com.google.common.net.InetAddresses;
 import org.gnunet.construct.*;
-import org.gnunet.construct.ProtocolViolationException;
 import org.gnunet.util.getopt.Argument;
 import org.gnunet.util.getopt.ArgumentAction;
 import org.slf4j.Logger;
@@ -196,7 +195,7 @@
      * @param hostname hostname to resolve
      * @param timeout  timeout, calls cb.onTimeout on expiratoin
      * @param cb       callback
-     * @return a handle to cancel the request, null if request could be 
satisfied immediately
+     * @return a handle to onCancel the getRequestIdentifier, null if 
getRequestIdentifier could be satisfied immediately
      */
     public Cancelable resolveHostname(String hostname, RelativeTime timeout, 
final AddressCallback cb) {
         // try if hostname is numeric IP or loopback
@@ -352,7 +351,7 @@
 
 
     public static void main(final String[] argv) {
-        new Program(argv) {
+        new Program() {
             @Argument(shortname = "r", longname = "reverse",
                     description = "do reverse dns lookup",
                     action = ArgumentAction.SET)
@@ -411,6 +410,6 @@
             protected String makeHelpText() {
                 return "tool for forward and reverse DNS lookup";
             }
-        }.start();
+        }.start(argv);
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/util/Scheduler.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Scheduler.java    2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Scheduler.java    2014-03-11 
01:24:03 UTC (rev 32613)
@@ -214,7 +214,7 @@
                 }
             }
             for (TaskIdentifier tt : executableTasks) {
-                // cancel subscriptions to other events, we can execute now!
+                // onCancel subscriptions to other events, we can execute now!
                 tt.deregister();
                 queueReady(tt);
             }
@@ -548,7 +548,7 @@
         @Override
         public void cancel() {
             if (hasRun) {
-                throw new AssertionError("can't cancel task that already ran");
+                throw new AssertionError("can't onCancel task that already 
ran");
             }
             if (isCanceled) {
                 throw new AssertionError("task canceled twice");
@@ -557,7 +557,7 @@
             scheduler.pending.remove(this);
         }
 
-        public void deregister() {
+        private void deregister() {
             if (subscriptions != null) {
                 subscriptions.stop(this);
             }
@@ -578,7 +578,7 @@
         private SchedulerInstance scheduler;
 
         /**
-         * Create a TaskIdentifier.
+         * Create a TaskConfiguration.
          *
          * @param delay when will the task be run?
          *              may be null to indicate that this task may not be run
@@ -593,7 +593,7 @@
             this.deadline = delay.toAbsolute();
         }
 
-        TaskConfiguration(RelativeTime delay, Task task) {
+        public TaskConfiguration(RelativeTime delay, Task task) {
             this(threadScheduler.get(), delay, task);
         }
 
@@ -624,6 +624,10 @@
                 subscriptions = new Subscriptions(scheduler.selector);
             subscriptions.add(channel, event);
         }
+
+        public void setLifeness(boolean b) {
+            this.lifeness = b;
+        }
     }
 
     /**
@@ -651,7 +655,7 @@
      *
      * @param delay time to wait until running the task
      * @param task  the task to run after delay
-     * @return the TaskIdentifier, can be used to cancel the task until it has 
been executed.
+     * @return the TaskIdentifier, can be used to onCancel the task until it 
has been executed.
      */
     public static TaskIdentifier addDelayed(RelativeTime delay, Task task) {
         TaskConfiguration tid = new TaskConfiguration(delay, task);
@@ -817,4 +821,11 @@
         fpt.start();
         return new FilePipe(fpt);
     }
+
+    public static void debugPrintPendingTasks() {
+        System.err.println("pending tasks:");
+        for (TaskIdentifier i : threadScheduler.get().pending) {
+            System.err.println(i.task.getClass());
+        }
+    }
 }

Modified: gnunet-java/src/main/java/org/gnunet/util/Server.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Server.java       2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Server.java       2014-03-11 
01:24:03 UTC (rev 32613)
@@ -20,7 +20,6 @@
 
 package org.gnunet.util;
 
-import org.gnunet.construct.Construct;
 import org.grothoff.Runabout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -160,7 +159,7 @@
          * @param timeout     after how long should we give up (and call
          *                    notify with buf NULL and size 0)?
          * @param transmitter callback
-         * @return a handle to cancel the notification
+         * @return a handle to onCancel the notification
          */
         public Cancelable notifyTransmitReady(int size, RelativeTime timeout, 
MessageTransmitter transmitter) {
             return connection.notifyTransmitReady(size, timeout, transmitter);
@@ -172,7 +171,7 @@
          * @param timeout when should we give up sending the message, and call 
cont.cont(false)
          * @param message the message to send
          * @param cont called when the message has been sent successfully or 
on error
-         * @return a handle to cancel sending the message
+         * @return a handle to onCancel sending the message
          */
         public Cancelable transmitWhenReady(final RelativeTime timeout, final 
GnunetMessage.Body message, final Continuation cont) {
             return notifyTransmitReady(0, timeout, new MessageTransmitter() {
@@ -195,7 +194,7 @@
 
         /**
          * Resume receiving from this client, we are done processing the
-         * current request. This function must be called from within each
+         * current getRequestIdentifier. This function must be called from 
within each
          * message handler (or its respective continuations).
          * <p/>
          * The server does not automatically continue to receive messages to

Modified: gnunet-java/src/main/java/org/gnunet/util/Service.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Service.java      2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/Service.java      2014-03-11 
01:24:03 UTC (rev 32613)
@@ -24,7 +24,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
@@ -56,7 +57,6 @@
     private Pipe.SourceChannel sigpipeChannel;
 
     public Service(String serviceName, RelativeTime idleTimeout, boolean 
requireFound, String[] args) {
-        super(args);
         this.serviceName = serviceName;
         this.idleTimeout = idleTimeout;
         this.requireFound = requireFound;

Modified: gnunet-java/src/main/java/org/gnunet/util/crypto/Ed25519.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/crypto/Ed25519.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/crypto/Ed25519.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -24,7 +24,6 @@
 import java.math.BigInteger;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
 
 /**
  * Java-only implementation of arithmetic on DJBs Ed25519.

Modified: gnunet-java/src/main/java/org/gnunet/util/getopt/Parser.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/getopt/Parser.java        
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/util/getopt/Parser.java        
2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,6 +21,7 @@
 package org.gnunet.util.getopt;
 
 import org.gnunet.construct.ReflectUtil;
+
 import java.lang.reflect.Field;
 import java.util.*;
 

Modified: gnunet-java/src/main/java/org/gnunet/voting/Ballot.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/Ballot.java     2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/Ballot.java     2014-03-11 
01:24:03 UTC (rev 32613)
@@ -28,8 +28,14 @@
 import com.google.common.collect.Maps;
 import com.google.common.primitives.Longs;
 import org.gnunet.secretsharing.ThresholdPublicKey;
-import org.gnunet.util.*;
-import org.gnunet.util.crypto.*;
+import org.gnunet.util.AbsoluteTime;
+import org.gnunet.util.Configuration;
+import org.gnunet.util.HashCode;
+import org.gnunet.util.PeerIdentity;
+import org.gnunet.util.crypto.EcdsaPrivateKey;
+import org.gnunet.util.crypto.EcdsaPublicKey;
+import org.gnunet.util.crypto.EcdsaSignature;
+import org.gnunet.util.crypto.EddsaSignature;
 import org.gnunet.voting.messages.KeyQueryResponseMessage;
 
 import java.security.MessageDigest;
@@ -263,13 +269,13 @@
             }
             confirmationSigs.put(e.getKey(), sig);
         }
-        encryptedVote = EncryptedVote.parseFromConfiguration(cfg);
         Optional<String> optVoterPub = cfg.getValueString("vote", "VOTER_PUB");
         if (optVoterPub.isPresent()) {
             voterPub = EcdsaPublicKey.fromString(optVoterPub.get());
             if (null == voterPub) {
                 throw new InvalidBallotException("voter public key present but 
invalid");
             }
+            encryptedVote = EncryptedVote.parseFromConfiguration(cfg, 
voterPub);
         }
 
         startTime = getTime(cfg, "START");
@@ -302,8 +308,8 @@
             m.signedGuidKey = new KeyQueryResponseMessage.BallotPublicKey();
             m.signedGuidKey.ballotGuid = getBallotGuid();
             m.signedGuidKey.publicKey = 
ThresholdPublicKey.fromString(e.getValue());
+            thresholdPublicKeys.put(alias, m);
         }
-
     }
 
     /**
@@ -355,7 +361,7 @@
             if (counts.containsKey(pk)) {
                 counts.put(pk, counts.get(pk) + 1);
             } else {
-                counts.put(pk, 0);
+                counts.put(pk, 1);
             }
         }
         int maxCount = 0;
@@ -390,11 +396,9 @@
             i++;
         }
         voterPub = voterPrivateKey.getPublicKey();
-        if (choiceId < 0 || choiceId > 1) {
-            throw new InvalidBallotException(String.format("choice '%s' not 
valid", choice));
-        }
-
-        encryptedVote = EncryptedVote.fromChoice(choiceId, thresholdPublicKey, 
voterPrivateKey);
+        encryptedVote = EncryptedVote.fromChoice(choiceId, thresholdPublicKey, 
voterPrivateKey, voterPub);
+        System.out.println("voter encrypted vote, ciphertext: " + 
encryptedVote.v.toString());
+        System.out.println("threshold key (of voter): " + 
thresholdPublicKey.toString());
     }
 
     /**
@@ -442,9 +446,7 @@
         if (null != groupCert) {
             groupCert.writeBallotConfig(cfg);
         }
-        System.out.println("thresh set when writing: " + 
thresholdPublicKeys.size());
         for (Map.Entry<String,KeyQueryResponseMessage> e : 
thresholdPublicKeys.entrySet()) {
-            System.out.println("writing tresh");
             cfg.setValueString("threshold-pubkeys", e.getKey(),
                     e.getValue().signedGuidKey.publicKey.toString());
             cfg.setValueString("threshold-pubkey-sigs", e.getKey(),
@@ -560,6 +562,15 @@
         } else {
             buf.append("no voter\n");
         }
+        if (thresholdPublicKeys != null && thresholdPublicKeys.size() != 0) {
+            buf.append("Authorities with threshold public key:\n");
+            for (String s : thresholdPublicKeys.keySet()) {
+                buf.append(s);
+                buf.append("\n");
+            }
+        } else {
+            buf.append("no threshold public keys");
+        }
         return buf.toString();
     }
 

Modified: gnunet-java/src/main/java/org/gnunet/voting/BallotTool.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/BallotTool.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/BallotTool.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -112,9 +112,9 @@
 
     @Argument(
             shortname = "k",
-            longname = "request-key",
+            longname = "getRequestIdentifier-key",
             action = ArgumentAction.SET,
-            description = "request the threshold public key from authorities")
+            description = "getRequestIdentifier the threshold public key from 
authorities")
     boolean requestKey = false;
 
     @Argument(
@@ -348,7 +348,8 @@
             }
             ThresholdPublicKey thresholdPublicKey = 
ballot.getMajorityThresholdPublicKey();
             if (null == thresholdPublicKey) {
-                System.err.println("no threshold public key in ballot");
+                System.err.println(String.format("no majority threshold public 
key in ballot (got keys of %s authorities)",
+                        (ballot.thresholdPublicKeys == null) ? 0 : 
ballot.thresholdPublicKeys.size()));
                 setReturnValue(1);
                 return;
             }
@@ -364,7 +365,7 @@
             }
             Random r = new Random();
             PeerIdentity authority = 
remainingAuthorities.get(r.nextInt(remainingAuthorities.size()));
-            System.out.println("submitting to authority" + 
authority.toString());
+            System.out.println("submitting to authority " + 
authority.toString());
             currentAuthority = authority;
             mesh = new Mesh(cfg, new BallotTunnelEndHandler(), new 
SubmitReceiver());
             tunnel = mesh.createTunnel(authority, 
TallyAuthorityDaemon.MESH_PORT, true, true, null);
@@ -471,14 +472,9 @@
             doCommands();
         }
     }
-
-    private BallotTool(String[] args) {
-        super(args);
-    }
-
     public static void main(String args[]) {
-        Program tool = new BallotTool(args);
-        int ret = tool.start();
+        Program tool = new BallotTool();
+        int ret = tool.start(args);
         System.exit(ret);
     }
 }

Modified: gnunet-java/src/main/java/org/gnunet/voting/CertifyGroupTool.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/CertifyGroupTool.java   
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/CertifyGroupTool.java   
2014-03-11 01:24:03 UTC (rev 32613)
@@ -74,13 +74,9 @@
                "The resulting certificate file written to standard output.";
     }
 
-    private CertifyGroupTool(String... args) {
-        super(args);
-    }
-
     public static void main(String args[]) {
-        CertifyGroupTool tool = new CertifyGroupTool(args);
-        int ret = tool.start();
+        CertifyGroupTool tool = new CertifyGroupTool();
+        int ret = tool.start(args);
         System.exit(ret);
     }
 

Modified: gnunet-java/src/main/java/org/gnunet/voting/EncryptedVote.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/EncryptedVote.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/EncryptedVote.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -28,37 +28,80 @@
 import org.gnunet.secretsharing.Plaintext;
 import org.gnunet.secretsharing.ThresholdPublicKey;
 import org.gnunet.util.Configuration;
-import org.gnunet.util.Strings;
 import org.gnunet.util.crypto.EcdsaPrivateKey;
+import org.gnunet.util.crypto.EcdsaPublicKey;
+import org.gnunet.voting.simulation.Voter;
+import org.omg.CORBA.DynAnyPackage.Invalid;
 
 import java.math.BigInteger;
 
 public class EncryptedVote implements Message {
-    // TODO: zero knowledge proof
-    // TODO: signature
+    @NestedMessage
+    public Ciphertext v;
 
+
     @NestedMessage
-    Ciphertext v;
+    public EcdsaPublicKey voterPublicKey;
 
-    public static EncryptedVote parseFromConfiguration(Configuration cfg) {
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        EncryptedVote that = (EncryptedVote) o;
+
+        if (v != null ? !v.equals(that.v) : that.v != null) return false;
+        if (voterPublicKey != null ? 
!voterPublicKey.equals(that.voterPublicKey) : that.voterPublicKey != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = v != null ? v.hashCode() : 0;
+        result = 31 * result + (voterPublicKey != null ? 
voterPublicKey.hashCode() : 0);
+        return result;
+    }
+
+
+    /**
+     * Construct an EncryptedVote by parsing it from the configuration.
+     * The voter public key must be passed separately.
+     *
+     * @param cfg configuration
+     * @param voterPublicKey public key of the voter
+     * @return the encrypted vote
+     */
+    public static EncryptedVote parseFromConfiguration(Configuration cfg, 
EcdsaPublicKey voterPublicKey) {
         Optional<String> optVal = cfg.getValueString("vote", 
"ENCRYPTED_VOTE_VAL");
         if (!optVal.isPresent()) {
             return null;
         }
         EncryptedVote encryptedVote = new EncryptedVote();
+        encryptedVote.voterPublicKey = voterPublicKey;
         encryptedVote.v = Ciphertext.fromString(optVal.get());
         return encryptedVote;
     }
+    // TODO: zero knowledge proof
+    // TODO: signature
 
-    public void writeToConfiguration(Configuration cfg) {
-        cfg.setValueString("vote", "ENCRYPTED_VOTE_VAL", v.toString());    }
-
     public static EncryptedVote fromChoice(int choiceId, ThresholdPublicKey 
thresholdPublicKey,
-                                           EcdsaPrivateKey voterPrivateKey) {
+                                           EcdsaPrivateKey voterPrivateKey, 
EcdsaPublicKey voterPublicKey) {
+        // for now, we only support one choice!
+        if (choiceId < 0 || choiceId > 1) {
+            throw new InvalidBallotException(String.format("choice '%s' not 
valid", choiceId));
+        }
+        int choiceExp = (choiceId == 1) ? 1 : -1;
         // FIXME: can we use 'g', or should we use another generator?
-        Plaintext p = Plaintext.generate(BigInteger.valueOf(choiceId));
+        Plaintext p = Plaintext.generate(BigInteger.valueOf(choiceExp));
         EncryptedVote encryptedVote = new EncryptedVote();
         encryptedVote.v = p.encrypt(thresholdPublicKey);
+        encryptedVote.voterPublicKey = voterPublicKey;
         return encryptedVote;
     }
+
+    public void writeToConfiguration(Configuration cfg) {
+        cfg.setValueString("vote", "ENCRYPTED_VOTE_VAL", v.toString());
+    }
 }

Modified: gnunet-java/src/main/java/org/gnunet/voting/GroupCert.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/GroupCert.java  2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/GroupCert.java  2014-03-11 
01:24:03 UTC (rev 32613)
@@ -27,7 +27,6 @@
 import org.gnunet.util.crypto.EcdsaPrivateKey;
 import org.gnunet.util.crypto.EcdsaPublicKey;
 import org.gnunet.util.crypto.EcdsaSignature;
-import org.gnunet.util.crypto.EddsaSignature;
 
 /**
  * Group certificate.  Attests to the fact that a voter (identified

Modified: gnunet-java/src/main/java/org/gnunet/voting/TallyAuthorityDaemon.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/TallyAuthorityDaemon.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/TallyAuthorityDaemon.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -25,9 +25,6 @@
 import org.gnunet.consensus.ConsensusCallback;
 import org.gnunet.consensus.ConsensusElement;
 import org.gnunet.construct.Construct;
-import org.gnunet.construct.Message;
-import org.gnunet.construct.NestedMessage;
-import org.gnunet.construct.UInt32;
 import org.gnunet.mesh.Mesh;
 import org.gnunet.mesh.MeshRunabout;
 import org.gnunet.secretsharing.*;
@@ -35,13 +32,17 @@
 import org.gnunet.secretsharing.callbacks.SecretReadyCallback;
 import org.gnunet.testbed.CompressedConfig;
 import org.gnunet.util.*;
-import org.gnunet.util.crypto.*;
+import org.gnunet.util.crypto.EcdsaPublicKey;
+import org.gnunet.util.crypto.EddsaPrivateKey;
+import org.gnunet.util.crypto.EddsaPublicKey;
+import org.gnunet.util.crypto.EddsaSignature;
 import org.gnunet.voting.messages.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.math.BigInteger;
-import java.util.*;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
 
 
 /**
@@ -114,7 +115,7 @@
         /**
          * Product of all encrypted votes (mod q), used to compute the final 
tally.
          */
-        Ciphertext voteProduct;
+        Ciphertext voteProduct = Ciphertext.identity();
 
         /**
          * Maping from choice to number of votes for that choice.
@@ -142,7 +143,16 @@
         public void onElement(ConsensusElement element) {
             System.out.println("got element from consensus");
             EncryptedVote vote = Construct.parseAs(element.data, 
EncryptedVote.class);
+            System.out.println("got vote from consensus, ciphertext: " + 
vote.v.toString());
+            if (electionState.countedVoters.contains(vote.voterPublicKey)) {
+                // Complain.  FIXME: keep lexically largest vote, so ballot is 
unambigous
+                logger.error("voter {} voted twice", vote.voterPublicKey);
+                return;
+            }
             electionState.voteProduct = 
electionState.voteProduct.multiply(vote.v);
+            electionState.countedVoters.add(vote.voterPublicKey);
+
+            System.out.println("threshold key (of this authority): " + 
electionState.share.publicKey.toString());
         }
 
         @Override
@@ -286,6 +296,8 @@
                 logger.info("concluding in {}", 
b.closingTime.getRemaining().getSeconds());
                 Scheduler.addDelayed(b.closingTime.getRemaining(), t);
             }
+            System.out.println("authority threshold: " + 
electionState.ballot.threshold);
+            System.out.println("authority num_peers: " + 
electionState.ballot.authorities.size());
             // we hash the GUID a second time, so that there's no
             // collision with the consensus (as secretsharing also uses 
consensus internally)
             electionState.keyGeneration = new KeyGeneration(
@@ -365,15 +377,15 @@
         }
     }
 
-    public TallyAuthorityDaemon(String[] args) {
-        super(args);
+    public TallyAuthorityDaemon() {
         authorityPrivateKey = EddsaPrivateKey.createRandom();
         authorityPublicKey = authorityPrivateKey.getPublicKey();
     }
 
     public static void main(String[] args) {
-        TallyAuthorityDaemon daemon = new TallyAuthorityDaemon(args);
-        daemon.start();
+        TallyAuthorityDaemon daemon = new TallyAuthorityDaemon();
+        int ret = daemon.start(args);
+        System.exit(ret);
     }
 
     @Override

Modified: 
gnunet-java/src/main/java/org/gnunet/voting/messages/ResultQueryResponseMessage.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/voting/messages/ResultQueryResponseMessage.java
        2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/voting/messages/ResultQueryResponseMessage.java
        2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,9 +1,9 @@
 package org.gnunet.voting.messages;
 
 
-import org.gnunet.construct.*;
+import org.gnunet.construct.IntegerFill;
+import org.gnunet.construct.UnionCase;
 import org.gnunet.util.GnunetMessage;
-import org.gnunet.util.HashCode;
 
 @UnionCase(42006)
 public class ResultQueryResponseMessage implements GnunetMessage.Body {

Modified: 
gnunet-java/src/main/java/org/gnunet/voting/messages/SubmitMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/messages/SubmitMessage.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/messages/SubmitMessage.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,12 +1,12 @@
 package org.gnunet.voting.messages;
 
 import org.gnunet.construct.NestedMessage;
-import org.gnunet.construct.UInt32;
 import org.gnunet.construct.UnionCase;
-import org.gnunet.util.*;
+import org.gnunet.util.AbsoluteTimeMessage;
+import org.gnunet.util.GnunetMessage;
+import org.gnunet.util.HashCode;
 import org.gnunet.util.crypto.EcdsaPublicKey;
 import org.gnunet.util.crypto.EcdsaSignature;
-import org.gnunet.util.crypto.EddsaSignature;
 import org.gnunet.voting.EncryptedVote;
 
 /**

Modified: gnunet-java/src/main/java/org/gnunet/voting/simulation/CryptoUtil.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/voting/simulation/CryptoUtil.java      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/java/org/gnunet/voting/simulation/CryptoUtil.java      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -3,7 +3,6 @@
 import java.math.BigInteger;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
 import java.util.Random;
 
 /**

Modified: 
gnunet-java/src/main/java/org/gnunet/voting/simulation/VotingParameters.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/voting/simulation/VotingParameters.java    
    2014-03-11 01:22:11 UTC (rev 32612)
+++ 
gnunet-java/src/main/java/org/gnunet/voting/simulation/VotingParameters.java    
    2014-03-11 01:24:03 UTC (rev 32613)
@@ -176,7 +176,7 @@
     }
 
     public static void main(String... args) {
-        new Program(args) {
+        new Program() {
             @Argument(
                     shortname = "b",
                     longname = "bits",
@@ -199,7 +199,7 @@
                 System.out.println("q: 0x0" + vp.getQ().toString(16));
                 System.out.println("g: 0x0" + vp.getG().toString(16));
             }
-        }.startWithoutScheduler();
+        }.startWithoutScheduler(args);
     }
 
 }

Modified: gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt      
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt      
2014-03-11 01:24:03 UTC (rev 32613)
@@ -73,12 +73,12 @@
 org.gnunet.util.GnunetMessage$Body|149=org.gnunet.dht.MonitorGetMessage
 org.gnunet.util.GnunetMessage$Body|150=org.gnunet.dht.MonitorGetRespMessage
 org.gnunet.util.GnunetMessage$Body|151=org.gnunet.dht.MonitorPutMessage
-org.gnunet.util.GnunetMessage$Body|171=org.gnunet.statistics.GetResponseEndMessage
-org.gnunet.util.GnunetMessage$Body|170=org.gnunet.statistics.GetResponseMessage
-org.gnunet.util.GnunetMessage$Body|169=org.gnunet.statistics.GetMessage
-org.gnunet.util.GnunetMessage$Body|168=org.gnunet.statistics.SetMessage
-org.gnunet.util.GnunetMessage$Body|173=org.gnunet.statistics.WatchResponseMessage
-org.gnunet.util.GnunetMessage$Body|172=org.gnunet.statistics.WatchMessage
+org.gnunet.util.GnunetMessage$Body|171=org.gnunet.statistics.messages.GetResponseEndMessage
+org.gnunet.util.GnunetMessage$Body|170=org.gnunet.statistics.messages.GetResponseMessage
+org.gnunet.util.GnunetMessage$Body|169=org.gnunet.statistics.messages.GetMessage
+org.gnunet.util.GnunetMessage$Body|168=org.gnunet.statistics.messages.SetMessage
+org.gnunet.util.GnunetMessage$Body|173=org.gnunet.statistics.messages.WatchResponseMessage
+org.gnunet.util.GnunetMessage$Body|172=org.gnunet.statistics.messages.WatchMessage
 
org.gnunet.util.GnunetMessage$Body|476=org.gnunet.testbed.messages.PeerGetInformationMessage
 
org.gnunet.util.GnunetMessage$Body|477=org.gnunet.testbed.messages.PeerInformationMessage
 
org.gnunet.util.GnunetMessage$Body|474=org.gnunet.testbed.messages.PeerCreateSuccessMessage

Modified: 
gnunet-java/src/test/java/org/gnunet/consensus/ConsensusTestbedTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/consensus/ConsensusTestbedTest.java    
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/consensus/ConsensusTestbedTest.java    
2014-03-11 01:24:03 UTC (rev 32613)
@@ -3,7 +3,6 @@
 import org.gnunet.testbed.Controller;
 import org.gnunet.testbed.ControllerProc;
 import org.gnunet.testbed.Host;
-import org.gnunet.testbed.SimpleTestbed;
 import org.gnunet.testbed.callbacks.*;
 import org.gnunet.testing.TestingFixture;
 import org.gnunet.util.*;
@@ -11,7 +10,6 @@
 import org.junit.Test;
 
 import java.util.HashSet;
-import java.util.Set;
 
 /**
  * Test for consensus with multiple peers using testbed.
@@ -20,7 +18,7 @@
     @Test
     public void test_consensus_testbed_2peers() {
         final Wrapper<Boolean> done = new Wrapper<Boolean>(false);
-        new Program("-LDEBUG") {
+        new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -177,7 +175,7 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
 
         Assert.assertTrue(done.get());
 

Modified: gnunet-java/src/test/java/org/gnunet/construct/FrameSizeTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/construct/FrameSizeTest.java   
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/construct/FrameSizeTest.java   
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,7 +1,6 @@
 package org.gnunet.construct;
 
 import org.junit.Assert;
-import org.gnunet.util.GnunetMessage;
 import org.junit.Test;
 
 /**

Modified: gnunet-java/src/test/java/org/gnunet/construct/OptionalUnionTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/construct/OptionalUnionTest.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/construct/OptionalUnionTest.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,7 +1,6 @@
 package org.gnunet.construct;
 
 import org.junit.Assert;
-import org.gnunet.util.GnunetMessage;
 import org.junit.Test;
 
 /**

Modified: gnunet-java/src/test/java/org/gnunet/construct/StringTuple.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/construct/StringTuple.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/construct/StringTuple.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,10 +1,9 @@
 package org.gnunet.construct;
 
 import com.google.common.base.Objects;
-import com.google.common.hash.HashCodes;
 
 /**
-* ...
+* Message to test string parsing in construct.
 *
 * @author Florian Dold
 */

Modified: gnunet-java/src/test/java/org/gnunet/core/CoreTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/core/CoreTest.java     2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/core/CoreTest.java     2014-03-11 
01:24:03 UTC (rev 32613)
@@ -22,7 +22,6 @@
 
 
 import org.gnunet.testing.TestingFixture;
-import org.gnunet.testing.TestingSetup;
 import org.gnunet.testing.TestingSubsystem;
 import org.gnunet.util.*;
 import org.grothoff.Runabout;

Modified: gnunet-java/src/test/java/org/gnunet/dht/DHTTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/dht/DHTTest.java       2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/dht/DHTTest.java       2014-03-11 
01:24:03 UTC (rev 32613)
@@ -20,8 +20,6 @@
 
 package org.gnunet.dht;
 
-import static org.junit.Assert.*;
-
 import org.gnunet.testing.TestingFixture;
 import org.gnunet.testing.TestingSubsystem;
 import org.gnunet.util.*;
@@ -31,6 +29,8 @@
 import java.util.EnumSet;
 import java.util.List;
 
+import static org.junit.Assert.assertArrayEquals;
+
 public class DHTTest extends TestingFixture  {
     @Test(timeout = 1000)
     public void test_dht_put() {

Modified: gnunet-java/src/test/java/org/gnunet/mesh/MeshTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/mesh/MeshTest.java     2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/mesh/MeshTest.java     2014-03-11 
01:24:03 UTC (rev 32613)
@@ -6,7 +6,6 @@
 import org.gnunet.testing.TestingSubsystem;
 import org.gnunet.util.*;
 import org.junit.Test;
-import java.lang.Void;
 
 /**
  * ...

Modified: gnunet-java/src/test/java/org/gnunet/nse/NSETest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/nse/NSETest.java       2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/nse/NSETest.java       2014-03-11 
01:24:03 UTC (rev 32613)
@@ -20,7 +20,6 @@
 
 package org.gnunet.nse;
 
-import org.gnunet.testing.TestingSetup;
 import org.gnunet.testing.TestingSubsystem;
 import org.gnunet.util.AbsoluteTime;
 import org.gnunet.util.Scheduler;

Modified: gnunet-java/src/test/java/org/gnunet/peerinfo/PeerInfoTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/peerinfo/PeerInfoTest.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/peerinfo/PeerInfoTest.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -5,7 +5,6 @@
 import org.gnunet.util.*;
 import org.junit.Test;
 
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 /**

Modified: gnunet-java/src/test/java/org/gnunet/statistics/StatisticsTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/statistics/StatisticsTest.java 
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/statistics/StatisticsTest.java 
2014-03-11 01:24:03 UTC (rev 32613)
@@ -20,11 +20,10 @@
 
 package org.gnunet.statistics;
 
-import org.junit.Assert;
 import org.gnunet.testing.TestingFixture;
-import org.gnunet.testing.TestingSetup;
 import org.gnunet.testing.TestingSubsystem;
 import org.gnunet.util.*;
+import org.junit.Assert;
 import org.junit.Test;
 
 
@@ -41,6 +40,7 @@
         stat.get(RelativeTime.FOREVER, subsystem, name, new 
StatisticsReceiver() {
                     @Override
                     public void onReceive(String rsubsystem, String rname, 
long rvalue) {
+                        System.out.println(String.format("%s:%s = %s", 
rsubsystem, rname, rvalue));
                         if (rsubsystem.equals(subsystem) && rname.equals(name) 
&& rvalue == expectedValue) {
                             getAssertion.assertTrue(true);
                         } else {
@@ -123,17 +123,21 @@
         Scheduler.addDelayed(RelativeTime.fromMilliseconds(200), new 
Scheduler.Task() {
             @Override
             public void run(Scheduler.RunContext ctx) {
+                System.out.println("timeout over");
                 stat1.destroy();
                 final Statistics stat2 = new Statistics(ts.getConfiguration());
                 assertStatisticsGet(assertions, stat2, "gnj-test", "test1", 5, 
new Next() {
                     @Override
                     public void next() {
+                        System.out.println("got test1");
                         assertStatisticsGet(assertions, stat2, "gnj-test", 
"test2", 7, new Next() {
                             @Override
                             public void next() {
+                                System.out.println("got test2");
                                 assertStatisticsGet(assertions, stat2, 
"gnj-test", "test3", 4, new Next() {
                                     @Override
                                     public void next() {
+                                        System.out.println("got test3");
                                         stat2.destroy();
                                     }
                                 });
@@ -164,11 +168,6 @@
                 System.out.println("received update!");
                 stat.destroy();
             }
-
-            @Override
-            public void onTimeout() {
-                Assert.fail();
-            }
         });
 
         // the set is sent after the watch, thus it is guaranteed we

Modified: gnunet-java/src/test/java/org/gnunet/testbed/TestbedTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/testbed/TestbedTest.java       
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/testbed/TestbedTest.java       
2014-03-11 01:24:03 UTC (rev 32613)
@@ -15,7 +15,7 @@
     @Test(timeout = 10000)
     public void test_controller_proc() {
         final Wrapper<Boolean> success = new Wrapper<Boolean>(false);
-        new Program("-LDEBUG") {
+        new Program() {
             @Override
             public void run() {
                 // use local peer's config, does that really make sense?
@@ -33,14 +33,14 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
         Assert.assertTrue(success.get());
     }
 
 
     @Test(timeout = 10000)
     public void test_peer_create() {
-        new Program("-LDEBUG") {
+        new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -78,12 +78,12 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
     }
 
     @Test(timeout = 10000)
     public void test_peer_destroy() {
-        new Program("-LDEBUG") {
+        new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -132,13 +132,13 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
     }
 
     @Test(timeout = 10000)
     public void test_peer_start() {
         final Wrapper<Boolean> startSuccessful = new Wrapper<Boolean>(false);
-        int ret = new Program("-LDEBUG") {
+        int ret = new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -191,7 +191,7 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
         Assert.assertTrue(startSuccessful.get());
         Assert.assertEquals(0, ret);
     }
@@ -200,7 +200,7 @@
     public void test_peer_stop() {
         final Wrapper<Boolean> startSuccessful = new Wrapper<Boolean>(false);
         final Wrapper<Boolean> stopSuccessful = new Wrapper<Boolean>(false);
-        int ret = new Program("-LDEBUG") {
+        int ret = new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -269,7 +269,7 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
         Assert.assertTrue(startSuccessful.get());
         Assert.assertTrue(stopSuccessful.get());
         Assert.assertEquals(0, ret);
@@ -280,7 +280,7 @@
         final Wrapper<Boolean> startSuccessful = new Wrapper<Boolean>(false);
         final Wrapper<Boolean> stopSuccessful = new Wrapper<Boolean>(false);
         final Wrapper<Boolean> destroySuccessful = new Wrapper<Boolean>(false);
-        int ret = new Program("-LDEBUG") {
+        int ret = new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -362,7 +362,7 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
         Assert.assertTrue(startSuccessful.get());
         Assert.assertTrue(stopSuccessful.get());
         Assert.assertTrue(destroySuccessful.get());
@@ -373,7 +373,7 @@
     public void test_peer_get_config() {
         final Wrapper<Boolean> startSuccessful = new Wrapper<Boolean>(false);
         final Wrapper<Boolean> infoSuccessful = new Wrapper<Boolean>(false);
-        int ret = new Program("-LDEBUG") {
+        int ret = new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -425,7 +425,7 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
         Assert.assertTrue(startSuccessful.get());
         Assert.assertTrue(infoSuccessful.get());
         Assert.assertEquals(0, ret);
@@ -435,7 +435,7 @@
     public void test_peer_reconfigure() {
         final Wrapper<Boolean> startSuccessful = new Wrapper<Boolean>(false);
         final Wrapper<Boolean> reconfigureSuccessful = new 
Wrapper<Boolean>(false);
-        int ret = new Program("-LDEBUG") {
+        int ret = new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -496,7 +496,7 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
         Assert.assertTrue(reconfigureSuccessful.get());
         Assert.assertEquals(0, ret);
     }
@@ -504,7 +504,7 @@
     @Test(timeout = 5000)
     public void test_peer_get_connect_overlay() {
         final Wrapper<Boolean> connectSuccessful = new Wrapper<Boolean>(false);
-        int ret = new Program("-LDEBUG") {
+        int ret = new Program() {
             ControllerProc cp;
             Host h;
             Controller c;
@@ -591,7 +591,7 @@
                     }
                 });
             }
-        }.start();
+        }.start("-LDEBUG");
         Assert.assertTrue(connectSuccessful.get());
         Assert.assertEquals(0, ret);
     }

Modified: gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java   
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java   
2014-03-11 01:24:03 UTC (rev 32613)
@@ -21,12 +21,12 @@
 package org.gnunet.transport;
 
 import org.gnunet.hello.HelloMessage;
-import org.gnunet.peerinfo.PeerInfo;
-import org.gnunet.peerinfo.PeerProcessor;
 import org.gnunet.testing.TestingFixture;
 import org.gnunet.testing.TestingSubsystem;
 import org.gnunet.transport.callbacks.HelloUpdateCallback;
-import org.gnunet.util.*;
+import org.gnunet.util.Program;
+import org.gnunet.util.Scheduler;
+import org.gnunet.util.Wrapper;
 import org.junit.Test;
 
 import static org.junit.Assert.assertTrue;

Modified: gnunet-java/src/test/java/org/gnunet/util/ClientServerTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/util/ClientServerTest.java     
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/util/ClientServerTest.java     
2014-03-11 01:24:03 UTC (rev 32613)
@@ -1,20 +1,12 @@
 package org.gnunet.util;
 
 import com.google.common.collect.Lists;
-import org.gnunet.construct.UInt32;
-import org.gnunet.construct.UnionCase;
 import org.gnunet.testing.TestingFixture;
 import org.gnunet.testing.TestingServer;
-import org.gnunet.testing.TestingSetup;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.IOException;
 import java.net.*;
-import java.nio.ByteBuffer;
-import java.nio.channels.Pipe;
-import java.nio.channels.spi.SelectorProvider;
-import java.util.ArrayList;
 
 /**
  * ...

Modified: gnunet-java/src/test/java/org/gnunet/util/EcdsaTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/util/EcdsaTest.java    2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/util/EcdsaTest.java    2014-03-11 
01:24:03 UTC (rev 32613)
@@ -20,7 +20,10 @@
 
 package org.gnunet.util;
 
-import org.gnunet.util.crypto.*;
+import org.gnunet.util.crypto.EcdsaPrivateKey;
+import org.gnunet.util.crypto.EcdsaPublicKey;
+import org.gnunet.util.crypto.EcdsaSignature;
+import org.gnunet.util.crypto.Ed25519;
 import org.junit.Assert;
 import org.junit.Test;
 

Modified: gnunet-java/src/test/java/org/gnunet/util/ResolverTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/util/ResolverTest.java 2014-03-11 
01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/util/ResolverTest.java 2014-03-11 
01:24:03 UTC (rev 32613)
@@ -20,9 +20,7 @@
 
 package org.gnunet.util;
 
-import org.gnunet.testing.TestingSetup;
 import org.gnunet.testing.TestingSubsystem;
-import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Modified: gnunet-java/src/test/java/org/gnunet/util/ServerExample.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/util/ServerExample.java        
2014-03-11 01:22:11 UTC (rev 32612)
+++ gnunet-java/src/test/java/org/gnunet/util/ServerExample.java        
2014-03-11 01:24:03 UTC (rev 32613)
@@ -24,7 +24,7 @@
 import java.net.SocketAddress;
 import java.util.Arrays;
 
-import static org.gnunet.util.Server.*;
+import static org.gnunet.util.Server.DisconnectHandler;
 
 /**
  * Example server implementation.
@@ -35,7 +35,7 @@
 
     public static void main(String[] args) {
         // usually servers should run inside a service, this is just for 
testing
-        new Program(args) {
+        new Program() {
             @Override
             public void run() {
                 Server s = new Server(Arrays.asList(new SocketAddress[]{new 
InetSocketAddress("127.0.0.1", 3456)}),
@@ -74,6 +74,6 @@
                 });
 
             }
-        }.start();
+        }.start(args);
     }
 }

Modified: gnunet-java/src/test/python/test_voting_single.py
===================================================================
--- gnunet-java/src/test/python/test_voting_single.py   2014-03-11 01:22:11 UTC 
(rev 32612)
+++ gnunet-java/src/test/python/test_voting_single.py   2014-03-11 01:24:03 UTC 
(rev 32613)
@@ -13,6 +13,7 @@
 def wait_for_after(ts):
   now = time.time()
   if now < ts:
+    print "waiting", ts - now, "seconds"
     time.sleep(ts - now)
 
 def get_config(section, option, filename=None, expand=False):
@@ -83,13 +84,13 @@
 ballot = open(ballot_filename, "w")
 
 now = int(time.time())
-TS_KEYGEN_START = now + 10
-TS_KEYGEN_END = now + 20
-TS_START = now + 20
-TS_CLOSING = now + 25
-TS_CONCLUDE = now + 45
-TS_QUERY = now + 65
-TS_END = now + 65
+TS_KEYGEN_START = now + 5
+TS_KEYGEN_END = now + 10
+TS_START = now + 15
+TS_CLOSING = now + 20
+TS_CONCLUDE = now + 25
+TS_QUERY = now + 30
+TS_END = now + 35
 
 ballot.write("[authorities]\n")
 ballot.write("auth0 = %s\n" % public_key)




reply via email to

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