gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r20779 - in gnunet-java: .idea .idea/inspectionProfiles lib


From: gnunet
Subject: [GNUnet-SVN] r20779 - in gnunet-java: .idea .idea/inspectionProfiles lib src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/dht src/org/gnunet/nse src/org/gnunet/statistics src/org/gnunet/util test/org/gnunet/construct test/org/gnunet/construct/parsers
Date: Mon, 26 Mar 2012 19:50:01 +0200

Author: dold
Date: 2012-03-26 19:50:01 +0200 (Mon, 26 Mar 2012)
New Revision: 20779

Added:
   gnunet-java/src/org/gnunet/util/HashCode.java
   gnunet-java/test/org/gnunet/construct/parsers/
   gnunet-java/test/org/gnunet/construct/parsers/IntegerParserTest.java
Removed:
   gnunet-java/lib/commons-io-2.1.jar
   gnunet-java/src/org/gnunet/construct/MessageId.java
   gnunet-java/src/org/gnunet/util/GnunetHash.java
Modified:
   gnunet-java/.idea/inspectionProfiles/Project_Default.xml
   gnunet-java/.idea/workspace.xml
   gnunet-java/src/org/gnunet/construct/Construct.java
   gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java
   gnunet-java/src/org/gnunet/construct/MessageLoader.java
   gnunet-java/src/org/gnunet/construct/MsgMap.txt
   gnunet-java/src/org/gnunet/construct/Nested.java
   gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
   gnunet-java/src/org/gnunet/dht/DistributedHashTable.java
   gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java
   gnunet-java/src/org/gnunet/statistics/Statistics.java
   gnunet-java/src/org/gnunet/util/AbsoluteTime.java
   gnunet-java/src/org/gnunet/util/Client.java
   gnunet-java/src/org/gnunet/util/GnunetMessage.java
   gnunet-java/src/org/gnunet/util/MessageReceiver.java
   gnunet-java/src/org/gnunet/util/PeerIdentity.java
   gnunet-java/src/org/gnunet/util/Resolver.java
   gnunet-java/src/org/gnunet/util/Scheduler.java
   gnunet-java/test/org/gnunet/construct/QueryMessage.java
   gnunet-java/test/org/gnunet/construct/SimpleTestMessage.java
   gnunet-java/test/org/gnunet/construct/UnionTest.java
Log:
changed GnunetMessage to use unions

Modified: gnunet-java/.idea/inspectionProfiles/Project_Default.xml
===================================================================
--- gnunet-java/.idea/inspectionProfiles/Project_Default.xml    2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/.idea/inspectionProfiles/Project_Default.xml    2012-03-26 
17:50:01 UTC (rev 20779)
@@ -99,7 +99,6 @@
     <inspection_tool class="DuplicateCondition" enabled="true" level="WARNING" 
enabled_by_default="true">
       <option name="ignoreMethodCalls" value="false" />
     </inspection_tool>
-    <inspection_tool class="DynamicRegexReplaceableByCompiledPattern" 
enabled="true" level="WARNING" enabled_by_default="true" />
     <inspection_tool class="EmptyDirectory" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="EmptyInitializer" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="EmptySynchronizedStatement" enabled="true" 
level="WARNING" enabled_by_default="true" />
@@ -177,13 +176,7 @@
       <option name="ignoreIterators" value="false" />
     </inspection_tool>
     <inspection_tool class="LoopWithImplicitTerminationCondition" 
enabled="true" level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="MagicNumber" enabled="true" level="WARNING" 
enabled_by_default="true">
-      <option name="m_ignoreInHashCode" value="true" />
-    </inspection_tool>
     <inspection_tool class="MapReplaceableByEnumMap" enabled="true" 
level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="MethodCanBeVariableArityMethod" enabled="true" 
level="WARNING" enabled_by_default="true">
-      <option name="ignoreByteAndShortArrayParameters" value="false" />
-    </inspection_tool>
     <inspection_tool class="MethodMayBeStatic" enabled="true" level="WARNING" 
enabled_by_default="true">
       <option name="m_onlyPrivateOrFinal" value="false" />
       <option name="m_ignoreEmptyMethods" value="true" />
@@ -380,6 +373,7 @@
     </inspection_tool>
     <inspection_tool class="TypeParameterExtendsFinalClass" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="TypeParameterHidesVisibleType" enabled="true" 
level="WARNING" enabled_by_default="true" />
+    <inspection_tool class="UNCHECKED_WARNING" enabled="false" level="WARNING" 
enabled_by_default="false" />
     <inspection_tool class="UnaryPlus" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="UnconditionalWait" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="UnnecessaryDefault" enabled="true" level="WARNING" 
enabled_by_default="true" />

Modified: gnunet-java/.idea/workspace.xml
===================================================================
--- gnunet-java/.idea/workspace.xml     2012-03-26 16:20:57 UTC (rev 20778)
+++ gnunet-java/.idea/workspace.xml     2012-03-26 17:50:01 UTC (rev 20779)
@@ -1,8 +1,36 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="AnalysisUIOptions">
+    <option name="ANALYZE_TEST_SOURCES" value="false" />
+  </component>
   <component name="ChangeListManager">
-    <list default="true" readonly="true" 
id="54202f52-6f5b-4e71-983e-7aa49e206034" name="Default" comment="">
+    <list default="true" readonly="true" 
id="92cdd5e3-f1ea-4d90-81fc-cf0bd20d2d2e" name="Default" comment="">
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/parsers" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/parsers/IntegerParserTest.java"
 />
+      <change type="DELETED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/MessageId.java" afterPath="" 
/>
+      <change type="DELETED" beforePath="$PROJECT_DIR$/lib/commons-io-2.1.jar" 
afterPath="" />
+      <change type="MOVED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/GnunetHash.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/HashCode.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" 
afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" />
       <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/.idea/workspace.xml" 
afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java"
 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java"
 />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/MsgMap.txt" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/MsgMap.txt" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/Nested.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/Nested.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/dht/DistributedHashTable.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/dht/DistributedHashTable.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Client.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Client.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentity.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentity.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java" />
     </list>
     <ignored path="gnunet-java.iws" />
     <ignored path=".idea/workspace.xml" />
@@ -60,97 +88,94 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <file leaf-file-name="Client.java" pinned="false" current="false" 
current-in-tab="false">
+      <file leaf-file-name="Client.java" pinned="false" current="true" 
current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="438" column="42" selection-start="15860" 
selection-end="15860" vertical-scroll-proportion="0.0">
-              <folding>
-                <element signature="imports" expanded="true" />
-              </folding>
+            <state line="585" column="0" selection-start="21568" 
selection-end="21568" vertical-scroll-proportion="0.85470086">
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ISSUES" pinned="false" current="true" 
current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/ISSUES">
+      <file leaf-file-name="MessageTransmitter.java" pinned="false" 
current="false" current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageTransmitter.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="16" column="0" selection-start="839" 
selection-end="839" vertical-scroll-proportion="-6.3773584">
+            <state line="9" column="16" selection-start="320" 
selection-end="320" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="NetworkSizeEstimation.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java">
+      <file leaf-file-name="Scheduler.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="190" column="0" selection-start="5660" 
selection-end="5660" vertical-scroll-proportion="0.0">
+            <state line="169" column="20" selection-start="5910" 
selection-end="5910" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MessageReceiver.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java">
+      <file leaf-file-name="Nested.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/Nested.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="40" column="0" selection-start="1229" 
selection-end="1229" vertical-scroll-proportion="0.0">
+            <state line="17" column="37" selection-start="438" 
selection-end="438" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Parser.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
+      <file leaf-file-name="Program.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Program.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="135" column="21" selection-start="4442" 
selection-end="4442" vertical-scroll-proportion="0.0">
+            <state line="11" column="22" selection-start="282" 
selection-end="282" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Statistics.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java">
+      <file leaf-file-name="Construct.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="34" column="41" selection-start="939" 
selection-end="939" vertical-scroll-proportion="0.0">
+            <state line="311" column="5" selection-start="10236" 
selection-end="10236" vertical-scroll-proportion="0.0">
               <folding>
                 <element signature="imports" expanded="true" />
