From 3048d3aaa315343c72c4a16ec6b5e2d2e929cc47 Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Tue, 31 Oct 2017 00:30:32 -0400 Subject: [PATCH] First hack at client-side sms gateway, receipt works --- build.gradle | 4 +- src/main/AndroidManifest.xml | 8 ++ .../conversations/services/SMSReceiver.java | 78 +++++++++++++++++++ .../services/XmppConnectionService.java | 4 + 4 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/services/SMSReceiver.java diff --git a/build.gradle b/build.gradle index bf8a6a20..c6eb689c 100644 --- a/build.gradle +++ b/build.gradle @@ -64,11 +64,11 @@ android { defaultConfig { minSdkVersion 14 - targetSdkVersion 25 + targetSdkVersion 22 versionCode 236 versionName "1.21.0" archivesBaseName += "-$versionName" - applicationId "eu.siacs.conversations" + applicationId "eu.siacs.conversations.sms" } dexOptions { diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 52c3225e..b4f1b21b 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -14,6 +14,9 @@ + + + + + + + + diff --git a/src/main/java/eu/siacs/conversations/services/SMSReceiver.java b/src/main/java/eu/siacs/conversations/services/SMSReceiver.java new file mode 100644 index 00000000..a3629093 --- /dev/null +++ b/src/main/java/eu/siacs/conversations/services/SMSReceiver.java @@ -0,0 +1,78 @@ +package eu.siacs.conversations.services; + +import android.content.*; +import android.os.Bundle; +import android.telephony.SmsMessage; +import android.util.Log; +import eu.siacs.conversations.Config; +import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.xml.Element; +import eu.siacs.conversations.xmpp.jid.Jid; +import eu.siacs.conversations.xmpp.stanzas.MessagePacket; + +public class SMSReceiver extends BroadcastReceiver { + + public static XmppConnectionService xmppConnectionService; + + @Override + public void onReceive(Context context, Intent intent) { + Bundle bundle = intent.getExtras(); + if (bundle == null) + return; + + Object[] pdus = (Object[]) bundle.get("pdus"); + for (int i = 0; i < pdus.length; ++i) { + SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[i]); + final String from = msg.getOriginatingAddress(); + //if (!"7243".equals(msg.getOriginatingAddress())) continue; + // it's a message from Page Plus, but is it a balance message? + final String message = msg.getMessageBody(); + if (message == null) + continue; + // it IS a balance message, get to parsing... + Log.d(Config.LOGTAG, "SMSReceiver: " + from + ": " + message); + Log.d(Config.LOGTAG, "SMSReceiver: xmppConnectionService: " + xmppConnectionService); + try { + // test + android.widget.Toast.makeText(context, from + ": " + message, android.widget.Toast.LENGTH_SHORT).show(); +/* + */ + final Jid fromJid = Jid.fromString(from + "@echo.burtrum.org"); + final Account account = xmppConnectionService.getAccounts().get(0); + + final MessagePacket packet = new MessagePacket(); + packet.setType(MessagePacket.TYPE_NORMAL); + //packet.setAttribute("id",id); + packet.setTo(fromJid); + packet.setFrom(account.getJid()); + + packet.addChild("echo", "https://code.moparisthebest.com/moparisthebest/xmpp-echo-self"); + + final Element forwarded = packet.addChild("forwarded", "urn:xmpp:forward:0"); + // todo: add delay to forwarded with msg.getTimestampMillis() + final MessagePacket forwardedMsg = new MessagePacket(); + forwarded.addChild(forwardedMsg); + + forwardedMsg.setAttribute("xmlns", "jabber:client"); + forwardedMsg.setType(MessagePacket.TYPE_CHAT); + forwardedMsg.setTo(account.getJid()); + forwardedMsg.setFrom(fromJid); + forwardedMsg.setBody(message); + + xmppConnectionService.sendMessagePacket(account, packet); + + //---send a broadcast intent to update the SMS received in the activity--- + /* + Intent broadcastIntent = new Intent(); + broadcastIntent.setAction(Main.PP_BAL_RECEIVED_ACTION); + broadcastIntent.putExtra(Main.BALANCE, "someString"); + context.sendBroadcast(broadcastIntent); + */ + + + } catch (Exception e) { + Log.d(Config.LOGTAG, "SMSReceiver: ", e); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 9792cd3a..1f95a2f4 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -167,6 +167,10 @@ public class XmppConnectionService extends Service { private long mLastActivity = 0; + public XmppConnectionService() { + SMSReceiver.xmppConnectionService = this; + } + public DatabaseBackend databaseBackend; private ContentObserver contactObserver = new ContentObserver(null) { @Override