gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r19221 - in gnunet-java: . .idea .idea/inspectionProfiles l


From: gnunet
Subject: [GNUnet-SVN] r19221 - in gnunet-java: . .idea .idea/inspectionProfiles lib src src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/service src/org/gnunet/util src/org/gnunet/util/getopt test/org/gnunet/construct test/org/gnunet/services
Date: Wed, 18 Jan 2012 01:03:39 +0100

Author: dold
Date: 2012-01-18 01:03:38 +0100 (Wed, 18 Jan 2012)
New Revision: 19221

Added:
   gnunet-java/resolver
   gnunet-java/src/org/gnunet/construct/TaggedUnion.java
   gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java
   gnunet-java/src/org/gnunet/service/Resolver.java
   gnunet-java/src/org/gnunet/util/getopt/
   gnunet-java/src/org/gnunet/util/getopt/Argument.java
   gnunet-java/src/org/gnunet/util/getopt/Parameter.java
   gnunet-java/src/org/gnunet/util/getopt/Parser.java
   gnunet-java/test/org/gnunet/construct/ByteFillMessage.java
Removed:
   gnunet-java/lib/slf4j-jdk14-1.6.4.jar
   gnunet-java/src/org/gnunet/service/NSE_StartMessage.java
   gnunet-java/src/org/gnunet/service/NSE_UpdateMessage.java
   gnunet-java/src/org/gnunet/service/NetworkSizeEstimationService.java
Modified:
   gnunet-java/.idea/inspectionProfiles/Project_Default.xml
   gnunet-java/.idea/misc.xml
   gnunet-java/.idea/workspace.xml
   gnunet-java/ISSUES
   gnunet-java/gnunet-java.eml
   gnunet-java/src/log4j.properties
   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/ZeroTerminatedString.java
   gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java
   gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java
   gnunet-java/src/org/gnunet/construct/parsers/FillParser.java
   gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java
   gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
   gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java
   gnunet-java/src/org/gnunet/construct/parsers/Parser.java
   gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java
   gnunet-java/src/org/gnunet/construct/parsers/StringParser.java
   gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java
   gnunet-java/src/org/gnunet/util/Client.java
   gnunet-java/src/org/gnunet/util/Configuration.java
   gnunet-java/src/org/gnunet/util/Program.java
   gnunet-java/src/org/gnunet/util/Scheduler.java
   gnunet-java/test/org/gnunet/construct/ConstructTest.java
   gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
   gnunet-java/update-msgtypes.sh
Log:
rudimentary version of resolve tool completed

Modified: gnunet-java/.idea/inspectionProfiles/Project_Default.xml
===================================================================
--- gnunet-java/.idea/inspectionProfiles/Project_Default.xml    2012-01-17 
22:25:52 UTC (rev 19220)
+++ gnunet-java/.idea/inspectionProfiles/Project_Default.xml    2012-01-18 
00:03:38 UTC (rev 19221)
@@ -81,7 +81,6 @@
       <option name="reportWhenNoStatementFollow" value="false" />
     </inspection_tool>
     <inspection_tool class="ConstantAssertCondition" enabled="true" 
level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="ContinueStatement" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="ContinueStatementWithLabel" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="CovariantCompareTo" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="CovariantEquals" enabled="true" level="WARNING" 
enabled_by_default="true" />
@@ -219,7 +218,6 @@
     <inspection_tool class="NegatedIfElse" enabled="true" level="WARNING" 
enabled_by_default="true">
       <option name="m_ignoreNegatedNullComparison" value="true" />
     </inspection_tool>
-    <inspection_tool class="NestedAssignment" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="NestedConditionalExpression" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="NestedSwitchStatement" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="NestedSynchronizedStatement" enabled="true" 
level="WARNING" enabled_by_default="true" />
@@ -350,7 +348,6 @@
     <inspection_tool class="SubstringZero" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="SubtractionInCompareTo" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="SuspiciousIndentAfterControlStatement" 
enabled="true" level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="SwitchStatement" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="SwitchStatementDensity" enabled="true" 
level="WARNING" enabled_by_default="true">
       <option name="m_limit" value="20" />
     </inspection_tool>

Modified: gnunet-java/.idea/misc.xml
===================================================================
--- gnunet-java/.idea/misc.xml  2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/.idea/misc.xml  2012-01-18 00:03:38 UTC (rev 19221)
@@ -2,6 +2,9 @@
 <project version="4">
   <component name="EntryPointsManager">
     <entry_points version="2.0" />
+    <list size="1">
+      <item index="0" class="java.lang.String" 
itemvalue="org.gnunet.construct.Nested" />
+    </list>
   </component>
   <component name="ProjectResources">
     <default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
@@ -10,6 +13,17 @@
     <output url="file://$PROJECT_DIR$/out" />
   </component>
   <component name="SvnBranchConfigurationManager">
+    <option name="myConfigurationMap">
+      <map>
+        <entry key="$PROJECT_DIR$">
+          <value>
+            <SvnBranchConfiguration>
+              <option name="trunkUrl" 
value="https://gnunet.org/svn/gnunet-java"; />
+            </SvnBranchConfiguration>
+          </value>
+        </entry>
+      </map>
+    </option>
     <option name="mySupportsUserInfoFilter" value="true" />
   </component>
 </project>

Modified: gnunet-java/.idea/workspace.xml
===================================================================
--- gnunet-java/.idea/workspace.xml     2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/.idea/workspace.xml     2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,18 +1,48 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ChangeListManager">
-    <list default="true" readonly="true" 
id="b4faf44d-8919-474e-bfab-5900bc40cc2b" name="Default" comment="">
-      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/lib/junit-4.10.jar" />
-      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/lib/log4j-1.2.16.jar" />
-      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/lib/slf4j-log4j12-1.6.4.jar" />
-      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/.idea/codeStyleSettings.xml" 
afterPath="$PROJECT_DIR$/.idea/codeStyleSettings.xml" />
+    <list default="true" readonly="true" 
id="b4faf44d-8919-474e-bfab-5900bc40cc2b" name="Default" comment="rudimentary 
version of resolve tool completed">
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/resolver" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/TaggedUnion.java" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/service/Resolver.java" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Argument.java" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parameter.java" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/ByteFillMessage.java" />
+      <change type="DELETED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/service/NSE_StartMessage.java" 
afterPath="" />
+      <change type="DELETED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/service/NSE_UpdateMessage.java" 
afterPath="" />
+      <change type="DELETED" 
beforePath="$PROJECT_DIR$/lib/slf4j-jdk14-1.6.4.jar" afterPath="" />
+      <change type="MOVED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimationService.java"
 afterPath="$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimation.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/misc.xml" 
afterPath="$PROJECT_DIR$/.idea/misc.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/service/NetworkSizeEstimationService.java"
 
afterPath="$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimationService.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/AbsoluteTimeMessage.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTimeMessage.java" />
-      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/RelativeTime.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/RelativeTime.java" />
-      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/RelativeTimeMessage.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/RelativeTimeMessage.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/ISSUES" 
afterPath="$PROJECT_DIR$/ISSUES" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/gnunet-java.eml" 
afterPath="$PROJECT_DIR$/gnunet-java.eml" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/log4j.properties" 
afterPath="$PROJECT_DIR$/src/log4j.properties" />
+      <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/ZeroTerminatedString.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/ZeroTerminatedString.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java" 
/>
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/DoubleParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/DoubleParser.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FillParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FillParser.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java"
 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java"
 />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java" 
/>
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/StringParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/StringParser.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java"
 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/VariableSizeArrayParser.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/Configuration.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Configuration.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Program.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Program.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/ConstructTest.java" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/ConstructTest.java" />
       <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java"
 
afterPath="$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java"
 />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/update-msgtypes.sh" 
afterPath="$PROJECT_DIR$/update-msgtypes.sh" />
     </list>
     <ignored path="gnunet-java.iws" />
     <ignored path=".idea/workspace.xml" />
@@ -70,91 +100,93 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <file leaf-file-name="StatisticsService.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/service/StatisticsService.java">
+      <file leaf-file-name="Resolver.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/service/Resolver.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="11" column="13" selection-start="245" 
selection-end="245" vertical-scroll-proportion="0.0">
-              <folding />
+            <state line="155" column="12" selection-start="4980" 
selection-end="4980" vertical-scroll-proportion="0.0">
+              <folding>
+                <element signature="e#543#599#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="NetworkSizeEstimationServiceTest.java" 
pinned="false" current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
+      <file leaf-file-name="ISSUES" pinned="false" current="false" 
current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/ISSUES">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="23" column="5" selection-start="767" 
selection-end="767" vertical-scroll-proportion="0.0">
+            <state line="154" column="41" selection-start="5164" 
selection-end="5164" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="IntegerParser.java" pinned="false" current="true" 
current-in-tab="true">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.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="200" column="13" selection-start="6405" 
selection-end="6405" vertical-scroll-proportion="0.07977208">
+            <state line="68" column="1" selection-start="2022" 
selection-end="2449" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="NestedParser.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java">
+      <file leaf-file-name="Parser.java" pinned="false" current="true" 
current-in-tab="true">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="28" column="41" selection-start="825" 
selection-end="825" vertical-scroll-proportion="0.0">
+            <state line="23" column="22" selection-start="700" 
selection-end="700" vertical-scroll-proportion="0.46011397">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MessageLoader.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.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="89" column="0" selection-start="3088" 
selection-end="3088" vertical-scroll-proportion="0.0">
+            <state line="28" column="10" selection-start="792" 
selection-end="792" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <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">
+      <file leaf-file-name="log4j.properties" pinned="false" current="false" 
current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/log4j.properties">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="43" column="24" selection-start="1457" 
selection-end="1457" vertical-scroll-proportion="0.0">
+            <state line="2" column="50" selection-start="78" 
selection-end="78" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <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">
+      <file leaf-file-name="VarTestMessage.java" pinned="false" 
current="false" current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/VarTestMessage.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="3" column="13" selection-start="62" 
selection-end="62" 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>
       </file>
-      <file leaf-file-name="AbsoluteTimeMessage.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTimeMessage.java">
+      <file leaf-file-name="NetworkSizeEstimationServiceTest.java" 
pinned="false" current="false" current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="21" column="5" selection-start="449" 
selection-end="449" vertical-scroll-proportion="0.0">
+            <state line="13" column="13" selection-start="300" 
selection-end="300" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="RelativeTimeMessage.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/RelativeTimeMessage.java">
+      <file leaf-file-name="ByteFillParser.java" pinned="false" 
current="false" current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="19" column="51" selection-start="499" 
selection-end="499" vertical-scroll-proportion="0.0">
+            <state line="55" column="9" selection-start="1668" 
selection-end="1668" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="SequenceParser.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java">
+      <file leaf-file-name="NestedParser.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="37" column="0" selection-start="875" 
selection-end="875" vertical-scroll-proportion="0.0">
+            <state line="39" column="23" selection-start="1133" 
selection-end="1133" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
@@ -170,22 +202,22 @@
   <component name="IdeDocumentHistory">
     <option name="changedFiles">
       <list>
