From c44c865fcad3bfeb11f66172058d16bc3dfb881d Mon Sep 17 00:00:00 2001 From: Nir Yariv Date: Sun, 3 Oct 2010 20:11:48 -0400 Subject: [PATCH] init under new name --- AndroidManifest.xml | 32 ++++ README | 5 + default.properties | 13 ++ res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes res/layout/main.xml | 13 ++ res/values/strings.xml | 5 + res/xml/prefs.xml | 7 + src/kalsms/niryariv/itp/Main.java | 86 +++++++++ src/kalsms/niryariv/itp/Prefs.java | 31 ++++ src/kalsms/niryariv/itp/SMSReceiver.java | 225 +++++++++++++++++++++++ src/kalsms/niryariv/itp/URLopen.java | 74 ++++++++ 13 files changed, 491 insertions(+) create mode 100644 AndroidManifest.xml create mode 100644 README create mode 100644 default.properties create mode 100644 res/drawable-hdpi/icon.png create mode 100644 res/drawable-ldpi/icon.png create mode 100644 res/drawable-mdpi/icon.png create mode 100644 res/layout/main.xml create mode 100644 res/values/strings.xml create mode 100644 res/xml/prefs.xml create mode 100644 src/kalsms/niryariv/itp/Main.java create mode 100644 src/kalsms/niryariv/itp/Prefs.java create mode 100644 src/kalsms/niryariv/itp/SMSReceiver.java create mode 100644 src/kalsms/niryariv/itp/URLopen.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..0af7a82 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..4274f51 --- /dev/null +++ b/README @@ -0,0 +1,5 @@ +KalSMS is an simple Android SMS gateway application. + +Info & setup here: http://wiki.github.com/niryariv/kalsms/ + +Please contact niryariv@gmail.com with any questions or feedback. \ No newline at end of file diff --git a/default.properties b/default.properties new file mode 100644 index 0000000..9d6f70d --- /dev/null +++ b/default.properties @@ -0,0 +1,13 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "build.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-4 +# Indicates whether an apk should be generated for each density. +split.density=false diff --git a/res/drawable-hdpi/icon.png b/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi/icon.png b/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 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 + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..a734339 --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,5 @@ + + + SMS Gateway Running.\n + KalSMS + diff --git a/res/xml/prefs.xml b/res/xml/prefs.xml new file mode 100644 index 0000000..2692eac --- /dev/null +++ b/res/xml/prefs.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/src/kalsms/niryariv/itp/Main.java b/src/kalsms/niryariv/itp/Main.java new file mode 100644 index 0000000..3f5328f --- /dev/null +++ b/src/kalsms/niryariv/itp/Main.java @@ -0,0 +1,86 @@ +package kalsms.niryariv.itp; + +import kalsms.niryariv.itp.R; +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceActivity; +import android.preference.Preference; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.Html; +import android.util.Log; +import android.view.Menu; +import android.widget.TextView; + +public class Main extends Activity { + +// public static final String PREFS_NAME = "KalPrefsFile"; + + public String identifier = ""; + public String targetUrl = ""; + + + public void onResume() { + Log.d("KALSMS", "RESUME"); + super.onResume(); + + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); + + this.identifier = settings.getString("pref_identifier", ""); + this.targetUrl = settings.getString("pref_target_url", ""); + + Log.d("KALSMS", "onResume ident:" + this.identifier +"\ntarget:" + this.targetUrl); + + String infoText = new String(); + + infoText = "All SMS messages"; + + if (this.identifier.trim() != "") { + infoText += " starting with " + this.identifier + ""; + } + + infoText += " are now sent to " + this.targetUrl +" in the following format:"; + infoText += "

GET " + this.targetUrl + "?sender=<phone#>&msg=<message>

"; + infoText += "If the response body contains text, it will SMSed back to the sender."; + + infoText += "

Press Menu to set SMS identifier or target URL."; + + infoText += "


