mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-25 22:59:25 +00:00
Enable TextSecure universal transport.
This commit is contained in:
32
src/org/thoughtcrime/securesms/transport/BaseTransport.java
Normal file
32
src/org/thoughtcrime/securesms/transport/BaseTransport.java
Normal file
@@ -0,0 +1,32 @@
|
||||
package org.thoughtcrime.securesms.transport;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
||||
import org.thoughtcrime.securesms.service.SendReceiveService;
|
||||
import org.thoughtcrime.securesms.service.SmsListener;
|
||||
|
||||
public abstract class BaseTransport {
|
||||
|
||||
protected Intent constructSentIntent(Context context, long messageId, long type) {
|
||||
Intent pending = new Intent(SendReceiveService.SENT_SMS_ACTION,
|
||||
Uri.parse("custom://" + messageId + System.currentTimeMillis()),
|
||||
context, SmsListener.class);
|
||||
|
||||
pending.putExtra("type", type);
|
||||
pending.putExtra("message_id", messageId);
|
||||
|
||||
return pending;
|
||||
}
|
||||
|
||||
protected Intent constructDeliveredIntent(Context context, long messageId, long type) {
|
||||
Intent pending = new Intent(SendReceiveService.DELIVERED_SMS_ACTION,
|
||||
Uri.parse("custom://" + messageId + System.currentTimeMillis()),
|
||||
context, SmsListener.class);
|
||||
pending.putExtra("type", type);
|
||||
pending.putExtra("message_id", messageId);
|
||||
|
||||
return pending;
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package org.thoughtcrime.securesms.transport;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class GcmTransport {
|
||||
|
||||
private final Context context;
|
||||
private final MasterSecret masterSecret;
|
||||
|
||||
public GcmTransport(Context context, MasterSecret masterSecret) {
|
||||
this.context = context.getApplicationContext();
|
||||
this.masterSecret = masterSecret;
|
||||
}
|
||||
|
||||
public void deliver(SmsMessageRecord message) throws IOException {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
43
src/org/thoughtcrime/securesms/transport/PushTransport.java
Normal file
43
src/org/thoughtcrime/securesms/transport/PushTransport.java
Normal file
@@ -0,0 +1,43 @@
|
||||
package org.thoughtcrime.securesms.transport;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
import org.whispersystems.textsecure.push.PushServiceSocket;
|
||||
import org.whispersystems.textsecure.push.RateLimitException;
|
||||
import org.whispersystems.textsecure.util.PhoneNumberFormatter;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class PushTransport extends BaseTransport {
|
||||
|
||||
private final Context context;
|
||||
private final MasterSecret masterSecret;
|
||||
|
||||
public PushTransport(Context context, MasterSecret masterSecret) {
|
||||
this.context = context.getApplicationContext();
|
||||
this.masterSecret = masterSecret;
|
||||
}
|
||||
|
||||
public void deliver(SmsMessageRecord message) throws IOException {
|
||||
try {
|
||||
String localNumber = TextSecurePreferences.getLocalNumber(context);
|
||||
String password = TextSecurePreferences.getPushServerPassword(context);
|
||||
PushServiceSocket socket = new PushServiceSocket(context, localNumber, password);
|
||||
|
||||
String recipientNumber = message.getIndividualRecipient().getNumber();
|
||||
String recipientCanonicalNumber = PhoneNumberFormatter.formatNumber(recipientNumber,
|
||||
localNumber);
|
||||
|
||||
socket.sendMessage(recipientCanonicalNumber, message.getBody().getBody());
|
||||
|
||||
context.sendBroadcast(constructSentIntent(context, message.getId(), message.getType()));
|
||||
} catch (RateLimitException e) {
|
||||
Log.w("PushTransport", e);
|
||||
throw new IOException("Rate limit exceeded.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class SmsTransport {
|
||||
public class SmsTransport extends BaseTransport {
|
||||
|
||||
private final Context context;
|
||||
private final MasterSecret masterSecret;
|
||||
@@ -114,11 +114,10 @@ public class SmsTransport {
|
||||
private ArrayList<PendingIntent> constructSentIntents(long messageId, long type, ArrayList<String> messages) {
|
||||
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messages.size());
|
||||
|
||||
for (int i=0;i<messages.size();i++) {
|
||||
Intent pending = new Intent(SendReceiveService.SENT_SMS_ACTION, Uri.parse("custom://" + messageId + System.currentTimeMillis()), context, SmsDeliveryListener.class);
|
||||
pending.putExtra("type", type);
|
||||
pending.putExtra("message_id", messageId);
|
||||
sentIntents.add(PendingIntent.getBroadcast(context, 0, pending, 0));
|
||||
for (String message : messages) {
|
||||
sentIntents.add(PendingIntent.getBroadcast(context, 0,
|
||||
constructSentIntent(context, messageId, type),
|
||||
0));
|
||||
}
|
||||
|
||||
return sentIntents;
|
||||
@@ -131,11 +130,10 @@ public class SmsTransport {
|
||||
|
||||
ArrayList<PendingIntent> deliveredIntents = new ArrayList<PendingIntent>(messages.size());
|
||||
|
||||
for (int i=0;i<messages.size();i++) {
|
||||
Intent pending = new Intent(SendReceiveService.DELIVERED_SMS_ACTION, Uri.parse("custom://" + messageId + System.currentTimeMillis()), context, SmsDeliveryListener.class);
|
||||
pending.putExtra("type", type);
|
||||
pending.putExtra("message_id", messageId);
|
||||
deliveredIntents.add(PendingIntent.getBroadcast(context, 0, pending, 0));
|
||||
for (String message : messages) {
|
||||
deliveredIntents.add(PendingIntent.getBroadcast(context, 0,
|
||||
constructDeliveredIntent(context, messageId, type),
|
||||
0));
|
||||
}
|
||||
|
||||
return deliveredIntents;
|
||||
|
||||
@@ -1,38 +1,50 @@
|
||||
package org.thoughtcrime.securesms.transport;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
import org.whispersystems.textsecure.directory.NumberFilter;
|
||||
import org.whispersystems.textsecure.util.PhoneNumberFormatter;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class UniversalTransport {
|
||||
|
||||
private final Context context;
|
||||
private final GcmTransport gcmTransport;
|
||||
private final SmsTransport smsTransport;
|
||||
private final Context context;
|
||||
private final PushTransport pushTransport;
|
||||
private final SmsTransport smsTransport;
|
||||
|
||||
public UniversalTransport(Context context, MasterSecret masterSecret) {
|
||||
this.context = context;
|
||||
this.gcmTransport = new GcmTransport(context, masterSecret);
|
||||
this.smsTransport = new SmsTransport(context, masterSecret);
|
||||
this.context = context;
|
||||
this.pushTransport = new PushTransport(context, masterSecret);
|
||||
this.smsTransport = new SmsTransport(context, masterSecret);
|
||||
}
|
||||
|
||||
public void deliver(SmsMessageRecord message) throws UndeliverableMessageException {
|
||||
smsTransport.deliver(message);
|
||||
// Recipient recipient = message.getIndividualRecipient();
|
||||
// String number = PhoneNumberFormatter.formatNumber(context, recipient.getNumber());
|
||||
//
|
||||
// if (NumberFilter.getInstance(context).containsNumber(number)) {
|
||||
// try {
|
||||
// Log.w("UniversalTransport", "Delivering with GCM...");
|
||||
// gcmTransport.deliver(message);
|
||||
// } catch (IOException ioe) {
|
||||
// Log.w("UniversalTransport", ioe);
|
||||
// smsTransport.deliver(message);
|
||||
// }
|
||||
// } else {
|
||||
// Log.w("UniversalTransport", "Delivering with SMS...");
|
||||
// smsTransport.deliver(message);
|
||||
// }
|
||||
if (!TextSecurePreferences.isPushRegistered(context)) {
|
||||
smsTransport.deliver(message);
|
||||
return;
|
||||
}
|
||||
|
||||
Recipient recipient = message.getIndividualRecipient();
|
||||
String localNumber = TextSecurePreferences.getLocalNumber(context);
|
||||
String number = PhoneNumberFormatter.formatNumber(recipient.getNumber(), localNumber);
|
||||
|
||||
if (NumberFilter.getInstance(context).containsNumber(number)) {
|
||||
try {
|
||||
Log.w("UniversalTransport", "Delivering with GCM...");
|
||||
pushTransport.deliver(message);
|
||||
} catch (IOException ioe) {
|
||||
Log.w("UniversalTransport", ioe);
|
||||
smsTransport.deliver(message);
|
||||
}
|
||||
} else {
|
||||
Log.w("UniversalTransport", "Delivering with SMS...");
|
||||
smsTransport.deliver(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user