gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r19737 - in gnunet-java: . .idea .idea/inspectionProfiles .idea/libraries src src/org/gnunet src/org/gnunet/construct src/org/gnunet/nse src/org/gnunet/statistics src/org/gnunet/util src/org/gnunet/util/getopt test/org/gnunet/construct test/org/gnunet/services
Date: Thu, 9 Feb 2012 11:09:40 +0100

Author: dold
Date: 2012-02-09 11:09:40 +0100 (Thu, 09 Feb 2012)
New Revision: 19737

Added:
   gnunet-java/.idea/libraries/commons_io_2_1.xml
   gnunet-java/src/org/gnunet/nse/
   gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java
   gnunet-java/src/org/gnunet/statistics/
   gnunet-java/src/org/gnunet/statistics/StatisticsService.java
Removed:
   gnunet-java/test/org/gnunet/services/StatisticsServiceTest.java
Modified:
   gnunet-java/.idea/inspectionProfiles/Project_Default.xml
   gnunet-java/.idea/workspace.xml
   gnunet-java/ISSUES
   gnunet-java/src/log4j.properties
   gnunet-java/src/org/gnunet/construct/Construct.java
   gnunet-java/src/org/gnunet/construct/MsgMap.txt
   gnunet-java/src/org/gnunet/util/AbsoluteTime.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/RelativeTime.java
   gnunet-java/src/org/gnunet/util/Resolver.java
   gnunet-java/src/org/gnunet/util/getopt/Parser.java
   gnunet-java/test/org/gnunet/construct/ConstructTest.java
   gnunet-java/test/org/gnunet/services/ConfigUtil.java
   gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
Log:
fixed various issues with command line parsing, rewrote configuration parser, 
fixed resolver

Modified: gnunet-java/.idea/inspectionProfiles/Project_Default.xml
===================================================================
--- gnunet-java/.idea/inspectionProfiles/Project_Default.xml    2012-02-09 
10:09:09 UTC (rev 19736)
+++ gnunet-java/.idea/inspectionProfiles/Project_Default.xml    2012-02-09 
10:09:40 UTC (rev 19737)
@@ -136,7 +136,6 @@
     <inspection_tool class="HardcodedFileSeparators" enabled="true" 
level="WARNING" enabled_by_default="true">
       <option name="m_recognizeExampleMediaType" value="false" />
     </inspection_tool>
-    <inspection_tool class="HardcodedLineSeparators" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="HashCodeUsesNonFinalVariable" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="HtmlTagCanBeJavadocTag" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="IOResource" enabled="true" level="WARNING" 
enabled_by_default="true">
@@ -145,9 +144,6 @@
     </inspection_tool>
     <inspection_tool class="IfMayBeConditional" enabled="true" level="WARNING" 
enabled_by_default="true" />
     <inspection_tool class="IfStatementWithIdenticalBranches" enabled="true" 
level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="IfStatementWithTooManyBranches" enabled="true" 
level="WARNING" enabled_by_default="true">
-      <option name="m_limit" value="3" />
-    </inspection_tool>
     <inspection_tool class="IncrementDecrementUsedAsExpression" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="InnerClassMayBeStatic" enabled="true" 
level="WARNING" enabled_by_default="true" />
     <inspection_tool class="InnerClassVariableHidesOuterClassVariable" 
enabled="true" level="WARNING" enabled_by_default="true">

Added: gnunet-java/.idea/libraries/commons_io_2_1.xml
===================================================================
--- gnunet-java/.idea/libraries/commons_io_2_1.xml                              
(rev 0)
+++ gnunet-java/.idea/libraries/commons_io_2_1.xml      2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -0,0 +1,9 @@
+<component name="libraryTable">
+  <library name="commons-io-2.1">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/commons-io-2.1.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file

Modified: gnunet-java/.idea/workspace.xml
===================================================================
--- gnunet-java/.idea/workspace.xml     2012-02-09 10:09:09 UTC (rev 19736)
+++ gnunet-java/.idea/workspace.xml     2012-02-09 10:09:40 UTC (rev 19737)
@@ -2,36 +2,27 @@
 <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$/src/org/gnunet/construct/MessageUnion.java" />
-      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/Union.java" />
-      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" />
-      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/OptionAction.java" />
-      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java" />
-      <change type="DELETED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Argument.java" 
afterPath="" />
-      <change type="MOVED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/TaggedUnion.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/UnionCase.java" />
-      <change type="MOVED" 
beforePath="$PROJECT_DIR$/src/org/gnunet/service/Resolver.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resolver" 
afterPath="$PROJECT_DIR$/resolver" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/nse" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/statistics" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/.idea/libraries/commons_io_2_1.xml" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java" />
+      <change type="NEW" beforePath="" 
afterPath="$PROJECT_DIR$/src/org/gnunet/statistics/StatisticsService.java" />
+      <change type="DELETED" 
beforePath="$PROJECT_DIR$/test/org/gnunet/services/StatisticsServiceTest.java" 
afterPath="" />
       <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/libraries/lib.xml" 
afterPath="$PROJECT_DIR$/.idea/libraries/lib.xml" />
       <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/.idea/workspace.xml" 
afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/ISSUES" 
afterPath="$PROJECT_DIR$/ISSUES" />
       <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/parsers/IntegerParser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java" />
-      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimation.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimation.java" />
       <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" />
       <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Client.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Client.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/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/RelativeTime.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/RelativeTime.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$/src/org/gnunet/util/getopt/Option.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Option.java" />
+      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" />
       <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java" 
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java" />
-      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/src/org/grothoff/Runabout.java" 
afterPath="$PROJECT_DIR$/src/org/grothoff/Runabout.java" />
-      <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/ByteFillMessage.java" 
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/ByteFillMessage.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/ConfigUtil.java" 
afterPath="$PROJECT_DIR$/test/org/gnunet/services/ConfigUtil.java" />
       <change type="MODIFICATION" 
beforePath="$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java"
 
afterPath="$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java"
 />
     </list>
     <ignored path="gnunet-java.iws" />
@@ -90,97 +81,96 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <file leaf-file-name="UnionParser.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
+      <file leaf-file-name="Parser.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="68" column="0" selection-start="2086" 
selection-end="2086" vertical-scroll-proportion="0.0">
+            <state line="24" column="7" selection-start="632" 
selection-end="632" vertical-scroll-proportion="0.0">
               <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="Configuration.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/Configuration.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="106" column="68" selection-start="3991" 
selection-end="3991" vertical-scroll-proportion="0.0">
+            <state line="53" column="51" selection-start="1656" 
selection-end="1656" vertical-scroll-proportion="0.0">
               <folding>
-                <element signature="e#1363#1393#0" expanded="true" />
+                <element signature="e#1345#1372#0" expanded="true" />
+                <element signature="e#10585#10591#0" expanded="true" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="NetworkSizeEstimation.java" pinned="false" 
current="false" current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimation.java">
+      <file leaf-file-name="Client.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="69" column="61" selection-start="1769" 
selection-end="1769" vertical-scroll-proportion="0.0">
+            <state line="434" column="38" selection-start="15676" 
selection-end="15676" vertical-scroll-proportion="0.0">
               <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="true" 
current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/ISSUES">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="23" column="5" selection-start="747" 
selection-end="747" vertical-scroll-proportion="0.0">
+            <state line="209" column="0" selection-start="7413" 
selection-end="7413" vertical-scroll-proportion="1.3073497">
               <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="79" column="0" selection-start="2570" 