-        <option 
value="$PROJECT_DIR$/test/org/gnunet/services/StatisticsServiceTest.java" />
         <option value="$PROJECT_DIR$/src/org/gnunet/util/Client.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java"
 />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java" />
-        <option value="$PROJECT_DIR$/test/org/gnunet/services/ConfigUtil.java" 
/>
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/IOContinuation.java" 
/>
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/util/RunaboutMessageReceiver.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/Configuration.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/exceptions/InternalLogicError.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Optional.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Nested.java" />
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java" />
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java" 
/>
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java" />
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java" />
+        <option value="$PROJECT_DIR$/src/log4j.properties" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/RestArgs.java" 
/>
+        <option 
value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Arguments.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Argument.java" 
/>
+        <option value="$PROJECT_DIR$/src/org/gnunet/service/Resolver.java" />
         <option value="$PROJECT_DIR$/ISSUES" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/RelativeTime.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimationService.java" 
/>
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/util/RelativeTimeMessage.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTimeMessage.java" />
-        <option 
value="$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java"
 />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/Program.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java" />
       </list>
     </option>
   </component>
@@ -345,6 +377,114 @@
       <sortByType />
     </navigator>
     <panes>
+      <pane id="Scope">
+        <subPane subId="Project Files">
+          <PATH>
+            <PATH_ELEMENT USER_OBJECT="Root">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="gnunet-java">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT USER_OBJECT="Root">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="gnunet-java">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="src">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="org">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT USER_OBJECT="Root">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="gnunet-java">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="src">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="org">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="gnunet">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT USER_OBJECT="Root">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="gnunet-java">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="src">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="org">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="gnunet">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT USER_OBJECT="construct">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+      <pane id="PackagesPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="org" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
       <pane id="ProjectPane">
         <subPane>
           <PATH>
@@ -487,9 +627,13 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="service" />
+              <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>
@@ -512,6 +656,10 @@
               <option name="myItemId" value="gnunet" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="service" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -535,7 +683,7 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="construct" />
+              <option name="myItemId" value="exceptions" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
@@ -564,10 +712,6 @@
               <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>
@@ -585,114 +729,6 @@
           </PATH>
         </subPane>
       </pane>
-      <pane id="PackagesPane">
-        <subPane>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="org" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
-            </PATH_ELEMENT>
-          </PATH>
-        </subPane>
-      </pane>
-      <pane id="Scope">
-        <subPane subId="Project Files">
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet-java">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet-java">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="src">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="org">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet-java">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="src">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="org">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet-java">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="src">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="org">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="construct">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-        </subPane>
-      </pane>
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -705,20 +741,20 @@
     <property name="GenerateAntBuildDialog.generateSingleFile" value="true" />
     <property name="recentsLimit" value="5" />
     <property name="MemberChooser.sorted" value="false" />
-    <property name="options.lastSelected" value="preferences.sourceCode.Java" 
/>
+    <property name="options.lastSelected" value="project.propCompiler" />
     <property name="GenerateAntBuildDialog.inclineRuntiemClasspath" 
value="true" />
     <property name="GenerateAntBuildDialog.forceTargetJdk" value="false" />
     <property name="project.structure.side.proportion" value="0.2" />
+    <property name="GenerateAntBuildDialog.outputFileNameProperty" 
value="gnunet-java" />
     <property name="MemberChooser.copyJavadoc" value="false" />
-    <property name="GenerateAntBuildDialog.outputFileNameProperty" 
value="gnunet-java" />
     <property name="GenerateAntBuildDialog.enableUiFormCompile" value="false" 
/>
     <property name="GoToClass.toSaveIncludeLibraries" value="false" />
     <property name="MemberChooser.showClasses" value="true" />
+    <property name="GenerateAntBuildDialog.backupFiles" value="false" />
     <property name="GoToClass.includeLibraries" value="false" />
-    <property name="GenerateAntBuildDialog.backupFiles" value="false" />
+    <property name="dynamic.classpath" value="false" />
+    <property name="options.splitter.details.proportions" value="0.2" />
     <property name="options.searchVisible" value="true" />
-    <property name="options.splitter.details.proportions" value="0.2" />
-    <property name="dynamic.classpath" value="false" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
@@ -733,7 +769,7 @@
       <recent name="" />
     </key>
   </component>
-  <component name="RunManager" 
selected="JUnit.NetworkSizeEstimationServiceTest">
+  <component name="RunManager" selected="JUnit.ConstructTest">
     <configuration default="false" name="StatisticsServiceTest" type="JUnit" 
factoryName="JUnit" temporary="true">
       <module name="gnunet-java" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
@@ -802,7 +838,13 @@
       </option>
       <envs />
       <patterns />
+      <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>
@@ -880,10 +922,27 @@
         <option name="Maven.BeforeRunTask" enabled="false" />
       </method>
     </configuration>
-    <list size="3">
+    <configuration default="false" name="Resolver" type="Application" 
factoryName="Application">
+      <option name="MAIN_CLASS_NAME" value="org.gnunet.service.Resolver" />
+      <option name="VM_PARAMETERS" value="-ea" />
+      <option name="PROGRAM_PARAMETERS" value="" />
+      <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="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+      <method />
+    </configuration>
+    <list size="4">
       <item index="0" class="java.lang.String" 
itemvalue="JUnit.StatisticsServiceTest" />
       <item index="1" class="java.lang.String" 
itemvalue="JUnit.NetworkSizeEstimationServiceTest" />
       <item index="2" class="java.lang.String" itemvalue="JUnit.ConstructTest" 
/>
+      <item index="3" class="java.lang.String" 
itemvalue="Application.Resolver" />
     </list>
     <configuration name="&lt;template&gt;" type="WebApp" default="true" 
selected="false">
       <Host>localhost</Host>
@@ -956,18 +1015,18 @@
     <frame x="-6" y="17" width="1452" height="889" extended-state="0" />
     <editor active="false" />
     <layout>
-      <window_info id="Messages" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.37225273" sideWeight="0.49713057" 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.119505495" sideWeight="0.49713057" 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.32967034" 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.32967034" 
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.24166666" sideWeight="0.6710875" 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.25613275" sideWeight="0.58928573" order="1" side_tool="false" 
content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="true" weight="0.33477634" 
sideWeight="0.62774724" 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.25" 
sideWeight="0.63708514" order="3" 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.24098124" sideWeight="0.6710875" 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.23015873" sideWeight="0.58928573" order="1" side_tool="false" 
content_ui="tabs" />
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24819624" 
sideWeight="0.88049453" 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.44230768" 
sideWeight="0.63708514" order="3" side_tool="false" 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.45054945" sideWeight="0.35786435" 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.2857143" 
sideWeight="0.9126984" 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="Run" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.41346154" 
sideWeight="0.9126984" 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.32967034" sideWeight="0.0" order="7" side_tool="false" 
content_ui="tabs" />
       <window_info id="Documentation" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="FLOATING" visible="true" 
weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" 
x="88" y="109" width="1260" height="692" />
       <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="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" />
@@ -1011,7 +1070,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="fix" />
+    <option name="LAST_COMMIT_MESSAGE" value="added libs" />
     <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" />
@@ -1028,6 +1087,7 @@
     <MESSAGE value="added MsgMap update shell script" />
     <MESSAGE value="fixes / documentation" />
     <MESSAGE value="fix" />
+    <MESSAGE value="added libs" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager />
@@ -1037,84 +1097,94 @@
     <option name="FILTER_TARGETS" value="false" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="373" column="40" selection-start="13033" 
selection-end="13033" vertical-scroll-proportion="0.0" />
+        <state line="23" column="41" selection-start="540" selection-end="540" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/exceptions/InternalLogicError.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="11" column="41" selection-start="288" selection-end="288" 
vertical-scroll-proportion="0.0" />
+        <state line="39" column="20" selection-start="1014" 
selection-end="1014" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/RunaboutMessageReceiver.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="5" column="22" selection-start="116" selection-end="116" 
vertical-scroll-proportion="0.0" />
+        <state line="8" column="13" selection-start="202" selection-end="202" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="200" column="11" selection-start="5769" 
selection-end="5769" vertical-scroll-proportion="0.0" />
+        <state line="7" column="13" selection-start="155" selection-end="155" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/RelativeTime.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/FillParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="180" column="28" selection-start="5729" 
selection-end="5729" vertical-scroll-proportion="0.0" />
+        <state line="17" column="4" selection-start="397" selection-end="397" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimationService.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Argument.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="86" column="35" selection-start="2553" 
selection-end="2553" vertical-scroll-proportion="0.0" />
+        <state line="11" column="15" selection-start="303" selection-end="303" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/service/StatisticsService.java">
+    <entry file="file://$PROJECT_DIR$/src/log4j.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="11" column="13" selection-start="245" selection-end="245" 
vertical-scroll-proportion="0.0" />
+        <state line="2" column="50" selection-start="78" selection-end="78" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/VarTestMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="23" column="5" selection-start="767" selection-end="767" 
vertical-scroll-proportion="0.0" />
+        <state line="2" column="13" selection-start="44" selection-end="44" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="28" column="41" selection-start="825" selection-end="825" 
vertical-scroll-proportion="0.0" />
+        <state line="13" column="13" selection-start="300" selection-end="300" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="89" column="0" selection-start="3088" 
selection-end="3088" vertical-scroll-proportion="0.0" />
+        <state line="55" column="9" selection-start="1668" 
selection-end="1668" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
+    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="43" column="24" selection-start="1457" 
selection-end="1457" vertical-scroll-proportion="0.0" />
+        <state line="39" column="23" selection-start="1133" 
selection-end="1133" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/service/Resolver.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="3" column="13" selection-start="62" selection-end="62" 
vertical-scroll-proportion="0.0" />
+        <state line="155" column="12" selection-start="4980" 
selection-end="4980" vertical-scroll-proportion="0.0">
+          <folding>
+            <element signature="e#543#599#0" expanded="true" />
+          </folding>
+        </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTimeMessage.java">
+    <entry file="file://$PROJECT_DIR$/ISSUES">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="21" column="5" selection-start="449" selection-end="449" 
vertical-scroll-proportion="0.0" />
+        <state line="154" column="41" selection-start="5164" 
selection-end="5164" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/RelativeTimeMessage.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="19" column="51" selection-start="499" selection-end="499" 
vertical-scroll-proportion="0.0" />
+        <state line="68" column="1" selection-start="2022" 
selection-end="2449" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Program.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="37" column="0" selection-start="875" selection-end="875" 
vertical-scroll-proportion="0.0" />
+        <state line="28" column="10" selection-start="792" selection-end="792" 
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/util/getopt/Parser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="200" column="13" selection-start="6405" 
selection-end="6405" vertical-scroll-proportion="0.07977208">
+        <state line="23" column="22" selection-start="700" selection-end="700" 
vertical-scroll-proportion="0.46011397">
           <folding />
         </state>
       </provider>