+                <element signature="e#3514#3552#0" expanded="true" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Option.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Option.java">
+      <file leaf-file-name="Resolver.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="10" column="18" selection-start="277" 
selection-end="277" vertical-scroll-proportion="0.0">
+            <state line="16" column="10" selection-start="495" 
selection-end="495" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Cancelable.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Cancelable.java">
+      <file leaf-file-name="UnionParser.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="6" column="16" selection-start="164" 
selection-end="164" vertical-scroll-proportion="0.0">
+            <state line="69" column="27" selection-start="2291" 
selection-end="2291" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Resolver.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
+      <file leaf-file-name="SimpleTestMessage.java" pinned="false" 
current="false" current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="274" column="36" selection-start="8107" 
selection-end="8107" vertical-scroll-proportion="0.0">
-              <folding>
-                <element signature="e#760#816#0" expanded="true" />
-              </folding>
+            <state line="1" column="0" selection-start="30" selection-end="30" 
vertical-scroll-proportion="0.0">
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MessageTransmitter.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageTransmitter.java">
+      <file leaf-file-name="QueryMessage.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="2" column="17" selection-start="43" 
selection-end="43" vertical-scroll-proportion="0.0">
+            <state line="1" column="0" selection-start="30" selection-end="30" 
vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
@@ -166,20 +191,22 @@
   <component name="IdeDocumentHistory">
     <option name="changedFiles">
       <list>
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentity.java" />
         <option value="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/statistics/StatisticsService.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/Configuration.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java" 
/>
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/Cancelable.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/Program.java" />
         <option value="$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java" 
/>
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/Configuration.java" />
         <option 
value="$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java" />
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java" />
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java"
 />
         <option value="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Nested.java" />
+        <option 
value="$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java" />
+        <option 
value="$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java" />
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java" 
/>
         <option value="$PROJECT_DIR$/src/org/gnunet/util/Client.java" />
-        <option value="$PROJECT_DIR$/ISSUES" />
       </list>
     </option>
   </component>
@@ -215,8 +242,8 @@
       <sortByType />
     </navigator>
     <panes>
-      <pane id="Scope" />
       <pane id="PackagesPane" />
+      <pane id="Scope" />
       <pane id="ProjectPane">
         <subPane>
           <PATH>
@@ -252,10 +279,6 @@
               <option name="myItemId" value="gnunet" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="services" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -267,24 +290,6 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="test" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
               <option name="myItemId" value="src" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
@@ -292,10 +297,6 @@
               <option name="myItemId" value="org" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="grothoff" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -344,14 +345,6 @@
               <option name="myItemId" value="gnunet" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="util" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="getopt" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -375,7 +368,7 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="statistics" />
+              <option name="myItemId" value="nse" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
@@ -401,7 +394,7 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="nse" />
+              <option name="myItemId" value="construct" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
@@ -426,32 +419,14 @@
               <option name="myItemId" value="gnunet" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-          </PATH>
-          <PATH>
             <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemId" value="construct" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
+              <option name="myItemId" value="parsers" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="org" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="construct" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -463,25 +438,9 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
+              <option name="myItemId" value="lib" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="org" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="construct" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="parsers" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -493,7 +452,7 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value=".idea" />
+              <option name="myItemId" value="bin" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
@@ -503,26 +462,30 @@
   </component>
   <component name="PropertiesComponent">
     <property name="GoToFile.includeJavaFiles" value="false" />
-    <property name="OverrideImplement.combined" value="true" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
     <property name="options.splitter.main.proportions" value="0.3" />
-    <property name="options.lastSelected" value="preferences.sourceCode.Java" 
/>
+    <property name="options.lastSelected" 
value="preferences.externalResources" />
     <property name="MemberChooser.sorted" value="false" />
     <property name="recentsLimit" value="5" />
-    <property name="MemberChooser.copyJavadoc" value="false" />
-    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
     <property name="MemberChooser.showClasses" value="true" />
     <property name="GoToClass.includeLibraries" value="false" />
     <property name="options.searchVisible" value="true" />
     <property name="options.splitter.details.proportions" value="0.2" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
     <property name="dynamic.classpath" value="false" />
   </component>
-  <component name="RunManager" selected="Application.NetworkSizeEstimation">
-    <configuration default="false" name="NetworkSizeEstimationServiceTest" 
type="JUnit" factoryName="JUnit" temporary="true">
+  <component name="RecentsManager">
+    <key name="IntroduceConstantDialog.RECENTS_KEY">
+      <recent name="org.gnunet.nse.NetworkSizeEstimation.StartMessage" />
+    </key>
+  </component>
+  <component name="RunManager" selected="JUnit.IntegerParserTest">
+    <configuration default="false" name="IntegerParserTest" type="JUnit" 
factoryName="JUnit" temporary="true">
       <module name="gnunet-java" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
       <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" value="org.gnunet.services" />
-      <option name="MAIN_CLASS_NAME" 
value="org.gnunet.services.NetworkSizeEstimationServiceTest" />
+      <option name="PACKAGE_NAME" value="org.gnunet.construct.parsers" />
+      <option name="MAIN_CLASS_NAME" 
value="org.gnunet.construct.parsers.IntegerParserTest" />
       <option name="METHOD_NAME" />
       <option name="TEST_OBJECT" value="class" />
       <option name="VM_PARAMETERS" value="-ea" />
@@ -535,34 +498,10 @@
       </option>
       <envs />
       <patterns />
-      <RunnerSettings RunnerId="Debug">
-        <option name="DEBUG_PORT" value="" />
-        <option name="TRANSPORT" value="0" />
-        <option name="LOCAL" value="true" />
-      </RunnerSettings>
-      <ConfigurationWrapper RunnerId="Debug" />
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
       <method />
     </configuration>
-    <configuration default="false" name="NetworkSizeEstimation" 
type="Application" factoryName="Application" temporary="true">
-      <option name="MAIN_CLASS_NAME" 
value="org.gnunet.nse.NetworkSizeEstimation" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="gnunet-java" />
-      <envs />
-      <RunnerSettings RunnerId="Debug">
-        <option name="DEBUG_PORT" value="" />
-        <option name="TRANSPORT" value="0" />
-        <option name="LOCAL" value="true" />
-      </RunnerSettings>
-      <ConfigurationWrapper RunnerId="Debug" />
-      <method />
-    </configuration>
     <configuration default="true" type="Remote" factoryName="Remote">
       <option name="USE_SOCKET_TRANSPORT" value="true" />
       <option name="SERVER_MODE" value="false" />
@@ -570,7 +509,6 @@
       <option name="HOST" value="localhost" />
       <option name="PORT" value="5005" />
       <method>
-        <option name="AntTarget" enabled="false" />
         <option name="BuildArtifacts" enabled="false" />
       </method>
     </configuration>
@@ -586,7 +524,6 @@
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
       <option name="ALTERNATIVE_JRE_PATH" />
       <method>
-        <option name="AntTarget" enabled="false" />
         <option name="BuildArtifacts" enabled="false" />
         <option name="Make" enabled="true" />
       </method>
@@ -604,7 +541,6 @@
       <module name="" />
       <envs />
       <method>
-        <option name="AntTarget" enabled="false" />
         <option name="BuildArtifacts" enabled="false" />
         <option name="Make" enabled="true" />
       </method>
@@ -628,37 +564,12 @@
       <envs />
       <patterns />
       <method>
-        <option name="AntTarget" enabled="false" />
         <option name="BuildArtifacts" enabled="false" />
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration default="false" name="Resolver" type="Application" 
factoryName="Application">
-      <option name="MAIN_CLASS_NAME" value="org.gnunet.util.Resolver" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PROGRAM_PARAMETERS" value="-LDEBUG gnunet.org" />
-      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" value="" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="gnunet-java" />
-      <envs />
-      <RunnerSettings RunnerId="Debug">
-        <option name="DEBUG_PORT" value="" />
-        <option name="TRANSPORT" value="0" />
-        <option name="LOCAL" value="true" />
-      </RunnerSettings>
-      <RunnerSettings RunnerId="Run" />
-      <ConfigurationWrapper RunnerId="Debug" />
-      <ConfigurationWrapper RunnerId="Run" />
-      <method />
-    </configuration>
-    <list size="3">
-      <item index="0" class="java.lang.String" 
itemvalue="Application.Resolver" />
-      <item index="1" class="java.lang.String" 
itemvalue="JUnit.NetworkSizeEstimationServiceTest" />
-      <item index="2" class="java.lang.String" 
itemvalue="Application.NetworkSizeEstimation" />
+    <list size="1">
+      <item index="0" class="java.lang.String" 
itemvalue="JUnit.IntegerParserTest" />
     </list>
     <configuration name="&lt;template&gt;" type="TestNG" default="true" 
