gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r30391 - in gnunet-java: . src/main/java/org/gnunet/hello s


From: gnunet
Subject: [GNUnet-SVN] r30391 - in gnunet-java: . src/main/java/org/gnunet/hello src/main/java/org/gnunet/peerinfo src/main/java/org/gnunet/transport src/main/java/org/gnunet/transport/callbacks src/main/java/org/gnunet/transport/messages src/main/java/org/gnunet/util src/main/java/org/gnunet/util/crypto src/main/resources/org/gnunet/construct src/test/java/org/gnunet src/test/java/org/gnunet/transport
Date: Tue, 22 Oct 2013 02:00:54 +0200

Author: dold
Date: 2013-10-22 02:00:54 +0200 (Tue, 22 Oct 2013)
New Revision: 30391

Added:
   gnunet-java/src/main/java/org/gnunet/transport/AddressQuery.java
   
gnunet-java/src/main/java/org/gnunet/transport/callbacks/OfferHelloContinuation.java
   gnunet-java/src/main/java/org/gnunet/transport/messages/SetQuotaMessage.java
   gnunet-java/src/test/java/org/gnunet/transport/
   gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java
Removed:
   gnunet-java/src/main/java/org/gnunet/peerinfo/RsaPublicKeyBinaryEncoded.java
   gnunet-java/src/main/java/org/gnunet/transport/AddressMonitor.java
Modified:
   gnunet-java/ISSUES
   gnunet-java/src/main/java/org/gnunet/hello/HelloMessage.java
   gnunet-java/src/main/java/org/gnunet/transport/HelloAddress.java
   gnunet-java/src/main/java/org/gnunet/transport/Transport.java
   
gnunet-java/src/main/java/org/gnunet/transport/callbacks/HelloUpdateCallback.java
   
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessageContent.java
   gnunet-java/src/main/java/org/gnunet/transport/messages/StartMessage.java
   gnunet-java/src/main/java/org/gnunet/util/Client.java
   gnunet-java/src/main/java/org/gnunet/util/crypto/EddsaPublicKey.java
   gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt
Log:
- transport implementation finished
- test case for transport getHello
- installing a client receiver grants scheduler lifeness


Modified: gnunet-java/ISSUES
===================================================================
--- gnunet-java/ISSUES  2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/ISSUES  2013-10-22 00:00:54 UTC (rev 30391)
@@ -1,3 +1,7 @@
+transport:
+ * documentation for StartMessage seems totally wrong, am I missing something?
+
+
 What now works:
  * consensus+testbed testcase in pure Java
  * group certificates and corresponding tool implemented

Modified: gnunet-java/src/main/java/org/gnunet/hello/HelloMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/hello/HelloMessage.java        
2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/java/org/gnunet/hello/HelloMessage.java        
2013-10-22 00:00:54 UTC (rev 30391)
@@ -21,7 +21,8 @@
 package org.gnunet.hello;
 
 import org.gnunet.construct.*;
-import org.gnunet.peerinfo.RsaPublicKeyBinaryEncoded;
+import org.gnunet.util.GnunetMessage;
+import org.gnunet.util.crypto.EddsaPublicKey;
 
 /**
  * A HELLO message is used to exchange information about
@@ -38,12 +39,13 @@
  *
  * @author Florian Dold
  */