selection-end="2570" vertical-scroll-proportion="0.0">
-              <folding>
-                <element signature="e#3565#3603#0" expanded="true" />
-              </folding>
+            <state line="6" column="0" selection-start="194" 
selection-end="194" vertical-scroll-proportion="0.0">
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Resolver.java" pinned="false" current="true" 
current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
+      <file leaf-file-name="UnionTest.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="40" column="27" selection-start="1171" 
selection-end="1171" vertical-scroll-proportion="0.6780627">
-              <folding>
-                <element signature="e#617#673#0" expanded="true" />
-              </folding>
+            <state line="5" column="24" selection-start="80" 
selection-end="80" vertical-scroll-proportion="0.0">
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="IntegerParser.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java">
+      <file leaf-file-name="Resolver.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="42" column="13" selection-start="1133" 
selection-end="1133" vertical-scroll-proportion="0.0">
-              <folding />
+            <state line="334" column="20" selection-start="10112" 
selection-end="10112" vertical-scroll-proportion="0.0">
+              <folding>
+                <element signature="e#617#673#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ISSUES" pinned="false" current="false" 
current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/ISSUES">
+      <file leaf-file-name="StringMessage.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/StringMessage.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="180" column="30" selection-start="6264" 
selection-end="6264" 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="log4j.properties" pinned="false" current="false" 
current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/log4j.properties">
+      <file leaf-file-name="AbsoluteTime.java" pinned="false" current="false" 
current-in-tab="false">
+        <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="0" column="21" selection-start="21" 
selection-end="21" vertical-scroll-proportion="0.0">
+            <state line="137" column="0" selection-start="4148" 
selection-end="4456" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="UnionTest.java" pinned="false" current="false" 
current-in-tab="false">
-        <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.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="11" column="23" selection-start="265" 
selection-end="265" vertical-scroll-proportion="0.0">
+            <state line="110" column="15" selection-start="3615" 
selection-end="3615" vertical-scroll-proportion="0.0">
               <folding />
             </state>
           </provider>
@@ -196,22 +186,22 @@
   <component name="IdeDocumentHistory">
     <option name="changedFiles">
       <list>
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Option.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/Program.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageUnion.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/construct/MsgMap.txt" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Union.java" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java" />
-        <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java"
 />
-        <option value="$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java" 
/>
         <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" />
-        <option value="$PROJECT_DIR$/src/log4j.properties" />
-        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java" 
/>
         <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java" />
         <option 
value="$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimation.java" />
         <option 
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java" />
-        <option value="$PROJECT_DIR$/ISSUES" />
+        <option 
value="$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java"
 />
+        <option value="$PROJECT_DIR$/test/org/gnunet/services/ConfigUtil.java" 
/>
+        <option 
value="$PROJECT_DIR$/test/org/gnunet/construct/ConstructTest.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java" 
/>
+        <option value="$PROJECT_DIR$/src/log4j.properties" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/Configuration.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/Program.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" />
         <option value="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" />
+        <option value="$PROJECT_DIR$/src/org/gnunet/util/Client.java" />
+        <option value="$PROJECT_DIR$/ISSUES" />
       </list>
     </option>
   </component>
@@ -371,32 +361,84 @@
       <sortByType />
     </navigator>
     <panes>
-      <pane id="PackagesPane">
-        <subPane>
+      <pane id="Scope">
+        <subPane subId="Project Files">
           <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
+            <PATH_ELEMENT USER_OBJECT="Root">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+            <PATH_ELEMENT USER_OBJECT="gnunet-java">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
             </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 USER_OBJECT="Root">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
+            <PATH_ELEMENT USER_OBJECT="gnunet-java">
+              <option name="myItemId" value="" />
+              <option name="myItemType" value="" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="org" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
+            <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="ProjectPane">
@@ -430,10 +472,6 @@
               <option name="myItemId" value="test" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -453,7 +491,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="services" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
@@ -467,51 +505,15 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
+              <option name="myItemId" value="test" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-          </PATH>
-          <PATH>
             <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="org" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet-java" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="org" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
               <option name="myItemId" value="gnunet" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="util" />
+              <option name="myItemId" value="construct" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
@@ -528,22 +530,6 @@
               <option name="myItemId" value="src" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="org" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="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>
@@ -562,10 +548,6 @@
               <option name="myItemId" value="org" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="gnunet" />
-              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -589,7 +571,7 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="exceptions" />
+              <option name="myItemId" value="util" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
@@ -615,9 +597,13 @@
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="construct" />
+              <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>
@@ -640,14 +626,6 @@
               <option name="myItemId" value="gnunet" />
               <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="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>
@@ -665,84 +643,32 @@
           </PATH>
         </subPane>
       </pane>
-      <pane id="Scope">
-        <subPane subId="Project Files">
+      <pane id="PackagesPane">
+        <subPane>
           <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
+            <PATH_ELEMENT>
+              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet-java">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
+            <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 USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
+            <PATH_ELEMENT>
+              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="gnunet-java">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
+            <PATH_ELEMENT>
+              <option name="myItemId" value="gnunet-java" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="src">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
+            <PATH_ELEMENT>
+              <option name="myItemId" value="org" />
+              <option name="myItemType" 
value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
             </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>
@@ -757,7 +683,7 @@
     <property name="GenerateAntBuildDialog.generateSingleFile" value="true" />
     <property name="recentsLimit" value="5" />
     <property name="MemberChooser.sorted" value="false" />
-    <property name="options.lastSelected" value="editing.templates" />
+    <property name="options.lastSelected" value="preferences.editor" />
     <property name="GenerateAntBuildDialog.inclineRuntiemClasspath" 
value="true" />
     <property name="GenerateAntBuildDialog.forceTargetJdk" value="false" />
     <property name="project.structure.side.proportion" value="0.2" />
@@ -781,11 +707,13 @@
       <recent name="org.gnunet.service.NSE_Update" />
     </key>
     <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+      <recent name="org.gnunet.statistics" />
+      <recent name="org.gnunet.nse" />
       <recent name="org.gnunet.construct" />
       <recent name="" />
     </key>
   </component>
-  <component name="RunManager" selected="JUnit.UnionTest">
+  <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" />
@@ -980,8 +908,8 @@
       <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" />
-      <item index="4" class="java.lang.String" itemvalue="JUnit.UnionTest" />
+      <item index="3" class="java.lang.String" itemvalue="JUnit.UnionTest" />
+      <item index="4" class="java.lang.String" 
itemvalue="Application.Resolver" />
     </list>
     <configuration name="&lt;template&gt;" type="WebApp" default="true" 
selected="false">
       <Host>localhost</Host>
@@ -1052,24 +980,24 @@
   </component>
   <component name="ToolWindowManager">
     <frame x="-6" y="17" width="1452" height="889" extended-state="0" />
-    <editor active="true" />
+    <editor active="false" />
     <layout>
-      <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="Messages" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.24313186" sideWeight="0.49713057" order="7" side_tool="false" 
content_ui="tabs" />
+      <window_info id="Changes" active="true" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" 
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.24098124" sideWeight="0.6710875" order="1" side_tool="false" 
content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.1826923" 
sideWeight="0.49426112" 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="false" anchor="left" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24891774" 
sideWeight="0.6703297" 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="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="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.39680427" 
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.1456044" sideWeight="0.0" 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.2967033" sideWeight="0.49713057" order="7" side_tool="false" 
content_ui="tabs" />
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32967034" 
sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.23015873" 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.22655122" 
sideWeight="0.76236266" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.23763736" 
sideWeight="0.9126984" order="2" 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" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" 
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.1826923" 
sideWeight="0.49426112" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Commander" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
       <window_info id="Inspection" active="false" anchor="bottom" 
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" 
weight="0.4945055" sideWeight="0.5" order="5" side_tool="false" 
content_ui="tabs" />
@@ -1109,7 +1037,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="implemented message unions, 
parameter parsing" />
+    <option name="LAST_COMMIT_MESSAGE" value="fixed various issues with 
command line parsing, rewrote configuration parser, fixed resolver" />
     <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" />