selected="false">
       <option name="MAIN_CLASS_NAME" />
@@ -720,25 +631,24 @@
     <frame x="-6" y="17" width="1452" height="889" extended-state="0" />
     <editor active="true" />
     <layout>
-      <window_info id="Messages" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.15521978" sideWeight="0.5" order="7" side_tool="false" 
content_ui="tabs" />
       <window_info id="Changes" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="Palette" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" 
sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Ant Build" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.26406926" sideWeight="0.20054945" order="1" side_tool="true" 
content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="true" weight="0.26406926" 
sideWeight="0.7802198" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.21978022" 
sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" 
sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" 
sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.32967034" sideWeight="0.5" order="7" side_tool="true" 
content_ui="tabs" />
       <window_info id="Favorites" active="false" anchor="left" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
-      <window_info id="Event Log" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3021978" 
sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Version Control" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Messages" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.32967034" sideWeight="0.5" order="7" side_tool="false" 
content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" 
sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24982257" 
sideWeight="0.6703297" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3282967" 
sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.3997253" sideWeight="0.5" order="5" side_tool="false" 
content_ui="tabs" />
       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" 
sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="SVN Properties" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.32967034" sideWeight="0.5" order="7" side_tool="false" 
content_ui="tabs" />
       <window_info id="Message" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32967034" 
sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Commander" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
-      <window_info id="Inspection" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
     </layout>
   </component>
   <component name="VcsContentAnnotationSettings">
@@ -775,7 +685,7 @@
     <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
     <option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
     <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
-    <option name="LAST_COMMIT_MESSAGE" value="added some thoughts to ISSUES" />
+    <option name="LAST_COMMIT_MESSAGE" />
     <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
     <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
     <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
@@ -788,116 +698,124 @@
     <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
     <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
     <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
-    <MESSAGE value="fixed the very buggy implementation of the client; added 
some stuff to the scheduler" />
-    <MESSAGE value="fixed bug in the resolver" />
-    <MESSAGE value="added some thoughts to ISSUES" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager />
   </component>
-  <component name="antWorkspaceConfiguration">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="FILTER_TARGETS" value="false" />
-  </component>
   <component name="editorHistoryManager">
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="37" column="13" selection-start="1177" 
selection-end="1177" vertical-scroll-proportion="0.0" />
+        <state line="105" column="7" selection-start="4597" 
selection-end="4597" vertical-scroll-proportion="-13.6">
+          <folding>
+            <element signature="e#900#930#0" expanded="true" />
+          </folding>
+        </state>
       </provider>
     </entry>
     <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageHeader.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="13" column="0" selection-start="217" selection-end="217" 
vertical-scroll-proportion="0.0" />
+        <state line="2" column="13" selection-start="44" selection-end="44" 
vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="36" column="10" selection-start="1140" 
selection-end="1140" vertical-scroll-proportion="0.0" />
+        <state line="13" column="20" selection-start="318" selection-end="318" 
vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="9" column="13" selection-start="221" selection-end="221" 
vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
     <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="10" column="13" selection-start="239" selection-end="239" 
vertical-scroll-proportion="0.0" />
+        <state line="11" column="13" selection-start="269" selection-end="269" 
vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Union.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="201" column="23" selection-start="6493" 
selection-end="6493" vertical-scroll-proportion="0.0" />
+        <state line="10" column="18" selection-start="275" selection-end="275" 
vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Program.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Nested.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="150" column="7" selection-start="4834" 
selection-end="4834" vertical-scroll-proportion="0.0" />
+        <state line="17" column="37" selection-start="438" selection-end="438" 
vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Program.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="40" column="0" selection-start="1229" 
selection-end="1229" vertical-scroll-proportion="0.0">
+        <state line="11" column="22" selection-start="282" selection-end="282" 
vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="135" column="21" selection-start="4442" 
selection-end="4442" vertical-scroll-proportion="0.0">
+        <state line="1" column="0" selection-start="30" selection-end="30" 
vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Option.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="10" column="18" selection-start="277" selection-end="277" 
vertical-scroll-proportion="0.0" />
+        <state line="1" column="0" selection-start="30" selection-end="30" 
vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageTransmitter.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="2" column="17" selection-start="43" selection-end="43" 
vertical-scroll-proportion="0.0" />
+        <state line="69" column="27" selection-start="2291" 
selection-end="2291" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="34" column="41" selection-start="939" selection-end="939" 
vertical-scroll-proportion="0.0">
+        <state line="311" column="5" selection-start="10236" 
selection-end="10236" vertical-scroll-proportion="0.0">
           <folding>
             <element signature="imports" expanded="true" />
+            <element signature="e#3514#3552#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Cancelable.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="6" column="16" selection-start="164" selection-end="164" 
vertical-scroll-proportion="0.0">
+        <state line="16" column="10" selection-start="495" selection-end="495" 
vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="190" column="0" selection-start="5660" 
selection-end="5660" vertical-scroll-proportion="0.0">
+        <state line="169" column="20" selection-start="5910" 
selection-end="5910" vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageTransmitter.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="274" column="36" selection-start="8107" 
selection-end="8107" vertical-scroll-proportion="0.0">
-          <folding>
-            <element signature="e#760#816#0" expanded="true" />
-          </folding>
+        <state line="9" column="16" selection-start="320" selection-end="320" 
vertical-scroll-proportion="0.0">
+          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="438" column="42" selection-start="15860" 
selection-end="15860" vertical-scroll-proportion="0.0">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/ISSUES">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="16" column="0" selection-start="839" selection-end="839" 
vertical-scroll-proportion="-6.3773584">
+        <state line="585" column="0" selection-start="21568" 
selection-end="21568" vertical-scroll-proportion="0.85470086">
           <folding />
         </state>
       </provider>

Deleted: gnunet-java/lib/commons-io-2.1.jar
===================================================================
(Binary files differ)