@@ -1165,7 +1235,6 @@
             <option name="proportions">
               <list>
                 <option value="0.2" />
-                <option value="0.5" />
               </list>
             </option>
           </splitter-proportions>

Modified: gnunet-java/ISSUES
===================================================================
--- gnunet-java/ISSUES  2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/ISSUES  2012-01-18 00:03:38 UTC (rev 19221)
@@ -130,4 +130,46 @@
 
 * setAccessible in the runabout?
 
-* what about autoRetry in the middle of sending a message?
\ No newline at end of file
+* what about autoRetry in the middle of sending a message?
+
+
+=====
+
+Fixes:
+ * MessageId generation now works with nested classes
+ * Construct can now handle message inheritance correctly
+ * loading of default configuration (room left for improving path search)
+ * frameOffset now handled correctly in ByteFillParser
+
+Changes:
+ * @construct.String can now also be of null / 0-length if the maybe-parameter 
is set to true
+ * @construct.Nested can be marked as optional: the target object is set to 
null when there is no data left in the message
+   * (does this make optional string length obsolete?)
+ * Parser.parse now takes a (Message frameObj) parameter, making it possible 
to refer to the size field
+   from a nested object
+
+
+Questions:
+ * problem with annotation-based parameter parsing: anonymous classes are 
private (fields not accessible),
+   parameter fields have to be public, too => just make them public / don't 
use anonymous classes
+   => currently solved with setAccessible
+ * what about unions in messages (example: ResolverRequest can have String, 
socket address or nothing as payload)
+  * trivial solution: just use a byte array in this case
+  * @Maybe annotation (for resolver response message)
+    @Maybe @ZeroTerminatedString String str allows str to be null if there is 
no space left
+  * @Union(tag="someField", keys={1, 2}, types={MessageTypeOne.class, 
MessageTypeTwo.class})
+  * more dynamic variants possible
+  * could be used to implement MessageHeader:
+   * class GnunetMessage {
+       @Nested
+       MessageHeader header;
+       @DynUnion(tag="header.type", map=MessageLoader.class)
+       Message body;
+     }
+   * MessageSink would add the header to the body, filling out the type and 
size fields
+   * Message declarations would look like this:
+     @GnunetMessage(type=321)
+     class NSEUpdateMessage extends Message {
+       @Uint32 reserved; @Nested RelativeTimeMsg ts; @Double double est; 
@Double double dev;
+     }
+

Modified: gnunet-java/gnunet-java.eml
===================================================================
--- gnunet-java/gnunet-java.eml 2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/gnunet-java.eml 2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,7 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<component inherit-compiler-output="true">
-       <output-test url="file://$MODULE_DIR$/out/test/gnunet-java"/>
+<component>
+       <output-test url="file://$MODULE_DIR$/bin"/>
        <contentEntry url="file://$MODULE_DIR$">
                <testFolder url="file://$MODULE_DIR$/test"/>
        </contentEntry>
+       <lib name="slf4j-api-1.6.4.jar" scope="COMPILE">
+               <relative-module-cls 
project-related="jar://$PROJECT_DIR$/lib/slf4j-api-1.6.4.jar!/"/>
+       </lib>
 </component>

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

Added: gnunet-java/resolver
===================================================================
--- gnunet-java/resolver                                (rev 0)
+++ gnunet-java/resolver        2012-01-18 00:03:38 UTC (rev 19221)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+DIR=`dirname $0`
+
+java -ea -cp "$DIR/bin/:$DIR/lib/*" org.gnunet.service.Resolver "$@"


Property changes on: gnunet-java/resolver
___________________________________________________________________
Added: svn:executable
   + *

Modified: gnunet-java/src/log4j.properties
===================================================================
--- gnunet-java/src/log4j.properties    2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/log4j.properties    2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,9 +1,6 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=DEBUG, A1
+log4j.rootLogger=FATAL, A1
 
-# A1 is set to be a ConsoleAppender.
 log4j.appender.A1=org.apache.log4j.ConsoleAppender
 
-# A1 uses PatternLayout.
 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
 log4j.appender.A1.layout.ConversionPattern=%-5p %c:\n%m%n
\ No newline at end of file

