[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20802 - in gnunet-java: . .idea doc src/org/gnunet src/org
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20802 - in gnunet-java: . .idea doc src/org/gnunet src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/core src/org/gnunet/dht src/org/gnunet/util src/org/gnunet/util/getopt test/org/gnunet test/org/gnunet/construct test/org/gnunet/util |
Date: |
Wed, 28 Mar 2012 21:35:54 +0200 |
Author: dold
Date: 2012-03-28 21:35:54 +0200 (Wed, 28 Mar 2012)
New Revision: 20802
Added:
gnunet-java/src/org/gnunet/construct/Constructable.java
gnunet-java/src/org/gnunet/construct/FixedSizeByteArray.java
gnunet-java/src/org/gnunet/construct/parsers/FixedSizeByteArrayParser.java
gnunet-java/src/org/gnunet/core/
gnunet-java/src/org/gnunet/core/Core.java
gnunet-java/src/org/gnunet/util/HashCodeMessage.java
gnunet-java/src/org/gnunet/util/IntEnum.java
gnunet-java/src/org/gnunet/util/PeerIdentityMessage.java
gnunet-java/test/org/gnunet/util/
gnunet-java/test/org/gnunet/util/GetoptTest.java
Removed:
gnunet-java/test/org/gnunet/construct/GetoptTest.java
Modified:
gnunet-java/.idea/workspace.xml
gnunet-java/ISSUES
gnunet-java/doc/gnunet-exercise.tex
gnunet-java/src/org/gnunet/construct/Construct.java
gnunet-java/src/org/gnunet/construct/MsgMap.txt
gnunet-java/src/org/gnunet/construct/ReflectUtil.java
gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java
gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java
gnunet-java/src/org/gnunet/construct/parsers/FillParser.java
gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java
gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java
gnunet-java/src/org/gnunet/construct/parsers/Parser.java
gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java
gnunet-java/src/org/gnunet/construct/parsers/StringParser.java
gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java
gnunet-java/src/org/gnunet/dht/DistributedHashTable.java
gnunet-java/src/org/gnunet/util/AbsoluteTime.java
gnunet-java/src/org/gnunet/util/Client.java
gnunet-java/src/org/gnunet/util/HashCode.java
gnunet-java/src/org/gnunet/util/Scheduler.java
gnunet-java/src/org/gnunet/util/getopt/OptionAction.java
gnunet-java/src/org/gnunet/util/getopt/Parser.java
Log:
many bugfixes, dht api almost working
Modified: gnunet-java/.idea/workspace.xml
===================================================================
--- gnunet-java/.idea/workspace.xml 2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/.idea/workspace.xml 2012-03-28 19:35:54 UTC (rev 20802)
@@ -5,32 +5,40 @@
</component>
<component name="ChangeListManager">
<list default="true" readonly="true"
id="92cdd5e3-f1ea-4d90-81fc-cf0bd20d2d2e" name="Default" comment="">
- <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/parsers" />
- <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/parsers/IntegerParserTest.java"
/>
- <change type="DELETED"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/MessageId.java" afterPath=""
/>
- <change type="DELETED" beforePath="$PROJECT_DIR$/lib/commons-io-2.1.jar"
afterPath="" />
- <change type="MOVED"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/GnunetHash.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/HashCode.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml"
afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/core" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/test/org/gnunet/util" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/Constructable.java" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/FixedSizeByteArray.java" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeByteArrayParser.java"
/>
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/core/Core.java" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/util/HashCodeMessage.java" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/util/IntEnum.java" />
+ <change type="NEW" beforePath=""
afterPath="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentityMessage.java" />
+ <change type="MOVED"
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/GetoptTest.java"
afterPath="$PROJECT_DIR$/test/org/gnunet/util/GetoptTest.java" />
<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$/doc/gnunet-exercise.tex"
afterPath="$PROJECT_DIR$/doc/gnunet-exercise.tex" />
<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/ReflectUtil.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/ReflectUtil.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java"
/>
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/DoubleParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/DoubleParser.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FillParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FillParser.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java"
/>
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java"
/>
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/StringParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/StringParser.java" />
<change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java"
/>
<change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/dht/DistributedHashTable.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/dht/DistributedHashTable.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java" />
<change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" />
<change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Client.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Client.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentity.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentity.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/HashCode.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/HashCode.java" />
<change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java"
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java"
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java" />
- <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java"
afterPath="$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/getopt/OptionAction.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/OptionAction.java" />
+ <change type="MODIFICATION"
beforePath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java"
afterPath="$PROJECT_DIR$/src/org/gnunet/util/getopt/Parser.java" />
</list>
<ignored path="gnunet-java.iws" />
<ignored path=".idea/workspace.xml" />
@@ -88,67 +96,73 @@
</component>
<component name="FileEditorManager">
<leaf>
- <file leaf-file-name="Client.java" pinned="false" current="true"
current-in-tab="true">
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
+ <file leaf-file-name="DistributedHashTable.java" pinned="false"
current="true" current-in-tab="true">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/dht/DistributedHashTable.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="585" column="0" selection-start="21568"
selection-end="21568" vertical-scroll-proportion="0.85470086">
- <folding />
+ <state line="347" column="38" selection-start="9881"
selection-end="9881" vertical-scroll-proportion="8.403134">
+ <folding>
+ <element signature="imports" expanded="true" />
+ <element signature="e#7850#7862#0" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="MessageTransmitter.java" pinned="false"
current="false" current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageTransmitter.java">
+ <file leaf-file-name="Parser.java" pinned="false" current="false"
current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="9" column="16" selection-start="320"
selection-end="320" vertical-scroll-proportion="0.0">
+ <state line="7" column="17" selection-start="124"
selection-end="124" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="Scheduler.java" pinned="false" current="false"
current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java">
+ <file leaf-file-name="PeerIdentityMessage.java" pinned="false"
current="false" current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/PeerIdentityMessage.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="169" column="20" selection-start="5910"
selection-end="5910" vertical-scroll-proportion="0.0">
- <folding />
+ <state line="9" column="0" selection-start="229"
selection-end="229" vertical-scroll-proportion="0.0">
+ <folding>
+ <element signature="imports" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="Nested.java" pinned="false" current="false"
current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/Nested.java">
+ <file leaf-file-name="HashCodeMessage.java" pinned="false"
current="false" current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/HashCodeMessage.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="17" column="37" selection-start="438"
selection-end="438" vertical-scroll-proportion="0.0">
- <folding />
+ <state line="5" column="13" selection-start="125"
selection-end="125" vertical-scroll-proportion="0.0">
+ <folding>
+ <element signature="imports" 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="HashCode.java" pinned="false" current="false"
current-in-tab="false">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/HashCode.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="11" column="22" selection-start="282"
selection-end="282" vertical-scroll-proportion="0.0">
- <folding />
+ <state line="8" column="13" selection-start="183"
selection-end="183" vertical-scroll-proportion="0.0">
+ <folding>
+ <element signature="imports" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="Construct.java" pinned="false" current="false"
current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
+ <file leaf-file-name="NetworkSizeEstimation.java" pinned="false"
current="false" current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="311" column="5" selection-start="10236"
selection-end="10236" vertical-scroll-proportion="0.0">
- <folding>
- <element signature="imports" expanded="true" />
- <element signature="e#3514#3552#0" expanded="true" />
- </folding>
+ <state line="21" column="13" selection-start="468"
selection-end="468" vertical-scroll-proportion="0.0">
+ <folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="Resolver.java" pinned="false" current="false"
current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
+ <file leaf-file-name="VariableSizeArrayParser.java" pinned="false"
current="false" current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="16" column="10" selection-start="495"
selection-end="495" vertical-scroll-proportion="0.0">
+ <state line="9" column="13" selection-start="224"
selection-end="224" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -157,25 +171,28 @@
<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="69" column="27" selection-start="2291"
selection-end="2291" vertical-scroll-proportion="0.0">
+ <state line="70" column="0" selection-start="2408"
selection-end="2408" vertical-scroll-proportion="-18.04">
<folding />
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="SimpleTestMessage.java" pinned="false"
current="false" current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java">
+ <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="1" column="0" selection-start="30" selection-end="30"
vertical-scroll-proportion="0.0">
- <folding />
+ <state line="89" column="40" selection-start="2767"
selection-end="2769" vertical-scroll-proportion="-15.12">
+ <folding>
+ <element signature="imports" expanded="true" />
+ <element signature="e#3682#3720#0" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
</file>
- <file leaf-file-name="QueryMessage.java" pinned="false" current="false"
current-in-tab="false">
- <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java">
+ <file leaf-file-name="ConstructTest.java" pinned="false" current="false"
current-in-tab="false">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/ConstructTest.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="1" column="0" selection-start="30" selection-end="30"
vertical-scroll-proportion="0.0">
+ <state line="50" column="0" selection-start="1335"
selection-end="1335" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -191,22 +208,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
- <option value="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentity.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/util/AbsoluteTime.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/util/MessageReceiver.java"
/>
- <option
value="$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/util/Configuration.java" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/statistics/Statistics.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageLoader.java" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java"
/>
- <option value="$PROJECT_DIR$/src/org/gnunet/util/Resolver.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/construct/Nested.java" />
- <option
value="$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java" />
- <option
value="$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java" />
- <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" />
- <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java"
/>
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/FixedSizeByteArray.java" />
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeByteArrayParser.java"
/>
+ <option value="$PROJECT_DIR$/src/org/gnunet/util/HashCodeMessage.java"
/>
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/ReflectUtil.java" />
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java" />
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java"
/>
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/NestedParser.java" />
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/SequenceParser.java" />
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/ByteFillParser.java" />
<option value="$PROJECT_DIR$/src/org/gnunet/util/Client.java" />
+ <option value="$PROJECT_DIR$/ISSUES" />
+ <option value="$PROJECT_DIR$/src/org/gnunet/util/HashCode.java" />
+ <option
value="$PROJECT_DIR$/src/org/gnunet/util/PeerIdentityMessage.java" />
+ <option value="$PROJECT_DIR$/src/org/gnunet/construct/Construct.java"
/>
+ <option
value="$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java" />
+ <option
value="$PROJECT_DIR$/src/org/gnunet/dht/DistributedHashTable.java" />
</list>
</option>
</component>
@@ -272,24 +289,6 @@
<option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
- <option name="myItemId" value="test" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
@@ -308,136 +307,6 @@
<option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="org" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="util" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="org" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="org" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="nse" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="org" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="construct" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet-java" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="org" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="gnunet" />
- <option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="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>
- <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="lib" />
<option name="myItemType"
value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
@@ -462,24 +331,33 @@
</component>
<component name="PropertiesComponent">
<property name="GoToFile.includeJavaFiles" value="false" />
- <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+ <property name="OverrideImplement.combined" value="true" />
<property name="options.splitter.main.proportions" value="0.3" />
- <property name="options.lastSelected"
value="preferences.externalResources" />
- <property name="MemberChooser.sorted" value="false" />
<property name="recentsLimit" value="5" />
+ <property name="MemberChooser.sorted" value="false" />
+ <property name="options.lastSelected" value="preferences.sourceCode.Java"
/>
+ <property name="MemberChooser.copyJavadoc" value="false" />
+ <property name="GoToClass.toSaveIncludeLibraries" value="false" />
<property name="MemberChooser.showClasses" value="true" />
<property name="GoToClass.includeLibraries" value="false" />
- <property name="options.searchVisible" value="true" />
- <property name="options.splitter.details.proportions" value="0.2" />
- <property name="MemberChooser.copyJavadoc" value="false" />
<property name="dynamic.classpath" value="false" />
+ <property name="options.splitter.details.proportions" value="0.2" />
+ <property name="options.searchVisible" value="true" />
</component>
<component name="RecentsManager">
<key name="IntroduceConstantDialog.RECENTS_KEY">
<recent name="org.gnunet.nse.NetworkSizeEstimation.StartMessage" />
</key>
+ <key name="CreateClassDialog.RecentsKey">
+ <recent name="org.gnunet.construct.parsers" />
+ <recent name="org.gnunet.dht" />
+ <recent name="org.gnunet.util" />
+ </key>
+ <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+ <recent name="org.gnunet.util" />
+ </key>
</component>
- <component name="RunManager" selected="JUnit.IntegerParserTest">
+ <component name="RunManager" selected="JUnit.ConstructTest">
<configuration default="false" name="IntegerParserTest" type="JUnit"
factoryName="JUnit" temporary="true">
<module name="gnunet-java" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
@@ -502,6 +380,54 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
+ <configuration default="false" name="GetoptTest" 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.util" />
+ <option name="MAIN_CLASS_NAME" value="org.gnunet.util.GetoptTest" />
+ <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="false" name="ConstructTest" 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.ConstructTest" />
+ <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="Debug">
+ <option name="DEBUG_PORT" value="" />
+ <option name="TRANSPORT" value="0" />
+ <option name="LOCAL" value="true" />
+ </RunnerSettings>
+ <ConfigurationWrapper RunnerId="Debug" />
+ <method />
+ </configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@@ -568,8 +494,10 @@
<option name="Make" enabled="true" />
</method>
</configuration>
- <list size="1">
+ <list size="3">
<item index="0" class="java.lang.String"
itemvalue="JUnit.IntegerParserTest" />
+ <item index="1" class="java.lang.String" itemvalue="JUnit.GetoptTest" />
+ <item index="2" class="java.lang.String" itemvalue="JUnit.ConstructTest"
/>
</list>
<configuration name="<template>" type="TestNG" default="true"
selected="false">
<option name="MAIN_CLASS_NAME" />
@@ -633,16 +561,16 @@
<layout>
<window_info id="Changes" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Find" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33"
sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Debug" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4"
sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+ <window_info id="Find" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.63736266"
sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+ <window_info id="Debug" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3282967"
sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.32967034" sideWeight="0.5" order="7" side_tool="true"
content_ui="tabs" />
- <window_info id="Favorites" active="false" anchor="left"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+ <window_info id="Favorites" active="false" anchor="left"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.24982257" sideWeight="0.6318681" order="2" side_tool="true"
content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.32967034" sideWeight="0.5" order="7" side_tool="false"
content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33"
sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24982257"
sideWeight="0.6703297" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Run" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3282967"
sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+ <window_info id="Run" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32692307"
sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom"
auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false"
weight="0.3997253" sideWeight="0.5" order="5" side_tool="false"
content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false"
internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25"
sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="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" />
@@ -685,7 +613,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" />
+ <option name="LAST_COMMIT_MESSAGE" value="changed GnunetMessage to use
unions" />
<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" />
@@ -698,125 +626,133 @@
<option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
+ <MESSAGE value="changed GnunetMessage to use unions" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
</component>
<component name="editorHistoryManager">
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageIdAnnotationProcessor.java">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="105" column="7" selection-start="4597"
selection-end="4597" vertical-scroll-proportion="-13.6">
- <folding>
- <element signature="e#900#930#0" expanded="true" />
- </folding>
+ <state line="179" column="28" selection-start="6291"
selection-end="6291" vertical-scroll-proportion="0.0">
+ <folding />
</state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/MessageHeader.java">
+ <entry file="file://$PROJECT_DIR$/ISSUES">
<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="320" column="87" selection-start="11358"
selection-end="11358" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/GnunetMessage.java">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="13" column="20" selection-start="318" selection-end="318"
vertical-scroll-proportion="0.0">
+ <state line="37" column="13" selection-start="1209"
selection-end="1209" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/IntegerParser.java">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/UnionTest.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="9" column="13" selection-start="221" selection-end="221"
vertical-scroll-proportion="0.0">
+ <state line="8" 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/parsers/NestedParser.java">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/StringMessage.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="11" column="13" selection-start="269" selection-end="269"
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/Union.java">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/VarTestMessage.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="10" column="18" selection-start="275" selection-end="275"
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/Nested.java">
+ <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/ConstructTest.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="17" column="37" selection-start="438" selection-end="438"
vertical-scroll-proportion="0.0">
+ <state line="50" column="0" selection-start="1335"
selection-end="1335" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Program.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="11" column="22" selection-start="282" selection-end="282"
vertical-scroll-proportion="0.0">
+ <state line="9" column="13" selection-start="224" selection-end="224"
vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/SimpleTestMessage.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/nse/NetworkSizeEstimation.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="1" column="0" selection-start="30" selection-end="30"
vertical-scroll-proportion="0.0">
+ <state line="21" column="13" selection-start="468" selection-end="468"
vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/test/org/gnunet/construct/QueryMessage.java">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/HashCode.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="1" column="0" selection-start="30" selection-end="30"
vertical-scroll-proportion="0.0">
- <folding />
+ <state line="8" column="13" selection-start="183" selection-end="183"
vertical-scroll-proportion="0.0">
+ <folding>
+ <element signature="imports" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/HashCodeMessage.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="69" column="27" selection-start="2291"
selection-end="2291" vertical-scroll-proportion="0.0">
- <folding />
+ <state line="5" column="13" selection-start="125" selection-end="125"
vertical-scroll-proportion="0.0">
+ <folding>
+ <element signature="imports" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/PeerIdentityMessage.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="311" column="5" selection-start="10236"
selection-end="10236" vertical-scroll-proportion="0.0">
+ <state line="9" column="0" selection-start="229" selection-end="229"
vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
- <element signature="e#3514#3552#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Resolver.java">
+ <entry file="file://$PROJECT_DIR$/src/org/gnunet/construct/Construct.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="16" column="10" selection-start="495" selection-end="495"
vertical-scroll-proportion="0.0">
- <folding />
+ <state line="89" column="40" selection-start="2767"
selection-end="2769" vertical-scroll-proportion="-15.12">
+ <folding>
+ <element signature="imports" expanded="true" />
+ <element signature="e#3682#3720#0" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Scheduler.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/Parser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="169" column="20" selection-start="5910"
selection-end="5910" vertical-scroll-proportion="0.0">
+ <state line="7" column="17" selection-start="124" selection-end="124"
vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
- <entry
file="file://$PROJECT_DIR$/src/org/gnunet/util/MessageTransmitter.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/construct/parsers/UnionParser.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="9" column="16" selection-start="320" selection-end="320"
vertical-scroll-proportion="0.0">
+ <state line="70" column="0" selection-start="2408"
selection-end="2408" vertical-scroll-proportion="-18.04">
<folding />
</state>
</provider>
</entry>
- <entry file="file://$PROJECT_DIR$/src/org/gnunet/util/Client.java">
+ <entry
file="file://$PROJECT_DIR$/src/org/gnunet/dht/DistributedHashTable.java">
<provider selected="true" editor-type-id="text-editor">
- <state line="585" column="0" selection-start="21568"
selection-end="21568" vertical-scroll-proportion="0.85470086">
- <folding />
+ <state line="347" column="38" selection-start="9881"
selection-end="9881" vertical-scroll-proportion="8.403134">
+ <folding>
+ <element signature="imports" expanded="true" />
+ <element signature="e#7850#7862#0" expanded="true" />
+ </folding>
</state>
</provider>
</entry>
Modified: gnunet-java/ISSUES
===================================================================
--- gnunet-java/ISSUES 2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/ISSUES 2012-03-28 19:35:54 UTC (rev 20802)
@@ -310,4 +310,27 @@
}
-public interface GnunetMessageBody extends MessageUnion { }
\ No newline at end of file
+public interface GnunetMessageBody extends MessageUnion { }
+
+
+
+
+------------------------------------------------------------------------
+
+* gnunet-service-dht -h produces segfault
+* block type "any" does not work on request (gnunet-dht-get always changes any
to test)
+
+* SendMessage: comment on peer field ambiguous
+
+* should we support the TEST message, how should service_test be implemented?
+
+* DHT:
+ * why is there no ack from the dht that a put request has been received?
+ * how unique is the UID? globally? per connection?
+ * by looking at the sources: (client,uid) identifies a request unambiguously
+ * what is a "dealy do"? ;) (see dht.h)
+ * why does the ClientGetStopMessage include the Hash? Isn't the 64-bit UID
sufficient?
+
+* advantages / disadvantages of queueing messages (in client and core)
+
+* should I check in stuff like the installer binary etc.?
\ No newline at end of file
Modified: gnunet-java/doc/gnunet-exercise.tex
===================================================================
--- gnunet-java/doc/gnunet-exercise.tex 2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/doc/gnunet-exercise.tex 2012-03-28 19:35:54 UTC (rev 20802)
@@ -23,8 +23,13 @@
\section{Prerequisites}
-This tutorial assumes that you have gnunet$\geq$0.9.2 installed and running on
your system.
+This tutorial assumes that you have gnunet$\geq$0.9.2 installed on your system.
Instructions on how to do this can be found at
\url{https://gnunet.org/installation}.
+Make sure that the default gnunet services are running by typing
+\begin{lstlisting}
+gnunet-arm -I
+\end{lstlisting}
+The running services should be at least core,... (TODO)
\section{Installing gnunet-java}
You can either check out the latest version of gnunet-java with
@@ -40,7 +45,7 @@
on your command line.
\section{First Steps}
-Programs to communicate with gnunet are located unter the tools/ directory.
You can add this directory to your path,
+Programs to communicate with gnunet are located unter the bin/ directory. You
can add this directory to your path,
otherwise you have to prefix every command with this directory.
To test if everything is working, try to run the program gnunet-nse. This
should show you the estimated current size
@@ -48,6 +53,8 @@
\subsection{Project Layout}
+\section{Creating an extension}
+
\subsection{A simple gnunet-java program}
\subsubsection{The skeleton for every program}
Modified: gnunet-java/src/org/gnunet/construct/Construct.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Construct.java 2012-03-28 19:27:29 UTC
(rev 20801)
+++ gnunet-java/src/org/gnunet/construct/Construct.java 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -3,6 +3,8 @@
import org.gnunet.construct.parsers.*;
import org.gnunet.exceptions.InterfaceViolationException;
import org.grothoff.Runabout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
@@ -14,6 +16,11 @@
* @author Christian Grothoff
*/
public class Construct {
+ private static final Logger logger = LoggerFactory
+ .getLogger(Construct.class);
+
+
+
private static HashMap<Class<? extends Message>, Parser> parserCache = new
HashMap<Class<? extends Message>, Parser>(100);
/**
@@ -66,17 +73,19 @@
}
private static Parser getParser(Class<? extends Message> c,
- ParserGenerator pg) {
+ final 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)) {
+ pg.c = c;
Annotation[] as = f.getAnnotations();
if (as.length == 0 || f.isSynthetic() ||
Modifier.isStatic(f.getModifiers())) {
continue;
@@ -265,6 +274,13 @@
parser = new FixedSizeArrayParser(elemNumber, parser, f);
}
+ public void visit(FixedSizeByteArray fsba) {
+ Field f = field;
+ int elemNumber = fsba.length();
+
+ parser = new FixedSizeByteArrayParser(elemNumber, f);
+ }
+
public void visit(Double d) {
if (!field.getType().equals(java.lang.Double.TYPE)) {
throw new InterfaceViolationException("@Double target must be
a primitive 'double' field");
@@ -291,8 +307,8 @@
vsa.lengthField()));
} catch (NoSuchFieldException e) {
throw new InterfaceViolationException(String.format(
- "VariableSizeArray: length field '%s' does not exist",
- vsa.lengthField()));
+ "VariableSizeArray: length field '%s' does not exist
in class %s",
+ vsa.lengthField(), old_c));
}
}
}
@@ -334,7 +350,7 @@
public static void patch(Message m) {
Parser p = getParser(m.getClass());
- p.patch(m, p.getSize(m));
+ p.patch(m, p.getSize(m), m);
}
}
Added: gnunet-java/src/org/gnunet/construct/Constructable.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Constructable.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/Constructable.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -0,0 +1,8 @@
+package org.gnunet.construct;
+
+/**
+ * Implemented by classes that know how to serialize/deserialize themselves.
+ */
+public interface Constructable {
+ // todo
+}
Added: gnunet-java/src/org/gnunet/construct/FixedSizeByteArray.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/FixedSizeByteArray.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/FixedSizeByteArray.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -0,0 +1,19 @@
+package org.gnunet.construct;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * An array of bytes with static size.
+ *
+ * @author Florian Dold
+ *
+ */
address@hidden(RetentionPolicy.RUNTIME)
address@hidden(ElementType.FIELD)
+public @interface FixedSizeByteArray {
+ int length();
+}
\ No newline at end of file
Modified: gnunet-java/src/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/org/gnunet/construct/MsgMap.txt 2012-03-28 19:27:29 UTC
(rev 20801)
+++ gnunet-java/src/org/gnunet/construct/MsgMap.txt 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -9,5 +9,9 @@
org.gnunet.util.GnunetMessage$Body|4=org.gnunet.util.Resolver$GetMessage
org.gnunet.util.GnunetMessage$Body|323=org.gnunet.nse.NetworkSizeEstimation$UpdateMessage
org.gnunet.util.GnunetMessage$Body|5=org.gnunet.util.Resolver$ResolverResponse
+org.gnunet.util.GnunetMessage$Body|143=org.gnunet.dht.DistributedHashTable$DHTClientGetMessage
+org.gnunet.util.GnunetMessage$Body|142=org.gnunet.dht.DistributedHashTable$DHTClientPutMessage
org.gnunet.util.GnunetMessage$Body|321=org.gnunet.nse.NetworkSizeEstimation$StartMessage
-# generated 2012/03/26 19:15:26
+org.gnunet.util.GnunetMessage$Body|144=org.gnunet.dht.DistributedHashTable$DHTClientGetStopMessage
+org.gnunet.util.GnunetMessage$Body|145=org.gnunet.dht.DistributedHashTable$DHTClientResultMessage
+# generated 2012/03/28 21:13:11
Modified: gnunet-java/src/org/gnunet/construct/ReflectUtil.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/ReflectUtil.java 2012-03-28
19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/ReflectUtil.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -34,7 +34,6 @@
BIGNUM, BYTE_PRIM, SHORT_PRIM, INT_PRIM, LONG_PRIM, CHAR_PRIM
}
-
/**
* Convenience wrapper for a field that stores a numeric value.
*/
@@ -147,9 +146,10 @@
try {
obj = fl.get(i).get(obj);
} catch (IllegalArgumentException e) {
- throw new RuntimeException();
+ throw new RuntimeException(e);
} catch (IllegalAccessException e) {
- throw new RuntimeException();
+ throw new InterfaceViolationException("cannot access field " +
fl.get(i)
+ + " of " + obj.getClass());
}
}
return obj;
Modified: gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/ByteFillParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -77,7 +77,8 @@
}
@Override
- public void patch(Message m, int frameSize) {
- totalSizeField.set(ReflectUtil.followFieldPathToParent(totalSizePath,
m), frameSize);
+ public void patch(Message message, int frameSize, Message frameObject) {
+ // the size field is contained in the frameObject
+ totalSizeField.set(ReflectUtil.followFieldPathToParent(totalSizePath,
frameObject), frameSize);
}
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/DoubleParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -44,7 +44,7 @@
}
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
// nothing to do here
}
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/FillParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/FillParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/FillParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -82,7 +82,7 @@
}
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
totalSizeField.set(ReflectUtil.followFieldPathToParent(totalSizePath,
m), frameSize);
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/FixedSizeArrayParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -67,10 +67,10 @@
}
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
final Object arr = ReflectUtil.justGet(m, targetField);
for (int i = 0; i < Array.getLength(arr); ++i) {
- elemParser.patch((Message) Array.get(arr, i), frameSize);
+ elemParser.patch((Message) Array.get(arr, i), frameSize, frameObj);
}
}
}
Added:
gnunet-java/src/org/gnunet/construct/parsers/FixedSizeByteArrayParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/FixedSizeByteArrayParser.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/parsers/FixedSizeByteArrayParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -0,0 +1,46 @@
+package org.gnunet.construct.parsers;
+
+import org.gnunet.construct.Message;
+import org.gnunet.construct.ReflectUtil;
+import org.gnunet.exceptions.InterfaceViolationException;
+
+import java.lang.reflect.Field;
+import java.nio.ByteBuffer;
+
+public class FixedSizeByteArrayParser implements Parser {
+ private final int elemNumber;
+ private final Field targetField;
+
+ public FixedSizeByteArrayParser(int elemNumber, Field f) {
+ this.elemNumber = elemNumber;
+ this.targetField = f;
+ }
+
+ @Override
+ public int getSize(Message srcObj) {
+ return elemNumber;
+ }
+
+ @Override
+ public int parse(ByteBuffer srcBuf, int frameStart, Message frameObj,
Message dstObj) {
+ byte[] data = new byte[elemNumber];
+ srcBuf.get(data);
+ ReflectUtil.justSet(dstObj, targetField, data);
+ return elemNumber;
+ }
+
+ @Override
+ public int write(ByteBuffer dstBuf, Message srcObj) {
+ byte[] data = (byte[]) ReflectUtil.justGet(srcObj, targetField);
+ if (data.length != elemNumber) {
+ throw new InterfaceViolationException("fixed size array has wrong
size");
+ }
+ dstBuf.put(data);
+ return elemNumber;
+ }
+
+ @Override
+ public void patch(Message m, int frameSize, Message frameObj) {
+ // nothing to do
+ }
+}
Modified: gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/IntegerParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -56,7 +56,7 @@
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
// nothing to do
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/NestedParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -65,9 +65,9 @@
}
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
// todo: nested/opaque frames
- nestedParser.patch(m, frameSize);
+ nestedParser.patch(m, frameSize, frameObj);
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/Parser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/Parser.java 2012-03-28
19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/Parser.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -38,10 +38,11 @@
* Parser-dependent method; sets members of the Message m (or Messages
nested in m) which are
* values inferable by the parser.
* Examples: Union tags, size fields.
- *
+ *
* @param m the message object to patch
* @param frameSize the size of the containing message
+ * @param frameObj the object containing the message (and possibly size
fields)
*/
- public void patch(Message m, int frameSize);
+ public void patch(Message m, int frameSize, Message frameObj);
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/SequenceParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -51,9 +51,9 @@
}
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
for (final Parser p : childParsers) {
- p.patch(m, frameSize);
+ p.patch(m, frameSize, frameObj);
}
}
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/StringParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/StringParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/StringParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -103,7 +103,7 @@
}
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
// nothing to patch
}
Modified: gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/UnionParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -34,7 +34,11 @@
@Override
public int getSize(final Message src) {
- return Construct.getSize((Message) ReflectUtil.justGet(src,
targetField));
+ Class cls = ReflectUtil.justGet(src, targetField).getClass();
+
+ Parser parser = Construct.getParser(cls, frameSizePath, pathFromRoot);
+
+ return parser.getSize((Message)ReflectUtil.justGet(src, targetField));
}
private int getSizeFieldValue(Message m) {
@@ -44,8 +48,6 @@
@Override
public int parse(final ByteBuffer srcBuf, int frameOffset, Message
frameObj, final Message dstObj) {
-
-
if (optional) {
int remaining = frameOffset + getSizeFieldValue(frameObj) -
srcBuf.position();
if (remaining <= 0) {
@@ -75,7 +77,7 @@
@Override
public int write(final ByteBuffer dstBuf, final Message src) {
final Class currentUnionClass = ReflectUtil.justGet(src,
targetField).getClass();
- final Parser p = Construct.getParser(currentUnionClass);
+ final Parser p = Construct.getParser(currentUnionClass, frameSizePath,
pathFromRoot);
return p.write(dstBuf, (Message) ReflectUtil.justGet(src,
targetField));
}
@@ -85,12 +87,11 @@
}
@Override
- public void patch(Message m, int frameSize) {
- // todo: nested/opaque frames
+ public void patch(Message m, int frameSize, Message frameObj) {
final Class currentUnionClass = ReflectUtil.justGet(m,
targetField).getClass();
- final Parser p = Construct.getParser(currentUnionClass);
+ final Parser p = Construct.getParser(currentUnionClass, frameSizePath,
pathFromRoot);
- p.patch((Message) ReflectUtil.justGet(m, targetField), frameSize);
+ p.patch((Message) ReflectUtil.justGet(m, targetField), frameSize,
frameObj);
unionTagField.set(ReflectUtil.followFieldPathToParent(unionTagPath, m),
getTag(m));
Modified:
gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java
2012-03-28 19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/construct/parsers/VariableSizeArrayParser.java
2012-03-28 19:35:54 UTC (rev 20802)
@@ -69,7 +69,7 @@
}
@Override
- public void patch(Message m, int frameSize) {
+ public void patch(Message m, int frameSize, Message frameObj) {
int size = Array.getLength(ReflectUtil.justGet(m, targetField));
sizeField.set(m, size);
}
Added: gnunet-java/src/org/gnunet/core/Core.java
===================================================================
--- gnunet-java/src/org/gnunet/core/Core.java (rev 0)
+++ gnunet-java/src/org/gnunet/core/Core.java 2012-03-28 19:35:54 UTC (rev
20802)
@@ -0,0 +1,20 @@
+package org.gnunet.core;
+
+import org.gnunet.util.Cancelable;
+import org.gnunet.util.Configuration;
+
+public class Core {
+
+ public interface CoreCallback {
+
+ }
+
+ public Core(Configuration cfg, int queueSize, boolean inboundHeaderOnly,
boolean outboundHeaderOnly,
+ CoreCallback cb) {
+
+ }
+
+ public Cancelable notifyTransmitReady() {
+ return null;
+ }
+}
Modified: gnunet-java/src/org/gnunet/dht/DistributedHashTable.java
===================================================================
--- gnunet-java/src/org/gnunet/dht/DistributedHashTable.java 2012-03-28
19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/dht/DistributedHashTable.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -1,17 +1,20 @@
package org.gnunet.dht;
-import org.gnunet.construct.Message;
-import org.gnunet.construct.MessageHeader;
-import org.gnunet.construct.Nested;
-import org.gnunet.construct.UInt32;
+import org.gnunet.construct.*;
+import org.gnunet.exceptions.InterfaceViolationException;
import org.gnunet.util.*;
import org.gnunet.util.getopt.Option;
import org.gnunet.util.getopt.OptionAction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
public class DistributedHashTable {
+ private static final Logger logger = LoggerFactory
+ .getLogger(DistributedHashTable.class);
enum BlockType {
/**
@@ -63,90 +66,307 @@
*/
NAMERECORD(11);
- private final int val;
- BlockType(int i) {
- val = i;
+ private int val;
+
+ BlockType(int val) {
+ this.val = val;
}
}
+
enum RouteOption {
/**
* Default. Do nothing special.
*/
NONE(0),
-
/**
* Each peer along the way should look at 'enc' (otherwise
* only the k-peers closest to the key should look at it).
*/
DEMULTIPLEX_EVERYWHERE(1),
-
/**
* We should keep track of the route that the message
* took in the P2P network.
*/
RECORD_ROUTE(2),
-
/**
* This is a 'FIND-PEER' request, so approximate results are fine.
*/
FIND_PEER(4),
-
/**
* Possible message option for query key randomization.
*/
- RO_BART(8);
+ BART(8);
- private final int val;
- RouteOption(int i) {
- val = i;
+ private int val;
+
+ RouteOption(int val) {
+ this.val = val;
}
}
-
- public static class DHTClientGetMessage implements Message {
+ @UnionCase(143)
+ public static class DHTClientGetMessage implements GnunetMessage.Body {
+ /**
+ * Combination of RouteOption.*
+ */
+ @UInt32
+ public int options;
+ @UInt32
+ public int desiredReplicationLevel;
+ @UInt32
+ public int type;
@Nested
- public MessageHeader header;
+ public HashCodeMessage key;
+ @UInt64
+ public long uniqueId;
+ @ByteFill
+ public byte[] xquery;
+ }
+ @UnionCase(142)
+ public static class DHTClientPutMessage implements GnunetMessage.Body {
+ /**
+ * Type of data to insert, one of BlockType.*
+ */
@UInt32
+ public int type;
+ /**
+ * Combination of RouteOption.*
+ */
+ @UInt32
public int options;
+ @UInt32
+ public int desiredReplicationLevel;
+ @Nested
+ public AbsoluteTimeMessage expiration;
+ @Nested
+ public HashCodeMessage hash;
+ @ByteFill
+ public byte[] data;
+ }
+ @UnionCase(144)
+ public static class DHTClientGetStopMessage implements GnunetMessage.Body {
+ @UInt32
+ public int reserved = 0;
+ @UInt64
+ long unique_id;
+ @Nested
+ public HashCodeMessage key;
}
+ @UnionCase(145)
+ public static class DHTClientResultMessage implements GnunetMessage.Body {
+ @UInt32
+ public int type;
+ @UInt32
+ public int putPathLength;
+ @UInt32
+ public int getPathLength;
+ @UInt64
+ public long uid;
+ @Nested
+ public AbsoluteTimeMessage expiration;
+ @Nested
+ public HashCodeMessage key;
+ @VariableSizeArray(lengthField = "putPathLength")
+ public PeerIdentityMessage[] putPath;
+ @VariableSizeArray(lengthField = "getPathLength")
+ public PeerIdentityMessage[] getPath;
+ @ByteFill
+ public byte[] data;
+ }
+
+ public interface ResultCallback {
+ public void handleResult(AbsoluteTime expiration, HashCode key,
+ List<PeerIdentity> getPath,
List<PeerIdentity> putPath,
+ BlockType type, byte[] data);
+ }
+
+ enum PutResult {
+ OK, TIMEOUT
+ }
+
+ public interface Continuation {
+ public void call(PutResult r);
+ }
+
+
private Client client;
-
+ private long uid = 1;
+
+ /**
+ * Create a connection with the DHT service.
+ *
+ * @param cfg the configuration to use
+ */
public DistributedHashTable(Configuration cfg) {
client = new Client("dht", cfg);
}
- public interface Continuation {
- public void done();
+
+ /**
+ * @param key key
+ * @param data data
+ * @param replicationLevel
+ * @param routeOptions
+ * @param type
+ * @param expiration
+ * @param timeout
+ * @param cont
+ */
+ public void put(HashCode key, byte[] data, int replicationLevel,
EnumSet<RouteOption> routeOptions,
+ BlockType type, AbsoluteTime expiration,
+ RelativeTime timeout, final Continuation cont) {
+ final DHTClientPutMessage cpm = new DHTClientPutMessage();
+ cpm.data = data;
+ cpm.hash = key.asMessage();
+ cpm.desiredReplicationLevel = replicationLevel;
+ cpm.expiration = expiration.asMessage();
+ cpm.type = type.val;
+
+ client.notifyTransmitReady(timeout, true,
+ new MessageTransmitter() {
+ @Override
+ public void transmit(Client.MessageSink sink) {
+ sink.send(cpm);
+ // is there no way to get an ack from the dht service?
+ cont.call(PutResult.OK);
+ }
+
+ @Override
+ public void handleError(Client.TransmitError error) {
+ cont.call(PutResult.TIMEOUT);
+ }
+ });
}
- public interface ResultCallback {
- public void handleResult(AbsoluteTime expiration, HashCode key,
- List<PeerIdentity> getPath, List<PeerIdentity>
putPath,
- BlockType type, byte[] data);
+
+ private class GetRequest implements Cancelable {
+ public long uid;
+ public HashCode key;
+ public ResultCallback cb;
+ public AbsoluteTime deadline;
+
+ public GetRequest() {
+ uid = DistributedHashTable.this.uid++;
+ }
+
+ public void cancel() {
+ if (!activeRequests.contains(this)) {
+ throw new InterfaceViolationException("cancel called on
invalid request");
+ }
+
+ activeRequests.remove(this);
+
+ if (activeRequests.isEmpty()) {
+ receiveHandle.cancel();
+ }
+
+ client.notifyTransmitReady(RelativeTime.FOREVER, false, new
MessageTransmitter() {
+ @Override
+ public void transmit(Client.MessageSink sink) {
+ final DHTClientGetStopMessage sm = new
DHTClientGetStopMessage();
+ sm.key = key.asMessage();
+ sm.unique_id = uid;
+ sink.send(sm);
+ }
+
+ @Override
+ public void handleError(Client.TransmitError error) {
+ }
+ });
+ }
}
+ List<GetRequest> activeRequests = new ArrayList<GetRequest>(5);
+ Client.ReceiveHandle receiveHandle = null;
- public void put(HashCode key, int replicationLevel, EnumSet<RouteOption>
routeOptions,
- BlockType type, byte[] data, AbsoluteTime expiration,
- RelativeTime timeout, Continuation cont) {
+ public class ResponseDispatcher implements MessageReceiver {
+ @Override
+ public void process(GnunetMessage.Body msg) {
+ receiveHandle = null;
+ DHTClientResultMessage rm = (DHTClientResultMessage) msg;
+ GetRequest request = null;
+
+ for (GetRequest r : activeRequests) {
+ if (r.uid == rm.uid) {
+ request = r;
+ break;
+ }
+ }
+ if (request == null) {
+ logger.warn("received response on invalid UID");
+ } else {
+
request.cb.handleResult(AbsoluteTime.fromNetwork(rm.expiration),
+ HashCode.fromMessage(rm.key), null, null,
BlockType.TEST, rm.data);
+
+ if (request.deadline.isDue()) {
+ request.cancel();
+ }
+ }
+
+ if (!activeRequests.isEmpty()) {
+ receiveHandle = client.receive(RelativeTime.FOREVER, rh);
+ }
+ }
+
+ @Override
+ public void handleError(Client.ReceiveError e) {
+ }
}
+
+ private AbsoluteTime earliestDeadline;
+
+ private Scheduler.Task deadlineTask;
+
+
+ private final ResponseDispatcher rh = new ResponseDispatcher();
+
+
public Cancelable startGet(RelativeTime timeout, BlockType type, HashCode
key,
- int replicatoin, EnumSet<RouteOption>
routeOptions,
+ int replication, int routeOptions,
byte[] xquery, ResultCallback cb) {
- return null;
+
+ GetRequest request = new GetRequest();
+ request.key = key;
+ request.cb = cb;
+ request.deadline = timeout.toAbsolute();
+
+ final DHTClientGetMessage getMessage = new DHTClientGetMessage();
+ getMessage.desiredReplicationLevel = replication;
+ getMessage.key = key.asMessage();
+ getMessage.options = routeOptions;
+ getMessage.xquery = xquery;
+ getMessage.type = type.val;
+ getMessage.uniqueId = request.uid;
+
+ activeRequests.add(request);
+
+ if (receiveHandle == null) {
+ receiveHandle = client.receive(RelativeTime.FOREVER, rh);
+ }
+ client.notifyTransmitReady(timeout, false, new MessageTransmitter() {
+ @Override
+ public void transmit(Client.MessageSink sink) {
+ sink.send(getMessage);
+ }
+
+ @Override
+ public void handleError(Client.TransmitError error) {
+ }
+ });
+
+ return request;
}
-
public static void main(String[] args) {
new Program(args) {
@Option(action = OptionAction.SET,
@@ -159,37 +379,67 @@
shortname = "d",
longname = "data",
description = "data (only used with --put)")
- String data=null;
+ String data = null;
@Option(action = OptionAction.STORE_STRING,
shortname = "k",
longname = "key",
description = "key used for the operation")
- String key=null;
+ String key = null;
@Option(action = OptionAction.STORE_STRING,
shortname = "t",
longname = "type",
description = "type of data used in this operation")
- String type=null;
+ String type = null;
@Option(action = OptionAction.STORE_STRING,
shortname = "e",
longname = "expire",
- description = "expiration")
- String expiration=null;
+ description = "expiration (ony use with --put)")
+ String expiration = null;
- @Option(action = OptionAction.STORE_STRING,
+ @Option(action = OptionAction.STORE_NUMBER,
shortname = "r",
longname = "replication",
description = "desired replication (only used with --put)")
- String replication=null;
+ int replication = 5;
-
public void run() {
+ if (key == null) {
+ System.out.println("key required");
+ return;
+ }
+ DistributedHashTable dht = new DistributedHashTable(cfg);
+
+ if (modePut) {
+ if (data == null) {
+ System.out.println("data required on put");
+ return;
+ }
+
+ dht.put(new HashCode(key), data.getBytes(), replication,
EnumSet.of(RouteOption.NONE),
+ BlockType.TEST,
AbsoluteTime.now().add(RelativeTime.HOUR),
+ RelativeTime.FOREVER, new Continuation() {
+ @Override
+ public void call(PutResult r) {
+ System.out.println("put request sent");
+ }
+ });
+ } else {
+ dht.startGet(RelativeTime.SECOND, BlockType.TEST, new
HashCode(key), replication, 0,
+ new byte[0], new ResultCallback() {
+ @Override
+ public void handleResult(AbsoluteTime expiration,
HashCode key, List<PeerIdentity>
+ getPath, List<PeerIdentity> putPath, BlockType
type, byte[] data) {
+ System.out.println("got result:");
+ System.out.println(new String(data));
+ }
+ });
+ }
}
}.start();
}
Modified: gnunet-java/src/org/gnunet/util/AbsoluteTime.java
===================================================================
--- gnunet-java/src/org/gnunet/util/AbsoluteTime.java 2012-03-28 19:27:29 UTC
(rev 20801)
+++ gnunet-java/src/org/gnunet/util/AbsoluteTime.java 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -217,7 +217,7 @@
return new AbsoluteTime(abs_value - duration.getMilliseconds());
}
- public AbsoluteTimeMessage toNetwork() {
+ public AbsoluteTimeMessage asMessage() {
return new AbsoluteTimeMessage(this);
}
Modified: gnunet-java/src/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Client.java 2012-03-28 19:27:29 UTC (rev
20801)
+++ gnunet-java/src/org/gnunet/util/Client.java 2012-03-28 19:35:54 UTC (rev
20802)
@@ -336,7 +336,6 @@
gm.body = m;
Construct.patch(gm);
gm.header.messageSize = Construct.getSize(gm);
- System.out.println("size: " + Construct.getSize(gm));
byte[] b = Construct.toBinary(gm);
if (b.length != gm.header.messageSize) {
throw new InternalLogicError(
@@ -403,7 +402,7 @@
}
}
- public void initiateResolve() {
+ private void initiateResolve() {
if (resolveHandle != null) {
return;
}
@@ -463,7 +462,6 @@
currentTransmitHelper.start();
}
if (currentReceiveHelper != null &&
!currentReceiveHelper.working) {
- System.out.println("starting receive");
currentReceiveHelper.schedule();
}
}
@@ -499,6 +497,9 @@
connectNextAddress();
}
+ /**
+ * Cancel all pending receive requests. Reconnect to the service if not
already connected.
+ */
public void reconnect() {
if (currentReceiveHelper != null) {
currentReceiveHelper.cancel();
@@ -536,7 +537,6 @@
currentReceiveHelper.schedule();
}
-
return new ReceiveHandle() {
@Override
public void cancel() {
@@ -604,12 +604,19 @@
/**
* Disconnect from the service. Cancel all pending recveive/transmit
requests.
- * todo: introduce finishPendingWrites parameter
*/
public void disconnect() {
disconnect(false);
}
+ /**
+ * Disconnect from the service. Cancel all pending receive requests.
+ *
+ * If finishPendingRewrites is true, the client will only disconnect
+ * after the data in the transmit buffer has been transmitted.
+ *
+ * @param finishPendingWrites true if the client should finish
transmitting pending messages
+ */
public void disconnect(boolean finishPendingWrites) {
if (!finishPendingWrites || !currentTransmitHelper.notifyDone()) {
if (currentTransmitHelper != null) {
Modified: gnunet-java/src/org/gnunet/util/HashCode.java
===================================================================
--- gnunet-java/src/org/gnunet/util/HashCode.java 2012-03-28 19:27:29 UTC
(rev 20801)
+++ gnunet-java/src/org/gnunet/util/HashCode.java 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -1,9 +1,48 @@
package org.gnunet.util;
+import org.gnunet.exceptions.InterfaceViolationException;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
public class HashCode {
- private byte[] data;
+ private final byte[] data;
+
public HashCode(byte[] hash) {
+ if (hash.length != 64) {
+ throw new InterfaceViolationException("HashCode has to have length
64");
+ }
data = hash;
}
+
+ /**
+ * Create a HashCode of the String using SHA-512
+ * @param s
+ */
+ public HashCode(String s) {
+ MessageDigest digest;
+ try {
+ digest = MessageDigest.getInstance("SHA-512");
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException("crypto algorithm required but not
provided");
+ }
+ byte[] data = digest.digest(s.getBytes());
+ if (data.length != 64) {
+ throw new RuntimeException("error in SHA512 algorithm");
+ }
+ this.data = data;
+ }
+
+ public static HashCode fromMessage(HashCodeMessage m) {
+ return new HashCode(m.data);
+ }
+
+
+ public HashCodeMessage asMessage() {
+ HashCodeMessage hcm = new HashCodeMessage();
+ hcm.data = data;
+ return hcm;
+ }
+
}
\ No newline at end of file
Added: gnunet-java/src/org/gnunet/util/HashCodeMessage.java
===================================================================
--- gnunet-java/src/org/gnunet/util/HashCodeMessage.java
(rev 0)
+++ gnunet-java/src/org/gnunet/util/HashCodeMessage.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -0,0 +1,9 @@
+package org.gnunet.util;
+
+import org.gnunet.construct.FixedSizeByteArray;
+import org.gnunet.construct.Message;
+
+public class HashCodeMessage implements Message {
+ @FixedSizeByteArray(length = 64)
+ public byte[] data;
+}
Added: gnunet-java/src/org/gnunet/util/IntEnum.java
===================================================================
--- gnunet-java/src/org/gnunet/util/IntEnum.java
(rev 0)
+++ gnunet-java/src/org/gnunet/util/IntEnum.java 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -0,0 +1,16 @@
+package org.gnunet.util;
+
+
+public interface IntEnum {
+ public int getInt();
+}
+
+
+/*
+Template for IntEnums:
+class $NAME$ implements IntEnum {
+ private final int val;
+ public int getInt() { return val; }
+ public $NAME$(int i) { val = i; }
+}
+*/
\ No newline at end of file
Added: gnunet-java/src/org/gnunet/util/PeerIdentityMessage.java
===================================================================
--- gnunet-java/src/org/gnunet/util/PeerIdentityMessage.java
(rev 0)
+++ gnunet-java/src/org/gnunet/util/PeerIdentityMessage.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -0,0 +1,9 @@
+package org.gnunet.util;
+
+import org.gnunet.construct.FixedSizeByteArray;
+import org.gnunet.construct.Message;
+
+public class PeerIdentityMessage implements Message {
+ @FixedSizeByteArray(length = 64)
+ public byte[] data;
+}
Modified: gnunet-java/src/org/gnunet/util/Scheduler.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Scheduler.java 2012-03-28 19:27:29 UTC
(rev 20801)
+++ gnunet-java/src/org/gnunet/util/Scheduler.java 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -58,6 +58,12 @@
Set<Channel> readableSet = null;
Set<Channel> writeableSet = null;
Set<Channel> connectedSet = null;
+ public RunContext() {
+
+ }
+ public RunContext(Set<Reason> reasons) {
+ this.reasons = reasons;
+ }
}
public static interface Task {
Modified: gnunet-java/src/org/gnunet/util/getopt/OptionAction.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/OptionAction.java 2012-03-28
19:27:29 UTC (rev 20801)
+++ gnunet-java/src/org/gnunet/util/getopt/OptionAction.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -2,5 +2,5 @@
public enum OptionAction {
- SET, RESET, STORE_STRING, STORE_INT, INCREMENT
+ SET, RESET, STORE_STRING, STORE_NUMBER, INCREMENT
}
Modified: gnunet-java/src/org/gnunet/util/getopt/Parser.java
===================================================================
--- gnunet-java/src/org/gnunet/util/getopt/Parser.java 2012-03-28 19:27:29 UTC
(rev 20801)
+++ gnunet-java/src/org/gnunet/util/getopt/Parser.java 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -1,5 +1,6 @@
package org.gnunet.util.getopt;
+import org.gnunet.construct.ReflectUtil;
import org.gnunet.exceptions.InterfaceViolationException;
import java.lang.reflect.Field;
@@ -99,8 +100,127 @@
return helpString.toString();
}
+ public void doLongOpt(final LinkedList<String> argsList, Field
targetField, Option option, String right) {
+ try {
+ Class targetFieldType = targetField.getType();
+ switch (option.action()) {
+ case SET:
+ if (!targetFieldType.equals(Boolean.TYPE)) {
+ throw new InterfaceViolationException("action SET only
valid on boolean member");
+ }
+ targetField.set(targetObject, true);
+ break;
+ case RESET:
+ if (!targetFieldType.equals(Boolean.TYPE)) {
+ throw new InterfaceViolationException("action RESET
only valid on boolean member");
+ }
+ targetField.set(targetObject, false);
+ break;
+ case STORE_STRING:
+ if (!targetFieldType.equals(String.class)) {
+ throw new InterfaceViolationException("action
STORE_STRING only valid on boolean member");
+ }
+ if (right == null) {
+ argsList.removeFirst();
+ if (argsList.isEmpty()) {
+ throw new ArgumentError("missing string argument
to option " + option.longname());
+ }
+ targetField.set(targetObject, argsList.getFirst());
+ } else {
+ targetField.set(targetObject, right);
+ }
+ break;
+ case STORE_NUMBER:
+ ReflectUtil.NumField nf = new
ReflectUtil.NumField(targetField);
+ String numString;
+ if (right == null) {
+ argsList.removeFirst();
+ if (argsList.isEmpty()) {
+ throw new ArgumentError("missing number argument
to option " + option.longname());
+ }
+ numString = argsList.getFirst();
+ } else {
+ numString = right;
+ }
+ try {
+ nf.set(targetObject, Long.parseLong(numString));
+ } catch (NumberFormatException e) {
+ throw new ArgumentError("error in number format to
option " + option.longname());
+ }
+ break;
+ case INCREMENT:
+ throw new UnsupportedOperationException("not yet
implemented");
+ }
+ } catch (IllegalAccessException e) {
+ throw new InterfaceViolationException(
+ String.format("cannot acces member %s with @Option
annotation", targetField.getName()));
+ }
+ }
+ public boolean doShortOpt(final LinkedList<String> argsList, Field
targetField, Option option, String shortName) {
+ try {
+ switch (option.action()) {
+ case SET:
+ if (!targetField.getType().equals(Boolean.TYPE)) {
+ throw new InterfaceViolationException("action SET only
valid on boolean member");
+ }
+ targetField.set(targetObject, true);
+ break;
+ case RESET:
+ if (!targetField.getType().equals(Boolean.TYPE)) {
+ throw new InterfaceViolationException("action RESET
only valid on boolean member");
+ }
+ targetField.set(targetObject, false);
+ break;
+ case STORE_STRING:
+ if (!targetField.getType().equals(String.class)) {
+ throw new InterfaceViolationException("action
STORE_STRING only valid on boolean " +
+ "member");
+ }
+ if (argsList.getFirst().length() == 2) { // -X
+ argsList.removeFirst();
+ if (argsList.isEmpty()) {
+ throw new ArgumentError(String.format("no argument
for short option '%s'",
+ shortName));
+ }
+ targetField.set(targetObject, argsList.getFirst());
+ } else {
+ targetField.set(targetObject,
argsList.getFirst().substring(2)); // -Pxxx...
+ }
+ // consumed entire shortopt
+ return true;
+ case STORE_NUMBER:
+ ReflectUtil.NumField nf = new
ReflectUtil.NumField(targetField);
+ String numString;
+ boolean consumed;
+ if (argsList.getFirst().length() == 2) { // -X
+ argsList.removeFirst();
+ if (argsList.isEmpty()) {
+ throw new ArgumentError("missing number argument
to option " + option.longname());
+ }
+ numString = argsList.getFirst();
+ consumed = false;
+ } else {
+ numString = argsList.getFirst().substring(2);
+ consumed = true;
+ }
+ try {
+ nf.set(targetObject, Long.parseLong(numString));
+ } catch (NumberFormatException e) {
+ throw new ArgumentError("error in number format to
option " + option.longname());
+ }
+ return consumed;
+ case INCREMENT:
+ throw new UnsupportedOperationException("not yet
implemented");
+ }
+ } catch (IllegalAccessException e) {
+ throw new ArgumentError(
+ String.format("cannot acces member %s with @Option
annotation", targetField.getName()));
+ }
+ return false; // did not consume entire shortopt -Xxxxxx
+ }
+
/**
* Parses the given arguments, and sets the target object's fields
* according to its annotations.
@@ -112,119 +232,52 @@
// unprocessed positional args
Deque<String> positionalArgs = new LinkedList<String>();
- // current part of args that is being looked at
- int p = 0;
+ LinkedList<String> argsList = new
LinkedList<String>(Arrays.asList(args));
- while (p < args.length) {
+ while (!argsList.isEmpty()) {
// arguments after single "--" are all positional
- if (args[p].equals("--")) {
- positionalArgs.addAll(Arrays.asList(args).subList(p + 1,
args.length));
+ if (argsList.getFirst().equals("--")) {
+ argsList.removeFirst();
+ positionalArgs.addAll(argsList);
break;
}
// long args
- if (args[p].startsWith("--")) {
+ if (argsList.getFirst().startsWith("--")) {
// remove leading slashes
- String longOptionString = args[p].substring(2);
+ String longOptionString = argsList.getFirst().substring(2);
// maybe it is in the format --opt=val
String[] components = longOptionString.split("=", 2);
OptionField of = longOpt.get(components[0]);
if (of == null) {
throw new ArgumentError(String.format("unknown long
option: '%s'", components[0]));
}
- Option option = of.opt;
- Field field = of.f;
- try {
- Class targetFieldType = of.f.getType();
- switch (of.opt.action()) {
- case SET:
- if (!targetFieldType.equals(Boolean.TYPE)) {
- throw new InterfaceViolationException("action
SET only valid on boolean member");
- }
- of.f.set(targetObject, true);
- break;
- case RESET:
- if (!targetFieldType.equals(Boolean.TYPE)) {
- throw new InterfaceViolationException("action
RESET only valid on boolean member");
- }
- of.f.set(targetObject, false);
- break;
- case STORE_STRING:
- if (!targetFieldType.equals(String.class)) {
- throw new InterfaceViolationException("action
STORE_STRING only valid on boolean member");
- }
- if (components.length == 1) {
- p++;
- if (p >= args.length) {
- throw new ArgumentError("missing string
argument to option " + of.opt.longname());
- }
- of.f.set(targetObject, args[p]);
- } else {
- of.f.set(targetObject, components[1]);
- }
- 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("-")) {
- SHORTOPT:
- for (int i = 1; i < args[p].length(); ++i) {
- String optShortName =args[p].substring(i, i + 1);
+ String right = (components.length == 2) ? components[1] : null;
+ doLongOpt(argsList, of.f, of.opt, right);
+ } else if (argsList.getFirst().length() > 1 &&
argsList.getFirst().startsWith("-")) {
+ for (int i = 1; i < argsList.getFirst().length(); ++i) {
+ String optShortName = argsList.getFirst().substring(i, i +
1);
OptionField of = shortOpt.get(optShortName);
if (of == null) {
- throw new ArgumentError(String.format("unknown short
option: -%s", args[p].charAt(i)));
- }
- 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, false);
- 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) {
- throw new ArgumentError("short options
with argument must be seperate");
- }
- if (args[p].length() == 2) { // -X
- p++;
- if (p >= args.length) {
- throw new
ArgumentError(String.format("no argument for short option '%s'", optShortName));
- }
- of.f.set(targetObject, args[p]);
- } else {
- of.f.set(targetObject,
args[p].substring(2)); // -Pxxx...
- }
- break SHORTOPT;
- case STORE_INT:
- throw new UnsupportedOperationException("not
yet implemented");
- case INCREMENT:
- throw new UnsupportedOperationException("not
yet implemented");
- }
- } catch (IllegalAccessException e) {
throw new ArgumentError(
- String.format("cannot acces member %s with
@Option annotation", of.f.getName()));
+ String.format("unknown short option: -%s",
argsList.getFirst().charAt(i)));
}
+
+ boolean consumed = doShortOpt(argsList, of.f, of.opt,
optShortName);
+
+ if (consumed && i != 1) {
+ throw new ArgumentError("short options with argument
must be seperate");
+ }
+
+ if (consumed) {
+ break;
+ }
+
}
} else {
- positionalArgs.add(args[p]);
+ positionalArgs.add(argsList.getFirst());
}
- p++;
+ argsList.removeFirst();
}
return positionalArgs.toArray(new String[positionalArgs.size()]);
Deleted: gnunet-java/test/org/gnunet/construct/GetoptTest.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/GetoptTest.java 2012-03-28
19:27:29 UTC (rev 20801)
+++ gnunet-java/test/org/gnunet/construct/GetoptTest.java 2012-03-28
19:35:54 UTC (rev 20802)
@@ -1,172 +0,0 @@
-package org.gnunet.construct;
-
-
-import org.gnunet.util.getopt.Option;
-import org.gnunet.util.getopt.OptionAction;
-import org.gnunet.util.getopt.Parser;
-import org.junit.Assert;
-import org.junit.Test;
-
-class Target {
- @Option(
- action = OptionAction.STORE_STRING,
- shortname = "s",
- longname = "string",
- argumentName = "SOME_STRING",
- description = "just some string"
- )
- String someString;
-
- @Option(
- action = OptionAction.SET,
- shortname = "y",
- longname = "set",
- description = "enable, default disabled"
- )
- boolean set = false;
-
- @Option(
- action = OptionAction.RESET,
- shortname = "n",
- longname = "reset",
- description = "disable, default enabled"
- )
- boolean reset = true;
-
-
- @Option(
- action = OptionAction.INCREMENT,
- shortname = "i",
- longname = "inc",
- description = "increment a counter"
- )
- int counter = 0;
-
- @Option(
- action = OptionAction.STORE_INT,
- shortname = "w",
- longname = "value",
- description = "some value"
- )
- int intVal = 0;
-}
-
-public class GetoptTest {
-
- @Test
- public void test_str() {
- Target t = new Target();
- Parser p = new Parser(t);
-
- t.someString = null;
-
- // argument after shortopt
- p.parse(new String[]{"-s", "foo"});
- Assert.assertEquals("foo", t.someString);
-
- t.someString = null;
-
- // argument directly with shortopt
- p.parse(new String[]{"-sfoo"});
- Assert.assertEquals("foo", t.someString);
-
- t.someString = null;
-
- p.parse(new String[]{"--string=foo"});
- Assert.assertEquals("foo", t.someString);
-
- t.someString = null;
-
- p.parse(new String[]{"--string", "foo"});
- Assert.assertEquals("foo", t.someString);
-
-
- t.someString = null;
-
- // last argument counts
- p.parse(new String[]{"--string", "bar", "--string", "foo"});
- Assert.assertEquals("foo", t.someString);
-
- t.someString = null;
-
- boolean thrown;
-
- thrown = false;
-
- // absence of argument throws ArgumentError (longopt)
- try {
- p.parse(new String[]{"--string"});
- } catch (Parser.ArgumentError e) {
- thrown = true;
- }
-
- Assert.assertTrue(thrown);
-
- thrown = false;
- // absence of argument throws ArgumentError (shortopt)
- try {
- p.parse(new String[]{"-s"});
- } catch (Parser.ArgumentError e) {
- thrown = true;
- }
-
- Assert.assertTrue(thrown);
-
- t.someString = null;
-
- // a way to specify an empty string
- p.parse(new String[]{"--string="});
- Assert.assertEquals("", t.someString);
- }
-
- @Test
- public void test_help() {
- Target t = new Target();
- Parser p = new Parser(t);
-
- String help = p.getHelp();
-
- Assert.assertTrue(help.contains("--string"));
- Assert.assertTrue(help.contains("-s"));
-
- Assert.assertTrue(help.contains("-y"));
- Assert.assertTrue(help.contains("--set"));
- }
-
-
- @Test
- public void test_bool() {
- Target t = new Target();
- Parser p = new Parser(t);
-
- p.parse(new String[]{"--set", "--reset"});
- Assert.assertTrue(t.set);
- Assert.assertTrue(!t.reset);
-
- t.set = false;
- t.reset = true;
-
- p.parse(new String[]{"-y", "-n"});
-
- Assert.assertTrue(t.set);
- Assert.assertTrue(!t.reset);
-
- t.set = false;
- t.reset = true;
-
- p.parse(new String[]{"-yn"});
-
- Assert.assertTrue(t.set);
- Assert.assertTrue(!t.reset);
- }
-
- @Test
- public void test_positional() {
- Target t = new Target();
- Parser p = new Parser(t);
-
- String[] rest = p.parse(new String[]{"--string=bla", "foo", "bar",
"--set", "--", "--reset", "baz"});
-
- Assert.assertArrayEquals(new String[]{"foo", "bar", "--reset", "baz"},
rest);
- }
-}
Copied: gnunet-java/test/org/gnunet/util/GetoptTest.java (from rev 20590,
gnunet-java/test/org/gnunet/construct/GetoptTest.java)
===================================================================
--- gnunet-java/test/org/gnunet/util/GetoptTest.java
(rev 0)
+++ gnunet-java/test/org/gnunet/util/GetoptTest.java 2012-03-28 19:35:54 UTC
(rev 20802)
@@ -0,0 +1,200 @@
+package org.gnunet.util;
+
+
+import org.gnunet.util.getopt.Option;
+import org.gnunet.util.getopt.OptionAction;
+import org.gnunet.util.getopt.Parser;
+import org.junit.Assert;
+import org.junit.Test;
+
+class Target {
+ @Option(
+ action = OptionAction.STORE_STRING,
+ shortname = "s",
+ longname = "string",
+ argumentName = "SOME_STRING",
+ description = "just some string"
+ )
+ String someString;
+
+ @Option(
+ action = OptionAction.SET,
+ shortname = "y",
+ longname = "set",
+ description = "enable, default disabled"
+ )
+ boolean set = false;
+
+ @Option(
+ action = OptionAction.RESET,
+ shortname = "n",
+ longname = "reset",
+ description = "disable, default enabled"
+ )
+ boolean reset = true;
+
+
+ @Option(
+ action = OptionAction.INCREMENT,
+ shortname = "i",
+ longname = "inc",
+ description = "increment a counter"
+ )
+ int counter = 0;
+
+ @Option(
+ action = OptionAction.STORE_NUMBER,
+ shortname = "w",
+ longname = "value",
+ description = "some value"
+ )
+ int intVal = 0;
+}
+
+public class GetoptTest {
+
+ @Test
+ public void test_str() {
+ Target t = new Target();
+ Parser p = new Parser(t);
+
+ t.someString = null;
+
+ // argument after shortopt
+ p.parse(new String[]{"-s", "foo"});
+ Assert.assertEquals("foo", t.someString);
+
+ t.someString = null;
+
+ // argument directly with shortopt
+ p.parse(new String[]{"-sfoo"});
+ Assert.assertEquals("foo", t.someString);
+
+ t.someString = null;
+
+ p.parse(new String[]{"--string=foo"});
+ Assert.assertEquals("foo", t.someString);
+
+ t.someString = null;
+
+ p.parse(new String[]{"--string", "foo"});
+ Assert.assertEquals("foo", t.someString);
+
+
+ t.someString = null;
+
+ // last argument counts
+ p.parse(new String[]{"--string", "bar", "--string", "foo"});
+ Assert.assertEquals("foo", t.someString);
+
+ t.someString = null;
+
+ boolean thrown;
+
+ thrown = false;
+
+ // absence of argument throws ArgumentError (longopt)
+ try {
+ p.parse(new String[]{"--string"});
+ } catch (Parser.ArgumentError e) {
+ thrown = true;
+ }
+
+ Assert.assertTrue(thrown);
+
+ thrown = false;
+ // absence of argument throws ArgumentError (shortopt)
+ try {
+ p.parse(new String[]{"-s"});
+ } catch (Parser.ArgumentError e) {
+ thrown = true;
+ }
+
+ Assert.assertTrue(thrown);
+
+ t.someString = null;
+
+ // a way to specify an empty string
+ p.parse(new String[]{"--string="});
+ Assert.assertEquals("", t.someString);
+ }
+
+ @Test
+ public void test_help() {
+ Target t = new Target();
+ Parser p = new Parser(t);
+
+ String help = p.getHelp();
+
+ Assert.assertTrue(help.contains("--string"));
+ Assert.assertTrue(help.contains("-s"));
+
+ Assert.assertTrue(help.contains("-y"));
+ Assert.assertTrue(help.contains("--set"));
+ }
+
+
+ @Test
+ public void test_bool() {
+ Target t = new Target();
+ Parser p = new Parser(t);
+
+ p.parse(new String[]{"--set", "--reset"});
+ Assert.assertTrue(t.set);
+ Assert.assertTrue(!t.reset);
+
+ t.set = false;
+ t.reset = true;
+
+ p.parse(new String[]{"-y", "-n"});
+
+ Assert.assertTrue(t.set);
+ Assert.assertTrue(!t.reset);
+
+ t.set = false;
+ t.reset = true;
+
+ p.parse(new String[]{"-yn"});
+
+ Assert.assertTrue(t.set);
+ Assert.assertTrue(!t.reset);
+ }
+
+ @Test
+ public void test_positional() {
+ Target t = new Target();
+ Parser p = new Parser(t);
+
+ String[] rest = p.parse(new String[]{"--string=bla", "foo", "bar",
"--set", "--", "--reset", "baz"});
+
+ Assert.assertArrayEquals(new String[]{"foo", "bar", "--reset", "baz"},
rest);
+ }
+
+ @Test
+ public void test_long() {
+ Target t = new Target();
+ Parser p = new Parser(t);
+
+ String[] rest;
+
+ rest = p.parse(new String[]{"-w5"});
+ Assert.assertEquals(5, t.intVal);
+
+ rest = p.parse(new String[]{"--value=6"});
+ Assert.assertEquals(6, t.intVal);
+
+ rest = p.parse(new String[]{"--value", "7"});
+ Assert.assertEquals(7, t.intVal);
+
+ rest = p.parse(new String[]{"--value", "-7"});
+ Assert.assertEquals(-7, t.intVal);
+
+ boolean thrown = false;
+ try {
+ rest = p.parse(new String[]{"--value", "x"});
+ } catch (Parser.ArgumentError e) {
+ thrown = true;
+ }
+ Assert.assertTrue(thrown);
+ }
+}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20802 - in gnunet-java: . .idea doc src/org/gnunet src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/core src/org/gnunet/dht src/org/gnunet/util src/org/gnunet/util/getopt test/org/gnunet test/org/gnunet/construct test/org/gnunet/util,
gnunet <=