import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
-class Manager {
+class Manager implements TextSecure {
private final static String URL = "https://textsecure-service.whispersystems.org";
private final static TrustStore TRUST_STORE = new WhisperTrustStore();
accountManager = new TextSecureAccountManager(URL, TRUST_STORE, username, password, USER_AGENT);
}
- public void save() {
+ private void save() {
ObjectNode rootNode = jsonProcessot.createObjectNode();
rootNode.put("username", username)
.put("password", password)
axolotlStore = new JsonAxolotlStore(identityKey, registrationId);
groupStore = new JsonGroupStore();
registered = false;
+ save();
}
public boolean isRegistered() {
accountManager.requestSmsVerificationCode();
registered = false;
+ save();
}
private static final int BATCH_SIZE = 100;
}
preKeyIdOffset = (preKeyIdOffset + BATCH_SIZE + 1) % Medium.MAX_VALUE;
+ save();
+
return records;
}
PreKeyRecord record = new PreKeyRecord(Medium.MAX_VALUE, keyPair);
axolotlStore.storePreKey(Medium.MAX_VALUE, record);
+ save();
return record;
}
axolotlStore.storeSignedPreKey(nextSignedPreKeyId, record);
nextSignedPreKeyId = (nextSignedPreKeyId + 1) % Medium.MAX_VALUE;
+ save();
return record;
} catch (InvalidKeyException e) {
SignedPreKeyRecord signedPreKeyRecord = generateSignedPreKey(axolotlStore.getIdentityKeyPair());
accountManager.setPreKeys(axolotlStore.getIdentityKeyPair().getPublicKey(), lastResortKey, signedPreKeyRecord, oneTimePreKeys);
+ save();
}
return new TextSecureAttachmentStream(attachmentStream, mime, attachmentSize, null);
}
+ @Override
public void sendGroupMessage(String messageText, List<String> attachments,
byte[] groupId)
throws IOException, EncapsulatedExceptions, GroupNotFoundException, AttachmentInvalidException {
}
TextSecureDataMessage message = messageBuilder.build();
- sendMessage(message, getGroupInfo(groupId).members);
+ sendMessage(message, groupStore.getGroup(groupId).members);
}
public void sendQuitGroupMessage(byte[] groupId) throws GroupNotFoundException, IOException, EncapsulatedExceptions {
.asGroupMessage(group)
.build();
- sendMessage(message, getGroupInfo(groupId).members);
+ sendMessage(message, groupStore.getGroup(groupId).members);
}
public byte[] sendUpdateGroupMessage(byte[] groupId, String name, Collection<String> members, String avatarFile) throws IOException, EncapsulatedExceptions, GroupNotFoundException, AttachmentInvalidException {
g = new GroupInfo(Util.getSecretBytes(16));
g.members.add(username);
} else {
- g = getGroupInfo(groupId);
+ g = groupStore.getGroup(groupId);
}
if (name != null) {
}
}
- setGroupInfo(g);
+ groupStore.updateGroup(g);
TextSecureDataMessage message = TextSecureDataMessage.newBuilder()
.asGroupMessage(group.build())
return g.groupId;
}
+ @Override
+ public void sendMessage(String message, List<String> attachments, String recipient)
+ throws EncapsulatedExceptions, AttachmentInvalidException, IOException {
+ List<String> recipients = new ArrayList<>(1);
+ recipients.add(recipient);
+ sendMessage(message, attachments, recipients);
+ }
+
public void sendMessage(String messageText, List<String> attachments,
Collection<String> recipients)
- throws IOException, EncapsulatedExceptions, GroupNotFoundException, AttachmentInvalidException {
+ throws IOException, EncapsulatedExceptions, AttachmentInvalidException {
final TextSecureDataMessage.Builder messageBuilder = TextSecureDataMessage.newBuilder().withBody(messageText);
if (attachments != null) {
messageBuilder.withAttachments(getTextSecureAttachments(attachments));
} catch (InvalidNumberException e) {
System.err.println("Failed to add recipient \"" + recipient + "\": " + e.getMessage());
System.err.println("Aborting sending.");
+ save();
return;
}
}
handleEndSession(recipient.getNumber());
}
}
+ save();
}
private TextSecureContent decryptMessage(TextSecureEnvelope envelope) {
}
}
}
+ save();
handler.handleMessage(envelope, content, group);
} catch (TimeoutException e) {
if (returnOnTimeout)
} catch (InvalidVersionException e) {
System.err.println("Ignoring error: " + e.getMessage());
}
- save();
}
} finally {
if (messagePipe != null)
return new TextSecureAddress(e164number);
}
- private GroupInfo getGroupInfo(byte[] groupId) throws GroupNotFoundException {
- return groupStore.getGroup(groupId);
- }
-
- private void setGroupInfo(GroupInfo group) {
- groupStore.updateGroup(group);
+ @Override
+ public boolean isRemote() {
+ return false;
}
}