Modified: gnunet-java/src/org/gnunet/construct/Construct.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Construct.java 2012-01-17 22:25:52 UTC 
(rev 19220)
+++ gnunet-java/src/org/gnunet/construct/Construct.java 2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -8,10 +8,7 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 
 /**
  * A version of Python's construct library for Java.
@@ -45,7 +42,7 @@
                     String.format("Cannot instantiate Message %s (illegal 
access)", c));
         }
 
-        getParser(c).parse(data, offset, 0, m);
+        getParser(c).parse(data, offset, 0, m, m);
 
         return m;
     }
@@ -69,6 +66,15 @@
         return p;
     }
 
+    private static List<Field> getMessageFields(Class c) {
+        LinkedList<Field> fields = new 
LinkedList<Field>(Arrays.asList(c.getDeclaredFields()));
+        while ((c = c.getSuperclass()) != null && 
Message.class.isAssignableFrom(c)) {
+            // fields of the superclass have to be parsed *before* the subclass
+            fields.addAll(0, Arrays.asList(c.getDeclaredFields()));
+        }
+        return fields;
+    }
+
     private static Parser getParser(Class<? extends Message> c,
                                     ParserGenerator pg) {
 
@@ -76,21 +82,17 @@
         pg.c = c;
 
         if (!Modifier.isPublic(c.getModifiers())) {
-            throw new InterfaceViolationException("Construct messages must be 
declared public");
+            throw new InterfaceViolationException(String.format("Construct 
Message %s not declared public", c));
         }
-
-        Field[] fs = c.getDeclaredFields();
-        for (Field f : fs) {
+        
+        for (Field f : getMessageFields(c)) {
             Annotation[] as = f.getAnnotations();
-            if (Modifier.isStatic(f.getModifiers())) {
+            if (as.length == 0 || f.isSynthetic() || 
Modifier.isStatic(f.getModifiers())) {
                 continue;
             }
             if (!Modifier.isPublic(f.getModifiers())) {
-                throw new InterfaceViolationException(String.format("field %s 
of Message %s not declared public", f, c));
+                throw new InterfaceViolationException(String.format("Field %s 
of Message %s not declared public", f, c));
             }
-            if (as.length == 0) {
-                continue;
-            }
             pg.field = f;
             pg.annotations = as;
             pg.annotationsIdx = 0;
@@ -127,16 +129,16 @@
         // where are we currently, seen from the root message object
         List<Field> path = new LinkedList<Field>();
 
-        // path of the object that has a total size field
-        List<Field> total_size_path;
+        // path of the object that has a frame size field
+        List<Field> frameSizePath;
 
         private ParserGenerator() {
         }
 
         public void visit(FrameSize ts) {
 
-            total_size_path = new LinkedList<Field>(path);
-            total_size_path.add(field);
+            frameSizePath = new LinkedList<Field>(path);
+            frameSizePath.add(field);
 
             if (annotationsIdx != 0) {
                 throw new InterfaceViolationException(
@@ -189,7 +191,7 @@
         }
 
         public void visit(ZeroTerminatedString zts) {
-            parser = new StringParser("UTF-8", field);
+            parser = new StringParser(zts.charset(), zts.optional(), field);
         }
 
         public void visit(Nested n) {
@@ -208,16 +210,16 @@
             Parser p = getParser(ct, this);
 
             path = old_path;
-            parser = new NestedParser(p, old_f);
+            parser = new NestedParser(p, frameSizePath, n.optional(), old_f);
         }
 
         public void visit(ByteFill bf) {
-            if (total_size_path == null) {
+            if (frameSizePath == null) {
                 throw new InterfaceViolationException(
                         "no total size found before variable size element");
             }
 
-            parser = new ByteFillParser(total_size_path, field);
+            parser = new ByteFillParser(frameSizePath, field);
         }
 
         public void visit(FixedSizeArray fsa) {
@@ -247,7 +249,6 @@
                     .getComponentType(), this);
 
             try {
-                System.out.println(c);
                 parser = new VariableSizeArrayParser(parser, old_c.getField(vsa
                         .lengthField()), f);
 
@@ -298,7 +299,7 @@
 
     public static void patchSizeFields(Message m) {
         Parser p = getParser(m.getClass());
-        p.patchSizeFields(m, p.getSize(m));
+        p.patch(m, p.getSize(m));
     }
 
     // the following are utility methods for the java reflection api

Modified: gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java      
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java      
2012-01-18 00:03:38 UTC (rev 19221)
@@ -64,7 +64,7 @@
                 Annotation ann = e.getAnnotation(MessageId.class);
                 if (ann != null) {
                     int id = e.getAnnotation(MessageId.class).value();
-                    String fqn = e.asType().toString();
+                    String fqn = getClassName(e);
                     if (msgmap.containsKey(id)) {
                         
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
                                 String.format("duplicate @MessageId(%s) in %s 
and %s found",
@@ -79,4 +79,21 @@
 
         return false;
     }
+    
+    String getClassName(Element e) {
+        assert e.getKind().isClass();
+        
+        String name = e.getSimpleName().toString();
+        String pkg = 
processingEnv.getElementUtils().getPackageOf(e).getQualifiedName().toString() + 
".";
+        
+        String outer = "";
+        
+        while ((e = e.getEnclosingElement()) != null && e.getKind().isClass()) 
{
+            outer = e.getSimpleName() + "$" + outer;
+        }
+        
+
+        return pkg + outer + name;
+
+    }
 }

Modified: gnunet-java/src/org/gnunet/construct/MessageLoader.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageLoader.java     2012-01-17 
22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/MessageLoader.java     2012-01-18 
00:03:38 UTC (rev 19221)
@@ -75,7 +75,6 @@
     public static Message loadMessage(int type, byte[] data, int offset) {
         String className = msgmap.get(type);
         if (className == null) {
-            // todo: error message
             throw new MessageFormatException("don't know how to translate 
message of type " + type);
         }
         

Modified: gnunet-java/src/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/org/gnunet/construct/MsgMap.txt     2012-01-17 22:25:52 UTC 
(rev 19220)
+++ gnunet-java/src/org/gnunet/construct/MsgMap.txt     2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -1,6 +1,7 @@
 987=org.gnunet.construct.SizeTestMessage
 291=org.gnunet.construct.QueryMessage
-323=org.gnunet.service.NSE_UpdateMessage
-321=org.gnunet.service.NSE_StartMessage
+323=org.gnunet.service.NetworkSizeEstimation$NSE_UpdateMessage
+5=org.gnunet.service.Resolver$ResolverResponse
+321=org.gnunet.service.NetworkSizeEstimation$NSE_StartMessage
 3210=org.gnunet.construct.SimpleTestMessage
-# generated 2012/01/04 12:40:14
+# generated 2012/01/16 16:34:27

Modified: gnunet-java/src/org/gnunet/construct/Nested.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Nested.java    2012-01-17 22:25:52 UTC 
(rev 19220)
+++ gnunet-java/src/org/gnunet/construct/Nested.java    2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -15,4 +15,5 @@
 @Target(ElementType.FIELD)
 public @interface Nested {
     boolean newFrame() default false;
+    boolean optional() default false;
 }
\ No newline at end of file

Added: gnunet-java/src/org/gnunet/construct/TaggedUnion.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/TaggedUnion.java                       
        (rev 0)
+++ gnunet-java/src/org/gnunet/construct/TaggedUnion.java       2012-01-18 
00:03:38 UTC (rev 19221)
@@ -0,0 +1,16 @@
+package org.gnunet.construct;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
address@hidden(RetentionPolicy.RUNTIME)
address@hidden(ElementType.FIELD)
+public @interface TaggedUnion {
+    // path to the tag
+    String tag();
+    String[] keys();
+    Class[] values();
+}
\ No newline at end of file

Modified: gnunet-java/src/org/gnunet/construct/ZeroTerminatedString.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/ZeroTerminatedString.java      
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/ZeroTerminatedString.java      
2012-01-18 00:03:38 UTC (rev 19221)
@@ -13,4 +13,5 @@
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ZeroTerminatedString {
     String charset() default "UTF-8";
+    boolean optional() default false;
 }

Modified: gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java    
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java    
2012-01-18 00:03:38 UTC (rev 19221)
@@ -3,6 +3,8 @@
 import org.gnunet.construct.Construct;
 import org.gnunet.construct.Construct.ReflectionUtil;
 import org.gnunet.construct.Message;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
@@ -10,11 +12,18 @@
 
 /**
  * Parse an array that takes up all the available space.
+ * A 0-element array takes up no space.
+ * 'null' is an invalid value for a field of this type.
  * 
  * @author Florian Dold
  * 
  */
 public class ByteFillParser extends FieldParser {
+    private static final Logger logger = LoggerFactory
+            .getLogger(ByteFillParser.class);
+
+
+
     private List<Field> totalSizePath;
 
     private ReflectionUtil.NumFieldType totalSizeFieldType;
@@ -38,9 +47,14 @@
 
     @Override
     public int parse(final byte[] srcData, final int offset, int frameOffset,
-            final Message dst) {
-        int remaining = getSizeFieldValue(dst) - frameOffset;
+                     Message frameObj, final Message dst) {
+        int remaining = (frameOffset + getSizeFieldValue(frameObj)) - offset;
 
+        if (remaining <= 0) {
+            setFieldValue(dst, new byte[0]);
+            return 0;
+        }
+
         byte[] a = new byte[remaining];
 
         System.arraycopy(srcData, offset, a, 0, remaining);
@@ -62,7 +76,7 @@
      * field. This works, but is very redundant.
      */
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
         Object obj = ReflectionUtil.followFieldPath(totalSizePath, m,
                 totalSizePath.size() - 1);
         Field f = totalSizePath.get(totalSizePath.size() - 1);

Modified: gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java      
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java      
2012-01-18 00:03:38 UTC (rev 19221)
@@ -18,7 +18,7 @@
     }
 
     @Override
-    public int parse(byte[] srcData, int offset, int frameOffset, Message 
dstObj) {
+    public int parse(byte[] srcData, int offset, int frameOffset, Message 
frameObj, Message dstObj) {
         double d = ByteBuffer.wrap(srcData, offset, 8).getDouble();
         try {
             field.setDouble(dstObj, d);
@@ -41,6 +41,6 @@
     }
 
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
     }
 }

Modified: gnunet-java/src/org/gnunet/construct/parsers/FillParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/FillParser.java        
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/FillParser.java        
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,12 +1,12 @@
 package org.gnunet.construct.parsers;
 
+import org.gnunet.construct.Construct.ReflectionUtil;
+import org.gnunet.construct.Message;
+
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.util.List;
 
-import org.gnunet.construct.Construct.ReflectionUtil;
-import org.gnunet.construct.Message;
-
 /**
  * Parse an array that takes up all the available space.
  * 
@@ -50,7 +50,7 @@
 
     @Override
     public int parse(final byte[] srcData, final int offset, int frameOffset,
-            final Message dstObj) {
+                     Message frameObj, final Message dstObj) {
         /*
         int remaining = getSizeFieldValue(dstObj) - frameOffset;
 
@@ -108,7 +108,7 @@
      * This works, but is very redundant.
      */
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
         Object obj = ReflectionUtil.followFieldPath(totalSizePath, m,
                 totalSizePath.size() - 1);
         Field f = totalSizePath.get(totalSizePath.size() - 1);

Modified: gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java      
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java      
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,10 +1,10 @@
 package org.gnunet.construct.parsers;
 
+import org.gnunet.construct.Message;
+
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 
-import org.gnunet.construct.Message;
-
 public class FixedSizeArrayParser extends FieldParser {
 
     private final FieldParser elemParser;
@@ -35,7 +35,7 @@
 
     @Override
     public int parse(final byte[] srcData, final int offset, int frameOffset,
-            final Message dstObj) {
+                     Message frameObj, final Message dstObj) {
         int size = 0;
 
         final Object arr = Array.newInstance(getFieldType().getComponentType(),
@@ -56,7 +56,7 @@
             Array.set(arr, i, elemObj);
             
             size += elemParser.parse(srcData, offset + size,
-                    frameOffset - size, elemObj);
+                    frameOffset - size, null, elemObj);
         }
 
         return size;
@@ -75,10 +75,10 @@
     }
 
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
         final Object arr = getFieldValue(m);
         for (int i = 0; i < Array.getLength(arr); ++i) {
-            elemParser.patchSizeFields((Message) Array.get(arr, i), frameSize);
+            elemParser.patch((Message) Array.get(arr, i), frameSize);
         }
 
     }

