mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-21 18:48:35 +00:00
Added SMS transport support for PreKeyBundle messages.
1) Added SMS transport support. 2) Keep track of whether a PreKeyBundle message has gotten a response, and send them as subsequent messages until one has been received.
This commit is contained in:
@@ -56,6 +56,8 @@ public class MultipartSmsMessageHandler {
|
||||
|
||||
if (message.getWireType() == MultipartSmsTransportMessage.WIRETYPE_KEY) {
|
||||
return new IncomingKeyExchangeMessage(message.getBaseMessage(), strippedMessage);
|
||||
} else if (message.getWireType() == MultipartSmsTransportMessage.WIRETYPE_PREKEY) {
|
||||
return new IncomingPreKeyBundleMessage(message.getBaseMessage(), strippedMessage);
|
||||
} else {
|
||||
return new IncomingEncryptedMessage(message.getBaseMessage(), strippedMessage);
|
||||
}
|
||||
@@ -67,6 +69,8 @@ public class MultipartSmsMessageHandler {
|
||||
|
||||
if (message.getWireType() == MultipartSmsTransportMessage.WIRETYPE_KEY) {
|
||||
return new IncomingKeyExchangeMessage(message.getBaseMessage(), strippedMessage);
|
||||
} else if (message.getWireType() == MultipartSmsTransportMessage.WIRETYPE_PREKEY) {
|
||||
return new IncomingPreKeyBundleMessage(message.getBaseMessage(), strippedMessage);
|
||||
} else {
|
||||
return new IncomingEncryptedMessage(message.getBaseMessage(), strippedMessage);
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.sms;
|
||||
import android.util.Log;
|
||||
|
||||
import org.thoughtcrime.securesms.protocol.KeyExchangeWirePrefix;
|
||||
import org.thoughtcrime.securesms.protocol.PrekeyBundleWirePrefix;
|
||||
import org.thoughtcrime.securesms.protocol.SecureMessageWirePrefix;
|
||||
import org.thoughtcrime.securesms.protocol.WirePrefix;
|
||||
import org.whispersystems.textsecure.util.Base64;
|
||||
@@ -22,6 +23,7 @@ public class MultipartSmsTransportMessage {
|
||||
|
||||
public static final int WIRETYPE_SECURE = 1;
|
||||
public static final int WIRETYPE_KEY = 2;
|
||||
public static final int WIRETYPE_PREKEY = 3;
|
||||
|
||||
private static final int VERSION_OFFSET = 0;
|
||||
private static final int MULTIPART_OFFSET = 1;
|
||||
@@ -33,9 +35,12 @@ public class MultipartSmsTransportMessage {
|
||||
|
||||
public MultipartSmsTransportMessage(IncomingTextMessage message) throws IOException {
|
||||
this.message = message;
|
||||
this.wireType = WirePrefix.isEncryptedMessage(message.getMessageBody()) ? WIRETYPE_SECURE : WIRETYPE_KEY;
|
||||
this.decodedMessage = Base64.decodeWithoutPadding(message.getMessageBody().substring(WirePrefix.PREFIX_SIZE));
|
||||
|
||||
if (WirePrefix.isEncryptedMessage(message.getMessageBody())) wireType = WIRETYPE_SECURE;
|
||||
else if (WirePrefix.isPreKeyBundle(message.getMessageBody())) wireType = WIRETYPE_PREKEY;
|
||||
else wireType = WIRETYPE_KEY;
|
||||
|
||||
Log.w(TAG, "Decoded message with version: " + getCurrentVersion());
|
||||
}
|
||||
|
||||
@@ -151,8 +156,9 @@ public class MultipartSmsTransportMessage {
|
||||
|
||||
WirePrefix prefix;
|
||||
|
||||
if (message.isKeyExchange()) prefix = new KeyExchangeWirePrefix();
|
||||
else prefix = new SecureMessageWirePrefix();
|
||||
if (message.isKeyExchange()) prefix = new KeyExchangeWirePrefix();
|
||||
else if (message.isPreKeyBundle()) prefix = new PrekeyBundleWirePrefix();
|
||||
else prefix = new SecureMessageWirePrefix();
|
||||
|
||||
if (count == 1) return getSingleEncoded(decoded, prefix);
|
||||
else return getMultiEncoded(decoded, prefix, count, identifier);
|
||||
|
@@ -0,0 +1,19 @@
|
||||
package org.thoughtcrime.securesms.sms;
|
||||
|
||||
|
||||
public class OutgoingPrekeyBundleMessage extends OutgoingTextMessage {
|
||||
|
||||
public OutgoingPrekeyBundleMessage(OutgoingTextMessage message, String body) {
|
||||
super(message, body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPreKeyBundle() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutgoingTextMessage withBody(String body) {
|
||||
return new OutgoingPrekeyBundleMessage(this, body);
|
||||
}
|
||||
}
|
@@ -19,8 +19,8 @@ public class OutgoingTextMessage {
|
||||
}
|
||||
|
||||
protected OutgoingTextMessage(OutgoingTextMessage base, String body) {
|
||||
this.recipients = base.getRecipients();
|
||||
this.message = body;
|
||||
this.recipients = base.getRecipients();
|
||||
this.message = body;
|
||||
}
|
||||
|
||||
public String getMessageBody() {
|
||||
@@ -39,6 +39,10 @@ public class OutgoingTextMessage {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isPreKeyBundle() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static OutgoingTextMessage from(SmsMessageRecord record) {
|
||||
if (record.isSecure()) {
|
||||
return new OutgoingEncryptedMessage(record.getIndividualRecipient(), record.getBody().getBody());
|
||||
|
Reference in New Issue
Block a user