Add generateKeyPair().
[jFCPlib.git] / src / net / pterodactylus / fcp / highlevel / FcpClient.java
index 71b118e..2bdcf73 100644 (file)
@@ -36,9 +36,11 @@ import net.pterodactylus.fcp.EndListPeers;
 import net.pterodactylus.fcp.FcpAdapter;
 import net.pterodactylus.fcp.FcpConnection;
 import net.pterodactylus.fcp.FcpListener;
+import net.pterodactylus.fcp.GenerateSSK;
 import net.pterodactylus.fcp.ListPeerNotes;
 import net.pterodactylus.fcp.ListPeers;
 import net.pterodactylus.fcp.ModifyPeer;
+import net.pterodactylus.fcp.ModifyPeerNote;
 import net.pterodactylus.fcp.NodeHello;
 import net.pterodactylus.fcp.NodeRef;
 import net.pterodactylus.fcp.Peer;
@@ -46,6 +48,7 @@ import net.pterodactylus.fcp.PeerNote;
 import net.pterodactylus.fcp.PeerRemoved;
 import net.pterodactylus.fcp.ProtocolError;
 import net.pterodactylus.fcp.RemovePeer;
+import net.pterodactylus.fcp.SSKKeypair;
 import net.pterodactylus.util.thread.ObjectWrapper;
 
 /**
@@ -454,6 +457,83 @@ public class FcpClient {
        }
 
        /**
+        * Replaces the peer note for the given peer.
+        *
+        * @param peer
+        *            The peer
+        * @param noteText
+        *            The new base64-encoded note text
+        * @param noteType
+        *            The type of the note (currently only <code>1</code> is
+        *            allowed)
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public void modifyPeerNote(final Peer peer, final String noteText, final int noteType) throws IOException, FcpException {
+               new ExtendedFcpAdapter() {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       @SuppressWarnings("synthetic-access")
+                       public void run() throws IOException {
+                               fcpConnection.sendMessage(new ModifyPeerNote(peer.getIdentity(), noteText, noteType));
+                       }
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void receivedPeer(FcpConnection fcpConnection, Peer receivedPeer) {
+                               if (receivedPeer.getIdentity().equals(peer.getIdentity())) {
+                                       completionLatch.countDown();
+                               }
+                       }
+               }.execute();
+       }
+
+       //
+       // KEY GENERATION
+       //
+
+       /**
+        * Generates a new SSK key pair.
+        *
+        * @return The generated key pair
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public SSKKeypair generateKeyPair() throws IOException, FcpException {
+               final ObjectWrapper<SSKKeypair> sskKeypairWrapper = new ObjectWrapper<SSKKeypair>();
+               new ExtendedFcpAdapter() {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       @SuppressWarnings("synthetic-access")
+                       public void run() throws IOException {
+                               fcpConnection.sendMessage(new GenerateSSK());
+                       }
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void receivedSSKKeypair(FcpConnection fcpConnection, SSKKeypair sskKeypair) {
+                               sskKeypairWrapper.set(sskKeypair);
+                               completionLatch.countDown();
+                       }
+               }.execute();
+               return sskKeypairWrapper.get();
+       }
+
+       /**
         * Implementation of an {@link FcpListener} that can store an
         * {@link FcpException} and wait for the arrival of a certain command.
         *