Modified: gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java     
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java     
2012-01-18 00:03:38 UTC (rev 19221)
@@ -33,7 +33,7 @@
 
     @Override
     public int parse(final byte[] srcData, int offset, int frameOffset,
-            final Message dstObj) {
+                     Message frameObj, final Message dstObj) {
         try {
             switch (ft) {
             case BYTE_PRIM:
@@ -48,6 +48,8 @@
             case LONG_PRIM:
                 field.setLong(dstObj, readLong(srcData, offset));
                 break;
+                case BIGNUM: case CHAR_PRIM:
+                    throw new UnsupportedOperationException("not yet 
implemented");
             default:
                 throw new RuntimeException("invalid member type");
             }
@@ -67,20 +69,22 @@
 
         try {
             switch (ft) {
-            case BYTE_PRIM:
-                writeInt(field.getInt(srcObj), dstData, offset);
-                break;
-            case INT_PRIM:
-                writeInt(field.getInt(srcObj), dstData, offset);
-                break;
-            case SHORT_PRIM:
-                writeShort(field.getShort(srcObj), dstData, offset);
-                break;
-            case LONG_PRIM:
-                writeLong(field.getLong(srcObj), dstData, offset);
-                break;
-            default:
-                throw new RuntimeException("invalid member type: ");
+                case BYTE_PRIM:
+                    writeInt(field.getInt(srcObj), dstData, offset);
+                    break;
+                case INT_PRIM:
+                    writeInt(field.getInt(srcObj), dstData, offset);
+                    break;
+                case SHORT_PRIM:
+                    writeShort(field.getShort(srcObj), dstData, offset);
+                    break;
+                case LONG_PRIM:
+                    writeLong(field.getLong(srcObj), dstData, offset);
+                    break;
+                case BIGNUM: case CHAR_PRIM:
+                    throw new UnsupportedOperationException("not yet 
implemented");
+                default:
+                    throw new RuntimeException("invalid member type: ");
             }
         } catch (IllegalArgumentException e) {
             throw new RuntimeException();
@@ -92,7 +96,7 @@
     }
 
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
     }
 
     public void writeByte(byte val, byte[] data, int offset) {

Modified: gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java      
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java      
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,26 +1,54 @@
 package org.gnunet.construct.parsers;
 
+import org.gnunet.construct.Construct;
+import org.gnunet.construct.Message;
+import org.gnunet.exceptions.MessageFormatException;
+
 import java.lang.reflect.Field;
+import java.util.List;
 
-import org.gnunet.construct.Message;
 
-
 public class NestedParser extends FieldParser {
     private final Parser nestedParser;
+    private List<Field> frameSizePath;
 
-    public NestedParser(final Parser p, final Field f) {
+    boolean optional;
+
+    public NestedParser(final Parser p, List<Field> frameSizePath, boolean 
optional, final Field f) {
         super(f);
+        this.optional = optional;
         this.nestedParser = p;
+        this.frameSizePath = frameSizePath;
     }
 
     @Override
     public int getSize(final Message src) {
-        return nestedParser.getSize((Message) getFieldValue(src));
+        Message inner = (Message) getFieldValue(src);
+        return nestedParser.getSize(inner);
     }
 
+    private int getSizeFieldValue(Message m) {
+        Object obj = Construct.ReflectionUtil.followFieldPath(frameSizePath, 
m);
+        return ((Number) obj).intValue();
+    }
+
     @Override
     public int parse(final byte[] src_data, final int offset,
-            int frameOffset, final Message dstObj) {
+                     int frameOffset, Message frameObj, final Message dstObj) {
+
+
+        if (optional) {
+            int remaining = (frameOffset + getSizeFieldValue(frameObj)) - 
offset;
+            if (remaining <= 0) {
+                if (!optional) {
+                    throw new MessageFormatException("not optional");
+                }
+                setFieldValue(dstObj, null);
+                return 0;
+            }
+        }
+
+
         try {
             setFieldValue(dstObj, getFieldType().newInstance());
         } catch (InstantiationException e) {
@@ -29,8 +57,9 @@
             throw new RuntimeException();
         }
 
+
         return nestedParser.parse(src_data, offset, frameOffset,
-                (Message) getFieldValue(dstObj));
+                frameObj, (Message) getFieldValue(dstObj));
     }
 
     @Override
@@ -40,10 +69,10 @@
     }
 
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
         // todo: nested/opaque frames
-        nestedParser.patchSizeFields(m, frameSize);
-        
+        nestedParser.patch(m, frameSize);
+
     }
 
 }

Modified: gnunet-java/src/org/gnunet/construct/parsers/Parser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/Parser.java    2012-01-17 
22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/Parser.java    2012-01-18 
00:03:38 UTC (rev 19221)
@@ -14,15 +14,15 @@
 
     /**
      * 
+     *
      * @param srcData
      * @param offset
-     * @param frameOffset
-     * @param dstObj
-     * @return
+     * @param frameStart start of the current frame, relative to the beginning 
of srcData
+     * @param frameObj
+     address@hidden dstObj  @return
      */
-    public int parse(byte[] srcData, int offset, int frameOffset, Message 
dstObj);
+    public int parse(byte[] srcData, int offset, int frameStart, Message 
frameObj, Message dstObj);
 
-
     /**
      * 
      * @param dstData
@@ -32,6 +32,6 @@
      */
     public int write(byte[] dstData, int offset, Message srcObj);
 
-    public void patchSizeFields(Message m, int frameSize);
+    public void patch(Message m, int frameSize);
 
 }

Modified: gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java    
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java    
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,10 +1,10 @@
 package org.gnunet.construct.parsers;
 
+import org.gnunet.construct.Message;
+
 import java.util.LinkedList;
 import java.util.List;
 
-import org.gnunet.construct.Message;
-
 /**
  * A Sequence of Parsers that operate on the same object.
  * @author Florian Dold
@@ -32,10 +32,10 @@
 
     @Override
     public int parse(final byte[] src_data, final int offset, int frameOffset,
-            final Message dst) {
+                     Message frameObj, final Message dst) {
         int size = 0;
         for (final FieldParser p : childParsers) {
-            size += p.parse(src_data, offset + size, frameOffset + size, dst);
+            size += p.parse(src_data, offset + size, frameOffset, frameObj, 
dst);
         }
         return size;
     }
@@ -50,9 +50,9 @@
     }
 
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
         for (final FieldParser p : childParsers) {
-            p.patchSizeFields(m, frameSize);
+            p.patch(m, frameSize);
         }  
     }
 }

Modified: gnunet-java/src/org/gnunet/construct/parsers/StringParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/StringParser.java      
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/StringParser.java      
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,22 +1,34 @@
 package org.gnunet.construct.parsers;
 
+import org.gnunet.construct.Message;
+import org.gnunet.exceptions.InterfaceViolationException;
+import org.gnunet.exceptions.MessageFormatException;
+
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Field;
 
-import org.gnunet.construct.Message;
-
 public class StringParser extends FieldParser {
 
     String cset;
 
-    public StringParser(final String charset, final Field f) {
+    boolean optional;
+
+    public StringParser(final String charset, boolean optional, final Field f) 
{
         super(f);
+        this.optional = optional;
         this.cset = charset;
     }
 
     @Override
     public int getSize(final Message srcObj) {
         final String s = (String) getFieldValue(srcObj);
+        if (s == null) {
+            if (optional) {
+                return 0;
+            } else {
+                throw new InterfaceViolationException("non-optional string 
cannot be null");
+            }
+        }
         try {
             final byte[] b = s.getBytes(cset);
             return b.length + 1;
@@ -26,7 +38,16 @@
     }
 
     @Override
-    public int parse(final byte[] srcData, final int offset, int frameOffset, 
final Message dstObj) {
+    public int parse(final byte[] srcData, final int offset, int frameOffset, 
Message frameObj, final Message dstObj) {
+
+        if (srcData[offset] == 0) {
+            if (!optional) {
+                throw new MessageFormatException("no data received for 
non-optional string");
+            }
+            setFieldValue(dstObj, null);
+            return 0;
+        }
+
         int length = 0;
         while (srcData[offset + length] != 0) {
             length++;
@@ -49,8 +70,16 @@
     }
 
     @Override
-    public int write(final byte[] dstData, final int offset, final Message 
srcObj) {
-        final String s = (String) getFieldValue(srcObj);
+    public int write(final byte[] dstData, final int offset, final Message 
srcObj) {        
+        String s = (String) getFieldValue(srcObj);
+        
+        if (s == null) {
+            if (!optional) {
+                throw new InterfaceViolationException("non-optional string 
cannot be null");
+            }
+            return 0;
+        }
+        
         byte[] b;
         try {
             b = s.getBytes(cset);
@@ -60,16 +89,15 @@
 
         System.arraycopy(b, 0, dstData, offset, b.length);
 
-        System.out.println(b.length);
+        dstData[offset + b.length] = 0;
 
-        dstData[offset + b.length] = (byte) 0;
-
         // +1 for the 0-byte
         return b.length + 1;
     }
 
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
+        // nothing to patch
     }
 
 }

Modified: 
gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java   
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java   
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,11 +1,11 @@
 package org.gnunet.construct.parsers;
 
+import org.gnunet.construct.Construct.ReflectionUtil;
+import org.gnunet.construct.Message;
+
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 
-import org.gnunet.construct.Construct.ReflectionUtil;
-import org.gnunet.construct.Message;
-
 public class VariableSizeArrayParser extends FieldParser {
     private final FieldParser elemParser;
     private Field sizeField;
@@ -35,7 +35,7 @@
     }
 
     @Override
-    public int parse(final byte[] srcData, final int offset, int frameOffset, 
final Message dstObj) {
+    public int parse(final byte[] srcData, final int offset, int frameOffset, 
Message frameObj, final Message dstObj) {
         int elemNumber;
         try {
             elemNumber = ((Number) sizeField.get(dstObj)).intValue();
@@ -65,7 +65,7 @@
             Array.set(arr, i, elemObj);
             
             size += elemParser.parse(srcData, offset + size,
-                    frameOffset - size, elemObj);
+                    frameOffset - size, null, elemObj);
         }
 
         return size;
@@ -83,7 +83,7 @@
     }
 
     @Override
-    public void patchSizeFields(Message m, int frameSize) {
+    public void patch(Message m, int frameSize) {
         int size = Array.getLength(getFieldValue(m));
         ReflectionUtil.setNumField(m, ft, sizeField, size);
     }

Deleted: gnunet-java/src/org/gnunet/service/NSE_StartMessage.java
===================================================================
--- gnunet-java/src/org/gnunet/service/NSE_StartMessage.java    2012-01-17 
22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/service/NSE_StartMessage.java    2012-01-18 
00:03:38 UTC (rev 19221)
@@ -1,15 +0,0 @@
-package org.gnunet.service;
-
-import org.gnunet.construct.Message;
-import org.gnunet.construct.MessageHeader;
-import org.gnunet.construct.MessageId;
-import org.gnunet.construct.Nested;
-
address@hidden("InstanceVariableMayNotBeInitialized")
address@hidden(NSE_StartMessage.MSG_ID)
-public class NSE_StartMessage implements Message {
-    public static final int MSG_ID = 321;
-
-    @Nested
-    public MessageHeader header;
-}

Deleted: gnunet-java/src/org/gnunet/service/NSE_UpdateMessage.java
===================================================================
--- gnunet-java/src/org/gnunet/service/NSE_UpdateMessage.java   2012-01-17 
22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/service/NSE_UpdateMessage.java   2012-01-18 
00:03:38 UTC (rev 19221)
@@ -1,27 +0,0 @@
-package org.gnunet.service;
-
-import org.gnunet.construct.Double;
-import org.gnunet.construct.*;
-import org.gnunet.util.AbsoluteTimeMessage;
-
address@hidden("InstanceVariableMayNotBeInitialized")
address@hidden(NSE_UpdateMessage.MSG_ID)
-public class NSE_UpdateMessage implements Message {
-    public static final int MSG_ID = 323;
-
-    @Nested
-    public MessageHeader header;
-
-    @UInt32
-    public int reserved;
-
-    @Nested
-    public AbsoluteTimeMessage timestamp;
-
-    @Double
-    public double sizeEstimate;
-
-    @Double
-    public double stdDeviation;
-
-}
\ No newline at end of file

Copied: gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java (from rev 
19156, gnunet-java/src/org/gnunet/service/NetworkSizeEstimationService.java)
===================================================================
--- gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java               
                (rev 0)
+++ gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java       
2012-01-18 00:03:38 UTC (rev 19221)
@@ -0,0 +1,196 @@
+package org.gnunet.service;
+
+
+import org.gnunet.construct.*;
+import org.gnunet.construct.Double;
+import org.gnunet.exceptions.MessageFormatException;
+import org.gnunet.util.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+
+/**
+ * An API for the network size estimation service.
+ *
+ * @author Florian Dold
+ */
+public class NetworkSizeEstimation {
+    private static final Logger logger = LoggerFactory
+            .getLogger(NetworkSizeEstimation.class);
+
+    private Collection<NSE_Subscriber> subscribers = new 
HashSet<NSE_Subscriber>(1);
+    private boolean disconnected = false;
+
+    private Client client;
+
+
+
+    @SuppressWarnings("InstanceVariableMayNotBeInitialized")
+    @MessageId(NSE_StartMessage.MSG_ID)
+    public static class NSE_StartMessage implements Message {
+        public static final int MSG_ID = 321;
+
+        @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;
+
+        @UInt32
+        public int reserved;
+
+        @Nested
+        public AbsoluteTimeMessage timestamp;
+
+        @Double
+        public double sizeEstimate;
+
+        @Double
+        public double stdDeviation;
+
+    }
+
+
+
+    private class NSE_Receiver implements MessageReceiver {
+        @Override
+        public void process(Message msg) {
+            if (!(msg instanceof NSE_UpdateMessage)) {
+                throw new MessageFormatException("got unexcpected message");
+            }
+            NSE_UpdateMessage uMsg = (NSE_UpdateMessage) msg;
+            System.out.println("got message back!");
+
+            for (NSE_Subscriber s : subscribers) {
+                s.update(AbsoluteTime.fromNetwork(uMsg.timestamp), 
uMsg.sizeEstimate, uMsg.stdDeviation);
+            }
+
+            if (!disconnected) {
+                client.receive(this, RelativeTime.FOREVER);
+            }
+        }
+
+        @Override
+        public void handleTimeout() {
+            // can't happen
+            throw new RuntimeException("unreachable");
+        }
+    }
+
+    private class NSE_Transmitter implements MessageTransmitter {
+
+        @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;
+            sink.send(m);
+            client.receive(new NSE_Receiver(), RelativeTime.FOREVER);
+        }
+
+        @Override
+        public void handleTimeout() {
+            // can't happen
+            throw new AssertionError("unreachable");
+        }
+    }
+
+
+    /**
+     * A handle for a subscription to the network size estimation service, may 
be used to cancel the
+     * subscription.
+     */
+    public class NSE_Subscription {
+        private NSE_Subscriber sub;
+
+        private NSE_Subscription(NSE_Subscriber sub) {
+            this.sub = sub;
+        }
+
+        /**
+         * Cancel the subscription.
+         */
+        public void cancel() {
+            subscribers.remove(sub);
+        }
+    }
+
+    /**
+     * A NSE_Subscriber receives updates from the service.
+     */
+    public interface NSE_Subscriber {
+
+
+        public void update(AbsoluteTime timestamp, double estimate, double 
deviation);
+    }
+
+
+    /**
+     * Subscribe for updates from the service.
+     *
+     * @param s callback for updates
+     * @return a subscription handle that may be used to cancel the 
subscription
+     */
+    public NSE_Subscription subscribe(NSE_Subscriber s) {
+        subscribers.add(s);
+        return new NSE_Subscription(s);
+    }
+
+
+    /**
+     * Create a connection to the network size estimation service.
+     *
+     * @param cfg the configuration to use for connecting with the service
+     */
+    public NetworkSizeEstimation(Configuration cfg) {
+        client = new Client("nse", cfg);
+        client.notifyTransmitReady(MessageHeader.SIZE, RelativeTime.FOREVER, 
true, new NSE_Transmitter());
+    }
+
+    /**
+     * Cancel all subscriptions and disconnect from the service.
+     */
+    public void disconnect() {
+        disconnected = true;
+        client.disconnect();
+    }
+    
+    public static void main (String[] args)
+    {
+       new Program (args) {
+               
+               public int f_foo; // shortname: f, long name: foo, type: "int"
+               
+               public boolean b_bar; // shortname: b, long name: bar, type: 
boolean flag (present: true, absent: false)
+               // or with annotations...
+               
+               public void run ()
+               {
+               final NetworkSizeEstimation svc = new 
NetworkSizeEstimation(cfg);
+               NSE_Subscriber subscriber = new NSE_Subscriber() {
+                   @Override
+                   public void update(AbsoluteTime timestamp, double estimate, 
double deviation) {
+                       System.out.println("est:" + estimate + " dev: " + 
deviation + " t: ");
+                       svc.disconnect();
+                   }
+               };
+               svc.subscribe(subscriber);
+                       
+               }
+       }.start();
+       
+       
+    }
+    
+}