-public class HelloMessage implements Message {
address@hidden(17)
+public class HelloMessage implements GnunetMessage.Body {
     @UInt32
-    public int reserved;
+    public int friendOnly;
 
     @NestedMessage
-    public RsaPublicKeyBinaryEncoded publicKey;
+    public EddsaPublicKey publicKey;
 
     @FillWith @UInt8
     public byte[] addresses;

Deleted: 
gnunet-java/src/main/java/org/gnunet/peerinfo/RsaPublicKeyBinaryEncoded.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/peerinfo/RsaPublicKeyBinaryEncoded.java    
    2013-10-21 23:48:01 UTC (rev 30390)
+++ 
gnunet-java/src/main/java/org/gnunet/peerinfo/RsaPublicKeyBinaryEncoded.java    
    2013-10-22 00:00:54 UTC (rev 30391)
@@ -1,56 +0,0 @@
-/*
- This file is part of GNUnet.
- (C) 2011, 2012 Christian Grothoff (and other contributing authors)
-
- GNUnet is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
-
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING.  If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
- */
-
-package org.gnunet.peerinfo;
-
-import org.gnunet.construct.FixedSizeIntegerArray;
-import org.gnunet.construct.Message;
-import org.gnunet.construct.UInt16;
-import org.gnunet.construct.UInt8;
-
-/**
- * @author Florian Dold
- */
-public class RsaPublicKeyBinaryEncoded implements Message {
-    public static final int GNUNET_CRYPTO_RSA_KEY_LENGTH = 258;
-
-    /**
-     * In big-endian, must be GNUNET_CRYPTO_RSA_KEY_LENGTH+4
-     */
-    @UInt16
-    public int len;
-    /**
-     * Size of n in key; in big-endian!
-     */
-    @UInt16
-    public int sizen;
-
-    /**
-     * The key itself, contains n followed by e.
-     */
-    @FixedSizeIntegerArray(length = 
RsaPublicKeyBinaryEncoded.GNUNET_CRYPTO_RSA_KEY_LENGTH, signed = false, bitSize 
= 8)
-    public byte[] key;
-
-    /**
-     * Padding.
-     */
-    @UInt8
-    public byte reserved;
-}

Deleted: gnunet-java/src/main/java/org/gnunet/transport/AddressMonitor.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/transport/AddressMonitor.java  
2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/java/org/gnunet/transport/AddressMonitor.java  
2013-10-22 00:00:54 UTC (rev 30391)
@@ -1,153 +0,0 @@
-/*
- This file is part of GNUnet.
-  (C) 2012, 2013 Christian Grothoff (and other contributing authors)
-
-  GNUnet is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published
-  by the Free Software Foundation; either version 3, or (at your
-  option) any later version.
-
-  GNUnet is distributed in the hope that it will be useful, but
-  WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with GNUnet; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-  Boston, MA 02111-1307, USA.
- */
-
-package org.gnunet.transport;
-
-import org.gnunet.transport.callbacks.PeerAddressListCallback;
-import org.gnunet.transport.callbacks.PeerAddressMonitorCallback;
-import org.gnunet.transport.messages.AddressIterateMessage;
-import org.gnunet.transport.messages.AddressIterateResponseMessage;
-import org.gnunet.transport.messages.BlacklistInitMessage;
-import org.gnunet.util.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Get active addresses of peers.
- */
-public class AddressMonitor {
-    private static final Logger logger = LoggerFactory
-            .getLogger(AddressMonitor.class);
-    private final boolean oneShot;
-    private final PeerIdentity peerIdentity;
-    private final PeerAddressMonitorCallback monitorCallback;
-    private final PeerAddressListCallback listCallback;
-    /**
-     * Client connecting to the transport service.
-     */
-    private Client client;
-
-
-    private final class AddressMonitorReceiver extends RunaboutMessageReceiver 
{
-        public void visit(AddressIterateResponseMessage m) {
-            if (m.content == null) {
-                // uglyness in the api, when using one-shot the service
-                // may send a second message indicating end of list.
-                if (listCallback != null) {
-                    listCallback.onDone();
-                } else {
-                    client.reconnect();
-                    sendInitMessage();
-                }
-                return;
-            }
-            if (listCallback != null) {
-                if (m.content.addrlen == 0 && m.content.pluginlen == 0) {
-                    logger.warn("empty peer address list item");
-                } else {
-                    HelloAddress helloAddress = new HelloAddress();
-                    helloAddress.peer = m.content.peerIdentity;
-                    // FIXME: address and plugin
-                    listCallback.onPeerAddress(helloAddress);
-                }
-            } else {
-                if (m.content.addrlen == 0 && m.content.pluginlen == 0) {
-                    monitorCallback.onPeerDisconnect(m.content.peerIdentity);
-                } else {
-                    HelloAddress helloAddress = new HelloAddress();
-                    helloAddress.peer = m.content.peerIdentity;
-                    // FIXME: address and plugin
-                    monitorCallback.onPeerAddress(helloAddress);
-                }
-            }
-        }
-        @Override
-        public void handleError() {
-            client.reconnect();
-            client.send(new BlacklistInitMessage());
-        }
-    }
-
-    /**
-     *
-     * @param configuration configuration to use for connecting to
-     *                      the transport service
-     * @param peerIdentity peer identity to monitor addresses of, null
-     *                     to monitor addresses of all connected peers
-     * @param peerAddressCallback callback to call when receiving an address
-     *                            for the specified peer
-     */
-    public AddressMonitor(Configuration configuration,
-                          PeerIdentity peerIdentity,
-                          PeerAddressMonitorCallback peerAddressCallback) {
-        this.oneShot = false;
-        this.peerIdentity = peerIdentity;
-        this.monitorCallback = peerAddressCallback;
-        this.listCallback = null;
-
-        client = new Client("transport", configuration);
-        client.send(new BlacklistInitMessage());
-        client.installReceiver(new AddressMonitorReceiver());
-
-        createAndInitClient(configuration);
-    }
-
-    /**
-     *
-     * @param configuration configuration to use for connecting to
-     *                      the transport service
-     * @param peerIdentity peer identity to monitor addresses of, null
-     *                     to monitor addresses of all connected peers
-     * @param listCallback callback to call when receiving an address
-     *                            for the specified peer
-     */
-    public AddressMonitor(Configuration configuration,
-                          PeerIdentity peerIdentity,
-                          PeerAddressListCallback listCallback) {
-        this.oneShot = true;
-        this.peerIdentity = peerIdentity;
-        this.listCallback = listCallback;
-        this.monitorCallback = null;
-
-        createAndInitClient(configuration);
-
-    }
-
-    private void createAndInitClient(Configuration configuration) {
-        client = new Client("transport", configuration);
-        client.send(new BlacklistInitMessage());
-        client.installReceiver(new AddressMonitorReceiver());
-        sendInitMessage();
-    }
-
-    private void sendInitMessage() {
-        AddressIterateMessage m = new AddressIterateMessage();
-        m.oneShot = oneShot;
-        if (peerIdentity == null) {
-            m.peer = new PeerIdentity();
-        } else {
-            m.peer = peerIdentity;
-        }
-        // value seems to be deprecated in the C api, we're not using
-        // service-managed timeouts anyway, so send FOREVER
-        m.timeout = AbsoluteTime.FOREVER.asMessage();
-        client.send(m);
-    }
-}

Copied: gnunet-java/src/main/java/org/gnunet/transport/AddressQuery.java (from 
rev 30387, gnunet-java/src/main/java/org/gnunet/transport/AddressMonitor.java)
===================================================================
--- gnunet-java/src/main/java/org/gnunet/transport/AddressQuery.java            
                (rev 0)
+++ gnunet-java/src/main/java/org/gnunet/transport/AddressQuery.java    
2013-10-22 00:00:54 UTC (rev 30391)
@@ -0,0 +1,157 @@
+/*
+ This file is part of GNUnet.
+  (C) 2012, 2013 Christian Grothoff (and other contributing authors)
+
+  GNUnet is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published
+  by the Free Software Foundation; either version 3, or (at your
+  option) any later version.
+
+  GNUnet is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with GNUnet; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.
+ */
+
+package org.gnunet.transport;
+
+import org.gnunet.transport.callbacks.PeerAddressListCallback;
+import org.gnunet.transport.callbacks.PeerAddressMonitorCallback;
+import org.gnunet.transport.messages.AddressIterateMessage;
+import org.gnunet.transport.messages.AddressIterateResponseMessage;
+import org.gnunet.transport.messages.BlacklistInitMessage;
+import org.gnunet.util.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Get active addresses of peers.
+ */
+public class AddressQuery {
+    private static final Logger logger = LoggerFactory
+            .getLogger(AddressQuery.class);
+    private final boolean oneShot;
+    private final PeerIdentity peerIdentity;
+    private final PeerAddressMonitorCallback monitorCallback;
+    private final PeerAddressListCallback listCallback;
+    /**
+     * Client connecting to the transport service.
+     */
+    private Client client;
+
+
+    private final class AddressMonitorReceiver extends RunaboutMessageReceiver 
{
+        public void visit(AddressIterateResponseMessage m) {
+            if (m.content == null) {
+                // uglyness in the api, when using one-shot the service
+                // may send a second message indicating end of list.
+                if (listCallback != null) {
+                    listCallback.onDone();
+                } else {
+                    client.reconnect();
+                    sendInitMessage();
+                }
+                return;
+            }
+            if (listCallback != null) {
+                if (m.content.addrLen == 0 && m.content.pluginLen == 0) {
+                    logger.warn("empty peer address list item");
+                } else {
+                    HelloAddress helloAddress = new HelloAddress();
+                    helloAddress.peer = m.content.peerIdentity;
+                    // FIXME: address and plugin
+                    listCallback.onPeerAddress(helloAddress);
+                }
+            } else {
+                if (m.content.addrLen == 0 && m.content.pluginLen == 0) {
+                    monitorCallback.onPeerDisconnect(m.content.peerIdentity);
+                } else {
+                    HelloAddress helloAddress = new HelloAddress();
+                    helloAddress.peer = m.content.peerIdentity;
+                    // FIXME: address and plugin
+                    monitorCallback.onPeerAddress(helloAddress);
+                }
+            }
+        }
+        @Override
+        public void handleError() {
+            client.reconnect();
+            client.send(new BlacklistInitMessage());
+        }
+    }
+
+    /**
+     * Monitor active addresses of the given peer, or of all peers if 'null' is
+     * passed as peer identity.
+     *
+     * @param configuration configuration to use for connecting to
+     *                      the transport service
+     * @param peerIdentity peer identity to monitor addresses of, null
+     *                     to monitor addresses of all connected peers
+     * @param peerAddressCallback callback to call when receiving an address
+     *                            for the specified peer
+     */
+    public AddressQuery(Configuration configuration,
+                        PeerIdentity peerIdentity,
+                        PeerAddressMonitorCallback peerAddressCallback) {
+        this.oneShot = false;
+        this.peerIdentity = peerIdentity;
+        this.monitorCallback = peerAddressCallback;
+        this.listCallback = null;
+
+        client = new Client("transport", configuration);
+        client.send(new BlacklistInitMessage());
+        client.installReceiver(new AddressMonitorReceiver());
+
+        createAndInitClient(configuration);
+    }
+
+    /**
+     * Monitor active addresses of the given peer, or of all peers if 'null' is
+     * passed as peer identity.
+     *
+     * @param configuration configuration to use for connecting to
+     *                      the transport service
+     * @param peerIdentity peer identity to monitor addresses of, null
+     *                     to monitor addresses of all connected peers
+     * @param listCallback callback to call when receiving an address
+     *                            for the specified peer
+     */
+    public AddressQuery(Configuration configuration,
+                        PeerIdentity peerIdentity,
+                        PeerAddressListCallback listCallback) {
+        this.oneShot = true;
+        this.peerIdentity = peerIdentity;
+        this.listCallback = listCallback;
+        this.monitorCallback = null;
+
+        createAndInitClient(configuration);
+
+    }
+
+    private void createAndInitClient(Configuration configuration) {
+        client = new Client("transport", configuration);
+        client.send(new BlacklistInitMessage());
+        client.installReceiver(new AddressMonitorReceiver());
+        sendInitMessage();
+    }
+
+    private void sendInitMessage() {
+        AddressIterateMessage m = new AddressIterateMessage();
+        m.oneShot = oneShot;
+        if (peerIdentity == null) {
+            m.peer = new PeerIdentity();
+        } else {
+            m.peer = peerIdentity;
+        }
+        // value seems to be deprecated in the C api, we're not using
+        // service-managed timeouts anyway, so send FOREVER
+        m.timeout = AbsoluteTime.FOREVER.asMessage();
+        client.send(m);
+    }
+}

Modified: gnunet-java/src/main/java/org/gnunet/transport/HelloAddress.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/transport/HelloAddress.java    
2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/java/org/gnunet/transport/HelloAddress.java    
2013-10-22 00:00:54 UTC (rev 30391)
@@ -22,6 +22,22 @@
 
 import org.gnunet.util.PeerIdentity;
 
+
+/**
+ * An address for communicating with a peer.
+ */
 public class HelloAddress {
+    /**
+     * For which peer is this an address?
+     */
     public PeerIdentity peer;
+    /**
+     * Name of the transport plugin enabling the communication using
+     * this address.
+     */
+    String transportName;
+    /**
+     * Binary representation of the address (plugin-specific).
+     */
+    byte[] address;
 }

Modified: gnunet-java/src/main/java/org/gnunet/transport/Transport.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/transport/Transport.java       
2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/java/org/gnunet/transport/Transport.java       
2013-10-22 00:00:54 UTC (rev 30391)
@@ -4,11 +4,16 @@
 import org.gnunet.mq.Envelope;
 import org.gnunet.mq.NotifySentHandler;
 import org.gnunet.transport.callbacks.HelloUpdateCallback;
+import org.gnunet.transport.callbacks.OfferHelloContinuation;
 import org.gnunet.transport.callbacks.PeerIterateCallback;
 import org.gnunet.transport.callbacks.TryConnectCallback;
 import org.gnunet.transport.messages.RequestConnectMessage;
+import org.gnunet.transport.messages.StartMessage;
 import org.gnunet.util.*;
 
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * ...
  *
@@ -21,16 +26,48 @@
      */
     private final Client client;
 
-    boolean initRequested;
+    /**
+     * Hello of our peer. May be null if not received yet.
+     */
+    private HelloMessage myHello;
 
+    /**
+     * Callbacks waiting for a hello.
+     */
+    private List<GetHelloHolder> getHelloHolderList = new 
LinkedList<GetHelloHolder>();
+
+    /**
+     * Wrapper to give each get hello request a unique identity.
+     */
+    private class GetHelloHolder {
+        HelloUpdateCallback cb;
+    }
+
     private final class TransportReceiver extends RunaboutMessageReceiver {
+        public void visit(HelloMessage m) {
+            System.out.println("got hello");
+            myHello = m;
+            List<GetHelloHolder> list = getHelloHolderList;
+            getHelloHolderList = new LinkedList<GetHelloHolder>();
+            for (GetHelloHolder h : list) {
+                h.cb.onHello(m);
+            }
+        }
         @Override
         public void handleError() {
             client.reconnect();
-            // FIXME: complete
+            sendStart();
         }
     }
 
+    private void sendStart() {
+        org.gnunet.transport.messages.StartMessage m = new StartMessage();
+        // no self check or payload traffic for now
+        m.options = 0;
+        m.self = new PeerIdentity();
+        client.send(m);
+    }
+
     /**
      * Create a handle to the transport service.
      *
@@ -39,6 +76,7 @@
     public Transport(Configuration cfg) {
         client = new Client("transport", cfg);
         client.installReceiver(new TransportReceiver());
+        sendStart();
     }
 
     /**
@@ -71,14 +109,7 @@
         };
     }
 
-    /**
-     * ... (discuss first)
-     */
-    public void init(Object receiveCallback, Object notifyConnect, Object 
notifyDisconnect) {
 
-    }
-
-
     /**
      * Obtain the HELLO message for this peer.
      *
@@ -88,8 +119,25 @@
      *            cost estimate will be 0.
      * @return handle to cancel the operation
      */
-    Cancelable getHello(HelloUpdateCallback rec) {
-        throw new UnsupportedOperationException();
+    Cancelable getHello(final HelloUpdateCallback rec) {
+        if (myHello != null) {
+            return Scheduler.add(new Scheduler.Task() {
+                @Override
+                public void run(Scheduler.RunContext ctx) {
+                    rec.onHello(myHello);
+                }
+            });
+        }
+        System.out.println("waiting for hello");
+        final GetHelloHolder holder = new GetHelloHolder();
+        holder.cb = rec;
+        getHelloHolderList.add(holder);
+        return new Cancelable() {
+            @Override
+            public void cancel() {
+                getHelloHolderList.remove(holder);
+            }
+        };
     }
 
     /**
@@ -98,36 +146,32 @@
      * malformed or useless due to our local configuration.
      *
      * @param hello the hello message
-     * @param cont  continuation to call when HELLO has been sent,
-     *              tc reason GNUNET_SCHEDULER_REASON_TIMEOUT for fail
-     *              tc reasong GNUNET_SCHEDULER_REASON_READ_READY for success
+     * @param cont  continuation to call when HELLO has been sent
      * @return a GNUNET_TRANSPORT_OfferHelloHandle handle or NULL on failure,
      *         in case of failure cont will not be called
      */
 
     Cancelable offerHello(HelloMessage hello,
-                          Scheduler.Task cont) {
-        throw new UnsupportedOperationException();
+                          final OfferHelloContinuation cont) {
+        final Envelope ev = new Envelope(hello);
+        ev.notifySent(new NotifySentHandler() {
+            @Override
+            public void onSent() {
+                cont.onDone();
+            }
+        });
+        client.send(ev);
+        return new Cancelable() {
+            @Override
+            public void cancel() {
+                ev.cancel();
+            }
+        };
     }
 
-    /**
-     * Return all the known addresses for a specific peer or all peers.
-     * Returns continuously all address if oneShot is set to false
-     * <p/>
-     * Returns the address(es) that we are currently using for this
-     * peer.  Upon completion, the 'AddressLookUpCallback' is called one more
-     * time with 'NULL' for the address and the peer.  After this, the 
operation must no
-     * longer be explicitly canceled.
-     *
-     * @param peer                      peer identity to look up the addresses 
of, CHANGE: allow NULL for all (connected) peers
-     * @param oneShot                  GNUNET_YES to return the current state 
and then end (with NULL+NULL),
-     *                                  GNUNET_NO to monitor the set of 
addresses used (continuously, must be explicitly canceled)
-     * @param timeout                   how long is the lookup allowed to take 
at most (irrelevant if oneShot is set to GNUNET_NO)
-     * @param peerAddressCallback     function to call with the results
-     */
-    Cancelable getActiveAddresses(PeerIdentity peer, int oneShot,
-                              RelativeTime timeout, PeerIterateCallback 
peerAddressCallback) {
-        throw new UnsupportedOperationException();
+    public void disconnect() {
+        client.disconnect();
     }
+
 }
 

Modified: 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/HelloUpdateCallback.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/HelloUpdateCallback.java
   2013-10-21 23:48:01 UTC (rev 30390)
+++ 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/HelloUpdateCallback.java
   2013-10-22 00:00:54 UTC (rev 30391)
@@ -1,9 +1,12 @@
 package org.gnunet.transport.callbacks;
 
+import org.gnunet.hello.HelloMessage;
+
 /**
  * ...
  *
  * @author Florian Dold
  */
 public interface HelloUpdateCallback {
+    void onHello(HelloMessage helloMessage);
 }

Added: 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/OfferHelloContinuation.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/OfferHelloContinuation.java
                                (rev 0)
+++ 
gnunet-java/src/main/java/org/gnunet/transport/callbacks/OfferHelloContinuation.java
        2013-10-22 00:00:54 UTC (rev 30391)
@@ -0,0 +1,25 @@
+/*
+ This file is part of GNUnet.
+  (C) 2012, 2013 Christian Grothoff (and other contributing authors)
+
+  GNUnet is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published
+  by the Free Software Foundation; either version 3, or (at your
+  option) any later version.
+
+  GNUnet is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with GNUnet; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.
+ */
+
+package org.gnunet.transport.callbacks;
+
+public interface OfferHelloContinuation {
+    void onDone();
+}

Modified: 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessageContent.java
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessageContent.java
   2013-10-21 23:48:01 UTC (rev 30390)
+++ 
gnunet-java/src/main/java/org/gnunet/transport/messages/AddressIterateResponseMessageContent.java
   2013-10-22 00:00:54 UTC (rev 30391)
@@ -49,9 +49,11 @@
     @NestedMessage
     public PeerIdentity peerIdentity;
     @UInt32
-    public int addrlen;
+    public int addrLen;
     @UInt32
-    public int pluginlen;
-    @IntegerFill(bitSize = 8, signed = true)
-    public byte[] rest;
+    public int pluginLen;
+    @VariableSizeIntegerArray(lengthField = "addrLen", bitSize = 8, signed = 
true)
+    public byte[] address;
+    @VariableSizeString(lengthField = "pluginLen", terminationType = 
StringTerminationType.NONE)
+    public String plugin;
 }

Copied: 
gnunet-java/src/main/java/org/gnunet/transport/messages/SetQuotaMessage.java 
(from rev 30387, 
gnunet-java/src/main/java/org/gnunet/transport/messages/BlacklistInitMessage.java)
===================================================================
--- 
gnunet-java/src/main/java/org/gnunet/transport/messages/SetQuotaMessage.java    
                            (rev 0)
+++ 
gnunet-java/src/main/java/org/gnunet/transport/messages/SetQuotaMessage.java    
    2013-10-22 00:00:54 UTC (rev 30391)
@@ -0,0 +1,29 @@
+/*
+ This file is part of GNUnet.
+  (C) 2012, 2013 Christian Grothoff (and other contributing authors)
+
+  GNUnet is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published
+  by the Free Software Foundation; either version 3, or (at your
+  option) any later version.
+
+  GNUnet is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with GNUnet; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.
+ */
+
+package org.gnunet.transport.messages;
+
+import org.gnunet.construct.UnionCase;
+import org.gnunet.util.GnunetMessage;
+
address@hidden(366)
+public class SetQuotaMessage implements GnunetMessage.Body {
+    // message body is empty
+}

Modified: 
gnunet-java/src/main/java/org/gnunet/transport/messages/StartMessage.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/transport/messages/StartMessage.java   
2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/java/org/gnunet/transport/messages/StartMessage.java   
2013-10-22 00:00:54 UTC (rev 30391)
@@ -7,8 +7,10 @@
 import org.gnunet.util.PeerIdentity;
 
 /**
- * ...
  *
+ * Message from the transport service to the library
+ * asking to check if both processes agree about this
+ * peers identity.
  * @author Florian Dold
  */
 @UnionCase(360)
@@ -27,6 +29,4 @@
      */
     @NestedMessage
     public PeerIdentity self;
-
-
 }

Modified: gnunet-java/src/main/java/org/gnunet/util/Client.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/Client.java       2013-10-21 
23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/java/org/gnunet/util/Client.java       2013-10-22 
00:00:54 UTC (rev 30391)
@@ -20,9 +20,9 @@
 package org.gnunet.util;
 
 import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
 import org.gnunet.mq.Envelope;
 import org.gnunet.mq.MessageQueue;
-import org.gnunet.statistics.Statistics;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -88,12 +88,13 @@
      */
     private RunaboutMessageReceiver receiver;
 
-    private boolean receiver_active;
+    private boolean receiverActive;
 
     /**
      * Handle to cancel the message currently submitted in the queue,
      */
     private Cancelable currentSubmit;
+    private Scheduler.TaskIdentifier receiverLifenessTask;
 
     /**
      * Create a connection to a service.
@@ -277,6 +278,11 @@
         }
         connection.disconnect();
         connection = null;
+        if (receiverLifenessTask != null) {
+            receiverLifenessTask.cancel();
+            receiverLifenessTask = null;
+        }
+        receiverActive = false;
     }
 
     public boolean isConnected() {
@@ -304,7 +310,7 @@
     }
 
     private void activateReceiver() {
-        if (receiver_active || receiver == null)
+        if (receiverActive || receiver == null)
             return;
         final MessageReceiver proxyReceiver = new MessageReceiver() {
             @Override
@@ -313,20 +319,27 @@
                 if (connection != null && connection.isConnected())
                     connection.receive(RelativeTime.FOREVER, this);
                 else
-                    receiver_active = false;
+                    receiverActive = false;
             }
 
             @Override
             public void handleError() {
                 Client.this.receiver.handleError();
-                receiver_active = false;
+                receiverActive = false;
             }
         };
         connection.receive(RelativeTime.FOREVER, proxyReceiver);
-        receiver_active = true;
+        receiverActive = true;
     }
 
     public void installReceiver(RunaboutMessageReceiver receiver) {
+        Preconditions.checkState(this.receiver == null);
+        this.receiverLifenessTask = Scheduler.addDelayed(RelativeTime.FOREVER, 
new Scheduler.Task() {
+            @Override
+            public void run(Scheduler.RunContext ctx) {
+                // nothing to be done
+            }
+        });
         this.receiver = receiver;
         if (connection != null && connection.isConnected())
             activateReceiver();

Modified: gnunet-java/src/main/java/org/gnunet/util/crypto/EddsaPublicKey.java
===================================================================
--- gnunet-java/src/main/java/org/gnunet/util/crypto/EddsaPublicKey.java        
2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/java/org/gnunet/util/crypto/EddsaPublicKey.java        
2013-10-22 00:00:54 UTC (rev 30391)
@@ -18,6 +18,10 @@
     @FixedSizeIntegerArray(bitSize = 8, signed = false, length = 32)
     public byte[] y;
 
+    public EddsaPublicKey() {
+        // default constructor for Construct
+    }
+
     public EddsaPublicKey(Ed25519 a) {
         x = Ed25519.encodeScalar(a.P0);
         y = Ed25519.encodeScalar(a.P1);

Modified: gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt
===================================================================
--- gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt      
2013-10-21 23:48:01 UTC (rev 30390)
+++ gnunet-java/src/main/resources/org/gnunet/construct/MsgMap.txt      
2013-10-22 00:00:54 UTC (rev 30391)
@@ -13,6 +13,7 @@
 org.gnunet.util.GnunetMessage$Body|286=org.gnunet.mesh.LocalAckMessage
 org.gnunet.util.GnunetMessage$Body|13=org.gnunet.arm.messages.ListResultMessage
 org.gnunet.util.GnunetMessage$Body|285=org.gnunet.mesh.DataMessage
+org.gnunet.util.GnunetMessage$Body|17=org.gnunet.hello.HelloMessage
 org.gnunet.util.GnunetMessage$Body|153=org.gnunet.dht.MonitorStartStop
 
org.gnunet.util.GnunetMessage$Body|42002=org.gnunet.voting.messages.BallotRegisterFailureMessage
 
org.gnunet.util.GnunetMessage$Body|42001=org.gnunet.voting.messages.BallotRegisterRequestMessage
@@ -71,8 +72,8 @@
 
org.gnunet.util.GnunetMessage$Body|630=org.gnunet.identity.messages.RenameMessage
 org.gnunet.util.GnunetMessage$Body|323=org.gnunet.nse.UpdateMessage
 
org.gnunet.util.GnunetMessage$Body|629=org.gnunet.identity.messages.CreateRequestMessage
+org.gnunet.util.GnunetMessage$Body|628=org.gnunet.identity.messages.SetDefaultMessage
 org.gnunet.util.GnunetMessage$Body|321=org.gnunet.nse.StartMessage
-org.gnunet.util.GnunetMessage$Body|628=org.gnunet.identity.messages.SetDefaultMessage
 org.gnunet.util.GnunetMessage$Body|332=org.gnunet.peerinfo.InfoMessage
 org.gnunet.util.GnunetMessage$Body|333=org.gnunet.peerinfo.InfoEnd
 org.gnunet.util.GnunetMessage$Body|331=org.gnunet.peerinfo.ListAllPeersMessage
@@ -84,6 +85,7 @@
 
org.gnunet.util.GnunetMessage$Body|383=org.gnunet.transport.messages.AddressIterateResponseMessage
 
org.gnunet.util.GnunetMessage$Body|496=org.gnunet.testbed.messages.HelperReplyMessage
 
org.gnunet.util.GnunetMessage$Body|495=org.gnunet.testbed.messages.HelperInitMessage
+org.gnunet.util.GnunetMessage$Body|366=org.gnunet.transport.messages.SetQuotaMessage
 
org.gnunet.util.GnunetMessage$Body|360=org.gnunet.transport.messages.StartMessage
 
org.gnunet.util.GnunetMessage$Body|483=org.gnunet.testbed.messages.ManagePeerServiceMessage
-# generated 2013/10/21 15:16:23
+# generated 2013/10/22 01:57:19

Added: gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java
===================================================================
--- gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java           
                (rev 0)
+++ gnunet-java/src/test/java/org/gnunet/transport/TransportTest.java   
2013-10-22 00:00:54 UTC (rev 30391)
@@ -0,0 +1,51 @@
+/*
+ This file is part of GNUnet.
+  (C) 2012, 2013 Christian Grothoff (and other contributing authors)
+
+  GNUnet is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published
+  by the Free Software Foundation; either version 3, or (at your
+  option) any later version.
+
+  GNUnet is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with GNUnet; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.
+ */
+
+package org.gnunet.transport;
+
+import org.gnunet.hello.HelloMessage;
+import org.gnunet.peerinfo.PeerInfo;
+import org.gnunet.peerinfo.PeerProcessor;
+import org.gnunet.testing.TestingSubsystem;
+import org.gnunet.transport.callbacks.HelloUpdateCallback;
+import org.gnunet.util.*;
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
+
+public class TransportTest {
+    @Test
+    public void test_transport_get_hello() {
+        Program.configureLogging("debug");
+        final Wrapper<Boolean> ended = new Wrapper<Boolean>(false);
+        TestingSubsystem ts = new TestingSubsystem("transport");
+        final Transport transport = new Transport(ts.getConfiguration());
+        transport.getHello(new HelloUpdateCallback() {
+            @Override
+            public void onHello(HelloMessage helloMessage) {
+                ended.set(true);
+                transport.disconnect();
+            }
+        });
+
+        Scheduler.run();
+        assertTrue(ended.get());
+    }
+}




reply via email to

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