@@ -1127,8 +1055,11 @@
     <MESSAGE value="fixes / documentation" />
     <MESSAGE value="added libs" />
     <MESSAGE value="rudimentary version of resolve tool completed" />
-    <MESSAGE value="fix" />
     <MESSAGE value="implemented message unions, parameter parsing" />
+    <MESSAGE value="fix" />
+    <MESSAGE value="message unions now used in resolver" />
+    <MESSAGE value="fixed parameter parsing bug" />
+    <MESSAGE value="fixed various issues with command line parsing, rewrote 
configuration parser, fixed resolver" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager />
@@ -1138,126 +1069,104 @@
     <option name="FILTER_TARGETS" value="false" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="51" column="8" selection-start="1569" 
selection-end="1569" vertical-scroll-proportion="0.0">
-          <folding>
-            <element signature="e#1109#1117#0" expanded="true" />
-          </folding>
-        </state>
+        <state line="55" column="0" selection-start="1528" 
selection-end="1528" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/StringMessage.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="2" column="13" selection-start="44" selection-end="44" 
vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
+        <state line="269" column="33" selection-start="8696" 
selection-end="8696" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/services/ConfigUtil.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="107" column="85" selection-start="4974" 
selection-end="4974" vertical-scroll-proportion="0.0">
-          <folding>
-            <element signature="imports" expanded="true" />
-            <element signature="e#1053#1083#0" expanded="true" />
-          </folding>
-        </state>
+        <state line="7" column="24" selection-start="121" selection-end="121" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/grothoff/Runabout.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/ConstructTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="113" column="7" selection-start="4566" 
selection-end="4566" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
+        <state line="67" column="0" selection-start="1826" 
selection-end="1826" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/MsgMap.txt">
+    <entry file="file://$PROJECT_DIR$/src/org/grothoff/Runabout.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="11" column="0" selection-start="661" selection-end="661" 
vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
+        <state line="104" column="0" selection-start="4232" 
selection-end="4232" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/ConstructTest.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="7" column="13" selection-start="123" selection-end="123" 
vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
+        <state line="222" column="10" selection-start="7093" 
selection-end="7093" vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java">
+    <entry file="file://$PROJECT_DIR$/src/log4j.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="11" column="23" selection-start="265" selection-end="265" 
vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
+        <state line="6" column="0" selection-start="194" selection-end="194" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="68" column="0" selection-start="2086" 
selection-end="2086" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
+        <state line="5" column="24" selection-start="80" selection-end="80" 
vertical-scroll-proportion="0.0" />
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/log4j.properties">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="21" selection-start="21" selection-end="21" 
vertical-scroll-proportion="0.0">
+        <state line="24" column="7" selection-start="632" selection-end="632" 
vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Configuration.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="79" column="0" selection-start="2570" 
selection-end="2570" vertical-scroll-proportion="0.0">
+        <state line="53" column="51" selection-start="1656" 
selection-end="1656" vertical-scroll-proportion="0.0">
           <folding>
-            <element signature="e#3565#3603#0" expanded="true" />
+            <element signature="e#1345#1372#0" expanded="true" />
+            <element signature="e#10585#10591#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Program.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="106" column="68" selection-start="3991" 
selection-end="3991" vertical-scroll-proportion="0.0">
-          <folding>
-            <element signature="e#1363#1393#0" expanded="true" />
-          </folding>
+        <state line="110" column="15" selection-start="3615" 
selection-end="3615" vertical-scroll-proportion="0.0">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimation.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="69" column="61" selection-start="1769" 
selection-end="1769" vertical-scroll-proportion="0.0">
+        <state line="137" column="0" selection-start="4148" 
selection-end="4456" vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="23" column="5" selection-start="747" selection-end="747" 
vertical-scroll-proportion="0.0">
-          <folding />
+        <state line="334" column="20" selection-start="10112" 
selection-end="10112" vertical-scroll-proportion="0.0">
+          <folding>
+            <element signature="e#617#673#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry 
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java">
+    <entry 
file="file://$PROJECT_DIR$/test/org/gnunet/construct/StringMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="42" column="13" selection-start="1133" 
selection-end="1133" vertical-scroll-proportion="0.0">
+        <state line="2" column="13" selection-start="44" selection-end="44" 
vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/ISSUES">
+    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="180" column="30" selection-start="6264" 
selection-end="6264" vertical-scroll-proportion="0.0">
+        <state line="434" column="38" selection-start="15676" 
selection-end="15676" vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
+    <entry file="file://$PROJECT_DIR$/ISSUES">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="40" column="27" selection-start="1171" 
selection-end="1171" vertical-scroll-proportion="0.6780627">
-          <folding>
-            <element signature="e#617#673#0" expanded="true" />
-          </folding>
+        <state line="209" column="0" selection-start="7413" 
selection-end="7413" vertical-scroll-proportion="1.3073497">
+          <folding />
         </state>
       </provider>
     </entry>

Modified: gnunet-java/ISSUES
===================================================================
--- gnunet-java/ISSUES  2012-02-09 10:09:09 UTC (rev 19736)
+++ gnunet-java/ISSUES  2012-02-09 10:09:40 UTC (rev 19737)
@@ -179,3 +179,31 @@
 
 * AF_* etc. seem to be system specific
 * inconsistent message formats
+
+================================================
+
+* Should Connection connect in the Constructor or in a seperate connect method?
+
+
+* choice of coverage tool:
+ * cobertura sucks (bad documentation, non-existing error messages (e.g. when 
not passing the coverage data file to the jvm)
+  * results are poor / just doesn't seem to work correctly
+  * integration into the project structure was frustrating
+ * EMMA: isn't maintained anymore, can't do branch coverage
+ * JaCoCo is very new / mostly undocumented / mostly an (still unstable) API
+  * uses agents 
(http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html)
+    instead of compile-time instrumentation
+ * CodeCover (http://codecover.org)
+  * looks promising
+
+
+* bash scripts (for collecting source/class files, building, testing, 
coverage, annotation-processing etc.)
+  are non-portable
+ * different compiler options (e.g. -g is needed for coverage)
+ * use some java-based scripting language? (e.g. clojure)
+
+
+* how do we collect test cases
+ * test suites
+ * custom annotation processor (collects all classes with @Test-annotated 
methods)
+ * by filename convention

Modified: gnunet-java/src/log4j.properties
===================================================================
--- gnunet-java/src/log4j.properties    2012-02-09 10:09:09 UTC (rev 19736)
+++ gnunet-java/src/log4j.properties    2012-02-09 10:09:40 UTC (rev 19737)
@@ -3,4 +3,4 @@
 log4j.appender.A1=org.apache.log4j.ConsoleAppender
 
 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%-5p %c:\n%m%n
\ No newline at end of file
+log4j.appender.A1.layout.ConversionPattern=%-5p %c:\n%m%n

Modified: gnunet-java/src/org/gnunet/construct/Construct.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Construct.java 2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/construct/Construct.java 2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -224,7 +224,8 @@
 
             path = old_path;
             c = old_c;
-            parser = new NestedParser(p, new LinkedList<Field>(frameSizePath), 
n.optional(), old_f);
+            LinkedList<Field> copy = frameSizePath == null ? null : new 
LinkedList<Field>(frameSizePath);
+            parser = new NestedParser(p, copy, n.optional(), old_f);
         }
 
         public void visit(ByteFill bf) {

Modified: gnunet-java/src/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/org/gnunet/construct/MsgMap.txt     2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/construct/MsgMap.txt     2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -1,11 +1,11 @@
 5=org.gnunet.util.Resolver$ResolverResponse
 291=org.gnunet.construct.QueryMessage
-323=org.gnunet.service.NetworkSizeEstimation$NSE_UpdateMessage
-321=org.gnunet.service.NetworkSizeEstimation$NSE_StartMessage
+323=org.gnunet.nse.NetworkSizeEstimation$NSE_UpdateMessage
+321=org.gnunet.nse.NetworkSizeEstimation$NSE_StartMessage
 3210=org.gnunet.construct.SimpleTestMessage
 987=org.gnunet.construct.SizeTestMessage
 
0|org.gnunet.construct.UnionTest.TestUnion=org.gnunet.construct.UnionTest$TestUnionCase0
 
1|org.gnunet.construct.UnionTest.TestUnion=org.gnunet.construct.UnionTest$TestUnionCase1
-3|org.gnunet.util.Resolver.AddressUnion=org.gnunet.util.Resolver$AddressString
-45|org.gnunet.util.Resolver.AddressUnion=org.gnunet.util.Resolver$AddressBinary
-# generated 2012/01/25 18:47:40
+0|org.gnunet.util.Resolver.AddressUnion=org.gnunet.util.Resolver$TextualAddress
+1|org.gnunet.util.Resolver.AddressUnion=org.gnunet.util.Resolver$NumericAddress
+# generated 2012/01/27 18:56:31

Copied: gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java (from rev 
19420, gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java)
===================================================================
--- gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java                   
        (rev 0)
+++ gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java   2012-02-09 
10:09:40 UTC (rev 19737)
@@ -0,0 +1,195 @@
+package org.gnunet.nse;
+
+
+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;
+
+            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();
+       
+       
+    }
+    
+}