Deleted: gnunet-java/src/org/gnunet/service/NetworkSizeEstimationService.java
===================================================================
--- gnunet-java/src/org/gnunet/service/NetworkSizeEstimationService.java        
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/src/org/gnunet/service/NetworkSizeEstimationService.java        
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,168 +0,0 @@
-package org.gnunet.service;
-
-
-import java.util.Collection;
-import java.util.HashSet;
-
-import org.gnunet.construct.Message;
-import org.gnunet.construct.MessageHeader;
-import org.gnunet.exceptions.MessageFormatException;
-import org.gnunet.util.AbsoluteTime;
-import org.gnunet.util.Client;
-import org.gnunet.util.Configuration;
-import org.gnunet.util.MessageReceiver;
-import org.gnunet.util.MessageTransmitter;
-import org.gnunet.util.Program;
-import org.gnunet.util.RelativeTime;
-import org.gnunet.util.Scheduler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * An API for the network size estimation service.
- *
- * @author Florian Dold
- */
-public class NetworkSizeEstimationService {
-    private static final Logger logger = LoggerFactory
-            .getLogger(NetworkSizeEstimationService.class);
-
-    private Collection<NSE_Subscriber> subscribers = new 
HashSet<NSE_Subscriber>(1);
-    private boolean disconnected = false;
-
-    private Client client;
-
-    private class NSE_Receiver implements MessageReceiver {
-        @Override
-        public void process(Message msg) {
-            if (!(msg instanceof NSE_UpdateMessage)) {
-                throw new MessageFormatException("got unexcpected message");
-            }
-            NSE_UpdateMessage uMsg = (NSE_UpdateMessage) msg;
-            System.out.println("got message back!");
-
-            for (NSE_Subscriber s : subscribers) {
-                s.update(AbsoluteTime.fromNetwork(uMsg.timestamp), 
uMsg.sizeEstimate, uMsg.stdDeviation);
-            }
-
-            if (!disconnected) {
-                client.receive(this, RelativeTime.FOREVER);
-            }
-        }
-
-        @Override
-        public void handleTimeout() {
-            // can't happen
-            throw new RuntimeException("unreachable");
-        }
-    }
-
-    private class NSE_Transmitter implements MessageTransmitter {
-
-        @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;
-            sink.send(m);
-            client.receive(new NSE_Receiver(), RelativeTime.FOREVER);
-        }
-
-        @Override
-        public void handleTimeout() {
-            // can't happen
-            throw new AssertionError("unreachable");
-        }
-    }
-
-
-    /**
-     * A handle for a subscription to the network size estimation service, may 
be used to cancel the
-     * subscription.
-     */
-    public class NSE_Subscription {
-        private NSE_Subscriber sub;
-
-        private NSE_Subscription(NSE_Subscriber sub) {
-            this.sub = sub;
-        }
-
-        /**
-         * Cancel the subscription.
-         */
-        public void cancel() {
-            subscribers.remove(sub);
-        }
-    }
-
-    /**
-     * A NSE_Subscriber receives updates from the service.
-     */
-    public interface NSE_Subscriber {
-
-
-        public void update(AbsoluteTime timestamp, double estimate, double 
deviation);
-    }
-
-
-    /**
-     * Subscribe for updates from the service.
-     *
-     * @param s callback for updates
-     * @return a subscription handle that may be used to cancel the 
subscription
-     */
-    public NSE_Subscription subscribe(NSE_Subscriber s) {
-        subscribers.add(s);
-        return new NSE_Subscription(s);
-    }
-
-
-    /**
-     * Create a connection to the network size estimation service.
-     *
-     * @param cfg the configuration to use for connecting with the service
-     */
-    public NetworkSizeEstimationService(Configuration cfg) {
-        client = new Client("nse", cfg);
-        client.notifyTransmitReady(MessageHeader.SIZE, RelativeTime.FOREVER, 
true, new NSE_Transmitter());
-    }
-
-    /**
-     * Cancel all subscriptions and disconnect from the service.
-     */
-    public void disconnect() {
-        disconnected = true;
-        client.disconnect();
-    }
-    
-    public static void main (String[] args)
-    {
-       new Program (args) {
-               
-               public int f_foo; // shortname: f, long name: foo, type: "int"
-               
-               public boolean b_bar; // shortname: b, long name: bar, type: 
boolean flag (present: true, absent: false)
-               // or with annotations...
-               
-               public void run (String[] rargs)
-               {
-               final NetworkSizeEstimationService svc = new 
NetworkSizeEstimationService(cfg);
-               NSE_Subscriber subscriber = new NSE_Subscriber() {
-                   @Override
-                   public void update(AbsoluteTime timestamp, double estimate, 
double deviation) {
-                       System.out.println("est:" + estimate + " dev: " + 
deviation + " t: ");
-                       svc.disconnect();
-                   }
-               };
-               svc.subscribe(subscriber);
-                       
-               }
-       }.start();
-       
-       
-    }
-    
-}