Modified: gnunet-java/src/org/gnunet/construct/Construct.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Construct.java 2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/construct/Construct.java 2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -14,7 +14,6 @@
  * @author Christian Grothoff
  */
 public class Construct {
-
     private static HashMap<Class<? extends Message>, Parser> parserCache = new 
HashMap<Class<? extends Message>, Parser>(100);
 
     /**
@@ -34,6 +33,10 @@
         return m;
     }
 
+    public static <T extends Message> T parseAs(byte[] srcBuf, Class<T> c) {
+        return parseAs(ByteBuffer.wrap(srcBuf), c);
+    }
+
     /**
      * Create a Parser for a sub-class of Message. The result is always cached.
      *
@@ -88,12 +91,19 @@
             pg.visitAppropriate(as[0]);
 
             parser.add(pg.parser);
-
         }
 
         return parser;
     }
 
+    public static Parser getParser(Class cls, List<Field> frameSizePath, 
List<Field> pathFromRoot) {
+        ParserGenerator pg = new ParserGenerator();
+        pg.frameSizePath = new ArrayList<Field>(frameSizePath);
+        pg.path = new ArrayList<Field>(pathFromRoot);
+        return getParser(cls, pg);
+    }
+
+
     // has to be public, accessed by Runabout (todo: can we do something about 
this scope issue?)
 
     @SuppressWarnings("UnusedDeclaration")
@@ -147,10 +157,9 @@
         }
 
         public void visit(Union u) {
-            parser = new UnionParser(frameSizePath, u.optional(), 
field.getType().getCanonicalName(),
-                    getFieldPathFromString(u.tag(), c), field);
-
-
+            parser = new UnionParser(frameSizePath, u.optional(),
+                    (Class<MessageUnion>) field.getType(),
+                    getFieldPathFromString(u.tag(), c), field, path);
         }
 
         public void visit(FrameSize ts) {

Deleted: gnunet-java/src/org/gnunet/construct/MessageId.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageId.java 2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/construct/MessageId.java 2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -1,18 +0,0 @@
-package org.gnunet.construct;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Assigns an id to a a message.
- * 
- * @author Florian Dold
- *
- */
address@hidden(RetentionPolicy.SOURCE)
address@hidden(ElementType.TYPE)
-public @interface MessageId {
-    int value();
-}

Modified: gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java      
2012-03-26 16:20:57 UTC (rev 20778)
+++ gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java      
2012-03-26 17:50:01 UTC (rev 20779)
@@ -13,7 +13,6 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.lang.Integer;
-import java.lang.annotation.Annotation;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -22,15 +21,13 @@
 /**
  * Creates a resource file 'MsgMap.txt' in the package 'org.gnunet.construct'.
  */
address@hidden({"org.gnunet.construct.MessageId", 
"org.gnunet.construct.UnionCase"})
address@hidden({"org.gnunet.construct.UnionCase"})
 @SupportedSourceVersion(SourceVersion.RELEASE_6)
 public class MessageIdAnnotationProcessor extends AbstractProcessor {
-    Map<Integer, String> msgmap = new HashMap<java.lang.Integer, String>(100);
     Map<String, Map<Integer, String>> unionmap = new HashMap<String, 
Map<Integer, String>>(100);
-    private Types types;
-    private Elements elements;
+    private Types types = null;
+    private Elements elements = null;
 
-
     @Override
     public boolean process(Set<? extends TypeElement> typeElements, 
RoundEnvironment roundEnvironment) {
         if (roundEnvironment.errorRaised()) {
@@ -52,13 +49,9 @@
 
             try {
                 Writer w = outfile.openWriter();
-                for (Map.Entry<java.lang.Integer, String> e : 
msgmap.entrySet()) {
-                    w.write("" + e.getKey() + "=" + e.getValue() + "\n");
-                }
-
                 for (Map.Entry<String, Map<Integer, String>> outerEntry : 
unionmap.entrySet()) {
                     for (Map.Entry<Integer, String> innerEntry : 
outerEntry.getValue().entrySet()) {
-                        w.write(""+ innerEntry.getKey() + "|" + 
outerEntry.getKey() + "=" + innerEntry.getValue() + "\n");
+                        w.write(outerEntry.getKey() + "|" + 
innerEntry.getKey() + "=" + innerEntry.getValue() + "\n");
                     }
                 }
 
@@ -73,21 +66,6 @@
             processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, 
"message map written to " + outfile.toUri());
 
         } else {
-            for (Element e : 
roundEnvironment.getElementsAnnotatedWith(MessageId.class)) {
-                Annotation ann = e.getAnnotation(MessageId.class);
-                if (ann != null) {
-                    int id = e.getAnnotation(MessageId.class).value();
-                    String fqn = getClassName(e);
-                    if (msgmap.containsKey(id)) {
-                        
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
-                                String.format("duplicate @MessageId(%s) in %s 
and %s found",
-                                        id, fqn, msgmap.get(id)));
-                        return false;
-                    } else {
-                        msgmap.put(id, fqn);
-                    }
-                }
-            }
             for (Element e : 
roundEnvironment.getElementsAnnotatedWith(UnionCase.class)) {
                 UnionCase ann = e.getAnnotation(UnionCase.class);
                 String targetName = getClassName(e);
@@ -108,7 +86,7 @@
                             "class %s annotated with @UnionCase does not 
implement an interface inheriting MessageUnion", e.getSimpleName()));
                     return false;
                 }
-                String unionName = unionInterface.toString();
+                String unionName = 
getClassName(types.asElement(unionInterface));
                 if (!unionmap.containsKey(unionName)) {
                     unionmap.put(unionName, new HashMap<Integer, String>(10));
                 }

Modified: gnunet-java/src/org/gnunet/construct/MessageLoader.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageLoader.java     2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/src/org/gnunet/construct/MessageLoader.java     2012-03-26 
17:50:01 UTC (rev 20779)
@@ -25,104 +25,134 @@
 
 import org.gnunet.exceptions.InternalLogicError;
 import org.gnunet.exceptions.MessageFormatException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.BufferedReader;
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.lang.Integer;
 import java.net.URL;
-import java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.Map;
 
 public class MessageLoader {
-    private static HashMap<java.lang.Integer, String> msgmap = new 
HashMap<Integer, String>();
-    private static Map<String, Map<Integer, String>> unionmap = new 
HashMap<String, Map<Integer, String>>(100);
+    private static final Logger logger = LoggerFactory
+            .getLogger(MessageLoader.class);
 
+
+    /**
+     * Maps a class and tag to the corresponding union case.
+     * <p/>
+     * XXX: how much of generics is too much?
+     */
+    private static Map<Class<? extends MessageUnion>, Map<Integer, Class<? 
extends MessageUnion>>> unionmap
+            = new HashMap<Class<? extends MessageUnion>, Map<Integer, Class<? 
extends MessageUnion>>>(100);
+
+    /*
+     * Maps a union interface and union case to the corresponding tag.
+     */
+    private static Map<Class<? extends MessageUnion>, Map<Class<? extends 
MessageUnion>, Integer>> tagmap
+            = new HashMap<Class<? extends MessageUnion>, Map<Class<? extends 
MessageUnion>, Integer>>(100);
+
+
     static {
+        // XXX: should MessageLoader be a singleton?
         loadMessageMap();
     }
 
     public static void loadMessageMap() {
         URL loc = MessageLoader.class.getResource("MsgMap.txt");
-        if (loc == null) {
+        if (loc == null)
             throw new RuntimeException("could not load message map");
-        }
-        BufferedReader in;
+        BufferedReader in = null;
         try {
             in = new BufferedReader(new InputStreamReader(loc.openStream()));
-        } catch (IOException e) {
-            throw new RuntimeException("could not open message map");
-        }
-        String line;
-        try {
-            while((line = in.readLine()) != null) {
-                if (line.length() > 0 && line.charAt(0) == '#') {
-                    // skip comment
+            String line;
+            while ((line = in.readLine()) != null) {
+                // skip empty lines and comments
+                if (line.length() == 0 || line.charAt(0) == '#')
                     continue;
-                }
                 String[] m = line.split("=");
-                if (m.length != 2) {
+                if (m.length != 2)
                     throw new RuntimeException("invalid message map format 
(separation by '=')");
-                }
-                String[] left = m[0].split("\\|");
-                String fqn = m[1].trim();
-                if (left.length == 1) {
-                    int id = java.lang.Integer.parseInt(m[0].trim());
-                    msgmap.put(id, fqn);
-                } else if (left.length == 2) {
-                    int id = java.lang.Integer.parseInt(left[0].trim());
-                    String unionInterface = left[1];
-                    if (!unionmap.containsKey(unionInterface)) {
-                        unionmap.put(unionInterface, new HashMap<Integer, 
String>());
-                    }
-                    unionmap.get(unionInterface).put(id, fqn);
-                } else {
+                String[] left = m[0].split("[|]");
+                if (left.length != 2) {
+                    logger.debug(m[0]);
+                    logger.debug(m[1]);
+                    logger.debug("split in " + left.length);
                     throw new RuntimeException("invalid message map format 
(left hand side)");
                 }
+                int id = java.lang.Integer.parseInt(left[1].trim());
+                String unionCaseName = m[1].trim();
+                String unionInterfaceName = left[0];
 
+                Class<? extends MessageUnion> unionInterface = 
loadClass(unionInterfaceName);
+                Class<? extends MessageUnion> unionCase = 
loadClass(unionCaseName);
+
+                if (!unionmap.containsKey(unionInterface)) {
+                    unionmap.put(unionInterface, new HashMap<Integer, Class<? 
extends MessageUnion>>(5));
+                }
+                unionmap.get(unionInterface).put(id, unionCase);
+
+
+                if (!tagmap.containsKey(unionInterface)) {
+                    tagmap.put(unionInterface, new HashMap<Class<? extends 
MessageUnion>, Integer>(5));
+                }
+                tagmap.get(unionInterface).put(unionCase, id);
+
             }
         } catch (IOException e) {
             throw new RuntimeException("could not read message map");
+        } finally {
+            maybeClose(in);
         }
     }
 
-    public static Message loadMessage(int type, ByteBuffer dstBuf) {
-        String className = msgmap.get(type);
-        if (className == null) {
-            throw new MessageFormatException("don't know how to translate 
message of type " + type);
+    private static void maybeClose(Closeable in) {
+        try {
+            if (in != null)
+                in.close();
+        } catch (IOException e) {
+            throw new RuntimeException("error closing stream: " + 
e.getMessage());
         }
-        
+    }
+
+
+    private static Class<? extends MessageUnion> loadClass(String className) {
         ClassLoader cl = ClassLoader.getSystemClassLoader();
-        Class msgClass;
+        Class<MessageUnion> msgClass;
         try {
-            msgClass = cl.loadClass(className);
+            msgClass = (Class<MessageUnion>) cl.loadClass(className);
         } catch (ClassNotFoundException e) {
             throw new InternalLogicError(String.format("message class '%s' not 
found in classpath", className));
+        } catch (ClassCastException e) {
+            throw new InternalLogicError(String.format("Class %s does not 
inherit from MessageUnion", className));
         }
-        
-        return Construct.parseAs(dstBuf, msgClass);
+        return msgClass;
     }
-    
-    public static Class loadUnionClass(String unionType, int type) {
-        Map<Integer, String> map = unionmap.get(unionType);
+
+    public static Class<? extends MessageUnion> getUnionClass(Class<? extends 
MessageUnion> unionInterface, int tag) {
+        Map<Integer, Class<? extends MessageUnion>> map = 
unionmap.get(unionInterface);
         if (map == null) {
-            throw new InternalLogicError("don't know how to handle unions of 
type '"+unionType+"'");
+            throw new InternalLogicError("don't know how to handle unions of 
type '" + unionInterface + "'");
         }
-        
-        String className = map.get(type);
-        if (className == null) {
-            throw new MessageFormatException("don't know how to translate 
message of type " + type);
-        }
 
-        ClassLoader cl = ClassLoader.getSystemClassLoader();
-        Class msgClass;
-        try {
-            msgClass = cl.loadClass(className);
-        } catch (ClassNotFoundException e) {
-            throw new InternalLogicError(String.format("message class '%s' not 
found in classpath", className));
+        Class<? extends MessageUnion> cls = map.get(tag);
+        if (cls == null) {
+            throw new MessageFormatException("don't know how to translate 
message of type " + tag);
         }
 
-        return msgClass;
+        return cls;
     }
+
+    public static int getUnionTag(Class<? extends MessageUnion> 
unionInterface, Class<? extends MessageUnion> unionCase) {
+        Map<Class<? extends MessageUnion>, Integer> map = 
tagmap.get(unionInterface);
+        if (map == null)
+            throw new InternalLogicError(String.format("%s is not a known 
union type", unionInterface));
+        if (!map.containsKey(unionCase))
+            throw new InternalLogicError(String.format("%s is not a known 
instance of %s", unionCase, unionInterface));
+        return map.get(unionCase);
+    }
 }

Modified: gnunet-java/src/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/org/gnunet/construct/MsgMap.txt     2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/construct/MsgMap.txt     2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -1,15 +1,13 @@
-5=org.gnunet.util.Resolver$ResolverResponse
-171=org.gnunet.statistics.Statistics$ResponseEndMessage
-170=org.gnunet.statistics.Statistics$ResponseValueMessage
-169=org.gnunet.statistics.Statistics$RequestMessage
-168=org.gnunet.statistics.Statistics$SetMessage
-291=org.gnunet.construct.QueryMessage
-323=org.gnunet.nse.NetworkSizeEstimation$NSE_UpdateMessage
-321=org.gnunet.nse.NetworkSizeEstimation$NSE_StartMessage
-3210=org.gnunet.construct.SimpleTestMessage
-987=org.gnunet.construct.SizeTestMessage
-0|org.gnunet.construct.UnionTest.TestUnion=org.gnunet.construct.UnionTest$TestUnionCase0
-1|org.gnunet.construct.UnionTest.TestUnion=org.gnunet.construct.UnionTest$TestUnionCase1
-0|org.gnunet.util.Resolver.AddressUnion=org.gnunet.util.Resolver$TextualAddress
-1|org.gnunet.util.Resolver.AddressUnion=org.gnunet.util.Resolver$NumericAddress
-# generated 2012/03/17 23:22:37
+org.gnunet.construct.UnionTest$TestUnion|0=org.gnunet.construct.UnionTest$TestUnionCase0
+org.gnunet.construct.UnionTest$TestUnion|1=org.gnunet.construct.UnionTest$TestUnionCase1
+org.gnunet.util.Resolver$Address|0=org.gnunet.util.Resolver$TextualAddress
+org.gnunet.util.Resolver$Address|1=org.gnunet.util.Resolver$NumericAddress
+org.gnunet.util.GnunetMessage$Body|171=org.gnunet.statistics.Statistics$ResponseEndMessage
+org.gnunet.util.GnunetMessage$Body|170=org.gnunet.statistics.Statistics$ResponseValueMessage
+org.gnunet.util.GnunetMessage$Body|169=org.gnunet.statistics.Statistics$RequestMessage
+org.gnunet.util.GnunetMessage$Body|168=org.gnunet.statistics.Statistics$SetMessage
+org.gnunet.util.GnunetMessage$Body|4=org.gnunet.util.Resolver$GetMessage
+org.gnunet.util.GnunetMessage$Body|323=org.gnunet.nse.NetworkSizeEstimation$UpdateMessage
+org.gnunet.util.GnunetMessage$Body|5=org.gnunet.util.Resolver$ResolverResponse
+org.gnunet.util.GnunetMessage$Body|321=org.gnunet.nse.NetworkSizeEstimation$StartMessage
+# generated 2012/03/26 19:15:26

Modified: gnunet-java/src/org/gnunet/construct/Nested.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Nested.java    2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/construct/Nested.java    2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -16,5 +16,4 @@
 public @interface Nested {
     boolean newFrame() default false;
     boolean optional() default false;
-    String unionTag() default "";
 }
\ No newline at end of file

Modified: gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java       
2012-03-26 16:20:57 UTC (rev 20778)
+++ gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java       
2012-03-26 17:50:01 UTC (rev 20779)
@@ -1,9 +1,6 @@
 package org.gnunet.construct.parsers;
 
-import org.gnunet.construct.Construct;
-import org.gnunet.construct.Message;
-import org.gnunet.construct.MessageLoader;
-import org.gnunet.construct.ReflectUtil;
+import org.gnunet.construct.*;
 import org.gnunet.exceptions.MessageFormatException;
 
 import java.lang.reflect.Field;
@@ -18,17 +15,21 @@
 
     private final List<Field> unionTagPath;
     private final ReflectUtil.NumField unionTagField;
-    private final String unionType;
+    private final Class<? extends MessageUnion> unionType;
+    
+    private final List<Field> pathFromRoot;
 
     boolean optional;
 
-    public UnionParser(List<Field> frameSizePath, boolean optional, String 
unionType, List<Field> unionTagPath, Field f) {
+    public UnionParser(List<Field> frameSizePath, boolean optional, Class<? 
extends MessageUnion> unionType,
+                       List<Field> unionTagPath, Field f, List<Field> path) {
         targetField = f;
         this.optional = optional;
         this.frameSizePath = frameSizePath;
         this.unionTagPath = unionTagPath;
         this.unionTagField = new 
ReflectUtil.NumField(unionTagPath.get(unionTagPath.size() - 1));
         this.unionType = unionType;
+        this.pathFromRoot = path;
     }
 
     @Override
@@ -56,16 +57,19 @@
             }
         }
 
-        final Class cls;
         long unionTag = 
unionTagField.get(ReflectUtil.followFieldPathToParent(unionTagPath, dstObj));
 
-        cls = MessageLoader.loadUnionClass(unionType, (int) unionTag);
+        final Class cls;
 
+        cls = MessageLoader.getUnionClass(unionType, (int) unionTag);
+
         ReflectUtil.justSet(dstObj, targetField, 
ReflectUtil.justInstantiate(cls));
 
         final Message theUnion = (Message) ReflectUtil.justGet(dstObj, 
targetField);
 
-        return Construct.getParser(cls).parse(srcBuf, frameOffset, frameObj, 
theUnion);
+        Parser parser = Construct.getParser(cls, frameSizePath, pathFromRoot);
+
+        return parser.parse(srcBuf, frameOffset, frameObj, theUnion);
     }
 
     @Override
@@ -75,6 +79,10 @@
 
         return p.write(dstBuf, (Message) ReflectUtil.justGet(src, 
targetField));
     }
+    
+    public int getTag(Message m) {
+        return MessageLoader.getUnionTag(unionType, (Class<MessageUnion>) 
ReflectUtil.justGet(m, targetField).getClass());
+    }
 
     @Override
     public void patch(Message m, int frameSize) {
@@ -83,5 +91,8 @@
         final Parser p = Construct.getParser(currentUnionClass);
 
         p.patch((Message) ReflectUtil.justGet(m, targetField), frameSize);
+        
+        unionTagField.set(ReflectUtil.followFieldPathToParent(unionTagPath, m),
+               getTag(m));
     }
 }

Modified: gnunet-java/src/org/gnunet/dht/DistributedHashTable.java
===================================================================
--- gnunet-java/src/org/gnunet/dht/DistributedHashTable.java    2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/src/org/gnunet/dht/DistributedHashTable.java    2012-03-26 
17:50:01 UTC (rev 20779)
@@ -125,7 +125,7 @@
     }
 
     public interface ResultCallback {
-        public void handleResult(AbsoluteTime expiration, GnunetHash key,
+        public void handleResult(AbsoluteTime expiration, HashCode key,
                             List<PeerIdentity> getPath, List<PeerIdentity> 
putPath,
                             BlockType type, byte[] data);
     }
@@ -133,13 +133,13 @@
 
 
 
-    public void put(GnunetHash key, int replicationLevel, EnumSet<RouteOption> 
routeOptions,
+    public void put(HashCode key, int replicationLevel, EnumSet<RouteOption> 
routeOptions,
                     BlockType type, byte[] data, AbsoluteTime expiration,
                     RelativeTime timeout, Continuation cont) {
 
     }
 
-    public Cancelable startGet(RelativeTime timeout, BlockType type, 
GnunetHash key,
+    public Cancelable startGet(RelativeTime timeout, BlockType type, HashCode 
key,
                                int replicatoin, EnumSet<RouteOption> 
routeOptions,
                                byte[] xquery, ResultCallback cb) {
         return null;

Modified: gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java
===================================================================
--- gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java   2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java   2012-03-26 
17:50:01 UTC (rev 20779)
@@ -30,23 +30,12 @@
 
 
 
-    @SuppressWarnings("InstanceVariableMayNotBeInitialized")
-    @MessageId(NSE_StartMessage.MSG_ID)
-    public static class NSE_StartMessage implements Message {
-        public static final int MSG_ID = 321;
+    @UnionCase(321)
+    public static class StartMessage implements GnunetMessage.Body { }
 
-        @Nested
-        public MessageHeader header;
-    }
-
     @SuppressWarnings("InstanceVariableMayNotBeInitialized")
-    @MessageId(NSE_UpdateMessage.MSG_ID)
-    public static class NSE_UpdateMessage implements Message {
-        public static final int MSG_ID = 323;
-
-        @Nested
-        public MessageHeader header;
-
+    @UnionCase(323)
+    public static class UpdateMessage implements GnunetMessage.Body {
         @UInt32
         public int reserved;
 
@@ -63,11 +52,11 @@
 
     private class NSE_Receiver implements MessageReceiver {
         @Override
-        public void process(Message msg) {
-            if (!(msg instanceof NSE_UpdateMessage)) {
+        public void process(GnunetMessage.Body msg) {
+            if (!(msg instanceof UpdateMessage)) {
                 throw new MessageFormatException("got unexcpected message");
             }
-            NSE_UpdateMessage uMsg = (NSE_UpdateMessage) msg;
+            UpdateMessage uMsg = (UpdateMessage) msg;
 
             for (NSE_Subscriber s : subscribers) {
                 s.update(AbsoluteTime.fromNetwork(uMsg.timestamp), 
uMsg.sizeEstimate, uMsg.stdDeviation);
@@ -95,10 +84,7 @@
         @Override
         public void transmit(Client.MessageSink sink) {
             logger.debug("ready to transmit");
-            NSE_StartMessage m = new NSE_StartMessage();
-            m.header = new MessageHeader();
-            m.header.messageType = NSE_StartMessage.MSG_ID;
-            m.header.messageSize = MessageHeader.SIZE;
+            StartMessage m = new StartMessage();
             sink.send(m);
             client.receive(RelativeTime.FOREVER, new NSE_Receiver());
         }
@@ -192,11 +178,8 @@
                         }
                     }
                 };
-
                 svc.subscribe(subscriber);
-
             }
         }.start();
     }
-
 }

Modified: gnunet-java/src/org/gnunet/statistics/Statistics.java
===================================================================
--- gnunet-java/src/org/gnunet/statistics/Statistics.java       2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/src/org/gnunet/statistics/Statistics.java       2012-03-26 
17:50:01 UTC (rev 20779)
@@ -20,22 +20,16 @@
 
     private Client client;
 
-    @MessageId(RequestMessage.MSG_ID)
-    public static class RequestMessage implements Message {
-        public static final int MSG_ID = 169;
-        @Nested
-        public MessageHeader header;
+    @UnionCase(169)
+    public static class RequestMessage implements GnunetMessage.Body {
         @ZeroTerminatedString
         public String subsystemName;
         @ZeroTerminatedString
         public String statisticsName;
     }
 
-    @MessageId(ResponseValueMessage.MSG_ID)
-    public static class ResponseValueMessage implements Message {
-        public static final int MSG_ID = 170;
-        @Nested
-        public MessageHeader header;
+    @UnionCase(170)
+    public static class ResponseValueMessage implements GnunetMessage.Body {
         @UInt32
         public long uid;
         @UInt64
@@ -46,18 +40,15 @@
         public String statisticName;
     }
 
-    @MessageId(ResponseEndMessage.MSG_ID)
-    public static class ResponseEndMessage implements Message {
+    @UnionCase(171)
+    public static class ResponseEndMessage implements GnunetMessage.Body {
         public static final int MSG_ID = 171;
         @Nested
         public MessageHeader header;
     }
 
-    @MessageId(SetMessage.MSG_ID)
-    public static class SetMessage implements Message {
-        public static final int MSG_ID = 168;
-        @Nested
-        public MessageHeader header;
+    @UnionCase(168)
+    public static class SetMessage implements GnunetMessage.Body {
         @UInt32
         public int flags;
         @UInt64
@@ -93,18 +84,15 @@
                     return;
                 }
                 RequestMessage rm = new RequestMessage();
-                rm.header = new MessageHeader();
                 rm.statisticsName = name;
                 rm.subsystemName = subsystem;
-                rm.header.messageType = RequestMessage.MSG_ID;
-                rm.header.messageSize = Construct.getSize(rm);
 
                 sink.send(rm);
 
 
                 client.receive(deadline.getRemaining(), new MessageReceiver() {
                     @Override
-                    public void process(Message msg) {
+                    public void process(GnunetMessage.Body msg) {
                         if (msg instanceof ResponseValueMessage) {
                             ResponseValueMessage rvm = (ResponseValueMessage) 
msg;
                             srh.onReceive(rvm.subsystemName, 
rvm.statisticName, rvm.value);
@@ -161,9 +149,6 @@
                 sm.statisticName = name;
                 sm.subsystemName = subsystem;
                 sm.value = value;
-                sm.header = new MessageHeader();
-                sm.header.messageType = SetMessage.MSG_ID;
-                sm.header.messageSize = Construct.getSize(sm);
 
                 sink.send(sm);
 

Modified: gnunet-java/src/org/gnunet/util/AbsoluteTime.java
===================================================================
--- gnunet-java/src/org/gnunet/util/AbsoluteTime.java   2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/util/AbsoluteTime.java   2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -89,7 +89,7 @@
             return RelativeTime.FOREVER;
         }
         final RelativeTime dur = start.getDuration();
-        final double exp = (double) dur.getMilliseconds() * (double) total
+        final double exp = dur.getMilliseconds() * total
                 / finished;
         return new RelativeTime((long) exp);
     }

Modified: gnunet-java/src/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Client.java 2012-03-26 16:20:57 UTC (rev 
20778)
+++ gnunet-java/src/org/gnunet/util/Client.java 2012-03-26 17:50:01 UTC (rev 
20779)
@@ -19,12 +19,10 @@
  */
 package org.gnunet.util;
 
-import org.gnunet.construct.Construct;
-import org.gnunet.construct.Message;
-import org.gnunet.construct.MessageHeader;
-import org.gnunet.construct.MessageLoader;
+import org.gnunet.construct.*;
 import org.gnunet.exceptions.ConfigurationException;
 import org.gnunet.exceptions.InterfaceViolationException;
+import org.gnunet.exceptions.InternalLogicError;
 import org.gnunet.util.Scheduler.Task;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -140,7 +138,7 @@
      * to the client, which sends them to the service.
      */
     public interface MessageSink {
-        public void send(Message m);
+        public void send(GnunetMessage.Body m);
     }
 
 
@@ -155,6 +153,9 @@
         private MessageHeader msgh = null;
         private Scheduler.TaskIdentifier recvTask = null;
         private boolean finished = false;
+        // is this receiver actively working? if not, the connection process 
has to kick off the receiver
+        // (or select behaves badly)
+        private boolean working = false;
 
         public ReceiveHelper(MessageReceiver receiver, RelativeTime timeout) {
             this.receiver = receiver;
@@ -166,8 +167,11 @@
             currentReceiveHelper = null;
             finished = true;
             logger.debug("dispatching message with " + recvBuffer.position() + 
" bytes");
-            recvBuffer.flip();
-            receiver.process(MessageLoader.loadMessage(msgh.messageType, 
recvBuffer));
+            recvBuffer.flip(); 
+            
+            GnunetMessage msg = Construct.parseAs(recvBuffer, 
GnunetMessage.class);
+            
+            receiver.process(msg.body);
         }
 
         @Override
@@ -228,6 +232,7 @@
         }
 
         private void schedule() {
+            working = true;
             recvTask = Scheduler.addRead(timeout, chan, this);
         }
 
@@ -318,16 +323,27 @@
         private void schedule() {
             // 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
+            // cancel must be ca        lled on the transmitTask if we 
disconnect
             Scheduler.TaskBuilder b = new Scheduler.TaskBuilder();
             
b.withTimeout(RelativeTime.FOREVER).withSelectWrite(chan).withTask(this);
             this.transmitTask = Scheduler.add(b);
         }
 
         @Override
-        public void send(Message m) {
-            byte[] b = Construct.toBinary(m);
-            logger.debug("sending msg size=" + b.length);
+        public void send(final GnunetMessage.Body m) {
+            final GnunetMessage gm = new GnunetMessage();
+            gm.header = new GnunetMessage.Header();
+            gm.body = m;
+            Construct.patch(gm);
+            gm.header.messageSize = Construct.getSize(gm);
+            System.out.println("size: " + Construct.getSize(gm));
+            byte[] b = Construct.toBinary(gm);
+            if (b.length != gm.header.messageSize) {
+                throw new InternalLogicError(
+                        String.format("tried to send message with binary size 
%s but size in header %s",
+                                b.length, gm.header.messageSize));
+            }
+            logger.debug("sending message (size={},type={})" + b.length, 
gm.header.messageType);
             if (transmitBuffer.remaining() < b.length) {
                 ByteBuffer buf = ByteBuffer.allocate(b.length + 
transmitBuffer.capacity());
                 transmitBuffer.flip();
@@ -436,7 +452,7 @@
                         connected = chan.finishConnect();
                         logger.debug("client successfully connected");
                     } catch (IOException e) {
-                        logger.debug("finishConnect() was not successful: {}", 
e);
+                        logger.debug("finishConnect() was not successful: {}", 
(Object) e);
                         increaseBackoff();
                         logger.debug("backoff: {}", connectBackoff);
                         connectDelayed();
@@ -446,6 +462,10 @@
                         if (currentTransmitHelper != null) {
                             currentTransmitHelper.start();
                         }
+                        if (currentReceiveHelper != null && 
!currentReceiveHelper.working) {
+                            System.out.println("starting receive");
+                            currentReceiveHelper.schedule();
+                        }
                     }
                 }
             });
@@ -453,7 +473,7 @@
             b.withTimeout(RelativeTime.FOREVER);
             connectHandle = Scheduler.add(b);
         } catch (IOException e) {
-            logger.debug("unable to connect: {}", e);
+            logger.debug("unable to connect: {}", (Object) e);
             increaseBackoff();
             connectDelayed();
         } finally {
@@ -511,7 +531,10 @@
         recvBuffer.limit(MessageHeader.SIZE);
         final ReceiveHelper rh = new ReceiveHelper(receiver, timeout);
         currentReceiveHelper = rh;
-        currentReceiveHelper.schedule();
+        
+        if (chan.isConnected()) {
+            currentReceiveHelper.schedule();
+        }
 
 
         return new ReceiveHandle() {
@@ -522,28 +545,6 @@
         };
     }
 
-
-    private Scheduler.TaskIdentifier scheduleTransmitTimeout(final 
MessageTransmitter t, RelativeTime timeout,
-                                                             final boolean 
forCurrent) {
-        Scheduler.TaskBuilder b = new Scheduler.TaskBuilder();
-        b.withTask(new Task() {
-            @Override
-            public void run(Scheduler.RunContext ctx) {
-                if (forCurrent) {
-                    currentTransmitHelper.cancel();
-                    currentTransmitHelper = null;
-                } else {
-                    nextTransmitHelper.cancel();
-                    nextTransmitHelper = null;
-                }
-                t.transmit(null);
-            }
-        });
-        b.withTimeout(timeout);
-        return Scheduler.add(b);
-    }
-
-
     /**
      * Ask the client to call us once it is able to send a message.
      *

Deleted: gnunet-java/src/org/gnunet/util/GnunetHash.java
===================================================================
--- gnunet-java/src/org/gnunet/util/GnunetHash.java     2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/util/GnunetHash.java     2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -1,5 +0,0 @@
-package org.gnunet.util;
-
-
-public class GnunetHash {
-}

Modified: gnunet-java/src/org/gnunet/util/GnunetMessage.java
===================================================================
--- gnunet-java/src/org/gnunet/util/GnunetMessage.java  2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/util/GnunetMessage.java  2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -3,10 +3,10 @@
 
 import org.gnunet.construct.*;
 
-public class GnunetMessage implements Message {
+public final class GnunetMessage implements Message {
     public final int MINIMAL_SIZE = Header.SIZE;
 
-    public static class Header {
+    public static final class Header implements Message{
         public static final int SIZE = 4;
 
         @FrameSize
@@ -31,6 +31,6 @@
     @Nested
     public Header header;
 
-    @Union(tag = "header.messageType", optional = true)
+    @Union(tag = "header.messageType")
     public Body body;
 }

Copied: gnunet-java/src/org/gnunet/util/HashCode.java (from rev 20590, 
gnunet-java/src/org/gnunet/util/GnunetHash.java)
===================================================================
--- gnunet-java/src/org/gnunet/util/HashCode.java                               
(rev 0)
+++ gnunet-java/src/org/gnunet/util/HashCode.java       2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -0,0 +1,9 @@
+package org.gnunet.util;
+
+
+public class HashCode {
+    private byte[] data;
+    public HashCode(byte[] hash) {
+        data = hash;
+    }
+}
\ No newline at end of file

Modified: gnunet-java/src/org/gnunet/util/MessageReceiver.java
===================================================================
--- gnunet-java/src/org/gnunet/util/MessageReceiver.java        2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/src/org/gnunet/util/MessageReceiver.java        2012-03-26 
17:50:01 UTC (rev 20779)
@@ -20,8 +20,6 @@
 
 package org.gnunet.util;
 
-import org.gnunet.construct.Message;
-
 /**
  * 
  * @author Florian Dold
@@ -34,7 +32,7 @@
      * 
      * @param msg   message received, null on deadline or fatal error
      */
-    public void process(Message msg);
+    public void process(GnunetMessage.Body msg);
 
     public void handleError(Client.ReceiveError e);
 }

Modified: gnunet-java/src/org/gnunet/util/PeerIdentity.java
===================================================================
--- gnunet-java/src/org/gnunet/util/PeerIdentity.java   2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/util/PeerIdentity.java   2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -2,4 +2,5 @@
 
 
 public class PeerIdentity {
+
 }

Modified: gnunet-java/src/org/gnunet/util/Resolver.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Resolver.java       2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/util/Resolver.java       2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -26,50 +26,40 @@
 
     Client client = null;
 
-    @SuppressWarnings("InstanceVariableMayNotBeInitialized")
-    public static class GetMessage implements Message {
-        final static int MSG_ID = 4;
-
+    @UnionCase(4)
+    public static class GetMessage implements GnunetMessage.Body {
         static final int DIRECTION_GET_IP = 0;
         static final int DIRECTION_GET_NAME = 1;
         static final int AF_UNSPEC = 0;
         static final int AF_INET = 2;
         static final int AF_INET6 = 10;
 
-        @Nested
-        public MessageHeader header;
-
         @UInt32
         public int direction;
         @UInt32
         public int domain;
 
         @Union(tag = "direction", optional = true)
-        public AddressUnion addr;
+        public Address addr;
     }
 
-    public static interface AddressUnion extends MessageUnion {
-    }
+    public static interface Address extends MessageUnion { }
 
     @UnionCase(GetMessage.DIRECTION_GET_IP)
-    public static class TextualAddress implements AddressUnion {
+    public static class TextualAddress implements Address {
         @ZeroTerminatedString
         public String addr;
     }
 
-
     @UnionCase(GetMessage.DIRECTION_GET_NAME)
-    public static class NumericAddress implements AddressUnion {
+    public static class NumericAddress implements Address {
         @ByteFill
         public byte[] addr;
     }
 
 
-    @MessageId(ResolverResponse.MSG_ID)
-    public static class ResolverResponse implements Message {
-        final static int MSG_ID = 5;
-        @Nested
-        public MessageHeader header;
+    @UnionCase(5)
+    public static class ResolverResponse implements GnunetMessage.Body {
         @Nested(optional = true)
         public ResponseBody responseBody;
     }
@@ -309,8 +299,6 @@
         lazyConnect();
 
         final GetMessage req = new GetMessage();
-        req.header = new MessageHeader();
-        req.header.messageType = GetMessage.MSG_ID;
         req.direction = GetMessage.DIRECTION_GET_IP;
         req.domain = GetMessage.AF_UNSPEC;
 
@@ -319,8 +307,6 @@
 
         req.addr = textAddr;
 
-        req.header.messageSize = Construct.getSize(req);
-
         final AbsoluteTime deadline = rh.deadline;
 
 
@@ -342,7 +328,7 @@
                         logger.debug("recv in notifyTransmitReady cb");
                         rh.receiveTask = 
client.receive(deadline.getRemaining(), new MessageReceiver() {
                             @Override
-                            public void process(Message msg) {
+                            public void process(GnunetMessage.Body msg) {
                                 rh.receiveTask = null;
                                 ResolverResponse gmsg = (ResolverResponse) msg;
                                 if (gmsg.responseBody != null) {

Modified: gnunet-java/src/org/gnunet/util/Scheduler.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Scheduler.java      2012-03-26 16:20:57 UTC 
(rev 20778)
+++ gnunet-java/src/org/gnunet/util/Scheduler.java      2012-03-26 17:50:01 UTC 
(rev 20779)
@@ -104,7 +104,6 @@
             this.deadline = timeout.toAbsolute();
 
 
-
             if (rs != null) {
                 for (SelectableChannel sc : rs) {
                     logger.debug("registering for OP_READ");

Modified: gnunet-java/test/org/gnunet/construct/QueryMessage.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/QueryMessage.java     2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/test/org/gnunet/construct/QueryMessage.java     2012-03-26 
17:50:01 UTC (rev 20779)
@@ -1,6 +1,5 @@
 package org.gnunet.construct;
 
address@hidden(0x123)
 public class QueryMessage implements Message {
 
     @Nested

Modified: gnunet-java/test/org/gnunet/construct/SimpleTestMessage.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/SimpleTestMessage.java        
2012-03-26 16:20:57 UTC (rev 20778)
+++ gnunet-java/test/org/gnunet/construct/SimpleTestMessage.java        
2012-03-26 17:50:01 UTC (rev 20779)
@@ -1,6 +1,5 @@
 package org.gnunet.construct;
 
address@hidden(3210)
 public class SimpleTestMessage implements Message {
 
     @UInt8

Modified: gnunet-java/test/org/gnunet/construct/UnionTest.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/UnionTest.java        2012-03-26 
16:20:57 UTC (rev 20778)
+++ gnunet-java/test/org/gnunet/construct/UnionTest.java        2012-03-26 
17:50:01 UTC (rev 20779)
@@ -41,11 +41,9 @@
         
         System.out.println(a.length);
         System.out.println(Construct.getSize(utm));
-
         
         UnionTestMessage utm2 = Construct.parseAs(ByteBuffer.wrap(a), 
UnionTestMessage.class);
         
-        
         Assert.assertEquals(((TestUnionCase0) utm.instance).val, 
((TestUnionCase0) utm2.instance).val);
 
     }

Added: gnunet-java/test/org/gnunet/construct/parsers/IntegerParserTest.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/parsers/IntegerParserTest.java        
                        (rev 0)
+++ gnunet-java/test/org/gnunet/construct/parsers/IntegerParserTest.java        
2012-03-26 17:50:01 UTC (rev 20779)
@@ -0,0 +1,68 @@
+package org.gnunet.construct.parsers;
+
+import org.gnunet.construct.*;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class IntegerParserTest {
+    public static class IntTestMessage implements Message {
+        @UInt8
+        public byte test1;
+        @UInt8
+        public int test2;
+        @UInt16
+        public int test3;
+        @Int8
+        byte test4;
+        @Int8
+        byte test5;
+        @Int16
+        byte test6;
+        @Int16
+        byte test7;
+    }
+    
+    @Test
+    public void test_UInt8() {
+        byte b = Byte.MIN_VALUE;
+        do {
+            IntTestMessage itm1 = new IntTestMessage();
+            itm1.test1 = b;
+            itm1.test2 = 0;
+            byte[] bbuf = Construct.toBinary(itm1);
+            IntTestMessage itm2 = Construct.parseAs(bbuf, 
IntTestMessage.class);
+            Assert.assertEquals(itm1.test1, itm2.test1);
+            Assert.assertEquals(itm1.test2, itm2.test2);
+
+            b++;
+        } while (b != Byte.MAX_VALUE);
+    }
+
+    @Test
+    public void test_UInt16() {
+        int i = 0;
+        do {
+            IntTestMessage itm1 = new IntTestMessage();
+            itm1.test3 = i;
+            byte[] bbuf = Construct.toBinary(itm1);
+            IntTestMessage itm2 = Construct.parseAs(bbuf, 
IntTestMessage.class);
+            Assert.assertEquals(itm1.test3, itm2.test3);
+            i++;
+        } while (i != (1 << 15));
+
+
+    }
+
+    @Test
+    public void test_UInt16_short() {
+        short s = Short.MIN_VALUE;
+        do {
+            IntTestMessage itm1 = new IntTestMessage();
+            itm1.test3 = s;
+            byte[] bbuf = Construct.toBinary(itm1);
+            IntTestMessage itm2 = Construct.parseAs(bbuf, 
IntTestMessage.class);
+            Assert.assertEquals(itm1.test3, itm2.test3);
+            s++;
+        } while (s != Short.MAX_VALUE);
+    }
+}




reply via email to

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