Copied: gnunet-java/src/org/gnunet/statistics/StatisticsService.java (from rev 
19281, gnunet-java/src/org/gnunet/service/StatisticsService.java)
===================================================================
--- gnunet-java/src/org/gnunet/statistics/StatisticsService.java                
                (rev 0)
+++ gnunet-java/src/org/gnunet/statistics/StatisticsService.java        
2012-02-09 10:09:40 UTC (rev 19737)
@@ -0,0 +1,17 @@
+/*
+ * The stuff below does nothing whatsoever, first milestone of
+ * this project is to implement the StatisticsService api
+ * 
+ */
+
+package org.gnunet.statistics;
+
+import org.gnunet.util.Client;
+import org.gnunet.util.Configuration;
+
+public class StatisticsService {
+
+    public StatisticsService(Configuration cfg) {
+        Client client = new Client("statistics", cfg);
+    }
+}

Modified: gnunet-java/src/org/gnunet/util/AbsoluteTime.java
===================================================================
--- gnunet-java/src/org/gnunet/util/AbsoluteTime.java   2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/util/AbsoluteTime.java   2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -138,7 +138,7 @@
     /**
      * Gets the duration of an operation as the difference of the current time
      * and address@hidden this}.
-     * 
+     *
      * @return start_time(=this) - now
      */
     public RelativeTime getDuration() {

Modified: gnunet-java/src/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Client.java 2012-02-09 10:09:09 UTC (rev 
19736)
+++ gnunet-java/src/org/gnunet/util/Client.java 2012-02-09 10:09:40 UTC (rev 
19737)
@@ -202,10 +202,12 @@
     private class ConnectHelper implements Task, Resolver.AddressCallback {
         private boolean resolveActive = false;
         private LinkedList<InetAddress> addrList = new 
LinkedList<InetAddress>();
+        private int currentAddr = 0;
         private String hostname;
         private int port;
         private RelativeTime backoff = RelativeTime.MILLISECOND;
 
+
         public ConnectHelper(String hostname, int port) {
             this.hostname = hostname;
             this.port = port;
@@ -215,9 +217,9 @@
         public void run(Context ctx) {
             connectStep();
         }
-        
+
         private void increaseBackoff() {
-            backoff = RelativeTime.max(backoff.multiply(2), 
RelativeTime.SECOND);
+            backoff = RelativeTime.min(backoff.multiply(2), 
RelativeTime.SECOND.multiply(5));
         }
         private void resetBackoff() {
             backoff = RelativeTime.MILLISECOND;
@@ -238,9 +240,11 @@
                     throw new IOError(e);
                 }
             }
+
             if (chan.isConnected()) {
                 return;
             }
+
             try {
                 if (chan.isConnectionPending()) {
                     if (chan.finishConnect()) {
@@ -257,18 +261,18 @@
                         this.increaseBackoff();
                     }
                 } else {
-                    InetAddress addr = addrList.poll();
+                    InetAddress addr = addrList.pollFirst();
                     if (addr == null && !resolveActive) {
                         startResolve();
                     } else {
                         logger.debug("connecting to " + addr + " on " + port);
                         chan.connect(new InetSocketAddress(addr, port));
-                        resetBackoff();
                         Scheduler.add(this, backoff);
                     }
                 }
             } catch (IOException e) {
-                logger.debug("got exception while connecting, retrying", e);
+                logger.debug("got exception while connecting", e);
+                logger.debug("retrying in {}ms", backoff.getMilliseconds());
                 chan = null;
                 Scheduler.add(this, backoff);
                 increaseBackoff();
@@ -287,6 +291,13 @@
             Scheduler.add(this, backoff);
         }
 
+        @Override
+        public void onTimeout() {
+            increaseBackoff();
+            this.resolveActive = false;
+            Scheduler.add(this, backoff);
+        }
+
         public void startResolve() {
             this.resolveActive = true;
             Resolver.getInstance().resolveHostname(hostname, 
RelativeTime.FOREVER, this);

Modified: gnunet-java/src/org/gnunet/util/Configuration.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Configuration.java  2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/util/Configuration.java  2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -20,11 +20,18 @@
 
 package org.gnunet.util;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.LineIterator;
+import org.gnunet.exceptions.ConfigurationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.*;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.util.*;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
@@ -35,23 +42,22 @@
 public class Configuration {
     @SuppressWarnings("serial")
     public static class ParsingError extends RuntimeException {
-        ParsingError(final String msg) {
+        ParsingError(String msg) {
             super(msg);
         }
 
-        ParsingError(final String msg, final Throwable t) {
+        ParsingError(String msg, final Throwable t) {
             super(msg, t);
         }
     }
 
     private static final Logger logger = LoggerFactory
             .getLogger(Configuration.class);
+
     private static Pattern section = Pattern.compile("\\[(.*?)\\]");
-    private static Pattern tag = Pattern.compile("(\\S+?) =( ?.*?)");
-    private static Pattern comment = Pattern.compile("\\s*[%#].*\n?");
+    private static Pattern tag = Pattern.compile("(\\S+?)\\s*=(.*?)");
+    private static Pattern whitspace = Pattern.compile("\\s*");
 
-    private static Pattern delim = Pattern.compile("\\s*\\n\\s*");
-
     private final Map<String, Map<String, String>> sections = new 
LinkedHashMap<String, Map<String, String>>();
 
     /**
@@ -59,15 +65,7 @@
      */
     public Configuration() {
     }
-    
-    public Configuration(String s) {
-        parse(s);
-    }
 
-    public boolean appendValueFilename(final String section,
-                                       final String option, final String 
value) {
-        throw new UnsupportedOperationException();
-    }
 
     /**
      * Expand an expression of the form "$FOO/BAR" to "DIRECTORY/BAR" where
@@ -78,7 +76,7 @@
      * @return $-expanded string
      */
     public String expandDollar(String orig) {
-        final Map<String, String> env = System.getenv();
+        Map<String, String> env = System.getenv();
         for (final Map.Entry<String, String> e : env.entrySet()) {
             orig = orig.replace("$" + e.getKey(), e.getValue());
         }
@@ -98,8 +96,8 @@
      * @param s the section of interest
      * @return an unmodifiable view of the section.
      */
-    public Map<String, String> getSection(final String s) {
-        final Map<String, String> m = sections.get(s);
+    public Map<String, String> getSection(String s) {
+        Map<String, String> m = sections.get(s);
         if (m == null) {
             throw new ParsingError("configuration section not found");
         }
@@ -124,15 +122,15 @@
      * @return matching value from choices
      * @throws ParsingError
      */
-    public String getValueChoice(final String section, final String option,
-                                 final Iterable<String> choices) {
-        final String value = getValueString(section, option);
+    public String getValueChoice(String section, String option,
+                                Iterable<String> choices) {
+        String value = getValueString(section, option);
         if (value == null) {
             throw new ParsingError(String.format(
                     "Failure in configuration section %s: value not found",
                     section));
         }
-        for (final String c : choices) {
+        for (String c : choices) {
             if (c.equals(value)) {
                 return value;
             }
@@ -141,15 +139,7 @@
                 "Failure in configuration section %s: invalid value", 
section));
     }
 
-    public String getValueFileName(final String section, final String option) {
-        throw new UnsupportedOperationException();
-    }
 
-    public List<String> getValueFilenames(final String section,
-                                          final String option) {
-        throw new UnsupportedOperationException();
-    }
-
     /**
      * Get a configuration value that should be a number
      *
@@ -157,15 +147,15 @@
      * @param option
      * @return null if value not in configuration, the option's value otherwise
      */
-    public long getValueNumer(final String section, final String option) {
-        final String num_str = getValueString(section, option);
+    public long getValueNumer(String section, String option) {
+        String num_str = getValueString(section, option);
         if (num_str == null) {
             throw new ParsingError("Failure in configuration section "
                     + section + " option " + option + ": value empty");
         }
         try {
             return Long.parseLong(num_str);
-        } catch (final NumberFormatException e) {
+        } catch (NumberFormatException e) {
             throw new ParsingError("Failure in configuration section "
                     + section + " option " + option + ": " + e.getMessage(), 
e);
         }
@@ -179,34 +169,18 @@
      * @throws ParsingError
      * @return
      */
-    public String getValueString(final String section, final String option) {
-        if (!sections.containsKey(section)) {
-            throw new ParsingError(String.format(
-                    "Failure in configuration section %s: option %s not found",
-                    section, option));
-        }
+    public String getValueString(String section, String option) {
+        ensureSectionExists(section);
         return sections.get(section).get(option);
     }
-
     /**
-     * XXX: how is the time stored?
-     *
-     * @param section
-     * @param option
-     * @return null if option not found
-     */
-    public RelativeTime getValueTime(final String section, final String 
option) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
      * Gets a configuration value that should be in a set of {"YES","NO"}.
      *
      * @param section section of interest
      * @param option  option of interest
      * @return true, false, null
      */
-    public boolean getValueYesNo(final String section, final String option) {
+    public boolean getValueYesNo(String section, String option) {
         final String v = getValueChoice(section, option,
                 Arrays.asList("YES", "NO"));
         if (v == null) {
@@ -231,20 +205,12 @@
      * @param option  option of interest
      * @return true if so, false of not
      */
-    public boolean haveValue(final String section, final String option) {
+    public boolean haveValue(String section, String option) {
         return sections.containsKey(section)
                 && sections.get(section).containsKey(option);
     }
 
     /**
-     * Test if there are configuration options that were changed since the last
-     * save.
-     */
-    public boolean isDirty() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
      * Parse a configuration file, add all of the options in the file to the
      * configuration environment.
      *
@@ -252,56 +218,66 @@
      * @throws ParsingError
      */
     public void parse(String filename) {
-        Scanner sc;
+        filename = replaceHome(filename);
+        
+        String current_section = "";
+
+        LineIterator it;
         try {
-            sc = new Scanner(new File(filename)).useDelimiter(delim);
-        } catch (final FileNotFoundException e) {
-            throw new ParsingError("Configuration file \"" + filename
-                    + "\" not found");
+            it = FileUtils.lineIterator(new File(filename));
+        } catch (IOException e) {
+            throw new ParsingError("Cannot read configuration file '" + 
filename+ "'");
         }
 
-        String current_section = "";
+        int lineNumer = 1;
 
-        while (true) {
-            if (sc.hasNext(comment)) {
-                sc.next(comment);
-            } else if (sc.hasNext(section)) {
-                sc.next(section);
-                current_section = sc.match().group(1).trim();
-            } else if (sc.hasNext(tag)) {
-                sc.next(tag);
-                final String option = sc.match().group(1).trim();
-                String value = sc.match().group(2).trim();
+        try {
+            while (it.hasNext()) {
+                String line = it.nextLine();
+                // strip comment
+                line = line.split("#")[0];
+                Matcher m;
 
-                if (value.length() != 0 && value.charAt(0) == '"') {
-                    final int pos = value.indexOf('"', 1);
-                    if (pos == -1) {
-                        logger.warn("incorrecly quoted config value");
-                        continue;
+                if ((m=tag.matcher(line)).matches()) {
+                    String option = m.group(1).trim();
+                    String value = m.group(2).trim();
+
+                    if (value.length() != 0 && value.charAt(0) == '"') {
+                        int pos = value.indexOf('"', 1);
+                        if (pos == -1) {
+                            logger.warn("incorrecly quoted config value");
+                            continue;
+                        }
+                        value = value.substring(1, pos);
                     }
-                    value = value.substring(1, pos);
+                    setValueString(current_section, option, value);
+                } else if ((m=section.matcher(line)).matches()) {
+                    current_section = m.group(1).trim();
+                } else if (whitspace.matcher(line).matches()) {
+                    // whitespace is ok
+                } else {
+                    logger.warn(String.format("skipped unreadable line %s in 
configuration file '%s': '%s'", lineNumer, filename, line));
                 }
-                setValueString(current_section, option, value);
-            } else if (!sc.hasNext()) {
-                break;
-            } else {
-                logger.warn("skipped unreadable configuration line");
-                sc.next();
+
+                lineNumer++;
             }
+        } finally {
+            it.close();
         }
     }
 
+    private String replaceHome(String filename) {
+        String home = System.getenv("HOME");
+        return home != null ? filename.replace("~", home) : filename;
+    }
+
     /**
      * Remove the given section and all options in it.
      */
-    public void removeSection(final String section) {
+    public void removeSection(String section) {
         sections.remove(section);
     }
 
-    public boolean removeValueFilename(final String section,
-                                       final String option, final String 
value) {
-        throw new UnsupportedOperationException();
-    }
 
     /**
      * Set an option to a string value in a section.
@@ -310,8 +286,8 @@
      * @param option
      * @param value
      */
-    public void setValueNumber(final String section, final String option,
-                               final long value) {
+    public void setValueNumber(String section, String option,
+                               long value) {
         setValueString(section, option, "" + value);
     }
 
@@ -322,8 +298,8 @@
      * @param option
      * @param value
      */
-    public void setValueString(final String section, final String option,
-                               final String value) {
+    public void setValueString(String section, String option,
+                               String value) {
         Map<String, String> table = sections.get(section);
         if (table == null) {
             table = new LinkedHashMap<String, String>();
@@ -338,14 +314,14 @@
      * @param filename where to write the configuration
      * @throws IOException
      */
-    public void write(final String filename) throws IOException {
-        final BufferedWriter w = new BufferedWriter(new FileWriter(new File(
+    public void write(String filename) throws IOException {
+        BufferedWriter w = new BufferedWriter(new FileWriter(new File(
                 filename)));
-        for (final Map.Entry<String, Map<String, String>> s : sections
+        for (Map.Entry<String, Map<String, String>> s : sections
                 .entrySet()) {
             w.write(s.getKey());
             w.newLine();
-            for (final Map.Entry<String, String> e : s.getValue().entrySet()) {
+            for (Map.Entry<String, String> e : s.getValue().entrySet()) {
                 w.write(e.getKey() + " = " + e.getValue());
                 w.newLine();
             }
@@ -355,9 +331,16 @@
 
 
     public void loadDefaults() {
-        final String[] dirs = {"/usr/share/", "/usr/local/share/"};
-        for (String d : dirs) {
-            File dir = new File(d + "gnunet/config.d/");
+        ArrayList<File> dirs = new ArrayList<File>();
+        dirs.add(new File("/usr/share/gnunet/config.d/"));
+        dirs.add(new File("/usr/local/share/gnunet/config.d/"));
+        String pfx = System.getenv("GNUNET_PREFIX");
+        if (pfx != null) {
+            dirs.add(new File(pfx, "share/config.d/"));
+            dirs.add(new File(pfx, "config.d/"));
+            dirs.add(new File(pfx, "gnunet/config.d/"));
+        }
+        for (File dir : dirs) {
             if (dir.exists() && dir.isDirectory()) {
                 for (File f : dir.listFiles()) {
                     parse(f.getAbsolutePath());
@@ -365,16 +348,10 @@
             }
         }
     }
-
-    /**
-     * Write only configuration entries that have been changed to configuration
-     * file.
-     *
-     * @param cfgNew   new configuration
-     * @param filename where to write the configuration diff between default 
and new
-     */
-    public void writeDiffs(final Configuration cfgNew, final String filename) {
-        throw new UnsupportedOperationException();
+    
+    private void ensureSectionExists(String section) {
+        if (!sections.containsKey(section)) {
+            throw new ConfigurationException("Required section '"+section+"' 
not in configuration");
+        }
     }
-
 }

Modified: gnunet-java/src/org/gnunet/util/Program.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Program.java        2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/util/Program.java        2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -1,11 +1,14 @@
 package org.gnunet.util;
 
+import org.apache.log4j.*;
 import org.gnunet.util.getopt.Option;
 import org.gnunet.util.getopt.OptionAction;
 import org.gnunet.util.getopt.Parser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+
 public abstract class Program {
     private static final Logger logger = LoggerFactory
             .getLogger(Resolver.class);
@@ -18,19 +21,32 @@
             description = "Path of the configuration file",
             argumentName = "FILENAME",
             action = OptionAction.STORE_STRING)
-    public String cfgFileName;
+    public String cfgFileName = null;
 
     @Option(shortname = "h", longname = "help",
             description = "print this help message",
             action = OptionAction.SET)
-    public boolean printHelp;
+    public boolean printHelp = false;
 
     @Option(shortname = "v", longname = "version",
-            description = "display version information",
+            description = "print version",
             action = OptionAction.SET)
-    public boolean showVersion;
+    public boolean showVersion = false;
 
 
+    @Option(shortname = "L", longname = "log",
+            description = "configure logging to use LOGLEVEL",
+            argumentName = "LOGLEVEL",
+            action = OptionAction.STORE_STRING)
+    public String logLevel = null;
+
+    @Option(shortname = "l", longname = "logfile",
+            description = "configure logging to write logs to LOGFILE",
+            argumentName = "LOGFILE",
+            action = OptionAction.STORE_STRING)
+    public String logFile = null;
+
+
     protected final String[] unprocessedArgs;
 
     private Parser optParser;
@@ -47,6 +63,39 @@
         optParser = new Parser(this);
         unprocessedArgs = optParser.parse(args);
 
+        org.apache.log4j.Logger rootLogger = LogManager.getRootLogger();
+
+        if (logLevel == null) {
+            // do nothing
+        } else if (logLevel.equalsIgnoreCase("debug")) {
+            rootLogger.setLevel(Level.DEBUG);
+        } else if (logLevel.equalsIgnoreCase("info")) {
+            rootLogger.setLevel(Level.INFO);
+        } else if (logLevel.equalsIgnoreCase("warn") || 
logLevel.equalsIgnoreCase("warning")) {
+            rootLogger.setLevel(Level.WARN);
+        } else if (logLevel.equalsIgnoreCase("error")) {
+            rootLogger.setLevel(Level.ERROR);
+        } else if (logLevel.equalsIgnoreCase("off")) {
+            rootLogger.setLevel(Level.OFF);
+        } else {
+            rootLogger.setLevel(Level.INFO);
+            logger.info("unknown log level '{}'; defaulting to INFO", 
logLevel);
+        }
+
+        if (logFile != null) {
+            Layout layout = new PatternLayout("%-5p %c:\n%m%n");
+            Appender appender = null;
+            try {
+                appender = new FileAppender(layout, logFile);
+            } catch (IOException e) {
+                logger.warn("could not open log file {}", logFile);
+            }
+            if (appender!= null) {
+                rootLogger.removeAllAppenders();
+                rootLogger.addAppender(appender);
+            }
+        }
+
         cfg.loadDefaults();
 
         if (cfgFileName != null) {
@@ -54,13 +103,14 @@
             cfg.parse(cfgFileName);
         }
 
+
         Resolver.getInstance().setConfiguration(cfg);
     }
 
     protected String getHelpDescription() {
         return "gnunet-java tool";
     }
-    
+
     protected String getVersionDescription() {
         return "development version of gnunet-java";
     }

Modified: gnunet-java/src/org/gnunet/util/RelativeTime.java
===================================================================
--- gnunet-java/src/org/gnunet/util/RelativeTime.java   2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/util/RelativeTime.java   2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -109,7 +109,7 @@
      * 
      * @return min(this, other)
      */
-    public RelativeTime min(RelativeTime t1, RelativeTime t2) {
+    public static RelativeTime min(RelativeTime t1, RelativeTime t2) {
         return t1.rel_value <= t2.rel_value ? t1 : t2;
     }
 

Modified: gnunet-java/src/org/gnunet/util/Resolver.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Resolver.java       2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/util/Resolver.java       2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -38,12 +38,13 @@
         @UInt32
         public int domain;
 
-        @Union(tag="direction", optional = true)
+        @Union(tag = "direction", optional = true)
         public AddressUnion addr;
     }
-    
-    public static interface AddressUnion extends MessageUnion {}
 
+    public static interface AddressUnion extends MessageUnion {
+    }
+
     @UnionCase(GetMessage.DIRECTION_GET_IP)
     public static class TextualAddress implements AddressUnion {
         @ZeroTerminatedString
@@ -57,9 +58,7 @@
         public byte[] addr;
     }
 
-    
 
-
     @MessageId(ResolverResponse.MSG_ID)
     public static class ResolverResponse implements Message {
         final static int MSG_ID = 5;
@@ -71,41 +70,13 @@
 
 
     public static class ResponseBody implements Message {
-        @UInt8
-        public int domain;
-        @UInt8
-        public byte pad1;
-        @UInt8
-        public byte pad2;
-        @UInt8
-        public byte pad3;
         @ByteFill
         public byte[] addr;
-
-        // xxx: direction does not seem to be transmitted
-        // @Nested(union_on="direction")
-        // AddressUnion address;
     }
 
 
-    /*
-    public interface AddressUnion extends MessageUnion {
-    }
 
-    @UnionCase(value = 3)
-    public static class AddressString implements AddressUnion {
-        @ZeroTerminatedString
-        public String addr;
-    }
 
-    @UnionCase(value = 45)
-    public static class AddressBinary implements AddressUnion {
-        @ByteFill
-        public byte[] addr;
-    }
-    */
-
-
     /* @Nullable */
     public InetAddress getInet4AddressFromString(String ip) {
         String[] components = ip.split(".");
@@ -183,6 +154,8 @@
         public void onAddress(InetAddress addr);
 
         public void onFinished();
+
+        void onTimeout();
     }
 
 
@@ -219,8 +192,8 @@
             client = new Client("resolver", cfg);
         }
     }
-    
-    
+
+
     public void resolveReverse(InetAddress inAddr, RelativeTime timeout, 
HostnameCallback cb) {
 
         lazyConnect();
@@ -244,14 +217,12 @@
         gmsg.addr = nAddr;
 
         gmsg.header.messageSize = Construct.getSize(gmsg);
-        
-        
-        
+
+
         System.out.println("msgsize: " + gmsg.header.messageSize);
         System.out.println("really: " + (Construct.toBinary(gmsg).length));
 
 
-
         client.notifyTransmitReady(gmsg.header.messageSize, timeout, true, new 
MessageTransmitter() {
             @Override
             public void transmit(Client.MessageSink sink) {
@@ -263,7 +234,6 @@
                     public void process(Message msg) {
                         System.out.println("receiving");
                         ResolverResponse resp = (ResolverResponse) msg;
-                        System.out.println(resp.responseBody.domain);
                     }
 
                     @Override
@@ -280,17 +250,46 @@
         });
 
     }
-    
 
+    private InetAddress getInet4Localhost() {
+        try {
+            return InetAddress.getByAddress(new byte[]{127, 0, 0, 1});
+        } catch (UnknownHostException e) {
+            throw new RuntimeException();
+        }
+    }
+
+    private InetAddress getInet6Localhost() {
+        try {
+            return InetAddress.getByAddress(new byte[16]);
+        } catch (UnknownHostException e) {
+            throw new RuntimeException();
+        }
+    }
+
+
     public void resolveHostname(String hostname, RelativeTime timeout, final 
AddressCallback cb) {
         // try if hostname is numeric IP or loopback
-        InetAddress inetAddr = resolveHostnameLocal(hostname);
+        if (hostname.equalsIgnoreCase("localhost")) {
+            cb.onAddress(getInet6Localhost());
+            cb.onAddress(getInet4Localhost());
+            cb.onFinished();
+            return;
+        }
+        if (hostname.equalsIgnoreCase("ip6-localhost")) {
+            cb.onAddress(getInet6Localhost());
+            cb.onFinished();
+            return;
+        }
+
+        InetAddress inetAddr = getInetAddressFromString(hostname);
         if (inetAddr != null) {
             cb.onAddress(inetAddr);
             cb.onFinished();
             return;
         }
 
+
         lazyConnect();
 
         final GetMessage req = new GetMessage();
@@ -306,12 +305,11 @@
 
         req.header.messageSize = Construct.getSize(req);
 
-        logger.debug("" + req.header.messageSize);
+        final AbsoluteTime deadline = timeout.toAbsolute();
 
-
         client.notifyTransmitReady(
                 Construct.getSize(req),
-                RelativeTime.FOREVER, true,
+                deadline.getRemaining(), true,
                 new MessageTransmitter() {
                     @Override
                     public void transmit(Client.MessageSink sink) {
@@ -324,15 +322,11 @@
                                 if (gmsg.responseBody != null) {
                                     try {
                                         InetAddress in_addr;
-                                        if (gmsg.responseBody.domain == 
GetMessage.AF_INET) {
-                                            in_addr = InetAddress.getByAddress(
-                                                    
Arrays.copyOfRange(gmsg.responseBody.addr, 0, 4));
-
-                                        } else if (gmsg.responseBody.domain == 
GetMessage.AF_INET6) {
-                                            in_addr = 
Inet6Address.getByAddress(
-                                                    
Arrays.copyOfRange(gmsg.responseBody.addr, 4, 20));
+                                        int len = 
gmsg.responseBody.addr.length;
+                                        if (len == 4 || len == 16) {
+                                            in_addr = 
InetAddress.getByAddress(gmsg.responseBody.addr);
                                         } else {
-                                            throw new 
MessageFormatException("unknown AF_* domain");
+                                            throw new 
MessageFormatException("malformed address message");
                                         }
 
                                         cb.onAddress(in_addr);
@@ -347,15 +341,17 @@
 
                             @Override
                             public void handleTimeout() {
-                                throw new RuntimeException("unreachable");
+                                logger.debug("timeout in recv");
+                                cb.onTimeout();
                             }
-                        }, RelativeTime.FOREVER);
+                        }, deadline.getRemaining());
 
                     }
 
                     @Override
                     public void handleTimeout() {
-                        throw new RuntimeException("unreachable");
+                        logger.debug("timeout in notifyTransmitReady");
+                        cb.onTimeout();
                     }
                 });
 
@@ -381,33 +377,26 @@
             @Override
             public void run() {
                 if (isReverse) {
-                    try {
-                        
Resolver.getInstance().resolveReverse(Inet4Address.getByName("173.194.69.105"), 
RelativeTime.FOREVER,
-                                new HostnameCallback() {
-                                    @Override
-                                    public void onHostname(String hostname) {
-                                    }
-
-                                    @Override
-                                    public void onFinished() {
-                                    }
-                                });
-                    } catch (UnknownHostException e) {
-                        throw new RuntimeException("bla");
-                    }
+                    System.out.println("reverse lookup not supported");
                 } else {
                     resolve();
                 }
-
             }
 
             public void resolve() {
+                for (String s : unprocessedArgs) {
+                    System.out.println(s);
+                }
+
+                final RelativeTime timeout = RelativeTime.SECOND;
+
                 if (unprocessedArgs.length == 0) {
                     System.out.println("no hostnames given");
                 } else {
                     System.out.println("resolving hostname '" + 
unprocessedArgs[0] + "'");
-                    Resolver.getInstance().resolveHostname(unprocessedArgs[0], 
RelativeTime.FOREVER, new AddressCallback() {
+                    Resolver.getInstance().resolveHostname(unprocessedArgs[0], 
timeout, new AddressCallback() {
                         int next = 1;
+
                         @Override
                         public void onAddress(InetAddress addr) {
                             System.out.println(addr);
@@ -418,10 +407,15 @@
                             System.out.println("done.");
                             if (unprocessedArgs.length > next) {
                                 System.out.println("resolving hostname '" + 
unprocessedArgs[next] + "'");
-                                
Resolver.getInstance().resolveHostname(unprocessedArgs[next], 
RelativeTime.FOREVER, this);
+                                
Resolver.getInstance().resolveHostname(unprocessedArgs[next], timeout, this);
                                 next++;
                             }
                         }
+
+                        @Override
+                        public void onTimeout() {
+                            System.out.println("timed out");
+                        }
                     });
                 }
 

Modified: gnunet-java/src/org/gnunet/util/getopt/Parser.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Parser.java  2012-02-09 10:09:09 UTC 
(rev 19736)
+++ gnunet-java/src/org/gnunet/util/getopt/Parser.java  2012-02-09 10:09:40 UTC 
(rev 19737)
@@ -6,14 +6,25 @@
 import java.lang.reflect.Modifier;
 import java.util.*;
 
+/**
+ * Parser for command line options, in the format indicated by the
+ * annotated members of the target object's class.
+ */
+public class Parser {
 
-public class Parser {
+    /**
+     * An ArgumentError is thrown if the command line parameters do not match 
their
+     * specification in the target object's class.
+     */
     public static class ArgumentError extends RuntimeException {
         public ArgumentError(String s) {
             super(s);
         }
     }
 
+    /**
+     * An option together with its target field.
+     */
     static class OptionField {
         Option opt;
         Field f;
@@ -40,6 +51,7 @@
 
     private Object targetObject;
 
+
     public Parser(Object targetObject) {
         this.targetObject = targetObject;
         // gather option annotations
@@ -87,6 +99,8 @@
         return helpString.toString();
     }
 
+
+
     /**
      * Parses the given arguments, and sets the target object's fields
      * according to its annotations.
@@ -96,46 +110,57 @@
      */
     public String[] parse(String[] args) {
         // unprocessed positional args
-        Deque<String> posArgs = new LinkedList<String>();
+        Deque<String> positionalArgs = new LinkedList<String>();
 
+        // current part of args that is being looked at
         int p = 0;
 
         while (p < args.length) {
             // arguments after single "--" are all positional
             if (args[p].equals("--")) {
-                posArgs.addAll(Arrays.asList(args).subList(p + 1, 
args.length));
+                positionalArgs.addAll(Arrays.asList(args).subList(p + 1, 
args.length));
                 break;
             }
-
+            // long args
             if (args[p].startsWith("--")) {
+                // remove leading slashes
                 String longOptionString = args[p].substring(2);
+                // maybe it is in the format --opt=val
                 String[] components = longOptionString.split("=", 2);
                 OptionField of = longOpt.get(components[0]);
                 if (of == null) {
-                    throw new ArgumentError(String.format("unknown long 
option: %s", args[p]));
+                    throw new ArgumentError(String.format("unknown long 
option: '%s'", components[0]));
                 }
+                Option option = of.opt;
+                Field field = of.f;
                 try {
+                    Class targetFieldType = of.f.getType();
                     switch (of.opt.action()) {
                         case SET:
-                            if (!of.f.getType().equals(Boolean.TYPE)) {
+                            if (!targetFieldType.equals(Boolean.TYPE)) {
                                 throw new InterfaceViolationException("action 
SET only valid on boolean member");
                             }
                             of.f.set(targetObject, true);
                             break;
                         case RESET:
-                            if (!of.f.getType().equals(Boolean.TYPE)) {
+                            if (!targetFieldType.equals(Boolean.TYPE)) {
                                 throw new InterfaceViolationException("action 
RESET only valid on boolean member");
                             }
                             of.f.set(targetObject, true);
                             break;
                         case STORE_STRING:
-                            if (!of.f.getType().equals(String.class)) {
+                            if (!targetFieldType.equals(String.class)) {
                                 throw new InterfaceViolationException("action 
STORE_STRING only valid on boolean member");
                             }
                             if (components.length == 1) {
-                                throw new ArgumentError("missing string 
argument to option " + of.opt.longname());
+                                p++;
+                                if (p >= args.length) {
+                                    throw new ArgumentError("missing string 
argument to option " + of.opt.longname());
+                                }
+                                of.f.set(targetObject, args[p]);
+                            } else {
+                                of.f.set(targetObject, components[1]);
                             }
-                            of.f.set(targetObject, components[1]);
                             break;
                         case STORE_INT:
                             throw new UnsupportedOperationException("not yet 
implemented");
@@ -147,8 +172,10 @@
                             String.format("cannot acces member %s with @Option 
annotation", of.f.getName()));
                 }
             } else if (args[p].length() > 1 && args[p].startsWith("-")) {
+                SHORTOPT:
                 for (int i = 1; i < args[p].length(); ++i) {
-                    OptionField of = shortOpt.get(args[p].substring(i, i+1));
+                    String optShortName =args[p].substring(i, i + 1);
+                    OptionField of = shortOpt.get(optShortName);
                     if (of == null) {
                         throw new ArgumentError(String.format("unknown short 
option: -%s", args[p].charAt(i)));
                     }
@@ -170,15 +197,19 @@
                                 if (!of.f.getType().equals(String.class)) {
                                     throw new 
InterfaceViolationException("action STORE_STRING only valid on boolean member");
                                 }
-                                if (i != 1 || args[p].length() != 2) {
-                                    throw new ArgumentError("short options 
with argument may not be combined");
+                                if (i != 1) {
+                                    throw new ArgumentError("short options 
with argument must be seperate");
                                 }
-                                p++;
-                                if (args.length <= p) {
-                                    throw new ArgumentError("missing string 
argument to option -" + of.opt.shortname());
+                                if (args[p].length() == 2) { // -X
+                                    p++;
+                                    if (p >= args.length) {
+                                        throw new 
ArgumentError(String.format("no argument for short option '%s'", optShortName));
+                                    }
+                                    of.f.set(targetObject, args[p]);
+                                } else {
+                                    of.f.set(targetObject, 
args[p].substring(2)); // -Pxxx...
                                 }
-                                of.f.set(targetObject, args[p]);
-                                break;
+                                break SHORTOPT;
                             case STORE_INT:
                                 throw new UnsupportedOperationException("not 
yet implemented");
                             case INCREMENT:
@@ -190,13 +221,13 @@
                     }
                 }
             } else {
-                posArgs.add(args[p]);
+                positionalArgs.add(args[p]);
             }
 
             p++;
         }
 
-        return posArgs.toArray(new String[0]);
+        return positionalArgs.toArray(new String[positionalArgs.size()]);
     }
 
 }

Modified: gnunet-java/test/org/gnunet/construct/ConstructTest.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/ConstructTest.java    2012-02-09 
10:09:09 UTC (rev 19736)
+++ gnunet-java/test/org/gnunet/construct/ConstructTest.java    2012-02-09 
10:09:40 UTC (rev 19737)
@@ -76,7 +76,6 @@
 
         for (int i = 0; i < stm.mns.length; i++) {
             Assert.assertEquals(stm.mns[i].value, stm2.mns[i].value);
-
         }
 
     }

Modified: gnunet-java/test/org/gnunet/services/ConfigUtil.java
===================================================================
--- gnunet-java/test/org/gnunet/services/ConfigUtil.java        2012-02-09 
10:09:09 UTC (rev 19736)
+++ gnunet-java/test/org/gnunet/services/ConfigUtil.java        2012-02-09 
10:09:40 UTC (rev 19737)
@@ -6,7 +6,7 @@
 
 public class ConfigUtil {
     static File copyConfigResource(String resName) {
-        URL res = StatisticsServiceTest.class.getResource("nse.conf");
+        URL res = ConfigUtil.class.getResource(resName);
 
         File tmpFile;
 

Modified: 
gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
===================================================================
--- gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java  
2012-02-09 10:09:09 UTC (rev 19736)
+++ gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java  
2012-02-09 10:09:40 UTC (rev 19737)
@@ -1,7 +1,7 @@
 package org.gnunet.services;
 
 
-import org.gnunet.service.NetworkSizeEstimation;
+import org.gnunet.nse.NetworkSizeEstimation;
 import org.gnunet.util.AbsoluteTime;
 import org.gnunet.util.Configuration;
 import org.gnunet.util.Scheduler;
@@ -36,7 +36,8 @@
             throw new IOError(e);
         }
 
-        Configuration cfg = new Configuration(tmpFile.getAbsolutePath());
+        Configuration cfg = new Configuration();
+        cfg.parse(tmpFile.getAbsolutePath());
 
         NetworkSizeEstimation svc = new NetworkSizeEstimation(cfg);
 

Deleted: gnunet-java/test/org/gnunet/services/StatisticsServiceTest.java
===================================================================
--- gnunet-java/test/org/gnunet/services/StatisticsServiceTest.java     
2012-02-09 10:09:09 UTC (rev 19736)
+++ gnunet-java/test/org/gnunet/services/StatisticsServiceTest.java     
2012-02-09 10:09:40 UTC (rev 19737)
@@ -1,32 +0,0 @@
-package org.gnunet.services;
-
-
-public class StatisticsServiceTest {
-
-
-/*
-    @Test
-    public void test_1() {
-
-        
-        File tmpFile = ConfigUtil.copyConfigResource("statistics.conf");
-
-        Process p;
-        try {
-            String[] cmd = {"gnunet-service-statistics", "-c", 
tmpFile.getAbsolutePath()};
-            p = Runtime.getRuntime().exec(cmd);
-        } catch (IOException e) {
-            throw new IOError(e);
-        }
-
-        Configuration cfg = new Configuration(tmpFile.getAbsolutePath());
-
-
-
-        StatisticsService s = new StatisticsService(cfg);
-
-        p.destroy();
-    }
-
-    */
-}




reply via email to

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