Added: gnunet-java/src/org/gnunet/service/Resolver.java
===================================================================
--- gnunet-java/src/org/gnunet/service/Resolver.java                            
(rev 0)
+++ gnunet-java/src/org/gnunet/service/Resolver.java    2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -0,0 +1,190 @@
+package org.gnunet.service;
+
+
+import org.gnunet.construct.*;
+import org.gnunet.exceptions.InterfaceViolationException;
+import org.gnunet.exceptions.MessageFormatException;
+import org.gnunet.util.*;
+import org.gnunet.util.getopt.Argument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+
+public class Resolver {
+    private static final Logger logger = LoggerFactory
+            .getLogger(Resolver.class);
+
+    @SuppressWarnings("InstanceVariableMayNotBeInitialized")
+    public static class GetMessage implements Message {
+        final static int MSG_ID = 4;
+
+        static final int DIRECTION_GET_IP = 0;
+        static final int DIRECTION_GET_NAME = 1;
+        static final int AF_INET = 2;
+        // .. more constants to come
+
+        @Nested
+        public MessageHeader header;
+        @UInt32
+        public int direction;
+        @UInt32
+        public int domain;
+        @ByteFill
+        public byte[] addr;
+    }
+
+    @MessageId(ResolverResponse.MSG_ID)
+    public static class ResolverResponse implements Message {
+        final static int MSG_ID = 5;
+        @Nested
+        public MessageHeader header;
+        @Nested(optional = true)
+        public ResponseBody responseBody;
+    }
+
+    public static class ResponseBody implements Message {
+        @UInt32
+        public int domain;
+        @ByteFill
+        public byte[] addr;
+    }
+
+
+    public interface HostnameCallback {
+        public void onHostname(String hostname);
+
+        public void onFinished();
+    }
+
+    public interface AddressCallback {
+        public void onAddress(InetAddress addr);
+
+        public void onFinished();
+    }
+
+
+    Client client = null;
+
+    public void connect(Configuration cfg) {
+        if (client != null) {
+            throw new InterfaceViolationException("connect called twice");
+        }
+        client = new Client("resolver", new BootstrapResolver(), cfg);
+    }
+
+    public void resolveHostname(String hostname, RelativeTime timeout, final 
AddressCallback cb) {
+        if (client == null) {
+            throw new InterfaceViolationException("must connect Resolver 
before using");
+        }
+
+        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_INET;
+        byte[] addr = hostname.getBytes();
+        // add 0-byte
+        req.addr = Arrays.copyOf(addr, addr.length + 1);
+
+        req.header.messageSize = Construct.getSize(req);
+
+        logger.debug("" + req.header.messageSize);
+
+
+        client.notifyTransmitReady(
+                Construct.getSize(req),
+                RelativeTime.FOREVER, true,
+                new MessageTransmitter() {
+                    @Override
+                    public void transmit(Client.MessageSink sink) {
+                        sink.send(req);
+
+                        client.receive(new MessageReceiver() {
+                            @Override
+                            public void process(Message msg) {
+                                ResolverResponse gmsg = (ResolverResponse) msg;
+                                if (gmsg.responseBody != null) {
+                                    try {
+                                        InetAddress in_addr = 
Inet4Address.getByAddress(
+                                                
Arrays.copyOfRange(gmsg.responseBody.addr, 0, 4));
+                                        cb.onAddress(in_addr);
+                                        client.receive(this, 
RelativeTime.FOREVER);
+                                    } catch (UnknownHostException e) {
+                                        throw new 
MessageFormatException("malformed address");
+                                    }
+                                } else {
+                                    cb.onFinished();
+                                }
+                            }
+
+                            @Override
+                            public void handleTimeout() {
+                                throw new RuntimeException("unreachable");
+                            }
+                        }, RelativeTime.FOREVER);
+
+                    }
+
+                    @Override
+                    public void handleTimeout() {
+                        throw new RuntimeException("unreachable");
+                    }
+                });
+
+    }
+
+    private static Resolver singletonInstance = null;
+
+    public static Resolver getInstance() {
+        if (singletonInstance == null) {
+            singletonInstance = new Resolver();
+        }
+        return singletonInstance;
+    }
+
+
+    public static void main(final String[] argv) {
+        new Program(argv) {
+            @Argument(name="HOSTNAME")
+            public String hostname;
+            
+            @Override
+            public void run() {
+                System.out.println("resolving hostname '" + hostname + "'");
+                Resolver.getInstance().resolveHostname(hostname, 
RelativeTime.FOREVER, new AddressCallback() {
+                    @Override
+                    public void onAddress(InetAddress addr) {
+                        System.out.println(addr);
+                    }
+
+                    @Override
+                    public void onFinished() {
+                        System.out.println("done.");
+                    }
+                });
+            }
+
+        }.start();
+    }
+
+
+    /**
+     * Resolver used to connect to the resolver service itselv, solving the 
henn-egg-problem.
+     * Only loopback and ip addresses can be "resolved", no real domain names
+     */
+    private class BootstrapResolver extends Resolver {
+        public BootstrapResolver() {
+        }
+
+        @Override
+        public void connect(Configuration cfg) {
+            throw new UnsupportedOperationException("Bootstrap resolver does 
not need to be connected");
+        }
+
+    }
+
+}

Modified: gnunet-java/src/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Client.java 2012-01-17 22:25:52 UTC (rev 
19220)
+++ gnunet-java/src/org/gnunet/util/Client.java 2012-01-18 00:03:38 UTC (rev 
19221)
@@ -25,6 +25,7 @@
 import org.gnunet.construct.MessageLoader;
 import org.gnunet.exceptions.ConfigurationException;
 import org.gnunet.exceptions.InterfaceViolationException;
+import org.gnunet.service.Resolver;
 import org.gnunet.util.Scheduler.Task;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,6 +38,7 @@
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.SocketChannel;
 import java.nio.channels.spi.SelectorProvider;
+import java.util.Arrays;
 
 
 /**
@@ -61,6 +63,7 @@
     private boolean connected = false;
     private String serviceName;
     private Configuration cfg;
+    private Resolver resolver;
 
 
     /**
@@ -75,6 +78,7 @@
 
     public interface MessageSink {
         public int getRemaining();
+
         public void send(Message m);
     }
 
@@ -93,7 +97,11 @@
 
         public void dispatchMessage() {
             assert msgh != null;
-            receiver.process(MessageLoader.loadMessage(msgh.messageType, 
recvBuffer.array(), 0));
+            logger.debug("dispatching message with " + recvBuffer.position() + 
" bytes");
+
+            // XXX: this is extremely slow, only preliminary for testing
+            byte[] buf = Arrays.copyOf(recvBuffer.array(), 
recvBuffer.position());
+            receiver.process(MessageLoader.loadMessage(msgh.messageType, buf, 
0));
         }
 
         @Override
@@ -104,7 +112,7 @@
             } else if (ctx.reasons.contains(Scheduler.Reason.READ_READY)) {
                 try {
                     int n = chan.read(recvBuffer);
-                    logger.debug(String.format("read %s bytes", n));
+                    logger.debug(String.format("chan read %s bytes", n));
                 } catch (IOException e) {
                     throw new RuntimeException("read failed");
                 }
@@ -150,7 +158,7 @@
         public TransmitHelper(MessageTransmitter transmitter) {
             this.transmitter = transmitter;
         }
-        
+
         public void cancel() {
             if (transmitTask != null) {
                 transmitTask.cancel();
@@ -160,11 +168,13 @@
         @Override
         public void run(Context ctx) {
             try {
-                chan.write(transmitBuffer);
+                int n = chan.write(transmitBuffer);
+                logger.debug("chan has written "+n + " bytes");
             } catch (IOException e) {
                 throw new IOError(e);
             }
             if (transmitBuffer.remaining() == 0) {
+                logger.debug("sent " + transmitBuffer.position() + "bytes 
complete message");
                 if (nextTransmitter == null) {
                     currentTransmit = null;
                 } else {
@@ -191,9 +201,8 @@
         @Override
         public void send(Message m) {
             byte[] b = Construct.toBinary(m);
-            logger.debug("msg size="+b.length);
-            transmitBuffer.put(Construct.toBinary(m));
-            logger.debug("sending message");
+            logger.debug("sending msg size=" + b.length);
+            transmitBuffer.put(b);
         }
     }
 
@@ -229,7 +238,6 @@
     }
 
 
-
     /**
      * Get a connection with a service.
      *
@@ -237,8 +245,22 @@
      * @param cfg         configuration to use
      */
     public Client(String serviceName, Configuration cfg) {
+        this(serviceName, Resolver.getInstance(), cfg);
+    }
+
+
+    /**
+     * Get a connection with a service, using a specific resolver.
+     * Used mainly while the default resolver is not yet available / for 
connecting to the resolver service.
+     *
+     * @param serviceName name of the service
+     * @param resolver    the resolver to use
+     * @param cfg         configuration to use
+     */
+    public Client(String serviceName, Resolver resolver, Configuration cfg) {
         this.serviceName = serviceName;
         this.cfg = cfg;
+        this.resolver = resolver;
 
         do_connect();
     }
@@ -260,7 +282,7 @@
             chan.connect(new InetSocketAddress("::1" /*hostname*/, port));
         } catch (IOException e) {
             // todo: retry until connect possible
-               logger.warn("Failed to connect to " + hostname + " at port " + 
port);
+            logger.warn("Failed to connect to " + hostname + " at port " + 
port);
             throw new IOError(e);
         }
         ConnectHelper ct = new ConnectHelper();
@@ -301,7 +323,7 @@
         currentReceive = new ReceiveHelper(receiver, timeout);
         currentReceive.schedule();
     }
-    
+
     private class TransmitTimeoutHelper implements Task {
 
         private MessageTransmitter transmitter;
@@ -318,7 +340,7 @@
         }
     }
 
-    
+
     private void startTransmit(MessageTransmitter transmitter) {
         TransmitHelper transmitHelper = new TransmitHelper(transmitter);
         transmitBuffer.clear();
@@ -332,18 +354,17 @@
     /**
      * Ask the client to call us once the last transmission has completed.
      *
-     * @param size number of bytes to send
-     * @param timeout after how long should we give up (and call
-     *        notify with buf NULL and size 0)?
-     * @param autoRetry if the connection to the service dies, should we
-     *        automatically re-connect and retry (within the timeout period)
-     *        or should we immediately fail in this case?  Pass GNUNET_YES
-     *        if the caller does not care about temporary connection errors,
-     *        for example because the protocol is stateless
+     * @param size        number of bytes to send
+     * @param timeout     after how long should we give up (and call
+     *                    notify with buf NULL and size 0)?
+     * @param autoRetry   if the connection to the service dies, should we
+     *                    automatically re-connect and retry (within the 
timeout period)
+     *                    or should we immediately fail in this case?  Pass 
GNUNET_YES
+     *                    if the caller does not care about temporary 
connection errors,
+     *                    for example because the protocol is stateless
      * @param transmitter ...
      * @return a handle that can be used to cancel the transmit request
      */
-
     public TransmitHandle notifyTransmitReady(int size, RelativeTime timeout,
                                               boolean autoRetry, final 
MessageTransmitter transmitter) {
         if (nextTransmitter != null) {
@@ -359,8 +380,7 @@
             return new TransmitHandle() {
                 @Override
                 public void cancel() {
-                    // do nothing
-                    // xxx: should we throw an exception here?
+                    throw new InterfaceViolationException("cancel() called on 
a completed transmit request");
                 }
             };
         } else {
@@ -374,10 +394,13 @@
                 public void cancel() {
                     if (nextTransmitter == transmitter) {
                         nextTransmitter = null;
+                        if (nextTransmitTimeout != null) {
+                            nextTransmitTimeout.cancel();
+                        }
+                    } else {
+                        throw new InterfaceViolationException("cancel() called 
on a completed transmit request");
                     }
-                    if (nextTransmitTimeout != null) {
-                        nextTransmitTimeout.cancel();
-                    }
+
                 }
             };
         }

Modified: gnunet-java/src/org/gnunet/util/Configuration.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Configuration.java  2012-01-17 22:25:52 UTC 
(rev 19220)
+++ gnunet-java/src/org/gnunet/util/Configuration.java  2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -245,13 +245,6 @@
     }
 
     /**
-     * Start with defaults, the parse configuration file.
-     */
-    public boolean load(String filename) {
-        throw new UnsupportedOperationException("not implemented");
-    }
-
-    /**
      * Parse a configuration file, add all of the options in the file to the
      * configuration environment.
      *
@@ -360,6 +353,19 @@
         w.close();
     }
 
+
+    public void loadDefaults() {
+        final String[] dirs = {"/usr/share/", "/usr/local/share/"};
+        for (String d : dirs) {
+            File dir = new File(d + "gnunet/config.d/");
+            if (dir.exists() && dir.isDirectory()) {
+                for (File f : dir.listFiles()) {
+                    parse(f.getAbsolutePath());
+                }
+            }
+        }
+    }
+
     /**
      * Write only configuration entries that have been changed to configuration
      * file.

Modified: gnunet-java/src/org/gnunet/util/Program.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Program.java        2012-01-17 22:25:52 UTC 
(rev 19220)
+++ gnunet-java/src/org/gnunet/util/Program.java        2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -1,33 +1,62 @@
 package org.gnunet.util;
 
+import org.gnunet.service.Resolver;
+import org.gnunet.util.getopt.Parameter;
+import org.gnunet.util.getopt.Parser;
+
 public abstract class Program {
 
-       protected final Configuration cfg = new Configuration();
-       
-       // FIMXE: annotations for cfg parser!
-       public String cfg_file_name;
+    protected final Configuration cfg = new Configuration();
+
+
+
+    @Parameter(names = {"-c", "--config"}, description = "Path of the 
configuration file")
+    public String cfgFileName;
+
     
-       private String[] rargs;
-       
-       public Program (String[] args)
-       {
-               // rargs = GetOptParser.parse (args, this);
-               cfg.parse(args[0]); // cfg_file_name!
-       }
-       
-       public final void start ()
-       {       
-               // FIXME: parse command-line arguments 
+    protected final String[] unprocessedArgs;
+
+
+    /**
+     * A program with the desired environment for a gnunet utility.
+     * While executing the scheduler is guaranteed to run, command arguments 
are parsed,
+     * the default configuration is loaded and the DNS Resolver is initialized.
+     *
+     * @param args
+     */
+    public Program(String[] args) {
+        // rargs = GetOptParser.parse (args, this);
+        unprocessedArgs = args;
+        
+        try {
+            Parser.parse(this, unprocessedArgs);
+        } catch (Parser.ArgumentError e) {
+            System.err.println(e.getMessage());
+            System.exit(-1);
+        }
+
+        cfg.loadDefaults();
+    }
+    
+    public Program() {
+        this(new String[]{});
+    }
+
+    /**
+     * Start the Program as the initial Task of the Scheduler.
+     */
+    public final void start() {
+        Resolver.getInstance().connect(cfg);
         Scheduler.run(new Scheduler.Task() {
-               public void run (Scheduler.Task.Context c)
-               {
-                       Program.this.run (rargs);                       
-               }
-        });       
-       }
-       
-       public abstract void run (String[] rargs);
-       
-       
+            public void run(Scheduler.Task.Context c) {
+                Program.this.run();
+            }
+        });
+    }
+
+    /**
+     * Override to implement the behavior of the Program.
+     */
+    public abstract void run();
 }
  