Questions/feedback: niryariv@gmail.com"; + + TextView info = (TextView) this.findViewById(R.id.info); + info.setText(Html.fromHtml(infoText)); + + } + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + PreferenceManager.setDefaultValues(this, R.xml.prefs, false); + + Log.d("KALSMS", "STARTED"); + } + + + // first time the Menu key is pressed + public boolean onCreateOptionsMenu(Menu menu) { + startActivity(new Intent(this, Prefs.class)); + return(true); + } + + // any other time the Menu key is pressed + public boolean onPrepareOptionsMenu(Menu menu) { + startActivity(new Intent(this, Prefs.class)); + return(true); + } + + + @Override + protected void onStop(){ + // dont do much with this, atm.. + super.onStop(); + } + +} diff --git a/src/kalsms/niryariv/itp/Prefs.java b/src/kalsms/niryariv/itp/Prefs.java new file mode 100644 index 0000000..10b3fa1 --- /dev/null +++ b/src/kalsms/niryariv/itp/Prefs.java @@ -0,0 +1,31 @@ +package kalsms.niryariv.itp; + +import kalsms.niryariv.itp.R; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.EditTextPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.util.Log; + + +public class Prefs extends PreferenceActivity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.prefs); + } + + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + Preference pref = findPreference(key); + + if (pref instanceof EditTextPreference) { + EditTextPreference textPref = (EditTextPreference) pref; + pref.setSummary(textPref.getSummary()); + Log.d("KALSMS", "textPref.getSummary(): " + textPref.getSummary()); + } + } +} + diff --git a/src/kalsms/niryariv/itp/SMSReceiver.java b/src/kalsms/niryariv/itp/SMSReceiver.java new file mode 100644 index 0000000..207774c --- /dev/null +++ b/src/kalsms/niryariv/itp/SMSReceiver.java @@ -0,0 +1,225 @@ +package kalsms.niryariv.itp; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.telephony.SmsManager; +import android.telephony.SmsMessage; +import android.util.Log; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URLEncodedUtils; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +public class SMSReceiver extends BroadcastReceiver { + + + @Override + // source: http://www.devx.com/wireless/Article/39495/1954 + public void onReceive(Context context, Intent intent) { + if (!intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { + return; + } + + // get settings + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); + + String identifier = settings.getString("pref_identifier", ""); + String targetUrl = settings.getString("pref_target_url", ""); + + SmsMessage msgs[] = getMessagesFromIntent(intent); + + for (int i = 0; i < msgs.length; i++) { + SmsMessage mesg = msgs[i]; + String message = mesg.getDisplayMessageBody(); + String sender = mesg.getDisplayOriginatingAddress(); + + if (message != null && message.length() > 0 + && (message.toLowerCase().startsWith(identifier) || identifier.trim() == "")) { + + Log.d("KALSMS", "MSG RCVD:\"" + message + "\" from: " + sender); + + // send the message to the URL + String resp = openURL(sender, message, targetUrl).toString(); + + Log.d("KALSMS", "RESP:\"" + resp); + + // SMS back the response + if (resp.trim().length() > 0) { + ArrayList> items = parseXML(resp); + + SmsManager smgr = SmsManager.getDefault(); + + for (int j = 0; j < items.size(); j++) { + String sendTo = items.get(j).get(0); + if (sendTo.toLowerCase() == "sender") sendTo = sender; + String sendMsg = items.get(j).get(1); + + try { + Log.d("KALSMS", "SEND MSG:\"" + sendMsg + "\" TO: " + sendTo); + smgr.sendTextMessage(sendTo, null, sendMsg, null, null); + } catch (Exception ex) { + Log.d("KALSMS", "SMS FAILED"); + } + } + } + + // delete SMS from inbox, to prevent it from filling up + DeleteSMSFromInbox(context, mesg); + + } + } + + } + + private void DeleteSMSFromInbox(Context context, SmsMessage mesg) { + Log.d("KALSMS", "try to delete SMS"); + + try { + Uri uriSms = Uri.parse("content://sms/inbox"); + + StringBuilder sb = new StringBuilder(); + sb.append("address='" + mesg.getOriginatingAddress() + "' AND "); + sb.append("body='" + mesg.getMessageBody() + "'"); + Cursor c = context.getContentResolver().query(uriSms, null, sb.toString(), null, null); + c.moveToFirst(); + int thread_id = c.getInt(1); + context.getContentResolver().delete(Uri.parse("content://sms/conversations/" + thread_id), null, null); + c.close(); + } catch (Exception ex) { + // deletions don't work most of the time since the timing of the + // receipt and saving to the inbox + // makes it difficult to match up perfectly. the SMS might not be in + // the inbox yet when this receiver triggers! + Log.d("SmsReceiver", "Error deleting sms from inbox: " + ex.getMessage()); + } + } + + + // from http://github.com/dimagi/rapidandroid + // source: http://www.devx.com/wireless/Article/39495/1954 + private SmsMessage[] getMessagesFromIntent(Intent intent) { + SmsMessage retMsgs[] = null; + Bundle bdl = intent.getExtras(); + try { + Object pdus[] = (Object[]) bdl.get("pdus"); + retMsgs = new SmsMessage[pdus.length]; + for (int n = 0; n < pdus.length; n++) { + byte[] byteData = (byte[]) pdus[n]; + retMsgs[n] = SmsMessage.createFromPdu(byteData); + } + + } catch (Exception e) { + Log.e("KALSMS", "GetMessages ERROR\n" + e); + } + return retMsgs; + } + + + public String openURL(String sender, String message, String targetUrl) { + + List qparams = new ArrayList(); + qparams.add(new BasicNameValuePair("sender", sender)); + qparams.add(new BasicNameValuePair("msg", message)); + String url = targetUrl + "?" + URLEncodedUtils.format(qparams, "UTF-8"); + + try { + HttpClient client = new DefaultHttpClient(); + HttpGet get = new HttpGet(url); + + HttpResponse responseGet = client.execute(get); + HttpEntity resEntityGet = responseGet.getEntity(); + if (resEntityGet != null) { + String resp = EntityUtils.toString(resEntityGet); + Log.e("KALSMS", "HTTP RESP" + resp); + return resp; + } + } catch (Exception e) { + Log.e("KALSMS", "HTTP REQ FAILED:" + url); + e.printStackTrace(); + } + + return ""; + } + + + public static ArrayList> parseXML(String xml) { + ArrayList> output = new ArrayList>(); + + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + + Document doc = dBuilder.parse(new InputSource(new StringReader(xml))); + + NodeList rnodes = doc.getElementsByTagName("reply"); + + NodeList nodes = rnodes.item(0).getChildNodes(); + + for (int i=0; i < nodes.getLength(); i++) { + try { + List item = new ArrayList(); + + Node node = nodes.item(i); + if (node.getNodeType() != Node.ELEMENT_NODE) continue; + + Element e = (Element) node; + String nodeName = e.getNodeName(); + + if (nodeName.equalsIgnoreCase("sms")) { + if (!e.getAttribute("phone").equals("")) { + item.add(e.getAttribute("phone")); + item.add(e.getFirstChild().getNodeValue()); + output.add((ArrayList) item); + } + } else if (nodeName.equalsIgnoreCase("sms-to-sender")) { + item.add("sender"); + item.add(e.getFirstChild().getNodeValue()); + output.add((ArrayList) item); + } else { + continue; + } + } catch (Exception e){ + Log.e("KALSMS", "FAILED PARSING XML NODE# " + i ); + } + } + Log.e("KALSMS", "PARSING XML RETURNS " + output ); + return (output); + + } catch (Exception e) { + Log.e("KALSMS", "PARSING XML FAILED: " + xml ); + e.printStackTrace(); + return (output); + } + } +} diff --git a/src/kalsms/niryariv/itp/URLopen.java b/src/kalsms/niryariv/itp/URLopen.java new file mode 100644 index 0000000..4aa8c1f --- /dev/null +++ b/src/kalsms/niryariv/itp/URLopen.java @@ -0,0 +1,74 @@ +package kalsms.niryariv.itp; +//package txtgate.niryariv.itp; +// +//import java.io.BufferedInputStream; +//import java.io.InputStream; +//import java.net.URL; +//import java.net.URLConnection; +// +//import org.apache.http.util.ByteArrayBuffer; +// +//public class URLopen { +// private Thread checkUpdate = new Thread() { +// public void run() { +// try { +// URL updateURL = new URL("http://iconic.4feets.com/update"); +// URLConnection conn = updateURL.openConnection(); +// InputStream is = conn.getInputStream(); +// BufferedInputStream bis = new BufferedInputStream(is); +// ByteArrayBuffer baf = new ByteArrayBuffer(50); +// +// int current = 0; +// while((current = bis.read()) != -1){ +// baf.append((byte)current); +// } +// +// /* Convert the Bytes read to a String. */ +// final String s = new String(baf.toByteArray()); +//// mHandler.post(showUpdate); +// } catch (Exception e) { +// // +// } +// } +// }; +//} +// +////public class Iconic extends Activity { +//// private String html = ""; +//// private Handler mHandler; +//// +//// public void onCreate(Bundle savedInstanceState) { +//// super.onCreate(savedInstanceState); +//// setContentView(R.layout.main); +//// mHandler = new Handler(); +//// checkUpdate.start(); +//// } +//// +//// private Thread checkUpdate = new Thread() { +//// public void run() { +//// try { +//// URL updateURL = new URL("http://iconic.4feets.com/update"); +//// URLConnection conn = updateURL.openConnection(); +//// InputStream is = conn.getInputStream(); +//// BufferedInputStream bis = new BufferedInputStream(is); +//// ByteArrayBuffer baf = new ByteArrayBuffer(50); +//// +//// int current = 0; +//// while((current = bis.read()) != -1){ +//// baf.append((byte)current); +//// } +//// +//// /* Convert the Bytes read to a String. */ +//// html = new String(baf.toByteArray()); +//// mHandler.post(showUpdate); +//// } catch (Exception e) { +//// } +//// } +//// }; +//// +//// private Runnable showUpdate = new Runnable(){ +//// public void run(){ +//// Toast.makeText(Iconic.this, "HTML Code: " + html, Toast.LENGTH_SHORT).show(); +//// } +//// }; +////} \ No newline at end of file