[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19420 - in gnunet-java: . .idea .idea/inspectionProfiles .
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19420 - in gnunet-java: . .idea .idea/inspectionProfiles .idea/libraries src src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/service src/org/gnunet/util src/org/gnunet/util/getopt src/org/grothoff test/org/gnunet/construct test/org/gnunet/services |
Date: |
Thu, 26 Jan 2012 08:36:44 +0100 |
Author: dold
Date: 2012-01-26 08:36:44 +0100 (Thu, 26 Jan 2012)
New Revision: 19420
Added:
gnunet-java/src/org/gnunet/construct/MessageUnion.java
gnunet-java/src/org/gnunet/construct/Union.java
gnunet-java/src/org/gnunet/construct/UnionCase.java
gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
gnunet-java/src/org/gnunet/util/Resolver.java
gnunet-java/src/org/gnunet/util/getopt/OptionAction.java
gnunet-java/test/org/gnunet/construct/UnionTest.java
Removed:
gnunet-java/src/org/gnunet/construct/TaggedUnion.java
gnunet-java/src/org/gnunet/service/Resolver.java
gnunet-java/src/org/gnunet/util/getopt/Argument.java
Modified:
gnunet-java/.idea/inspectionProfiles/Project_Default.xml
gnunet-java/.idea/libraries/lib.xml
gnunet-java/.idea/workspace.xml
gnunet-java/ISSUES
gnunet-java/resolver
gnunet-java/src/log4j.properties
gnunet-java/src/org/gnunet/construct/Construct.java
gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java
gnunet-java/src/org/gnunet/construct/MessageLoader.java
gnunet-java/src/org/gnunet/construct/MsgMap.txt
gnunet-java/src/org/gnunet/construct/Nested.java
gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java
gnunet-java/src/org/gnunet/util/AbsoluteTime.java
gnunet-java/src/org/gnunet/util/Client.java
gnunet-java/src/org/gnunet/util/Program.java
gnunet-java/src/org/gnunet/util/RelativeTime.java
gnunet-java/src/org/gnunet/util/Scheduler.java
gnunet-java/src/org/gnunet/util/getopt/Option.java
gnunet-java/src/org/gnunet/util/getopt/Parser.java
gnunet-java/src/org/grothoff/Runabout.java
gnunet-java/test/org/gnunet/construct/ByteFillMessage.java
gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
Log:
implemented message unions, parameter parsing
Modified: gnunet-java/.idea/inspectionProfiles/Project_Default.xml
===================================================================
--- gnunet-java/.idea/inspectionProfiles/Project_Default.xml 2012-01-25
23:19:25 UTC (rev 19419)
+++ gnunet-java/.idea/inspectionProfiles/Project_Default.xml 2012-01-26
07:36:44 UTC (rev 19420)
@@ -40,7 +40,6 @@
<inspection_tool class="AwaitWithoutCorrespondingSignal" enabled="true"
level="WARNING" enabled_by_default="true" />
<inspection_tool class="BadOddness" enabled="true" level="WARNING"
enabled_by_default="true" />
<inspection_tool class="BooleanMethodIsAlwaysInverted" enabled="false"
level="WARNING" enabled_by_default="false" />
- <inspection_tool class="BreakStatement" enabled="true" level="WARNING"
enabled_by_default="true" />
<inspection_tool class="BreakStatementWithLabel" enabled="true"
level="WARNING" enabled_by_default="true" />
<inspection_tool class="BusyWait" enabled="true" level="WARNING"
enabled_by_default="true" />
<inspection_tool class="CallToNativeMethodWhileLocked" enabled="true"
level="WARNING" enabled_by_default="true" />
Modified: gnunet-java/.idea/libraries/lib.xml
===================================================================
--- gnunet-java/.idea/libraries/lib.xml 2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/.idea/libraries/lib.xml 2012-01-26 07:36:44 UTC (rev 19420)
@@ -4,6 +4,7 @@
<root url="jar://$PROJECT_DIR$/lib/slf4j-api-1.6.4.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/slf4j-log4j12-1.6.4.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/log4j-1.2.16.jar!/" />
+ <root url="jar://$PROJECT_DIR$/lib/annotations.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
Modified: gnunet-java/.idea/workspace.xml
===================================================================
--- gnunet-java/.idea/workspace.xml 2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/.idea/workspace.xml 2012-01-26 07:36:44 UTC (rev 19420)
@@ -2,10 +2,37 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" readonly="true"
id="b4faf44d-8919-474e-bfab-5900bc40cc2b" name="Default" comment="">
- <change type="MOVED"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parameter.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Option.java" />
+ <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="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/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/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/services/NetworkSizeEstimationServiceTest.java"
afterPath="$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java"
/>
</list>
<ignored path="gnunet-java.iws" />
<ignored path=".idea/workspace.xml" />
@@ -63,94 +90,97 @@
</component>
<component name="FileEditorManager">
<leaf>
- <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="UnionParser.java" pinned="false" current="false"
current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="68" column="1" selection-start="2022"
selection-end="2449" vertical-scroll-proportion="0.0">
+ <state line="68" column="0" selection-start="2086"
selection-end="2086" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="Parser.java" pinned="false" current="true"
current-in-tab="true">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
+ <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">
<provider selected="true" editor-type-id="text-editor">
- <state line="75" column="71" selection-start="2181"
selection-end="2181" vertical-scroll-proportion="0.5641026">
+ <state line="106" column="68" selection-start="3991"
selection-end="3991" vertical-scroll-proportion="0.0">
<folding>
- <element signature="e#1206#1221#0" expanded="true" />
- <element signature="e#1283#1296#0" expanded="true" />
+ <element signature="e#1363#1393#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
- <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">
+ <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">
<provider selected="true" editor-type-id="text-editor">
- <state line="31" column="8" selection-start="874"
selection-end="874" vertical-scroll-proportion="0.0">
+ <state line="69" column="61" selection-start="1769"
selection-end="1769" 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="NetworkSizeEstimationServiceTest.java"
pinned="false" current="false" current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="2" column="50" selection-start="78"
selection-end="78" vertical-scroll-proportion="0.0">
+ <state line="23" column="5" selection-start="747"
selection-end="747" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="VarTestMessage.java" pinned="false"
current="false" current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/VarTestMessage.java">
+ <file leaf-file-name="Construct.java" pinned="false" current="false"
current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="2" column="13" selection-start="44"
selection-end="44" vertical-scroll-proportion="0.0">
- <folding />
+ <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>
</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="Resolver.java" pinned="false" current="true"
current-in-tab="true">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="13" column="13" selection-start="300"
selection-end="300" vertical-scroll-proportion="0.0">
- <folding />
+ <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>
</provider>
</entry>
</file>
- <file leaf-file-name="ByteFillParser.java" pinned="false"
current="false" current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java">
+ <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">
<provider selected="true" editor-type-id="text-editor">
- <state line="55" column="9" selection-start="1668"
selection-end="1668" vertical-scroll-proportion="0.0">
+ <state line="42" column="13" selection-start="1133"
selection-end="1133" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="NestedParser.java" pinned="false" current="false"
current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java">
+ <file leaf-file-name="ISSUES" pinned="false" current="false"
current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/ISSUES">
<provider selected="true" editor-type-id="text-editor">
- <state line="46" column="25" selection-start="1441"
selection-end="1441" vertical-scroll-proportion="0.0">
+ <state line="180" column="30" selection-start="6264"
selection-end="6264" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="Option.java" pinned="false" current="false"
current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Option.java">
+ <file leaf-file-name="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="13" column="27" selection-start="374"
selection-end="374" vertical-scroll-proportion="0.0">
+ <state line="0" column="21" selection-start="21"
selection-end="21" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="Argument.java" pinned="false" current="false"
current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Argument.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="11" column="15" selection-start="303"
selection-end="303" vertical-scroll-proportion="0.0">
+ <state line="11" column="23" selection-start="265"
selection-end="265" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -166,22 +196,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
- <option value="$PROJECT_DIR$/src/org/gnunet/construct/Nested.java" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java"
/>
- <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java" />
- <option value="$PROJECT_DIR$/src/log4j.properties" />
- <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/RestArgs.java"
/>
- <option
value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Arguments.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Argument.java"
/>
- <option value="$PROJECT_DIR$/src/org/gnunet/service/Resolver.java" />
- <option value="$PROJECT_DIR$/ISSUES" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parameter.java" />
<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$/src/org/gnunet/util/Resolver.java" />
</list>
</option>
</component>
@@ -309,7 +339,7 @@
</expanded-state>
<selected-state>
<State>
- <id>JUnit issues</id>
+ <id>InstanceVariableInitialization</id>
</State>
</selected-state>
</profile-state>
@@ -341,86 +371,6 @@
<sortByType />
</navigator>
<panes>
- <pane id="Scope">
- <subPane subId="Project Files">
- <PATH>
- <PATH_ELEMENT USER_OBJECT="Root">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="gnunet-java">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT USER_OBJECT="Root">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="gnunet-java">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="src">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="org">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT USER_OBJECT="Root">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="gnunet-java">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="src">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="org">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="gnunet">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT USER_OBJECT="Root">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="gnunet-java">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="src">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="org">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="gnunet">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- <PATH_ELEMENT USER_OBJECT="construct">
- <option name="myItemId" value="" />
- <option name="myItemType" value="" />
- </PATH_ELEMENT>
- </PATH>
- </subPane>
- </pane>
<pane id="PackagesPane">
<subPane>
<PATH>
@@ -484,10 +434,6 @@
<option name="myItemId" value="gnunet" />
<option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="services" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
@@ -620,10 +566,32 @@
<option name="myItemId" value="gnunet" />
<option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
+ </PATH>
+ <PATH>
<PATH_ELEMENT>
- <option name="myItemId" value="service" />
+ <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="exceptions" />
+ <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+ </PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
@@ -647,7 +615,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="construct" />
<option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
@@ -676,6 +644,10 @@
<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>
@@ -693,19 +665,99 @@
</PATH>
</subPane>
</pane>
+ <pane id="Scope">
+ <subPane subId="Project Files">
+ <PATH>
+ <PATH_ELEMENT USER_OBJECT="Root">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="gnunet-java">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT USER_OBJECT="Root">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="gnunet-java">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="src">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="org">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT USER_OBJECT="Root">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="gnunet-java">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="src">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="org">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="gnunet">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ </PATH>
+ <PATH>
+ <PATH_ELEMENT USER_OBJECT="Root">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="gnunet-java">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="src">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="org">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="gnunet">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ <PATH_ELEMENT USER_OBJECT="construct">
+ <option name="myItemId" value="" />
+ <option name="myItemType" value="" />
+ </PATH_ELEMENT>
+ </PATH>
+ </subPane>
+ </pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="GenerateAntBuildDialog.generateIdeaHomeProperty"
value="false" />
<property name="GoToFile.includeJavaFiles" value="false" />
- <property name="project.structure.last.edited" value="Modules" />
+ <property name="project.structure.last.edited" value="Libraries" />
<property name="OverrideImplement.combined" value="true" />
<property name="project.structure.proportion" value="0.15" />
<property name="options.splitter.main.proportions" value="0.3" />
<property name="GenerateAntBuildDialog.generateSingleFile" value="true" />
<property name="recentsLimit" value="5" />
<property name="MemberChooser.sorted" value="false" />
- <property name="options.lastSelected" value="project.propCompiler" />
+ <property name="options.lastSelected" value="editing.templates" />
<property name="GenerateAntBuildDialog.inclineRuntiemClasspath"
value="true" />
<property name="GenerateAntBuildDialog.forceTargetJdk" value="false" />
<property name="project.structure.side.proportion" value="0.2" />
@@ -733,7 +785,7 @@
<recent name="" />
</key>
</component>
- <component name="RunManager" selected="JUnit.ConstructTest">
+ <component name="RunManager" selected="JUnit.UnionTest">
<configuration default="false" name="StatisticsServiceTest" type="JUnit"
factoryName="JUnit" temporary="true">
<module name="gnunet-java" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
@@ -812,6 +864,28 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
+ <configuration default="false" name="UnionTest" type="JUnit"
factoryName="JUnit" temporary="true">
+ <module name="gnunet-java" />
+ <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+ <option name="ALTERNATIVE_JRE_PATH" />
+ <option name="PACKAGE_NAME" value="org.gnunet.construct" />
+ <option name="MAIN_CLASS_NAME" value="org.gnunet.construct.UnionTest" />
+ <option name="METHOD_NAME" />
+ <option name="TEST_OBJECT" value="class" />
+ <option name="VM_PARAMETERS" value="-ea" />
+ <option name="PARAMETERS" />
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+ <option name="ENV_VARIABLES" />
+ <option name="PASS_PARENT_ENVS" value="true" />
+ <option name="TEST_SEARCH_SCOPE">
+ <value defaultName="moduleWithDependencies" />
+ </option>
+ <envs />
+ <patterns />
+ <RunnerSettings RunnerId="Run" />
+ <ConfigurationWrapper RunnerId="Run" />
+ <method />
+ </configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@@ -887,7 +961,7 @@
</method>
</configuration>
<configuration default="false" name="Resolver" type="Application"
factoryName="Application">
- <option name="MAIN_CLASS_NAME" value="org.gnunet.service.Resolver" />
+ <option name="MAIN_CLASS_NAME" value="org.gnunet.util.Resolver" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
@@ -902,11 +976,12 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
- <list size="4">
+ <list size="5">
<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" />
</list>
<configuration name="<template>" type="WebApp" default="true"
selected="false">
<Host>localhost</Host>
@@ -979,25 +1054,25 @@
<frame x="-6" y="17" width="1452" height="889" extended-state="0" />
<editor active="true" />
<layout>
- <window_info id="Messages" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.2967033" sideWeight="0.49713057" order="7" side_tool="false"
content_ui="tabs" />
<window_info id="Changes" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.32967034" sideWeight="0.5" order="7" side_tool="false"
content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="TODO" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32967034"
sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.24098124" sideWeight="0.6710875" order="1" side_tool="false"
content_ui="tabs" />
- <window_info id="Structure" active="false" anchor="left"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.23015873" sideWeight="0.58928573" order="1" side_tool="false"
content_ui="tabs" />
- <window_info id="Project" active="false" anchor="left" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="true" weight="0.21933623"
sideWeight="0.7032967" 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="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.41346154"
sideWeight="0.9126984" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Version Control" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.32967034" sideWeight="0.0" order="7" side_tool="false"
content_ui="tabs" />
+ <window_info id="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.48763737"
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.3021978" sideWeight="0.5" order="5" side_tool="false"
content_ui="tabs" />
+ <window_info id="Inspection" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.4945055" sideWeight="0.5" order="5" side_tool="false"
content_ui="tabs" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
@@ -1034,7 +1109,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="rudimentary version of resolve
tool completed" />
+ <option name="LAST_COMMIT_MESSAGE" value="implemented message unions,
parameter parsing" />
<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" />
@@ -1050,9 +1125,10 @@
<MESSAGE value="NSE client almost working" />
<MESSAGE value="added MsgMap update shell script" />
<MESSAGE value="fixes / documentation" />
- <MESSAGE value="fix" />
<MESSAGE value="added libs" />
<MESSAGE value="rudimentary version of resolve tool completed" />
+ <MESSAGE value="fix" />
+ <MESSAGE value="implemented message unions, parameter parsing" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1062,93 +1138,125 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="39" column="20" selection-start="1014"
selection-end="1014" vertical-scroll-proportion="0.0" />
+ <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>
</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="8" column="13" selection-start="202" selection-end="202"
vertical-scroll-proportion="0.0" />
+ <state line="2" column="13" selection-start="44" selection-end="44"
vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="7" column="13" selection-start="155" selection-end="155"
vertical-scroll-proportion="0.0" />
+ <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>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/FillParser.java">
+ <entry file="file://$PROJECT_DIR$/src/org/grothoff/Runabout.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="17" column="4" selection-start="397" selection-end="397"
vertical-scroll-proportion="0.0" />
+ <state line="113" column="7" selection-start="4566"
selection-end="4566" vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/ISSUES">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/MsgMap.txt">
<provider selected="true" editor-type-id="text-editor">
- <state line="151" column="10" selection-start="4917"
selection-end="4917" vertical-scroll-proportion="0.43251088" />
+ <state line="11" column="0" selection-start="661" selection-end="661"
vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/service/Resolver.java">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/ConstructTest.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="155" column="12" selection-start="4980"
selection-end="4980" vertical-scroll-proportion="0.0" />
+ <state line="7" column="13" selection-start="123" selection-end="123"
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$/test/org/gnunet/construct/UnionTest.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="68" column="1" selection-start="2022"
selection-end="2449" vertical-scroll-proportion="0.0" />
+ <state line="11" column="23" selection-start="265" selection-end="265"
vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/log4j.properties">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="2" column="50" selection-start="78" selection-end="78"
vertical-scroll-proportion="0.0" />
+ <state line="68" column="0" selection-start="2086"
selection-end="2086" vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/VarTestMessage.java">
+ <entry file="file://$PROJECT_DIR$/src/log4j.properties">
<provider selected="true" editor-type-id="text-editor">
- <state line="2" column="13" selection-start="44" selection-end="44"
vertical-scroll-proportion="0.0" />
+ <state line="0" column="21" selection-start="21" selection-end="21"
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/construct/Construct.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="13" column="13" selection-start="300" selection-end="300"
vertical-scroll-proportion="0.0" />
+ <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>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="55" column="9" selection-start="1668"
selection-end="1668" vertical-scroll-proportion="0.0" />
+ <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>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/service/NetworkSizeEstimation.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="46" column="25" selection-start="1441"
selection-end="1441" vertical-scroll-proportion="0.0">
+ <state line="69" column="61" selection-start="1769"
selection-end="1769" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Argument.java">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="11" column="15" selection-start="303" selection-end="303"
vertical-scroll-proportion="0.0" />
+ <state line="23" column="5" selection-start="747" selection-end="747"
vertical-scroll-proportion="0.0">
+ <folding />
+ </state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Option.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="13" column="27" selection-start="374" selection-end="374"
vertical-scroll-proportion="0.0">
+ <state line="42" column="13" selection-start="1133"
selection-end="1133" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Program.java">
+ <entry file="file://$PROJECT_DIR$/ISSUES">
<provider selected="true" editor-type-id="text-editor">
- <state line="31" column="8" selection-start="874" selection-end="874"
vertical-scroll-proportion="0.0">
+ <state line="180" column="30" selection-start="6264"
selection-end="6264" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="75" column="71" selection-start="2181"
selection-end="2181" vertical-scroll-proportion="0.5641026">
+ <state line="40" column="27" selection-start="1171"
selection-end="1171" vertical-scroll-proportion="0.6780627">
<folding>
- <element signature="e#1206#1221#0" expanded="true" />
- <element signature="e#1283#1296#0" expanded="true" />
+ <element signature="e#617#673#0" expanded="true" />
</folding>
</state>
</provider>
Modified: gnunet-java/ISSUES
===================================================================
--- gnunet-java/ISSUES 2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/ISSUES 2012-01-26 07:36:44 UTC (rev 19420)
@@ -173,3 +173,9 @@
@Uint32 reserved; @Nested RelativeTimeMsg ts; @Double double est;
@Double double dev;
}
+
+
+================================================
+
+* AF_* etc. seem to be system specific
+* inconsistent message formats
Modified: gnunet-java/resolver
===================================================================
--- gnunet-java/resolver 2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/resolver 2012-01-26 07:36:44 UTC (rev 19420)
@@ -2,4 +2,4 @@
DIR=`dirname $0`
-java -ea -cp "$DIR/bin/:$DIR/lib/*" org.gnunet.service.Resolver "$@"
+java -ea -cp "$DIR/bin/:$DIR/lib/*" org.gnunet.util.Resolver "$@"
Modified: gnunet-java/src/log4j.properties
===================================================================
--- gnunet-java/src/log4j.properties 2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/src/log4j.properties 2012-01-26 07:36:44 UTC (rev 19420)
@@ -1,4 +1,4 @@
-log4j.rootLogger=FATAL, A1
+log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
Modified: gnunet-java/src/org/gnunet/construct/Construct.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Construct.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/construct/Construct.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -36,7 +36,7 @@
try {
m = c.newInstance();
} catch (InstantiationException e) {
- throw new InterfaceViolationException("Cannot instantiate
Message");
+ throw new InterfaceViolationException("Cannot instantiate " + c);
} catch (IllegalAccessException e) {
throw new InterfaceViolationException(
String.format("Cannot instantiate Message %s (illegal
access)", c));
@@ -78,13 +78,14 @@
private static Parser getParser(Class<? extends Message> c,
ParserGenerator pg) {
+
SequenceParser parser = new SequenceParser();
pg.c = c;
if (!Modifier.isPublic(c.getModifiers())) {
throw new InterfaceViolationException(String.format("Construct
Message %s not declared public", c));
}
-
+
for (Field f : getMessageFields(c)) {
Annotation[] as = f.getAnnotations();
if (as.length == 0 || f.isSynthetic() ||
Modifier.isStatic(f.getModifiers())) {
@@ -135,6 +136,16 @@
private ParserGenerator() {
}
+ public void visit(Union u) {
+ try {
+ parser = new UnionParser(frameSizePath, u.optional(),
field.getType().getCanonicalName(),
+ c.getField(u.tag()), field);
+ } catch (NoSuchFieldException e) {
+ throw new InterfaceViolationException(String.format("field
'%s' does not exist in class '%s'", u.tag(), c));
+ }
+
+ }
+
public void visit(FrameSize ts) {
frameSizePath = new LinkedList<Field>(path);
@@ -210,7 +221,7 @@
Parser p = getParser(ct, this);
path = old_path;
- parser = new NestedParser(p, frameSizePath, n.optional(), old_f);
+ parser = new NestedParser(p, new LinkedList<Field>(frameSizePath),
n.optional(), old_f);
}
public void visit(ByteFill bf) {
@@ -222,6 +233,7 @@
parser = new ByteFillParser(frameSizePath, field);
}
+
public void visit(FixedSizeArray fsa) {
Field f = field;
int elemNumber = fsa.length();
@@ -234,7 +246,7 @@
}
public void visit(Double d) {
- if(!field.getType().equals(java.lang.Double.TYPE)) {
+ if (!field.getType().equals(java.lang.Double.TYPE)) {
throw new InterfaceViolationException("@Double target must be
a primitive 'double' field");
}
parser = new DoubleParser(field);
@@ -287,6 +299,9 @@
* @return number of bytes required, -1 on error
*/
public static int getSize(Message m) {
+ if (m == null) {
+ return 0;
+ }
Parser p = getParser(m.getClass());
return p.getSize(m);
}
Modified: gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java
2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/src/org/gnunet/construct/MessageIdAnnotationProcessor.java
2012-01-26 07:36:44 UTC (rev 19420)
@@ -4,35 +4,42 @@
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.Types;
import javax.tools.Diagnostic;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import java.io.IOException;
import java.io.Writer;
+import java.lang.Integer;
import java.lang.annotation.Annotation;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
/**
* Creates a resource file 'MsgMap.txt' in the package 'org.gnunet.construct'.
- * Restriction: The MessageId annotation currently does not work with inner
classes
*/
address@hidden({"org.gnunet.construct.MessageId"})
address@hidden({"org.gnunet.construct.MessageId",
"org.gnunet.construct.UnionCase"})
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class MessageIdAnnotationProcessor extends AbstractProcessor {
- HashMap<java.lang.Integer, String> msgmap = new HashMap<java.lang.Integer,
String>();
+ Map<Integer, String> msgmap = new HashMap<java.lang.Integer, String>(100);
+ Map<String, Map<Integer, String>> unionmap = new HashMap<String,
Map<Integer, String>>(100);
+ private Types types;
+ private Elements elements;
+
@Override
public boolean process(Set<? extends TypeElement> typeElements,
RoundEnvironment roundEnvironment) {
if (roundEnvironment.errorRaised()) {
return false;
}
+ this.types = processingEnv.getTypeUtils();
+ this.elements = processingEnv.getElementUtils();
+
if (roundEnvironment.processingOver()) {
Filer filer = processingEnv.getFiler();
FileObject outfile;
@@ -49,8 +56,14 @@
w.write("" + e.getKey() + "=" + e.getValue() + "\n");
}
- DateFormat fmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ for (Map.Entry<String, Map<Integer, String>> outerEntry :
unionmap.entrySet()) {
+ for (Map.Entry<Integer, String> innerEntry :
outerEntry.getValue().entrySet()) {
+ w.write(""+ innerEntry.getKey() + "|" +
outerEntry.getKey() + "=" + innerEntry.getValue() + "\n");
+ }
+ }
+ DateFormat fmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+
w.write("# generated " + fmt.format(new Date()) + "\n");
w.close();
} catch (IOException e) {
@@ -75,25 +88,56 @@
}
}
}
+ for (Element e :
roundEnvironment.getElementsAnnotatedWith(UnionCase.class)) {
+ UnionCase ann = e.getAnnotation(UnionCase.class);
+ String targetName = getClassName(e);
+ // get the uppermost parent class that implements
MessageUnion. This is the union type.
+ // processingEnv.getElementUtils().
+
//processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "element :" +
e.toString());
+ List<? extends TypeMirror> parents =
processingEnv.getTypeUtils().directSupertypes(e.asType());
+ TypeMirror msg =
elements.getTypeElement("org.gnunet.construct.MessageUnion").asType();
+ TypeMirror unionInterface = null;
+ for (TypeMirror p : parents) {
+ if (types.isSubtype(p, msg)) {
+ unionInterface = p;
+ break;
+ }
+ }
+ if (unionInterface == null) {
+
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, String.format(
+ "class %s annotated with @UnionCase does not
implement an interface inheriting MessageUnion", e.getSimpleName()));
+ return false;
+ }
+ String unionName = unionInterface.toString();
+ if (!unionmap.containsKey(unionName)) {
+ unionmap.put(unionName, new HashMap<Integer, String>(10));
+ }
+ unionmap.get(unionName).put(ann.value(), getClassName(e));
+ }
}
return false;
}
-
+
+ /**
+ * Get the fully qualified class name, where packages are seperated with
'.', and
+ * inner classes are separated with '$'
+ *
+ * @param e the Element representing a class
+ * @return the fully qualified class name
+ */
String getClassName(Element e) {
assert e.getKind().isClass();
-
+
String name = e.getSimpleName().toString();
String pkg =
processingEnv.getElementUtils().getPackageOf(e).getQualifiedName().toString() +
".";
-
+
String outer = "";
-
+
while ((e = e.getEnclosingElement()) != null && e.getKind().isClass())
{
outer = e.getSimpleName() + "$" + outer;
}
-
return pkg + outer + name;
-
}
}
Modified: gnunet-java/src/org/gnunet/construct/MessageLoader.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageLoader.java 2012-01-25
23:19:25 UTC (rev 19419)
+++ gnunet-java/src/org/gnunet/construct/MessageLoader.java 2012-01-26
07:36:44 UTC (rev 19420)
@@ -33,9 +33,11 @@
import java.lang.Integer;
import java.net.URL;
import java.util.HashMap;
+import java.util.Map;
public class MessageLoader {
private static HashMap<java.lang.Integer, String> msgmap = new
HashMap<Integer, String>();
+ private static Map<String, Map<Integer, String>> unionmap = new
HashMap<String, Map<Integer, String>>(100);
static {
loadMessageMap();
@@ -61,11 +63,24 @@
}
String[] m = line.split("=");
if (m.length != 2) {
- throw new RuntimeException("invalid message map format");
+ throw new RuntimeException("invalid message map format
(separation by '=')");
}
- int id = java.lang.Integer.parseInt(m[0].trim());
+ String[] left = m[0].split("\\|");
String fqn = m[1].trim();
- msgmap.put(id, fqn);
+ if (left.length == 1) {
+ int id = java.lang.Integer.parseInt(m[0].trim());
+ msgmap.put(id, fqn);
+ } else if (left.length == 2) {
+ int id = java.lang.Integer.parseInt(left[0].trim());
+ String unionInterface = left[1];
+ if (!unionmap.containsKey(unionInterface)) {
+ unionmap.put(unionInterface, new HashMap<Integer,
String>());
+ }
+ unionmap.get(unionInterface).put(id, fqn);
+ } else {
+ throw new RuntimeException("invalid message map format
(left hand side)");
+ }
+
}
} catch (IOException e) {
throw new RuntimeException("could not read message map");
@@ -88,4 +103,26 @@
return Construct.parseAs(data, offset, msgClass);
}
+
+ public static Class loadUnionClass(String unionType, int type) {
+ Map<Integer, String> map = unionmap.get(unionType);
+ if (map == null) {
+ throw new InternalLogicError("don't know how to handle unions of
type '"+unionType+"'");
+ }
+
+ String className = map.get(type);
+ if (className == null) {
+ throw new MessageFormatException("don't know how to translate
message of type " + type);
+ }
+
+ ClassLoader cl = ClassLoader.getSystemClassLoader();
+ Class msgClass;
+ try {
+ msgClass = cl.loadClass(className);
+ } catch (ClassNotFoundException e) {
+ throw new InternalLogicError(String.format("message class '%s' not
found in classpath", className));
+ }
+
+ return msgClass;
+ }
}
Added: gnunet-java/src/org/gnunet/construct/MessageUnion.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/MessageUnion.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/MessageUnion.java 2012-01-26
07:36:44 UTC (rev 19420)
@@ -0,0 +1,7 @@
+package org.gnunet.construct;
+
+/**
+ * Marker interface for Message Unions
+ */
+public interface MessageUnion extends Message {
+}
Modified: gnunet-java/src/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/org/gnunet/construct/MsgMap.txt 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/construct/MsgMap.txt 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -1,7 +1,11 @@
-987=org.gnunet.construct.SizeTestMessage
+5=org.gnunet.util.Resolver$ResolverResponse
291=org.gnunet.construct.QueryMessage
-323=org.gnunet.service.NetworkSizeEstimation.NSE_UpdateMessage
-5=org.gnunet.service.Resolver.ResolverResponse
-321=org.gnunet.service.NetworkSizeEstimation.NSE_StartMessage
+323=org.gnunet.service.NetworkSizeEstimation$NSE_UpdateMessage
+321=org.gnunet.service.NetworkSizeEstimation$NSE_StartMessage
3210=org.gnunet.construct.SimpleTestMessage
-# generated 2012/01/18 15:14:33
+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
Modified: gnunet-java/src/org/gnunet/construct/Nested.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Nested.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/construct/Nested.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -16,4 +16,5 @@
public @interface Nested {
boolean newFrame() default false;
boolean optional() default false;
+ String unionTag() default "";
}
\ No newline at end of file
Deleted: gnunet-java/src/org/gnunet/construct/TaggedUnion.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/TaggedUnion.java 2012-01-25
23:19:25 UTC (rev 19419)
+++ gnunet-java/src/org/gnunet/construct/TaggedUnion.java 2012-01-26
07:36:44 UTC (rev 19420)
@@ -1,16 +0,0 @@
-package org.gnunet.construct;
-
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
address@hidden(RetentionPolicy.RUNTIME)
address@hidden(ElementType.FIELD)
-public @interface TaggedUnion {
- // path to the tag
- String tag();
- String[] keys();
- Class[] values();
-}
\ No newline at end of file
Added: gnunet-java/src/org/gnunet/construct/Union.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Union.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/Union.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -0,0 +1,14 @@
+package org.gnunet.construct;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
address@hidden(ElementType.FIELD)
address@hidden(RetentionPolicy.RUNTIME)
+public @interface Union {
+ String tag();
+ boolean optional() default false;
+}
\ No newline at end of file
Copied: gnunet-java/src/org/gnunet/construct/UnionCase.java (from rev 19281,
gnunet-java/src/org/gnunet/construct/TaggedUnion.java)
===================================================================
--- gnunet-java/src/org/gnunet/construct/UnionCase.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/UnionCase.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -0,0 +1,13 @@
+package org.gnunet.construct;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
address@hidden(RetentionPolicy.SOURCE)
address@hidden(ElementType.TYPE)
+public @interface UnionCase {
+ int value();
+}
\ No newline at end of file
Modified: gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
2012-01-26 07:36:44 UTC (rev 19420)
@@ -37,7 +37,7 @@
try {
switch (ft) {
case BYTE_PRIM:
- field.setShort(dstObj, readShort(srcData, offset));
+ field.setByte(dstObj, readByte(srcData, offset));
break;
case SHORT_PRIM:
field.setShort(dstObj, readShort(srcData, offset));
@@ -55,7 +55,7 @@
}
} catch (IllegalArgumentException e) {
- throw new RuntimeException();
+ throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException();
}
Added: gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
2012-01-26 07:36:44 UTC (rev 19420)
@@ -0,0 +1,88 @@
+package org.gnunet.construct.parsers;
+
+import org.gnunet.construct.Construct;
+import org.gnunet.construct.Message;
+import org.gnunet.construct.MessageLoader;
+import org.gnunet.exceptions.MessageFormatException;
+
+import java.lang.reflect.Field;
+import java.util.List;
+
+
+public class UnionParser extends FieldParser {
+ private List<Field> frameSizePath;
+
+ private Field unionTag;
+ private String unionType;
+
+ boolean optional;
+
+ public UnionParser(List<Field> frameSizePath, boolean optional, String
unionType, Field unionTag, Field f) {
+ super(f);
+ this.optional = optional;
+ this.frameSizePath = frameSizePath;
+ this.unionTag = unionTag;
+ this.unionType = unionType;
+ }
+
+ @Override
+ public int getSize(final Message src) {
+ return Construct.getSize((Message) getFieldValue(src));
+ }
+
+ private int getSizeFieldValue(Message m) {
+ Object obj = Construct.ReflectionUtil.followFieldPath(frameSizePath,
m);
+ return ((Number) obj).intValue();
+ }
+
+ @Override
+ public int parse(final byte[] src_data, final int offset,
+ int frameOffset, Message frameObj, final Message dstObj) {
+
+
+ if (optional) {
+ int remaining = (frameOffset + getSizeFieldValue(frameObj)) -
offset;
+ if (remaining <= 0) {
+ if (!optional) {
+ throw new MessageFormatException("not optional");
+ }
+ setFieldValue(dstObj, null);
+ return 0;
+ }
+ }
+
+ Class cls = null;
+ try {
+ cls = MessageLoader.loadUnionClass(unionType, ((Number)
unionTag.get(dstObj)).intValue());
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException();
+ }
+ try {
+ setFieldValue(dstObj, cls.newInstance());
+ } catch (InstantiationException e) {
+ throw new RuntimeException(e);
+ //throw new InterfaceViolationException("cannot instantiate class
" + cls);
+ } catch (IllegalAccessException e) {
+
+ }
+
+
+ return Construct.getParser((Class<? extends Message>)
getFieldValue(dstObj).getClass())
+ .parse(src_data, offset, frameOffset, frameObj, (Message)
getFieldValue(dstObj));
+ }
+
+ @Override
+ public int write(final byte[] dst_data, final int offset, final Message
src) {
+ return Construct.getParser((Class<? extends Message>)
getFieldValue(src).getClass())
+ .write(dst_data, offset, (Message) getFieldValue(src));
+ }
+
+ @Override
+ public void patch(Message m, int frameSize) {
+ // todo: nested/opaque frames
+ Parser p = Construct.getParser((Class<? extends Message>)
getFieldValue(m).getClass());
+
+ p.patch((Message) getFieldValue(m), frameSize);
+ }
+
+}
Modified: gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java
===================================================================
--- gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java
2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/src/org/gnunet/service/NetworkSizeEstimation.java
2012-01-26 07:36:44 UTC (rev 19420)
@@ -68,7 +68,6 @@
throw new MessageFormatException("got unexcpected message");
}
NSE_UpdateMessage uMsg = (NSE_UpdateMessage) msg;
- System.out.println("got message back!");
for (NSE_Subscriber s : subscribers) {
s.update(AbsoluteTime.fromNetwork(uMsg.timestamp),
uMsg.sizeEstimate, uMsg.stdDeviation);
Deleted: gnunet-java/src/org/gnunet/service/Resolver.java
===================================================================
--- gnunet-java/src/org/gnunet/service/Resolver.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/service/Resolver.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -1,211 +0,0 @@
-package org.gnunet.service;
-
-
-import org.gnunet.construct.*;
-import org.gnunet.exceptions.InterfaceViolationException;
-import org.gnunet.exceptions.MessageFormatException;
-import org.gnunet.util.*;
-import org.gnunet.util.getopt.Argument;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.Inet4Address;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Arrays;
-
-public class Resolver {
- private static final Logger logger = LoggerFactory
- .getLogger(Resolver.class);
-
- @SuppressWarnings("InstanceVariableMayNotBeInitialized")
- public static class GetMessage implements Message {
- final static int MSG_ID = 4;
-
- static final int DIRECTION_GET_IP = 0;
- static final int DIRECTION_GET_NAME = 1;
- static final int AF_INET = 2;
- // .. more constants to come
-
- @Nested
- public MessageHeader header;
-
- @UInt32
- public int direction;
- @UInt32
- public int domain;
- @ByteFill
- public byte[] addr;
- }
-
- @MessageId(ResolverResponse.MSG_ID)
- public static class ResolverResponse implements Message {
- final static int MSG_ID = 5;
- @Nested
- public MessageHeader header;
- @Nested(optional = true)
- public ResponseBody responseBody;
- }
-
- public static class ResponseBody implements Message {
- @UInt32
- public int domain;
- @ByteFill
- public byte[] addr;
-
- // @Nested(union_on="direction")
- // AddressUnion address;
- }
- /*
- interface AddressUnion extends Message {}
- @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;
- }
-*/
-
- public interface HostnameCallback {
- public void onHostname(String hostname);
-
- public void onFinished();
- }
-
- public interface AddressCallback {
- public void onAddress(InetAddress addr);
-
- public void onFinished();
- }
-
-
- Client client = null;
-
- public void connect(Configuration cfg) {
- if (client != null) {
- throw new InterfaceViolationException("connect called twice");
- }
- client = new Client("resolver", new BootstrapResolver(), cfg);
- }
-
- public void resolveHostname(String hostname, RelativeTime timeout, final
AddressCallback cb) {
- if (client == null) {
- throw new InterfaceViolationException("must connect Resolver
before using");
- }
-
- final GetMessage req = new GetMessage();
- req.header = new MessageHeader();
- req.header.messageType = GetMessage.MSG_ID;
- req.direction = GetMessage.DIRECTION_GET_IP;
- req.domain = GetMessage.AF_INET;
- byte[] addr = hostname.getBytes();
- // add 0-byte
- req.addr = Arrays.copyOf(addr, addr.length + 1);
-
- req.header.messageSize = Construct.getSize(req);
-
- logger.debug("" + req.header.messageSize);
-
-
- client.notifyTransmitReady(
- Construct.getSize(req),
- RelativeTime.FOREVER, true,
- new MessageTransmitter() {
- @Override
- public void transmit(Client.MessageSink sink) {
- sink.send(req);
-
- client.receive(new MessageReceiver() {
- @Override
- public void process(Message msg) {
- ResolverResponse gmsg = (ResolverResponse) msg;
- if (gmsg.responseBody != null) {
- try {
- InetAddress in_addr =
Inet4Address.getByAddress(
-
Arrays.copyOfRange(gmsg.responseBody.addr, 0, 4));
- cb.onAddress(in_addr);
- client.receive(this,
RelativeTime.FOREVER);
- } catch (UnknownHostException e) {
- throw new
MessageFormatException("malformed address");
- }
- } else {
- cb.onFinished();
- }
- }
-
- @Override
- public void handleTimeout() {
- throw new RuntimeException("unreachable");
- }
- }, RelativeTime.FOREVER);
-
- }
-
- @Override
- public void handleTimeout() {
- throw new RuntimeException("unreachable");
- }
- });
-
- }
-
- private static Resolver singletonInstance = null;
-
- public static Resolver getInstance() {
- if (singletonInstance == null) {
- singletonInstance = new Resolver();
- }
- return singletonInstance;
- }
-
-
- public static void main(final String[] argv) {
- new Program(argv) {
- // @Argument(name="HOSTNAME") public String hostname;
-
- @Override
- public void run() {
- for (String hostname : this.unprocessedArgs)
- {
- System.out.println("resolving hostname '" + hostname + "'");
- Resolver.getInstance().resolveHostname(hostname,
RelativeTime.FOREVER, new AddressCallback() {
- @Override
- public void onAddress(InetAddress addr) {
- System.out.println(addr);
- }
-
- @Override
- public void onFinished() {
- System.out.println("done.");
- }
- });
- }
- }
-
- }.start();
- }
-
-
- /**
- * Resolver used to connect to the resolver service itself, solving the
chicken and egg-problem.
- * Only loopback and ip addresses can be "resolved", no real domain names
- */
- private class BootstrapResolver extends Resolver {
- public BootstrapResolver() {
- }
-
- @Override
- public void connect(Configuration cfg) {
- throw new UnsupportedOperationException("Bootstrap resolver does
not need to be connected");
- }
-
- }
-
-}
Modified: gnunet-java/src/org/gnunet/util/AbsoluteTime.java
===================================================================
--- gnunet-java/src/org/gnunet/util/AbsoluteTime.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/util/AbsoluteTime.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -28,7 +28,7 @@
*
* @author Florian Dold
*/
-public class AbsoluteTime implements Comparable {
+public class AbsoluteTime implements Comparable<AbsoluteTime> {
private static final Logger logger = LoggerFactory
.getLogger(AbsoluteTime.class);
@@ -107,11 +107,18 @@
}
@Override
- public int compareTo(final Object o) {
- // TODO Auto-generated method stub
- return 0;
+ public int compareTo(AbsoluteTime o) {
+ return Long.signum(this.abs_value - o.abs_value);
}
+
+ @Override
+ public boolean equals(Object other) {
+ return other instanceof AbsoluteTime && compareTo((AbsoluteTime)
other) == 0;
+ }
+
+
+
/**
* Calculates the difference between two absolute times.
*
@@ -199,10 +206,6 @@
}
public static AbsoluteTime fromNetwork(AbsoluteTimeMessage m) {
- if (m.value__ < 0) {
- return AbsoluteTime.FOREVER;
- } else {
- return new AbsoluteTime(m.value__);
- }
+ return m.value__ < 0 ? AbsoluteTime.FOREVER : new
AbsoluteTime(m.value__);
}
}
Modified: gnunet-java/src/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Client.java 2012-01-25 23:19:25 UTC (rev
19419)
+++ gnunet-java/src/org/gnunet/util/Client.java 2012-01-26 07:36:44 UTC (rev
19420)
@@ -25,22 +25,20 @@
import org.gnunet.construct.MessageLoader;
import org.gnunet.exceptions.ConfigurationException;
import org.gnunet.exceptions.InterfaceViolationException;
-import org.gnunet.service.Resolver;
import org.gnunet.util.Scheduler.Task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOError;
import java.io.IOException;
-import java.net.ConnectException;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
-import java.nio.channels.ClosedChannelException;
import java.nio.channels.SocketChannel;
import java.nio.channels.spi.SelectorProvider;
import java.util.Arrays;
+import java.util.LinkedList;
-
/**
* Represents a connection to a service.
*/
@@ -60,12 +58,7 @@
private ByteBuffer transmitBuffer =
ByteBuffer.allocate(INITIAL_BUFFER_SIZE);
private MessageTransmitter nextTransmitter = null;
- private boolean connected = false;
- private String serviceName;
- private Configuration cfg;
- private Resolver resolver;
-
/**
* Represents a request for transmission.
*/
@@ -169,7 +162,7 @@
public void run(Context ctx) {
try {
int n = chan.write(transmitBuffer);
- logger.debug("chan has written "+n + " bytes");
+ logger.debug("chan has written " + n + " bytes");
} catch (IOException e) {
throw new IOError(e);
}
@@ -206,35 +199,98 @@
}
}
- private class ConnectHelper implements Task {
+ private class ConnectHelper implements Task, Resolver.AddressCallback {
+ private boolean resolveActive = false;
+ private LinkedList<InetAddress> addrList = new
LinkedList<InetAddress>();
+ private String hostname;
+ private int port;
+ private RelativeTime backoff = RelativeTime.MILLISECOND;
+
+ public ConnectHelper(String hostname, int port) {
+ this.hostname = hostname;
+ this.port = port;
+ }
+
@Override
public void run(Context ctx) {
- finishConnect();
+ connectStep();
}
+
+ private void increaseBackoff() {
+ backoff = RelativeTime.max(backoff.multiply(2),
RelativeTime.SECOND);
+ }
+ private void resetBackoff() {
+ backoff = RelativeTime.MILLISECOND;
+ }
- public void finishConnect() {
+
+ /**
+ * Execute the next step in connecting to a service.
+ * Automatically schedules further steps if necessary.
+ */
+ public void connectStep() {
+ if (chan == null) {
+ try {
+ chan = SelectorProvider.provider().openSocketChannel();
+ chan.configureBlocking(false);
+ } catch (IOException e) {
+ // this is fatal, no retry necessary
+ throw new IOError(e);
+ }
+ }
+ if (chan.isConnected()) {
+ return;
+ }
try {
- if (chan.finishConnect()) {
- logger.debug("finished connect");
- connected = true;
- if (currentTransmit == null && nextTransmitter != null) {
- MessageTransmitter t = nextTransmitter;
- nextTransmitter = null;
- startTransmit(t);
+ if (chan.isConnectionPending()) {
+ if (chan.finishConnect()) {
+ logger.debug("finished connect");
+ // start transmit if request for transmit is pending
+ if (currentTransmit == null && nextTransmitter !=
null) {
+ MessageTransmitter t = nextTransmitter;
+ nextTransmitter = null;
+ startTransmit(t);
+ }
+ } else {
+ logger.debug("still not finished");
+ Scheduler.add(this, backoff);
+ this.increaseBackoff();
}
} else {
- logger.debug("still not finished");
- Scheduler.addDelayed(new RelativeTime(5), this);
+ InetAddress addr = addrList.poll();
+ 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 (ConnectException e) {
- logger.debug("got connect exception");
- Scheduler.addDelayed(new RelativeTime(5), this);
- } catch (ClosedChannelException e) {
- do_connect();
} catch (IOException e) {
- throw new IOError(e);
+ logger.debug("got exception while connecting, retrying", e);
+ chan = null;
+ Scheduler.add(this, backoff);
+ increaseBackoff();
}
}
+
+ @Override
+ public void onAddress(InetAddress addr) {
+ addrList.add(addr);
+ connectStep();
+ }
+
+ @Override
+ public void onFinished() {
+ this.resolveActive = false;
+ Scheduler.add(this, backoff);
+ }
+
+ public void startResolve() {
+ this.resolveActive = true;
+ Resolver.getInstance().resolveHostname(hostname,
RelativeTime.FOREVER, this);
+ }
}
@@ -245,48 +301,22 @@
* @param cfg configuration to use
*/
public Client(String serviceName, Configuration cfg) {
- this(serviceName, Resolver.getInstance(), cfg);
- }
-
-
- /**
- * Get a connection with a service, using a specific resolver.
- * Used mainly while the default resolver is not yet available / for
connecting to the resolver service.
- *
- * @param serviceName name of the service
- * @param resolver the resolver to use
- * @param cfg configuration to use
- */
- public Client(String serviceName, Resolver resolver, Configuration cfg) {
- this.serviceName = serviceName;
- this.cfg = cfg;
- this.resolver = resolver;
-
- do_connect();
- }
-
- private void do_connect() {
+ // get port of this service from the configuration
int port = (int) cfg.getValueNumer(serviceName, "PORT");
+ // ... and check for validity
if (port > 0xFFFF || port <= 0) {
- throw new ConfigurationException(String.format("'%s' is not a
valid Port", port));
+ throw new ConfigurationException(String.format("'%s' is not a
valid port", port));
}
+ // ditto for hostname
String hostname = cfg.getValueString(serviceName, "HOSTNAME");
- try {
- chan = SelectorProvider.provider().openSocketChannel();
- chan.configureBlocking(false);
- } catch (IOException e) {
- // this is fatal, no retry necessary
- throw new IOError(e);
+ // todo: further validity checks
+ if (hostname.isEmpty()) {
+ throw new ConfigurationException(String.format("hostname of
service '%s' empty", serviceName));
}
- try {
- chan.connect(new InetSocketAddress("::1" /*hostname*/, port));
- } catch (IOException e) {
- // todo: retry until connect possible
- logger.warn("Failed to connect to " + hostname + " at port " +
port);
- throw new IOError(e);
- }
- ConnectHelper ct = new ConnectHelper();
- ct.finishConnect();
+ // create a connect helper
+ ConnectHelper connectHelper = new ConnectHelper(hostname, port);
+ // start with the first step
+ connectHelper.connectStep();
}
/**
@@ -358,7 +388,7 @@
* @param timeout after how long should we give up (and call
* notify with buf NULL and size 0)?
* @param autoRetry if the connection to the service dies, should we
- * automatically re-connect and retry (within the
timeout period)
+ * automatically re-connectStep and retry (within the
timeout period)
* or should we immediately fail in this case? Pass
GNUNET_YES
* if the caller does not care about temporary
connection errors,
* for example because the protocol is stateless
@@ -375,7 +405,7 @@
transmitBuffer = ByteBuffer.allocate(size);
logger.debug("bigger transmitBuffer allocated");
}
- if (currentTransmit == null && connected) {
+ if (currentTransmit == null && chan != null && chan.isConnected()) {
startTransmit(transmitter);
return new TransmitHandle() {
@Override
@@ -386,7 +416,7 @@
} else {
if (!timeout.isForever()) {
TransmitTimeoutHelper h = new
TransmitTimeoutHelper(transmitter, size);
- nextTransmitTimeout = Scheduler.addDelayed(timeout, h);
+ nextTransmitTimeout = Scheduler.add(h, timeout);
}
nextTransmitter = transmitter;
return new TransmitHandle() {
Modified: gnunet-java/src/org/gnunet/util/Program.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Program.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/util/Program.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -1,24 +1,41 @@
package org.gnunet.util;
-import org.gnunet.service.Resolver;
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;
public abstract class Program {
+ private static final Logger logger = LoggerFactory
+ .getLogger(Resolver.class);
+
protected final Configuration cfg = new Configuration();
-
@Option(shortname = "c", longname = "config",
description = "Path of the configuration file",
- action ="store-string")
+ argumentName = "FILENAME",
+ action = OptionAction.STORE_STRING)
public String cfgFileName;
-
+ @Option(shortname = "h", longname = "help",
+ description = "print this help message",
+ action = OptionAction.SET)
+ public boolean printHelp;
+
+ @Option(shortname = "v", longname = "version",
+ description = "display version information",
+ action = OptionAction.SET)
+ public boolean showVersion;
+
+
protected final String[] unprocessedArgs;
+ private Parser optParser;
+
/**
* A program with the desired environment for a gnunet utility.
* While executing the scheduler is guaranteed to run, command arguments
are parsed,
@@ -27,33 +44,43 @@
* @param args
*/
public Program(String[] args) {
- // rargs = GetOptParser.parse (args, this);
- unprocessedArgs = args;
-
- try {
- Parser.parse(this, unprocessedArgs);
- } catch (Parser.ArgumentError e) {
- System.err.println(e.getMessage());
- System.exit(-1);
+ optParser = new Parser(this);
+ unprocessedArgs = optParser.parse(args);
+
+ cfg.loadDefaults();
+
+ if (cfgFileName != null) {
+ logger.debug("loading extra config file");
+ cfg.parse(cfgFileName);
}
- cfg.loadDefaults();
+ Resolver.getInstance().setConfiguration(cfg);
}
+
+ protected String getHelpDescription() {
+ return "gnunet-java tool";
+ }
- public Program() {
- this(new String[]{});
+ protected String getVersionDescription() {
+ return "development version of gnunet-java";
}
/**
* Start the Program as the initial Task of the Scheduler.
*/
public final void start() {
- Resolver.getInstance().connect(cfg);
- Scheduler.run(new Scheduler.Task() {
- public void run(Scheduler.Task.Context c) {
- Program.this.run();
- }
- });
+ if (showVersion) {
+ System.out.println(getVersionDescription());
+ } else if (printHelp) {
+ System.out.println(getHelpDescription());
+ System.out.print(optParser.getHelp());
+ } else {
+ Scheduler.run(new Scheduler.Task() {
+ public void run(Scheduler.Task.Context c) {
+ Program.this.run();
+ }
+ });
+ }
}
/**
Modified: gnunet-java/src/org/gnunet/util/RelativeTime.java
===================================================================
--- gnunet-java/src/org/gnunet/util/RelativeTime.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/util/RelativeTime.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -98,10 +98,10 @@
/**
* Return the maximum of two relative time values.
*
- * @return max(this, other)
+ * @return max(t1, t2)
*/
- public RelativeTime max(final RelativeTime other) {
- return rel_value >= other.rel_value ? this : other;
+ public static RelativeTime max(RelativeTime t1, RelativeTime t2) {
+ return t1.rel_value >= t2.rel_value ? t1 : t2;
}
/**
@@ -109,8 +109,8 @@
*
* @return min(this, other)
*/
- public RelativeTime min(final RelativeTime other) {
- return rel_value <= other.rel_value ? this : other;
+ public RelativeTime min(RelativeTime t1, RelativeTime t2) {
+ return t1.rel_value <= t2.rel_value ? t1 : t2;
}
/**
Copied: gnunet-java/src/org/gnunet/util/Resolver.java (from rev 19281,
gnunet-java/src/org/gnunet/service/Resolver.java)
===================================================================
--- gnunet-java/src/org/gnunet/util/Resolver.java
(rev 0)
+++ gnunet-java/src/org/gnunet/util/Resolver.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -0,0 +1,403 @@
+package org.gnunet.util;
+
+
+import org.gnunet.construct.*;
+import org.gnunet.exceptions.InterfaceViolationException;
+import org.gnunet.exceptions.MessageFormatException;
+import org.gnunet.util.getopt.Option;
+import org.gnunet.util.getopt.OptionAction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+
+public class Resolver {
+ private static final Logger logger = LoggerFactory
+ .getLogger(Resolver.class);
+ private Configuration cfg;
+
+ @SuppressWarnings("InstanceVariableMayNotBeInitialized")
+ public static class GetMessage implements Message {
+ final static int MSG_ID = 4;
+
+ static final int DIRECTION_GET_IP = 0;
+ static final int DIRECTION_GET_NAME = 1;
+ static final int AF_UNSPEC = 0;
+ static final int AF_INET = 2;
+ static final int AF_INET6 = 10;
+
+ @Nested
+ public MessageHeader header;
+
+ @UInt32
+ public int direction;
+ @UInt32
+ public int domain;
+ @ByteFill
+ public byte[] addr;
+ }
+
+
+ @MessageId(ResolverResponse.MSG_ID)
+ public static class ResolverResponse implements Message {
+ final static int MSG_ID = 5;
+ @Nested
+ public MessageHeader header;
+ @Nested(optional = true)
+ public ResponseBody responseBody;
+ }
+
+
+ public static class ResponseBody implements Message {
+ @UInt8
+ public int domain;
+ public
+ @UInt8
+ byte pad1;
+ public
+ @UInt8
+ byte pad2;
+ public
+ @UInt8
+ byte pad3;
+ @ByteFill
+ public byte[] addr;
+
+ // @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(".");
+ if (components.length != 4) {
+ return null;
+ }
+ byte[] addr = new byte[4];
+ for (int i = 0; i < 4; ++i) {
+ try {
+ addr[i] = Byte.parseByte(components[i]);
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+ try {
+ return Inet4Address.getByAddress(ip, addr);
+ } catch (UnknownHostException e) {
+ throw new AssertionError();
+ }
+ }
+
+ public InetAddress getInet6AddressFromString(String ip) {
+ String[] components = ip.split(":");
+ if (components.length > 8) {
+ return null;
+ }
+ byte[] addr = new byte[16];
+ boolean substituted = false;
+ for (int i = 0; i < 16; ++i) {
+ if (components[i].isEmpty()) {
+ if (substituted) {
+ // only one substitution
+ return null;
+ }
+ i = 16 - i - (components.length - 1);
+ } else {
+ try {
+ addr[i] = Byte.parseByte(components[i], 16);
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+ }
+ try {
+ return Inet6Address.getByAddress(ip, addr);
+ } catch (UnknownHostException e) {
+ return null;
+ }
+ }
+
+
+ /**
+ * Get address from numeric textual IP address. May be IPv4 or IPv6
+ *
+ * @return null if address is not numeric, the corresponding InetAddress
object otherwise
+ */
+ /* @Nullable */
+ public InetAddress getInetAddressFromString(String ip) {
+ // check for IPv4-address:
+ InetAddress inAddr = getInet4AddressFromString(ip);
+ if (inAddr != null) {
+ return inAddr;
+ }
+ return getInet4AddressFromString(ip);
+ }
+
+
+ public interface HostnameCallback {
+ public void onHostname(String hostname);
+
+ public void onFinished();
+ }
+
+ public interface AddressCallback {
+ public void onAddress(InetAddress addr);
+
+ public void onFinished();
+ }
+
+
+ Client client = null;
+
+ private void connect(Configuration cfg) {
+ if (client != null) {
+ throw new InterfaceViolationException("connectStep called twice");
+ }
+
+ }
+
+ public InetAddress resolveHostnameLocal(String hostname) {
+ if (hostname.equals("localhost") || hostname.equals("ip6-localhost")) {
+ try {
+ return InetAddress.getByName(hostname);
+ } catch (UnknownHostException e) {
+ return null;
+ }
+ }
+ return getInetAddressFromString(hostname);
+ }
+
+
+ public void setConfiguration(Configuration cfg) {
+ this.cfg = cfg;
+ }
+
+ private void lazyConnect() {
+ if (client == null) {
+ if (cfg == null) {
+ throw new InterfaceViolationException("Resolver has no
Configuration");
+ }
+ client = new Client("resolver", cfg);
+ }
+ }
+
+
+ public void resolveReverse(InetAddress inAddr, RelativeTime timeout,
HostnameCallback cb) {
+
+ lazyConnect();
+
+ byte[] addr = inAddr.getAddress();
+ final GetMessage gmsg = new GetMessage();
+ gmsg.header = new MessageHeader();
+ gmsg.header.messageType = GetMessage.MSG_ID;
+ gmsg.direction = GetMessage.DIRECTION_GET_NAME;
+ if (addr.length == 4) {
+ gmsg.domain = GetMessage.AF_INET;
+ } else if (addr.length == 16) {
+ gmsg.domain = GetMessage.AF_INET6;
+ } else {
+ throw new RuntimeException("invalid InetAddress");
+ }
+
+ gmsg.addr = Arrays.copyOf(addr, 16);
+
+ 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) {
+ sink.send(gmsg);
+ System.out.println("transmitting");
+
+ client.receive(new MessageReceiver() {
+ @Override
+ public void process(Message msg) {
+ System.out.println("receiving");
+ ResolverResponse resp = (ResolverResponse) msg;
+ System.out.println(resp.responseBody.domain);
+ }
+
+ @Override
+ public void handleTimeout() {
+ }
+ }, RelativeTime.FOREVER);
+
+ }
+
+
+ @Override
+ public void handleTimeout() {
+ }
+ });
+
+ }
+
+
+ public void resolveHostname(String hostname, RelativeTime timeout, final
AddressCallback cb) {
+ // try if hostname is numeric IP or loopback
+ InetAddress inetAddr = resolveHostnameLocal(hostname);
+ if (inetAddr != null) {
+ cb.onAddress(inetAddr);
+ cb.onFinished();
+ return;
+ }
+
+ lazyConnect();
+
+ final GetMessage req = new GetMessage();
+ req.header = new MessageHeader();
+ req.header.messageType = GetMessage.MSG_ID;
+ req.direction = GetMessage.DIRECTION_GET_IP;
+ req.domain = GetMessage.AF_UNSPEC;
+ byte[] addr = hostname.getBytes();
+ // add 0-byte
+ req.addr = Arrays.copyOf(addr, addr.length + 1);
+
+ req.header.messageSize = Construct.getSize(req);
+
+ logger.debug("" + req.header.messageSize);
+
+
+ client.notifyTransmitReady(
+ Construct.getSize(req),
+ RelativeTime.FOREVER, true,
+ new MessageTransmitter() {
+ @Override
+ public void transmit(Client.MessageSink sink) {
+ sink.send(req);
+
+ client.receive(new MessageReceiver() {
+ @Override
+ public void process(Message msg) {
+ ResolverResponse gmsg = (ResolverResponse) msg;
+ if (gmsg.responseBody != null) {
+ try {
+ InetAddress in_addr;
+ 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, 0, 16));
+ } else {
+ throw new
MessageFormatException("unknown AF_* domain");
+ }
+
+ cb.onAddress(in_addr);
+ client.receive(this,
RelativeTime.FOREVER);
+ } catch (UnknownHostException e) {
+ throw new
MessageFormatException("malformed address");
+ }
+ } else {
+ cb.onFinished();
+ }
+ }
+
+ @Override
+ public void handleTimeout() {
+ throw new RuntimeException("unreachable");
+ }
+ }, RelativeTime.FOREVER);
+
+ }
+
+ @Override
+ public void handleTimeout() {
+ throw new RuntimeException("unreachable");
+ }
+ });
+
+ }
+
+ private static Resolver singletonInstance = null;
+
+ public static Resolver getInstance() {
+ if (singletonInstance == null) {
+ singletonInstance = new Resolver();
+ }
+ return singletonInstance;
+ }
+
+
+ public static void main(final String[] argv) {
+ new Program(argv) {
+ @Option(shortname = "r", longname = "reverse",
+ description = "do reverse dns lookup",
+ action = OptionAction.SET)
+ boolean isReverse;
+
+ @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");
+ }
+ } else {
+ resolve();
+ }
+
+ }
+
+ public void resolve() {
+ for (String hostname : this.unprocessedArgs) {
+ System.out.println("resolving hostname '" + hostname +
"'");
+ Resolver.getInstance().resolveHostname(hostname,
RelativeTime.FOREVER, new AddressCallback() {
+ @Override
+ public void onAddress(InetAddress addr) {
+ System.out.println(addr);
+ }
+
+ @Override
+ public void onFinished() {
+ System.out.println("done.");
+ }
+ });
+ }
+ }
+
+ @Override
+ protected String getHelpDescription() {
+ return "tool for forward and reverse DNS lookup";
+ }
+ }.start();
+ }
+}
Modified: gnunet-java/src/org/gnunet/util/Scheduler.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Scheduler.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/util/Scheduler.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -20,6 +20,7 @@
package org.gnunet.util;
+import org.gnunet.exceptions.InterfaceViolationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -124,8 +125,7 @@
@Override
public int compareTo(final TimeoutTask o) {
- return new Long(this.timeout.getMilliseconds()).compareTo(o.timeout
- .getMilliseconds());
+ return this.timeout.compareTo(o.timeout);
}
public void registerSelect(SelectableChannel sc, int op) {
@@ -250,11 +250,8 @@
queueReady(tid);
}
- public static TaskIdentifier addDelayed(final RelativeTime delay,
- final Task task) {
- return addSelect(Priority.KEEP, null, delay, null, null, task);
- }
+
/**
* Schedule a new task to be run as soon as possible. The task will be run
* with the priority of the calling task.
@@ -263,12 +260,18 @@
* @return unique task identifier for the job only valid until "task" is
* started!
*/
- public static TaskIdentifier addNow(final Task task) {
+ public static TaskIdentifier add(Task task) {
return addSelect(Priority.KEEP, null, RelativeTime.ZERO, null, null,
task);
}
+
+ public static TaskIdentifier add(Task task, RelativeTime delay) {
+ return addSelect(Priority.KEEP, null, delay, null, null, task);
+ }
+
+
/**
* Schedule a new task to be run with a specified delay or when any of
* the specified file descriptor sets is ready. The delay can be used
@@ -310,17 +313,19 @@
timeoutTask.rs = rs == null ?
Collections.<SelectableChannel>emptySet() : new HashSet<SelectableChannel>(rs);
timeoutTask.ws = ws == null ?
Collections.<SelectableChannel>emptySet() : new HashSet<SelectableChannel>(ws);
+ if (delay.isForever() && timeoutTask.ws.isEmpty() &&
timeoutTask.rs.isEmpty()) {
+ throw new InterfaceViolationException("unschedulable task
created");
+ }
+
timeoutTask.register();
-
- if (delay.equals(RelativeTime.FOREVER) || (delay.getMilliseconds() ==
0)) {
+ if (delay.isForever()) {
pending.add(timeoutTask);
} else {
pending_timeout.add(timeoutTask);
}
return timeoutTask;
-
}
public static TaskIdentifier addRead(RelativeTime timeout,
@@ -414,10 +419,11 @@
// check if any timeouts occured
while (true) {
TimeoutTask t = pending_timeout.peek();
- // timeout tasks are stored in a heap, we just have to look at
the first task
- if (t == null || t.timeout.equals(AbsoluteTime.FOREVER) ||
t.timeout.compareTo(now) < 0) {
+ if (t == null || t.timeout.compareTo(now) > 0) {
+ // timeout tasks are stored in a heap, we just have to
look at the first task
break;
} else {
+ // timeout occured
t.deregister();
t.ctx.reasons = EnumSet.of(Reason.TIMEOUT);
queueReady(t);
@@ -425,11 +431,14 @@
}
}
+
+
if (ready_count > 0) {
timeout = RelativeTime.ZERO;
} else if (!pending_timeout.isEmpty()) {
+
timeout = pending_timeout.element().timeout.getDifference(now);
- assert timeout.getMilliseconds() > 0;
+
} else {
timeout = RelativeTime.FOREVER;
}
@@ -439,9 +448,9 @@
if (timeout.getMilliseconds() == 0) {
selector.selectNow();
} else {
- logger.debug("starting to select with timeout");
+ //logger.debug("starting to select with timeout");
selector.select(timeout.getMilliseconds());
- logger.debug("select with timeout ended");
+ //logger.debug("select with timeout ended");
}
} catch (IOException e) {
throw new IOError(e);
Deleted: gnunet-java/src/org/gnunet/util/getopt/Argument.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Argument.java 2012-01-25
23:19:25 UTC (rev 19419)
+++ gnunet-java/src/org/gnunet/util/getopt/Argument.java 2012-01-26
07:36:44 UTC (rev 19420)
@@ -1,14 +0,0 @@
-package org.gnunet.util.getopt;
-
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
address@hidden(RetentionPolicy.RUNTIME)
address@hidden(ElementType.FIELD)
-public @interface Argument {
- String name();
-
-}
Modified: gnunet-java/src/org/gnunet/util/getopt/Option.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Option.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/util/getopt/Option.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -11,6 +11,14 @@
public @interface Option {
public String shortname();
public String longname();
- public String action();
+ /**
+ * Possible values: "store-string", "set", "reset", "count", "store-int"
+ */
+ public OptionAction action();
+ /*
+ * Name of the Option's argument(s), empty string of option takes no
arguments
+ *
+ */
+ public String argumentName() default "";
public String description();
}
Added: gnunet-java/src/org/gnunet/util/getopt/OptionAction.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/OptionAction.java
(rev 0)
+++ gnunet-java/src/org/gnunet/util/getopt/OptionAction.java 2012-01-26
07:36:44 UTC (rev 19420)
@@ -0,0 +1,6 @@
+package org.gnunet.util.getopt;
+
+
+public enum OptionAction {
+ SET, RESET, STORE_STRING, STORE_INT, INCREMENT
+}
Modified: gnunet-java/src/org/gnunet/util/getopt/Parser.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Parser.java 2012-01-25 23:19:25 UTC
(rev 19419)
+++ gnunet-java/src/org/gnunet/util/getopt/Parser.java 2012-01-26 07:36:44 UTC
(rev 19420)
@@ -1,21 +1,19 @@
package org.gnunet.util.getopt;
+import org.gnunet.exceptions.InterfaceViolationException;
+
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
public class Parser {
-
public static class ArgumentError extends RuntimeException {
public ArgumentError(String s) {
super(s);
}
}
-
static class OptionField {
Option opt;
Field f;
@@ -26,18 +24,8 @@
}
}
- static class ArgumentField {
- Argument arg;
- Field f;
-
- public ArgumentField(Argument arg, Field f) {
- this.arg = arg;
- this.f = f;
- }
- }
-
// todo: unify with Construct.getMessageFields
- private static List<Field> getFields(Class c) {
+ private List<Field> getFields(Class c) {
LinkedList<Field> fields = new
LinkedList<Field>(Arrays.asList(c.getDeclaredFields()));
while ((c = c.getSuperclass()) != null) {
fields.addAll(0, Arrays.asList(c.getDeclaredFields()));
@@ -45,74 +33,172 @@
return fields;
}
- public static void parse(Object o, String[] args) {
+ private Map<String, OptionField> longOpt = new HashMap<String,
OptionField>();
+ private Map<String, OptionField> shortOpt = new HashMap<String,
OptionField>();
- LinkedList<ArgumentField> argFields = new LinkedList<ArgumentField>();
- LinkedList<OptionField> optFields = new LinkedList<OptionField>();
+ private Collection<Option> options = new LinkedList<Option>();
- for (Field f : getFields(o.getClass())) {
+ private Object targetObject;
+
+ public Parser(Object targetObject) {
+ this.targetObject = targetObject;
+ // gather option annotations
+ for (Field f : getFields(targetObject.getClass())) {
if (f.isSynthetic() || Modifier.isStatic(f.getModifiers())) {
continue;
}
- Argument a = f.getAnnotation(Argument.class);
- if (a != null) {
- argFields.add(new ArgumentField(a, f));
- }
// todo: validity checking of annotations
Option opt = f.getAnnotation(Option.class);
if (opt != null) {
- optFields.add(new OptionField(opt, f));
+ if (opt.shortname().length() != 1) {
+ throw new InterfaceViolationException("short name must be
of length 1");
+ }
+
+ f.setAccessible(true);
+
+ longOpt.put(opt.longname(), new OptionField(opt, f));
+ shortOpt.put(opt.shortname(), new OptionField(opt, f));
+ options.add(opt);
}
}
- LinkedList<String> posArgs = new LinkedList();
+ }
- int p = 0;
-
- while (p < args.length) {
- if (args[p].equals("--")) {
- throw new UnsupportedOperationException();
+ public String getHelp() {
+ StringBuilder helpString = new StringBuilder();
+ for (Option opt : options) {
+ StringBuilder line = new StringBuilder();
+ line.append(" -");
+ line.append(opt.shortname());
+ line.append(" --");
+ line.append(opt.longname());
+ if (!opt.argumentName().isEmpty()) {
+ line.append("=");
+ line.append(opt.argumentName());
}
- if (args[p].startsWith("--")) {
- throw new UnsupportedOperationException("long option");
+ while (line.length() < 30) {
+ line.append(" ");
}
- if (args[p].startsWith("-")) {
- // option
- throw new UnsupportedOperationException("short option");
- }
+ helpString.append(line);
+ helpString.append(" ");
+ helpString.append(opt.description());
+ helpString.append("\n");
- // [...]
+ }
+ return helpString.toString();
+ }
- posArgs.add(args[p]);
+ /**
+ * Parses the given arguments, and sets the target object's fields
+ * according to its annotations.
+ *
+ * @param args array with the program arguments
+ * @return positional arguments
+ */
+ public String[] parse(String[] args) {
+ // unprocessed positional args
+ Deque<String> posArgs = new LinkedList<String>();
- p++;
- }
+ int p = 0;
- for (Field f : getFields(o.getClass())) {
- if (f.isSynthetic() || Modifier.isStatic(f.getModifiers())) {
- continue;
+ while (p < args.length) {
+ // arguments after single "--" are all positional
+ if (args[p].equals("--")) {
+ posArgs.addAll(Arrays.asList(args).subList(p + 1,
args.length));
+ break;
}
- Argument a = f.getAnnotation(Argument.class);
- if (a != null) {
- if (posArgs.isEmpty()) {
- throw new ArgumentError("argument " + a.name() + "
missing");
+
+ if (args[p].startsWith("--")) {
+ String longOptionString = args[p].substring(2);
+ 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]));
}
- if (f.getType().equals(String.class)) {
+ try {
+ switch (of.opt.action()) {
+ case SET:
+ if (!of.f.getType().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)) {
+ 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)) {
+ 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());
+ }
+ of.f.set(targetObject, components[1]);
+ break;
+ case STORE_INT:
+ throw new UnsupportedOperationException("not yet
implemented");
+ case INCREMENT:
+ throw new UnsupportedOperationException("not yet
implemented");
+ }
+ } catch (IllegalAccessException e) {
+ throw new InterfaceViolationException(
+ String.format("cannot acces member %s with @Option
annotation", of.f.getName()));
+ }
+ } else if (args[p].length() > 1 && args[p].startsWith("-")) {
+ for (int i = 1; i < args[p].length(); ++i) {
+ OptionField of = shortOpt.get(args[p].substring(i, i+1));
+ if (of == null) {
+ throw new ArgumentError(String.format("unknown short
option: -%s", args[p].charAt(i)));
+ }
try {
- f.setAccessible(true);
- f.set(o, posArgs.pollFirst());
+ switch (of.opt.action()) {
+ case SET:
+ if (!of.f.getType().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)) {
+ 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)) {
+ 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");
+ }
+ p++;
+ if (args.length <= p) {
+ throw new ArgumentError("missing string
argument to option -" + of.opt.shortname());
+ }
+
+ of.f.set(targetObject, p);
+ break;
+ case STORE_INT:
+ throw new UnsupportedOperationException("not
yet implemented");
+ case INCREMENT:
+ throw new UnsupportedOperationException("not
yet implemented");
+ }
} catch (IllegalAccessException e) {
- throw new RuntimeException(e);
+ throw new ArgumentError(
+ String.format("cannot acces member %s with
@Option annotation", of.f.getName()));
}
- } else {
- throw new RuntimeException("target type not yet
supported");
}
+
+ } else {
+ posArgs.add(args[p]);
}
- }
- if (!posArgs.isEmpty()) {
- throw new ArgumentError("too many arguments");
+ p++;
}
+ return posArgs.toArray(args);
}
}
Modified: gnunet-java/src/org/grothoff/Runabout.java
===================================================================
--- gnunet-java/src/org/grothoff/Runabout.java 2012-01-25 23:19:25 UTC (rev
19419)
+++ gnunet-java/src/org/grothoff/Runabout.java 2012-01-26 07:36:44 UTC (rev
19420)
@@ -237,8 +237,7 @@
Class viC = args[0];
if (result.get(viC) != null)
continue;
- Code co = null;
- co = makeCode(viC);
+ Code co = makeCode(viC);
if (co == null)
throw new RunaboutException("Could not create/load
dynamic code!");
result.put(viC, co);
Modified: gnunet-java/test/org/gnunet/construct/ByteFillMessage.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/ByteFillMessage.java 2012-01-25
23:19:25 UTC (rev 19419)
+++ gnunet-java/test/org/gnunet/construct/ByteFillMessage.java 2012-01-26
07:36:44 UTC (rev 19420)
@@ -1,12 +1,6 @@
package org.gnunet.construct;
-/**
- * Created by IntelliJ IDEA.
- * User: dold
- * Date: 1/17/12
- * Time: 10:20 PM
- * To change this template use File | Settings | File Templates.
- */
+
public class ByteFillMessage implements Message {
@Nested
public MessageHeader header;
Added: gnunet-java/test/org/gnunet/construct/UnionTest.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/UnionTest.java
(rev 0)
+++ gnunet-java/test/org/gnunet/construct/UnionTest.java 2012-01-26
07:36:44 UTC (rev 19420)
@@ -0,0 +1,44 @@
+package org.gnunet.construct;
+
+
+import org.junit.Test;
+
+public class UnionTest {
+ public static interface TestUnion extends MessageUnion {}
+
+ @UnionCase(0)
+ public static class TestUnionCase0 implements TestUnion {
+ @Int8
+ public int val;
+ }
+
+ @UnionCase(1)
+ public static class TestUnionCase1 implements TestUnion{
+ @ZeroTerminatedString
+ public String str;
+ }
+
+ public static class UnionTestMessage implements Message {
+ @Int16
+ public int tag;
+ @Union(tag = "tag")
+ public TestUnion instance;
+ }
+
+
+
+ @Test
+ public void test_Union() {
+ UnionTestMessage utm = new UnionTestMessage();
+ utm.tag = 0;
+ utm.instance = new TestUnionCase0();
+ ((TestUnionCase0)utm.instance).val = 20;
+
+ byte[] a = Construct.toBinary(utm);
+
+ System.out.println(a.length);
+
+ UnionTestMessage utm2 = Construct.parseAs(a, 0,
UnionTestMessage.class);
+
+ }
+}
Modified:
gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
===================================================================
--- gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
2012-01-25 23:19:25 UTC (rev 19419)
+++ gnunet-java/test/org/gnunet/services/NetworkSizeEstimationServiceTest.java
2012-01-26 07:36:44 UTC (rev 19420)
@@ -11,7 +11,7 @@
import java.io.IOError;
import java.io.IOException;
-public class NetworkSizeEstimationServiceTest{
+public class NetworkSizeEstimationServiceTest {
class TestSubscriber implements NetworkSizeEstimation.NSE_Subscriber {
public boolean success = false;
NetworkSizeEstimation svc;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19420 - in gnunet-java: . .idea .idea/inspectionProfiles .idea/libraries src src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/service src/org/gnunet/util src/org/gnunet/util/getopt src/org/grothoff test/org/gnunet/construct test/org/gnunet/services,
gnunet <=