\ No newline at end of file

Modified: gnunet-java/src/org/gnunet/util/Scheduler.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Scheduler.java      2012-01-17 22:25:52 UTC 
(rev 19220)
+++ gnunet-java/src/org/gnunet/util/Scheduler.java      2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -441,7 +441,7 @@
                 } else {
                     logger.debug("starting to select with timeout");
                     selector.select(timeout.getMilliseconds());
-                    logger.debug("receive with timeout ended");
+                    logger.debug("select with timeout ended");
                 }
             } catch (IOException e) {
                 throw new IOError(e);

Added: gnunet-java/src/org/gnunet/util/getopt/Argument.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Argument.java                        
        (rev 0)
+++ gnunet-java/src/org/gnunet/util/getopt/Argument.java        2012-01-18 
00:03:38 UTC (rev 19221)
@@ -0,0 +1,14 @@
+package org.gnunet.util.getopt;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
address@hidden(RetentionPolicy.RUNTIME)
address@hidden(ElementType.FIELD)
+public @interface Argument {
+    String name();
+
+}

Added: gnunet-java/src/org/gnunet/util/getopt/Parameter.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Parameter.java                       
        (rev 0)
+++ gnunet-java/src/org/gnunet/util/getopt/Parameter.java       2012-01-18 
00:03:38 UTC (rev 19221)
@@ -0,0 +1,14 @@
+package org.gnunet.util.getopt;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
address@hidden(RetentionPolicy.RUNTIME)
address@hidden(ElementType.FIELD)
+public @interface Parameter {
+    public String[] names();
+    public String[] description();
+}

Added: gnunet-java/src/org/gnunet/util/getopt/Parser.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Parser.java                          
(rev 0)
+++ gnunet-java/src/org/gnunet/util/getopt/Parser.java  2012-01-18 00:03:38 UTC 
(rev 19221)
@@ -0,0 +1,82 @@
+package org.gnunet.util.getopt;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+
+public class Parser {
+    
+    public static class ArgumentError extends RuntimeException {
+        public ArgumentError(String s) {
+            super(s);
+        }
+    }
+
+    // todo: unify with Construct.getMessageFields
+    private static List<Field> getFields(Class c) {
+        LinkedList<Field> fields = new 
LinkedList<Field>(Arrays.asList(c.getDeclaredFields()));
+        while ((c = c.getSuperclass()) != null) {
+            fields.addAll(0, Arrays.asList(c.getDeclaredFields()));
+        }
+        return fields;
+    }
+    
+    public static void parse(Object o, String[] args) {
+        LinkedList<String> posArgs = new LinkedList(Arrays.asList(args));
+        for (Field f : getFields(o.getClass())) {
+            if (f.isSynthetic() || Modifier.isStatic(f.getModifiers())) {
+                continue;
+            }
+            Argument a = f.getAnnotation(Argument.class);
+            if (a != null) {
+                if (posArgs.isEmpty()) {
+                    throw new ArgumentError("argument " + a.name() + " 
missing");
+                }
+                if (f.getType().equals(String.class)) {
+                    try {
+                        f.setAccessible(true);
+                        f.set(o, posArgs.pollFirst());
+                    } catch (IllegalAccessException e) {
+                        throw new RuntimeException(e);
+                    }
+                } else {
+                    throw new RuntimeException("target type not yet 
supported");
+                }
+            }
+        }
+
+        if (!posArgs.isEmpty()) {
+            throw new ArgumentError("too many arguments");
+        }
+
+
+/*
+        HashMap<String, ParserAction> longMap;
+        HashMap<String, ParserAction> shortMap;
+        Field restField;
+        for (Field f : Construct.getF) {
+                f.getAnnotation()
+        }
+
+        
+        int p = 0;
+        while (p < args.length) {
+            if (args[p].equals("--")) {
+                // handle rest args
+                // TODO ...
+            } else if (args[p].startsWith("--")) {
+
+            } else if (args[0].startsWith("-")) {
+
+            } else {
+                // positional / rest arg
+            }
+            p++;
+        }
+                    */
+    }
+
+}

Added: gnunet-java/test/org/gnunet/construct/ByteFillMessage.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/ByteFillMessage.java                  
        (rev 0)
+++ gnunet-java/test/org/gnunet/construct/ByteFillMessage.java  2012-01-18 
00:03:38 UTC (rev 19221)
@@ -0,0 +1,20 @@
+package org.gnunet.construct;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: dold
+ * Date: 1/17/12
+ * Time: 10:20 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class ByteFillMessage implements Message {
+    @Nested
+    public MessageHeader header;
+    
+    @UInt32
+    public int someValue;
+
+    @ByteFill
+    public byte[] rest;
+    
+}

Modified: gnunet-java/test/org/gnunet/construct/ConstructTest.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/ConstructTest.java    2012-01-17 
22:25:52 UTC (rev 19220)
+++ gnunet-java/test/org/gnunet/construct/ConstructTest.java    2012-01-18 
00:03:38 UTC (rev 19221)
@@ -6,8 +6,31 @@
 import java.math.BigInteger;
 
 public class ConstructTest {
+    
+    
+    @Test
+    public void test_ByteFillMessage() {
+        System.out.println("testing ByteFillMessage");
+        
+        ByteFillMessage bfm = new ByteFillMessage();
+        bfm.header = new MessageHeader();
+        bfm.someValue = 42;
+        bfm.rest = new byte[] {1,2,3,4,5,6,7,100};
+        
+        Construct.patchSizeFields(bfm);
+        
+        bfm.header.messageSize = Construct.getSize(bfm);
+        
+        System.out.println(bfm.header.messageSize);
+        
+        byte[] data = Construct.toBinary(bfm);
 
+        ByteFillMessage bfm2 = Construct.parseAs(data, 0, 
ByteFillMessage.class);
+        
+        Assert.assertArrayEquals(bfm.rest, bfm2.rest);
+    }
 
+
     @Test
     public void test_VarTestMessage() {
         VarTestMessage vtm = new VarTestMessage();
@@ -95,6 +118,8 @@
         Construct.patchSizeFields(qm);
 
         byte[] a = Construct.toBinary(qm);
+        
+        Assert.assertEquals(a.length, qm.header.messageSize);
 
         QueryMessage qm2 = Construct.parseAs(a, 0, QueryMessage.class);
 

Modified: 
gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
===================================================================
--- gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java  
2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java  
2012-01-18 00:03:38 UTC (rev 19221)
@@ -1,7 +1,7 @@
 package org.gnunet.services;
 
 
-import org.gnunet.service.NetworkSizeEstimationService;
+import org.gnunet.service.NetworkSizeEstimation;
 import org.gnunet.util.AbsoluteTime;
 import org.gnunet.util.Configuration;
 import org.gnunet.util.Scheduler;
@@ -12,9 +12,9 @@
 import java.io.IOException;
 
 public class NetworkSizeEstimationServiceTest{
-    class TestSubscriber implements 
NetworkSizeEstimationService.NSE_Subscriber {
+    class TestSubscriber implements NetworkSizeEstimation.NSE_Subscriber {
         public boolean success = false;
-        NetworkSizeEstimationService svc;
+        NetworkSizeEstimation svc;
         @Override
         public void update(AbsoluteTime timestamp, double estimate, double 
deviation) {
             System.out.println("est:" + estimate + " dev: " + deviation + " t: 
");
@@ -38,7 +38,7 @@
 
         Configuration cfg = new Configuration(tmpFile.getAbsolutePath());
 
-        NetworkSizeEstimationService svc = new 
NetworkSizeEstimationService(cfg);
+        NetworkSizeEstimation svc = new NetworkSizeEstimation(cfg);
 
         TestSubscriber subscriber = new TestSubscriber();
         subscriber.svc = svc;

Modified: gnunet-java/update-msgtypes.sh
===================================================================
--- gnunet-java/update-msgtypes.sh      2012-01-17 22:25:52 UTC (rev 19220)
+++ gnunet-java/update-msgtypes.sh      2012-01-18 00:03:38 UTC (rev 19221)
@@ -4,7 +4,7 @@
 find ./src/ ./test/ -name "*.java" > sources.txt
 
 # run annotation processor
-javac -cp "./out/production/gnunet-java/:./lib/*" -processor 
org.gnunet.construct.MessageIdAnnotationProcessor -proc:only -s src @sources.txt
+javac -cp "./bin/:./lib/*" -processor 
org.gnunet.construct.MessageIdAnnotationProcessor -proc:only -s src @sources.txt
 
 if [ $? ] ; then
     rm sources.txt




reply via email to

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