]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/cli/Manager.java
Canonicalize recipient addresses
[signal-cli] / src / main / java / cli / Manager.java
index b745988b5b1ee945c9ae223d10e30f75dc90f63a..3da46f1d2fa73810dcc3814eabbde2d0bb5a63e8 100644 (file)
@@ -35,6 +35,8 @@ import org.whispersystems.textsecure.api.messages.TextSecureContent;
 import org.whispersystems.textsecure.api.messages.TextSecureEnvelope;
 import org.whispersystems.textsecure.api.push.TextSecureAddress;
 import org.whispersystems.textsecure.api.push.TrustStore;
+import org.whispersystems.textsecure.api.util.InvalidNumberException;
+import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
 
 import java.io.*;
 import java.util.List;
@@ -166,31 +168,52 @@ public class Manager {
                 axolotlStore, Optional.<TextSecureMessageSender.EventListener>absent());
     }
 
-    public TextSecureContent receiveMessage() throws IOException, InvalidVersionException {
+    public TextSecureContent decryptMessage(TextSecureEnvelope envelope) {
+        TextSecureCipher cipher = new TextSecureCipher(new TextSecureAddress(username), axolotlStore);
+        try {
+            return cipher.decrypt(envelope);
+        } catch (Exception e) {
+            // TODO handle all exceptions
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public interface ReceiveMessageHandler {
+        void handleMessage(TextSecureEnvelope envelope);
+    }
+
+    public void receiveMessages(ReceiveMessageHandler handler) throws IOException {
         TextSecureMessageReceiver messageReceiver = new TextSecureMessageReceiver(URL, TRUST_STORE, username, password, signalingKey);
         TextSecureMessagePipe messagePipe = null;
 
         try {
             messagePipe = messageReceiver.createMessagePipe();
 
-            TextSecureEnvelope envelope;
-            try {
-                envelope = messagePipe.read(5, TimeUnit.SECONDS);
-            } catch (TimeoutException e) {
-                return null;
-            }
-            TextSecureCipher cipher = new TextSecureCipher(new TextSecureAddress(username), axolotlStore);
-            TextSecureContent message = null;
-            try {
-                message = cipher.decrypt(envelope);
-            } catch (Exception e) {
-                // TODO handle all exceptions
-                e.printStackTrace();
+            while (true) {
+                TextSecureEnvelope envelope;
+                try {
+                    envelope = messagePipe.read(1, TimeUnit.MINUTES);
+                    handler.handleMessage(envelope);
+                } catch (TimeoutException e) {
+                } catch (InvalidVersionException e) {
+                    System.out.println("Ignoring error: " + e.getMessage());
+                }
+                save();
             }
-            return message;
         } finally {
             if (messagePipe != null)
                 messagePipe.shutdown();
         }
     }
+
+    public String canonicalizeNumber(String number) throws InvalidNumberException {
+        String localNumber = username;
+        return PhoneNumberFormatter.formatNumber(number, localNumber);
+    }
+
+    protected TextSecureAddress getPushAddress(String number) throws InvalidNumberException {
+        String e164number = canonicalizeNumber(number);
+        return new TextSecureAddress(e164number);
+    }
 }