[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20945 - in gnunet-java: . lib src/org/gnunet/construct src
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20945 - in gnunet-java: . lib src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/core src/org/gnunet/dht src/org/gnunet/nse src/org/gnunet/statistics src/org/gnunet/util test/org/gnunet/construct |
Date: |
Wed, 11 Apr 2012 17:15:08 +0200 |
Author: dold
Date: 2012-04-11 17:15:08 +0200 (Wed, 11 Apr 2012)
New Revision: 20945
Added:
gnunet-java/lib/commons-io-2.2.jar
gnunet-java/src/org/gnunet/construct/IntegerFill.java
gnunet-java/src/org/gnunet/construct/parsers/IntegerFillParser.java
gnunet-java/src/org/gnunet/util/Strings.java
Removed:
gnunet-java/src/org/gnunet/construct/parsers/FillIntegerParser.java
Modified:
gnunet-java/.classpath
gnunet-java/ISSUES
gnunet-java/gnunet-java.eml
gnunet-java/src/org/gnunet/construct/Construct.java
gnunet-java/src/org/gnunet/construct/MsgMap.txt
gnunet-java/src/org/gnunet/core/Core.java
gnunet-java/src/org/gnunet/dht/DistributedHashTable.java
gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java
gnunet-java/src/org/gnunet/statistics/Statistics.java
gnunet-java/src/org/gnunet/util/Client.java
gnunet-java/src/org/gnunet/util/MessageReceiver.java
gnunet-java/src/org/gnunet/util/PeerIdentity.java
gnunet-java/src/org/gnunet/util/Resolver.java
gnunet-java/src/org/gnunet/util/RunaboutMessageReceiver.java
gnunet-java/src/org/gnunet/util/Server.java
gnunet-java/test/org/gnunet/construct/ByteFillMessage.java
gnunet-java/test/org/gnunet/construct/ConstructTest.java
gnunet-java/test/org/gnunet/construct/QueryMessage.java
Log:
more parts of Core implemented, still major problems
Modified: gnunet-java/.classpath
===================================================================
--- gnunet-java/.classpath 2012-04-11 14:40:54 UTC (rev 20944)
+++ gnunet-java/.classpath 2012-04-11 15:15:08 UTC (rev 20945)
@@ -11,6 +11,7 @@
<classpathentry kind="con"
path="org.eclipse.jdt.USER_LIBRARY/commons-io-2.1"/>
<classpathentry kind="lib" path="lib/log4j-1.2.16.jar"/>
<classpathentry kind="lib" path="lib/slf4j-log4j12-1.6.4.jar"/>
- <classpathentry kind="lib" path="lib/commons-io-2.1.jar"/>
+ <classpathentry kind="lib"
path="/home/dold/gnunet-java/lib/commons-io-2.1.jar"/>
+ <classpathentry kind="con"
path="org.eclipse.jdt.USER_LIBRARY/commons-io-2.2"/>
<classpathentry kind="output" path="build"/>
</classpath>
Modified: gnunet-java/ISSUES
===================================================================
--- gnunet-java/ISSUES 2012-04-11 14:40:54 UTC (rev 20944)
+++ gnunet-java/ISSUES 2012-04-11 15:15:08 UTC (rev 20945)
@@ -347,14 +347,29 @@
========================================================================================
-* why is installing gnunet so compilicated?
- * e.g. stuff like "base of XYZ installation" in ./configure is very confusing
- * many dependencies with out-of-date packages on common distros
+* client_api.c
+ * pr = GNUNET_CONTAINER_multihashmap_get (handle->peers,
&target->hashPubKey);
+ * the above line crashes when target==NULL, but comment indicates that NULL
is valid for target
+* ...NOTIFY_PRE_CONNECT.. message type not used
+* what about allocation of message IDs for extesions / what about clashes?
+core:
+* we seem to get all incoming messages if the handlers array is empty (even if
we don't request anything)
+* being notified about outbound messages does not seem to work at all
+* how does the Hash ascii-encoding work?
+* => solved, ported C-code, encountered some problems because of the lack of
unsigned in java
+ (had to use long instead of int in java code because of sign)
+* first implementation got some characters wrong, had to use
+ byte b = data[(int) rpos++];
+ int s = b >= 0 ? b : (256 + b);
+ to compensate for the signed-ness of byte
+* is the current implementation correct now? (it has the same output as
peerinfo)
+
+
@Fill
UInt32Message[] foo;
@@ -386,13 +401,16 @@
* also GNUNET_CORE_OPTION_SEND_STATUS_CHANGE
* inconsistency in structs with trailing ATS information
(NotifyTrafficMessage vs ConnectNotifyMessage)
* why zero-termination *and* size field?
+ * what does zero-termination really mean? is it only one byte? a whole ats
entry?
* what happens when we can't connect to core / lose connection? in the c api
implementation, this is never handeled?
* why is there even the init callback if init can't fail?
-* GNUNET_SERVER_connect_socket: ?????
-* disabling cork in java? is it possible?
+* GNUNET_SERVER_connect_socket: what is it for?
+* how to disable corking in java? is corking the same as TCP_NODELAY?
-* what about allocation of message IDs for extesions / what about clashes?
+* why is installing gnunet so compilicated?
+ * e.g. stuff like "base of XYZ installation" in ./configure is very confusing
+ * many dependencies with out-of-date packages on common distros
Modified: gnunet-java/gnunet-java.eml
===================================================================
--- gnunet-java/gnunet-java.eml 2012-04-11 14:40:54 UTC (rev 20944)
+++ gnunet-java/gnunet-java.eml 2012-04-11 15:15:08 UTC (rev 20945)
@@ -13,7 +13,4 @@
<lib name="slf4j-log4j12-1.6.4.jar" scope="COMPILE">
<relative-module-cls
project-related="jar://$PROJECT_DIR$/lib/slf4j-log4j12-1.6.4.jar!/"/>
</lib>
- <lib name="commons-io-2.1.jar" scope="COMPILE">
- <relative-module-cls
project-related="jar://$PROJECT_DIR$/lib/commons-io-2.1.jar!/"/>
- </lib>
</component>
Added: gnunet-java/lib/commons-io-2.2.jar
===================================================================
(Binary files differ)
Property changes on: gnunet-java/lib/commons-io-2.2.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: gnunet-java/src/org/gnunet/construct/Construct.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/Construct.java 2012-04-11 14:40:54 UTC
(rev 20944)
+++ gnunet-java/src/org/gnunet/construct/Construct.java 2012-04-11 15:15:08 UTC
(rev 20945)
@@ -229,6 +229,10 @@
parser = new StringParser(zts.charset(), zts.optional(), field);
}
+ public void visit(IntegerFill i) {
+ parser = new IntegerFillParser(frameSizePath, field, i.signed(),
i.bitSize()/8);
+ }
+
public void visit(NestedMessage n) {
Class<? extends Message> ct;
@@ -287,16 +291,26 @@
parser = new DoubleParser(field);
}
+ public void visit(FillWith fw) {
+ Field f = field;
+ Class old_c = c;
+
+ Parser p = getParser((Class<? extends Message>) field.getType()
+ .getComponentType(), this);
+
+ parser = new FillParser(p, frameSizePath ,f);
+ }
+
public void visit(VariableSizeArray vsa) {
Field f = field;
Class old_c = c;
- //noinspection unchecked
- getParser((Class<? extends Message>) field.getType()
+
+ Parser p = getParser((Class<? extends Message>) field.getType()
.getComponentType(), this);
try {
- parser = new VariableSizeArrayParser(parser, old_c.getField(vsa
+ parser = new VariableSizeArrayParser(p, old_c.getField(vsa
.lengthField()), f);
} catch (SecurityException e) {
Added: gnunet-java/src/org/gnunet/construct/IntegerFill.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/IntegerFill.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/IntegerFill.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -0,0 +1,13 @@
+package org.gnunet.construct;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
address@hidden(RetentionPolicy.RUNTIME)
address@hidden(ElementType.FIELD)
+public @interface IntegerFill {
+ boolean signed();
+ int bitSize();
+}
Modified: gnunet-java/src/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/org/gnunet/construct/MsgMap.txt 2012-04-11 14:40:54 UTC
(rev 20944)
+++ gnunet-java/src/org/gnunet/construct/MsgMap.txt 2012-04-11 15:15:08 UTC
(rev 20945)
@@ -2,16 +2,25 @@
org.gnunet.construct.UnionTest$TestUnion|1=org.gnunet.construct.UnionTest$TestUnionCase1
org.gnunet.util.Resolver$Address|0=org.gnunet.util.Resolver$TextualAddress
org.gnunet.util.Resolver$Address|1=org.gnunet.util.Resolver$NumericAddress
+org.gnunet.util.GnunetMessage$Body|68=org.gnunet.core.Core$DisconnectNotifyMessage
org.gnunet.util.GnunetMessage$Body|171=org.gnunet.statistics.Statistics$ResponseEndMessage
org.gnunet.util.GnunetMessage$Body|170=org.gnunet.statistics.Statistics$ResponseValueMessage
+org.gnunet.util.GnunetMessage$Body|70=org.gnunet.core.Core$NotifyInboundTrafficMessage
org.gnunet.util.GnunetMessage$Body|169=org.gnunet.statistics.Statistics$RequestMessage
+org.gnunet.util.GnunetMessage$Body|71=org.gnunet.core.Core$NotifyOutboundTrafficMessage
org.gnunet.util.GnunetMessage$Body|168=org.gnunet.statistics.Statistics$SetMessage
org.gnunet.util.GnunetMessage$Body|4=org.gnunet.util.Resolver$GetMessage
-org.gnunet.util.GnunetMessage$Body|323=org.gnunet.nse.NetworkSizeEstimation$UpdateMessage
+org.gnunet.util.GnunetMessage$Body|64=org.gnunet.core.Core$InitMessage
+org.gnunet.util.GnunetMessage$Body|65=org.gnunet.core.Core$InitReplyMessage
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|67=org.gnunet.core.Core$ConnectNotifyMessage
org.gnunet.util.GnunetMessage$Body|142=org.gnunet.dht.DistributedHashTable$DHTClientPutMessage
+org.gnunet.util.GnunetMessage$Body|76=org.gnunet.core.Core$SendMessage
+org.gnunet.util.GnunetMessage$Body|74=org.gnunet.core.Core$SendMessageRequest
+org.gnunet.util.GnunetMessage$Body|75=org.gnunet.core.Core$SendMessageReady
+org.gnunet.util.GnunetMessage$Body|323=org.gnunet.nse.NetworkSizeEstimation$UpdateMessage
org.gnunet.util.GnunetMessage$Body|321=org.gnunet.nse.NetworkSizeEstimation$StartMessage
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
+# generated 2012/04/11 15:38:56
Deleted: gnunet-java/src/org/gnunet/construct/parsers/FillIntegerParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/FillIntegerParser.java
2012-04-11 14:40:54 UTC (rev 20944)
+++ gnunet-java/src/org/gnunet/construct/parsers/FillIntegerParser.java
2012-04-11 15:15:08 UTC (rev 20945)
@@ -1,48 +0,0 @@
-package org.gnunet.construct.parsers;
-
-
-import org.gnunet.construct.Message;
-import org.gnunet.construct.ReflectUtil;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.nio.ByteBuffer;
-import java.util.List;
-
-public class FillIntegerParser implements Parser {
- private final Field targetField;
- private final boolean isSigned;
- private final int byteSize;
-
- private final List<Field> totalSizePath;
- private final ReflectUtil.NumField totalSizeField;
-
- public FillIntegerParser(Field targetField, List<Field> totalSizePath,
boolean isSigned, int byteSize) {
- this.targetField = targetField;
- this.isSigned = isSigned;
- this.byteSize = byteSize;
-
- this.totalSizePath = totalSizePath;
- totalSizeField = new
ReflectUtil.NumField(totalSizePath.get(totalSizePath.size() - 1));
- }
-
- @Override
- public int getSize(Message srcObj) {
- return byteSize * Array.getLength(ReflectUtil.justGet(srcObj,
targetField));
- }
-
- @Override
- public int parse(ByteBuffer srcBuf, int frameStart, Message frameObj,
Message dstObj) {
- return 0;
- }
-
- @Override
- public int write(ByteBuffer dstBuf, Message srcObj) {
- return 0;
- }
-
- @Override
- public void patch(Message m, int frameSize, Message frameObj) {
- totalSizeField.set(ReflectUtil.followFieldPathToParent(totalSizePath,
m), frameSize);
- }
-}
Added: gnunet-java/src/org/gnunet/construct/parsers/IntegerFillParser.java
===================================================================
--- gnunet-java/src/org/gnunet/construct/parsers/IntegerFillParser.java
(rev 0)
+++ gnunet-java/src/org/gnunet/construct/parsers/IntegerFillParser.java
2012-04-11 15:15:08 UTC (rev 20945)
@@ -0,0 +1,70 @@
+package org.gnunet.construct.parsers;
+
+import org.gnunet.construct.Message;
+import org.gnunet.construct.ReflectUtil;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.nio.ByteBuffer;
+import java.util.List;
+
+public class IntegerFillParser implements Parser {
+
+ private final List<Field> totalSizePath;
+ private final ReflectUtil.NumField totalSizeField;
+ private final Field targetField;
+ private final boolean signed;
+ private final int byteSize;
+
+ public IntegerFillParser(List<Field> totalSizePath, Field targetField,
+ boolean signed, int byteSize ) {
+
+ this.totalSizePath = totalSizePath;
+ this.totalSizeField = new
ReflectUtil.NumField(totalSizePath.get(totalSizePath.size() - 1));
+ this.targetField = targetField;
+ this.signed = signed;
+ this.byteSize = byteSize;
+ }
+
+
+ @Override
+ public int getSize(Message srcObj) {
+ final Object arr = ReflectUtil.justGet(srcObj, targetField);
+
+ if (arr == null) {
+ throw new RuntimeException("array not initialized");
+ }
+
+ return byteSize * Array.getLength(arr);
+ }
+
+ @Override
+ public int parse(ByteBuffer srcBuf, int frameStart, Message frameObj,
Message dstObj) {
+ final int frameSize = (int)
totalSizeField.get(ReflectUtil.followFieldPathToParent(totalSizePath,
frameObj));
+ int remaining = frameStart + frameSize - srcBuf.position();
+
+ throw new UnsupportedOperationException("not yet implemented");
+
+ // return getSize(dstObj);
+ }
+
+ @Override
+ public int write(ByteBuffer dstBuf, Message srcObj) {
+ final Object arr = ReflectUtil.justGet(srcObj, targetField);
+
+ if (arr == null) {
+ throw new RuntimeException("array not initialized");
+ }
+
+ for (int i = 0; i < Array.getLength(arr); ++i) {
+ IntegerUtil.writeLong(Array.getLong(arr, i), dstBuf, signed,
byteSize);
+ }
+
+ return getSize(srcObj);
+ }
+
+ @Override
+ public void patch(Message m, int frameSize, Message frameObj) {
+ totalSizeField.set(ReflectUtil.followFieldPathToParent(totalSizePath,
frameObj), frameSize);
+ }
+}
Modified: gnunet-java/src/org/gnunet/core/Core.java
===================================================================
--- gnunet-java/src/org/gnunet/core/Core.java 2012-04-11 14:40:54 UTC (rev
20944)
+++ gnunet-java/src/org/gnunet/core/Core.java 2012-04-11 15:15:08 UTC (rev
20945)
@@ -2,10 +2,14 @@
import org.gnunet.construct.*;
import org.gnunet.util.*;
-import org.grothoff.Runabout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class Core {
+ private static final Logger logger = LoggerFactory
+ .getLogger(Core.class);
+
enum CoreOption {
NOTHING(0),
SEND_FULL_INBOUND(8),
@@ -26,8 +30,7 @@
@UInt32
public long options;
- @FillWith
- @UInt16
+ @IntegerFill(signed = false, bitSize = 16)
public int[] interested;
}
@@ -42,14 +45,14 @@
public PeerIdentity myIdentity;
}
-
+ @UnionCase(70)
public static class NotifyInboundTrafficMessage implements
GnunetMessage.Body {
/**
* Number of ATS key-value pairs that follow this struct
* (excluding the 0-terminator).
*/
@UInt32
- long ats_count;
+ public long ats_count;
/**
* Identity of the receiver or sender.
@@ -66,6 +69,32 @@
}
+ @UnionCase(71)
+ public static class NotifyOutboundTrafficMessage implements
GnunetMessage.Body {
+ /**
+ * Number of ATS key-value pairs that follow this struct
+ * (excluding the 0-terminator).
+ */
+ @UInt32
+ public long ats_count;
+
+ /**
+ * Identity of the receiver or sender.
+ */
+ @NestedMessage
+ public PeerIdentity peer;
+
+ /**
+ * First of the ATS information blocks (we must have at least
+ * one due to the 0-termination requirement).
+ */
+ //@NestedMessage
+ //public ATSInformation atsInformation;
+ @ByteFill
+ public byte[] ats;
+ }
+
+
/**
* Message sent by the service to clients to notify them
* about a peer connecting.
@@ -85,10 +114,14 @@
@NestedMessage
public PeerIdentity peer;
- @FillWith
- @NestedMessage
- public ATSInformation atsInformation;
+ @ByteFill
+ public byte[] atsInfo;
+
+
+ //@FillWith
+ //public ATSInformation[] atsInformation;
+
}
/**
@@ -231,37 +264,213 @@
}
- public interface Init {
+ public interface InitCallback {
void onInit(PeerIdentity myIdentity);
}
+ public interface ConnectHandler {
+ void onConnect(PeerIdentity peerIdentity);
+ }
+
+ public interface DisconnectHandler {
+ void onDisconnect(PeerIdentity peerIdentity);
+
+ }
+
private final Client client;
-
/**
- * Receive messages that have a visit method in messageHandler.
- *
- * @param cfg configuration to use
- * @param init callback, called after handshake with core. called with
identity of the local peer.
- * @param init Called after handshake with the core service failed or
succeeded.
- * Guaranteed to be called only after the constructur returns.
+ * set to null once connected for the first time
*/
- public Core(Configuration cfg, Init init, MessageHandler[] handlers) {
- client = new Client("core", cfg);
+ private InitCallback init;
+ private HeaderNotify notifyOutboundHeaders;
+ private HeaderNotify notifyInboundHeaders;
+
+ private MessageNotify notifyOutboundMessages;
+ private MessageNotify notifyInboundMessages;
+
+ private int initOptions;
+
+ private ConnectHandler connectHandler;
+ private DisconnectHandler disconnectHandler;
+
+ private PeerIdentity myIdentity;
+
+ private final CoreReceiver coreReceiver = new CoreReceiver();
+
+
+ public interface HeaderNotify {
+ void notify(GnunetMessage.Header header);
+ }
+
+ public interface MessageNotify {
+ void notify(GnunetMessage messageBody);
+ }
+
+ public static class Builder {
+ /**
+ * Configuration for a core connection.
+ *
+ * @param cfg Mandatory configuration
+ */
+ final private Configuration cfg;
+ private InitCallback init;
+ private HeaderNotify notifyOutboundHeaders;
+ private HeaderNotify notifyInboundHeaders;
+
+ private MessageNotify notifyOutboundMessages;
+ private MessageNotify notifyInboundMessages;
+ private ConnectHandler connectHandler;
+ private DisconnectHandler disconnectHandler;
+ private PeerIdentity myIdentity;
+
+ public Builder(Configuration cfg) {
+ this.cfg = cfg;
+ }
+
+ public Builder withInit(InitCallback init) {
+ this.init = init;
+ return this;
+ }
+
+ public Builder addHandler(MessageHandler handler) {
+ return this;
+ }
+
+ public Builder withNotifyOutboundFull(MessageNotify h) {
+ return this;
+ }
+
+ public Builder withNotifyOutboundHeaders(HeaderNotify h) {
+ notifyOutboundHeaders = h;
+ return this;
+ }
+
+ public Builder withNotifyConnect(ConnectHandler h) {
+ connectHandler = h;
+ return this;
+ }
+
+ public Builder withNotifyDisconnect(DisconnectHandler h) {
+ disconnectHandler = h;
+ return this;
+ }
+
+ public Core build() {
+ return new Core(this);
+ }
+
+ }
+
+ private Core(Builder b) {
+ client = new Client("core", b.cfg);
+ this.notifyOutboundHeaders = b.notifyOutboundHeaders;
+
+ initOptions = 0;
+
+ if (notifyOutboundHeaders != null) {
+ //initOptions |= CoreOption.SEND_HDR_OUTBOUND.val;
+ }
+ this.init = b.init;
+
+
+ // XXX: only temporary for debugging
+ initOptions |= CoreOption.SEND_FULL_INBOUND.val;
+ initOptions |= CoreOption.SEND_FULL_OUTBOUND.val;
+
+ this.connectHandler = b.connectHandler;
+ this.disconnectHandler = b.disconnectHandler;
+
+ reconnect();
+ }
+
+ void reconnect() {
InitMessage initMessage = new InitMessage();
- // ...
+ initMessage.interested = new int[0];
+ initMessage.options = initOptions;
- client.transmitAndGetResponse(initMessage, RelativeTime.FOREVER, );
+ client.transmitAndGetResponse(initMessage, RelativeTime.FOREVER, true,
new CoreReceiver());
}
+ public class CoreReceiver extends RunaboutMessageReceiver {
+
+ public void visit(ConnectNotifyMessage m) {
+ if (connectHandler != null) {
+ connectHandler.onConnect(m.peer);
+ }
+ client.receive(RelativeTime.FOREVER, this);
+ }
+
+ public void visit(InitReplyMessage m) {
+ myIdentity = m.myIdentity;
+ if (init != null) {
+ init.onInit(m.myIdentity);
+ init = null;
+ }
+ client.receive(RelativeTime.FOREVER, this);
+ }
+
+ public void visit(NotifyInboundTrafficMessage m) {
+ client.receive(RelativeTime.FOREVER, this);
+ }
+
+ public void visit(NotifyOutboundTrafficMessage m) {
+ System.out.println("outbound");
+
+ client.receive(RelativeTime.FOREVER, this);
+ }
+
+ public void visit(SendMessageReady m) {
+
+ // todo: ...
+
+ client.receive(RelativeTime.FOREVER, this);
+ }
+
+ @Override
+ public void visitDefault(Object o) {
+ logger.warn("received unexpected message from core: {}",
o.getClass());
+ client.receive(RelativeTime.FOREVER, this);
+ }
+
+ @Override
+ public void handleError() {
+ }
+ }
+
+
public Cancelable notifyTransmitReady(boolean cork, long priority,
RelativeTime maxdelay,
PeerIdentity target, int size,
MessageTransmitter transmitter) {
+ final SendMessageRequest smr = new SendMessageRequest();
+ smr.deadline = maxdelay.toAbsolute().asMessage();
+ if (target == null) {
+ smr.peer = myIdentity;
+ } else {
+ smr.peer = target;
+ }
+ smr.queueSize = 10;
+ smr.smrId = 1;
+ smr.size = size;
+
+ client.notifyTransmitReady(maxdelay, false, new MessageTransmitter() {
+ @Override
+ public void transmit(Client.MessageSink sink) {
+ sink.send(smr);
+ }
+
+ @Override
+ public void handleError(Client.TransmitError error) {
+ throw new RuntimeException("client error");
+ }
+ });
return null;
}
+
public Cancelable transmitMessage(GnunetMessage.Body messageBody,
RelativeTime timeout,
PeerIdentity target, Continuation cont) {
+ return null;
}
@@ -270,8 +479,53 @@
* be called *after* all pending notifyTransmitReady
* requests have been explicitly cancelled.
*/
-
public void disconnect() {
}
+
+ public static void main(String[] args) {
+ new Program(args) {
+ Core core;
+
+ public void run() {
+ Core.Builder b = new Core.Builder(cfg);
+
+ b.withInit(new InitCallback() {
+ @Override
+ public void onInit(PeerIdentity myIdentity) {
+ System.out.print("Hello, I'm ");
+
System.out.println(Strings.dataToString(myIdentity.data));
+
+ core.notifyTransmitReady(true, 0, RelativeTime.SECOND,
null, 4, new MessageTransmitter() {
+ @Override
+ public void transmit(Client.MessageSink sink) {
+ System.out.println("ready to transmit");
+ }
+
+ @Override
+ public void handleError(Client.TransmitError
error) {
+ }
+ });
+ }
+ });
+
+ b.withNotifyOutboundHeaders(new HeaderNotify() {
+ @Override
+ public void notify(GnunetMessage.Header header) {
+ System.out.println("my peer sent message of type " +
header.messageType);
+ }
+ });
+
+
+ b.withNotifyConnect(new ConnectHandler() {
+ @Override
+ public void onConnect(PeerIdentity peerIdentity) {
+ System.out.println("connected to " +
Strings.dataToString(peerIdentity.data));
+ }
+ });
+
+ core = b.build();
+ }
+ }.start();
+ }
}
Modified: gnunet-java/src/org/gnunet/dht/DistributedHashTable.java
===================================================================
--- gnunet-java/src/org/gnunet/dht/DistributedHashTable.java 2012-04-11
14:40:54 UTC (rev 20944)
+++ gnunet-java/src/org/gnunet/dht/DistributedHashTable.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -317,7 +317,7 @@
}
@Override
- public void handleError(Client.ReceiveError e) {
+ public void handleError() {
}
}
Modified: gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java
===================================================================
--- gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java 2012-04-11
14:40:54 UTC (rev 20944)
+++ gnunet-java/src/org/gnunet/nse/NetworkSizeEstimation.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -68,12 +68,8 @@
}
@Override
- public void handleError(Client.ReceiveError e) {
- if (e.equals(Client.ReceiveError.DISCONNECT)) {
- logger.warn("NSE service disconnected us - trying to
reconnect");
- } else {
- throw new RuntimeException("unexpected receive error");
- }
+ public void handleError() {
+ logger.warn("NSE connection list - trying to reconnect");
client.reconnect();
requestUpdate();
}
Modified: gnunet-java/src/org/gnunet/statistics/Statistics.java
===================================================================
--- gnunet-java/src/org/gnunet/statistics/Statistics.java 2012-04-11
14:40:54 UTC (rev 20944)
+++ gnunet-java/src/org/gnunet/statistics/Statistics.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -104,7 +104,7 @@
}
@Override
- public void handleError(Client.ReceiveError e) {
+ public void handleError() {
logger.error("unable to read from statistics service");
}
Modified: gnunet-java/src/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Client.java 2012-04-11 14:40:54 UTC (rev
20944)
+++ gnunet-java/src/org/gnunet/util/Client.java 2012-04-11 15:15:08 UTC (rev
20945)
@@ -181,7 +181,7 @@
recvTask = null;
if (ctx.reasons.contains(Scheduler.Reason.TIMEOUT)) {
currentReceiveHelper = null;
- receiver.handleError(ReceiveError.TIMEOUT);
+ receiver.handleError();
} else if (ctx.reasons.contains(Scheduler.Reason.READ_READY)) {
try {
int n = chan.read(recvBuffer);
@@ -190,7 +190,7 @@
recvBuffer.position());
chan.close();
chan = null;
- receiver.handleError(ReceiveError.DISCONNECT);
+ receiver.handleError();
if (currentTransmitHelper != null
&& currentTransmitHelper.autoRetry &&
!currentTransmitHelper.notifyDone()) {
logger.debug("reconnecting due to transmitter
autoRetry");
@@ -201,7 +201,7 @@
logger.debug(String.format("chan read %s bytes", n));
} catch (IOException e) {
logger.error("read failed with exception:", e);
- receiver.handleError(ReceiveError.MSG_FORMAT);
+ receiver.handleError();
return;
}
if (recvBuffer.remaining() == 0) {
@@ -621,7 +621,7 @@
@Override
public void handleError(TransmitError error) {
- receiver.handleError(null);
+ receiver.handleError();
}
});
Modified: gnunet-java/src/org/gnunet/util/MessageReceiver.java
===================================================================
--- gnunet-java/src/org/gnunet/util/MessageReceiver.java 2012-04-11
14:40:54 UTC (rev 20944)
+++ gnunet-java/src/org/gnunet/util/MessageReceiver.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -34,5 +34,5 @@
*/
public void process(GnunetMessage.Body msg);
- public void handleError(Client.ReceiveError e);
+ public void handleError();
}
Modified: gnunet-java/src/org/gnunet/util/PeerIdentity.java
===================================================================
--- gnunet-java/src/org/gnunet/util/PeerIdentity.java 2012-04-11 14:40:54 UTC
(rev 20944)
+++ gnunet-java/src/org/gnunet/util/PeerIdentity.java 2012-04-11 15:15:08 UTC
(rev 20945)
@@ -8,4 +8,15 @@
@FixedSizeByteArray(length = 64)
public byte[] data;
+
+ static final String HEXES = "0123456789ABCDEF";
+
+ public String getHex() {
+ final StringBuilder hex = new StringBuilder( 2 * data.length );
+ for (final byte b : data) {
+ hex.append(HEXES.charAt((b & 0xF0) >> 4))
+ .append(HEXES.charAt((b & 0x0F)));
+ }
+ return hex.toString();
+ }
}
Modified: gnunet-java/src/org/gnunet/util/Resolver.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Resolver.java 2012-04-11 14:40:54 UTC
(rev 20944)
+++ gnunet-java/src/org/gnunet/util/Resolver.java 2012-04-11 15:15:08 UTC
(rev 20945)
@@ -354,12 +354,8 @@
}
@Override
- public void handleError(Client.ReceiveError e) {
- if (e.equals(Client.ReceiveError.TIMEOUT)) {
+ public void handleError() {
onTimeout(rh);
- } else {
- throw new RuntimeException("unexpected
receive error");
- }
}
});
Modified: gnunet-java/src/org/gnunet/util/RunaboutMessageReceiver.java
===================================================================
--- gnunet-java/src/org/gnunet/util/RunaboutMessageReceiver.java
2012-04-11 14:40:54 UTC (rev 20944)
+++ gnunet-java/src/org/gnunet/util/RunaboutMessageReceiver.java
2012-04-11 15:15:08 UTC (rev 20945)
@@ -1,10 +1,9 @@
package org.gnunet.util;
-import org.gnunet.construct.Message;
import org.grothoff.Runabout;
public abstract class RunaboutMessageReceiver extends Runabout implements
MessageReceiver {
- public void process(Message msg) {
+ public void process(GnunetMessage.Body msg) {
this.visitAppropriate(msg);
}
}
Modified: gnunet-java/src/org/gnunet/util/Server.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Server.java 2012-04-11 14:40:54 UTC (rev
20944)
+++ gnunet-java/src/org/gnunet/util/Server.java 2012-04-11 15:15:08 UTC (rev
20945)
@@ -35,6 +35,10 @@
}
+ public void injectMessage(/*msg*/) {
+
+ }
+
}
@@ -61,7 +65,10 @@
public Server(SocketAddress[] addresses, RelativeTime idleTimeout, boolean
requireFound) {
try {
- ServerSocketChannel socket = ServerSocketChannel.open();
+ for (SocketAddress addr : addresses) {
+ ServerSocketChannel socket = ServerSocketChannel.open();
+ }
+
} catch (IOException e) {
e.printStackTrace();
}
@@ -78,14 +85,11 @@
}
+
/**
* Free resources held by this server.
*/
public void destroy() {
}
-
- public void injectMessage() {
-
- }
}
Added: gnunet-java/src/org/gnunet/util/Strings.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Strings.java
(rev 0)
+++ gnunet-java/src/org/gnunet/util/Strings.java 2012-04-11 15:15:08 UTC
(rev 20945)
@@ -0,0 +1,32 @@
+package org.gnunet.util;
+
+public class Strings {
+ public static String dataToString(byte[] data) {
+ StringBuilder sb = new StringBuilder();
+ final String encTable = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
+ long rpos;
+ long bits;
+ long vbit;
+ long size = data.length;
+
+ vbit = 0;
+ rpos = 0;
+ bits = 0;
+ while ((rpos < size) || (vbit > 0)) {
+ if ((rpos < size) && (vbit < 5)) {
+ byte b = data[(int) rpos++];
+ int s = b >= 0 ? b : (256 + b);
+ bits = (bits << 8) | s; /* eat 8 more bits */
+ vbit += 8;
+ }
+ if (vbit < 5) {
+ bits <<= (5 - vbit); /* zero-padding */
+ assert (vbit == ((size * 8) % 5));
+ vbit = 5;
+ }
+ sb.append(encTable.charAt((int) (bits >>> (vbit - 5)) & 31));
+ vbit -= 5;
+ }
+ return sb.toString();
+ }
+}
Modified: gnunet-java/test/org/gnunet/construct/ByteFillMessage.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/ByteFillMessage.java 2012-04-11
14:40:54 UTC (rev 20944)
+++ gnunet-java/test/org/gnunet/construct/ByteFillMessage.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -2,8 +2,6 @@
public class ByteFillMessage implements Message {
- @NestedMessage
- public MessageHeader header;
@UInt32
public int someValue;
Modified: gnunet-java/test/org/gnunet/construct/ConstructTest.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/ConstructTest.java 2012-04-11
14:40:54 UTC (rev 20944)
+++ gnunet-java/test/org/gnunet/construct/ConstructTest.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -1,14 +1,8 @@
package org.gnunet.construct;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-
public class ConstructTest {
+ /*
-
@Test
public void test_ByteFillMessage() {
@@ -172,4 +166,6 @@
Assert.assertEquals(h1.messageSize, h2.messageSize);
Assert.assertEquals(h1.messageType, h2.messageType);
}
+
+ */
}
Modified: gnunet-java/test/org/gnunet/construct/QueryMessage.java
===================================================================
--- gnunet-java/test/org/gnunet/construct/QueryMessage.java 2012-04-11
14:40:54 UTC (rev 20944)
+++ gnunet-java/test/org/gnunet/construct/QueryMessage.java 2012-04-11
15:15:08 UTC (rev 20945)
@@ -2,8 +2,6 @@
public class QueryMessage implements Message {
- @NestedMessage
- public MessageHeader header;
@UInt8
public int query;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20945 - in gnunet-java: . lib src/org/gnunet/construct src/org/gnunet/construct/parsers src/org/gnunet/core src/org/gnunet/dht src/org/gnunet/nse src/org/gnunet/statistics src/org/gnunet/util test/org/gnunet/construct,
gnunet <=