package lancs.mobilemedia.sms;
import java.io.IOException;
import java.io.InterruptedIOException;
import javax.microedition.io.Connector;
import javax.microedition.io.PushRegistry;
import javax.wireless.messaging.BinaryMessage;
import javax.wireless.messaging.Message;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;
import lancs.mobilemedia.core.comms.BaseMessaging;
import de.ovgu.cide.jakutil.*;
/**
* @author trevor
* Insert Comments here
*/
public class SmsMessaging extends BaseMessaging {
private String smsSendPort;
private String smsReceivePort="1000";
private String destinationPhoneNumber;
private String smsProtocolPrefix="sms://";
private MessageConnection smsConn=null;
private Message msg;
private String[] connections;
public SmsMessaging(){
smsSendPort="1000";
smsReceivePort="1000";
}
public SmsMessaging( String smsDstPort, String destinationPhoneNumber){
this.destinationPhoneNumber=destinationPhoneNumber;
this.smsSendPort=smsDstPort;
}
public boolean sendImage( byte[] imageData){
boolean success=true;
String address=destinationPhoneNumber;
if ((smsSendPort != null) && (smsSendPort != "")) address=smsProtocolPrefix + address + ":"+ smsSendPort+ 1;
System.out.println("SmsMessaging::sendImage: Sending binary message to: " + address);
MessageConnection smsconn=null;
try {
smsconn=(MessageConnection)Connector.open(address);
BinaryMessage binmsg=(BinaryMessage)smsconn.newMessage(MessageConnection.BINARY_MESSAGE);
binmsg.setPayloadData(imageData);
int i=smsconn.numberOfSegments(binmsg);
System.out.println("SmsMessaging::sendImage() num segments to send is: " + i);
smsconn.send(binmsg);
}
catch ( Throwable t) {
System.out.println("Send caught: ");
t.printStackTrace();
return false;
}
cleanUpConnections(smsconn);
return success;
}
public byte[] receiveImage() throws InterruptedIOException, IOException {
System.out.println("SmsMessaging::receiveImage() - start");
byte[] receivedData=null;
String smsConnection=smsProtocolPrefix + ":" + smsReceivePort;
String senderAddress;
if (smsConn == null) {
try {
smsConn=(MessageConnection)Connector.open(smsConnection);
}
catch ( IOException ioe) {
ioe.printStackTrace();
}
}
connections=PushRegistry.listConnections(true);
if (connections == null || connections.length == 0) {
System.out.println("Waiting for SMS on " + smsConnection + "...");
}
System.out.println("DEBUG 1: before smsConn.receive():" + smsConn);
msg=smsConn.receive();
System.out.println("DEBUG 2: after smsConn.receive()");
if (msg != null) {
senderAddress=msg.getAddress();
System.out.println("From: " + senderAddress);
if (msg instanceof TextMessage) {
String incomingMessage=((TextMessage)msg).getPayloadText();
System.out.println("Incoming SMS Message with Payload:" + incomingMessage);
}
else {
System.out.println("Incoming Binary SMS Message...");
StringBuffer buf=new StringBuffer();
receivedData=((BinaryMessage)msg).getPayloadData();
System.out.println("SmsMessaging::receiveImage: sender address = " + senderAddress.toString());
System.out.println("SmsMessaging::receiveImage: buffer length = " + buf.length() + " contents = "+ buf.toString());
}
}
System.out.println("SmsMessaging::receiveImage() - Finish");
return receivedData;
}
public void cleanUpConnections( MessageConnection smsConn){
if (smsConn != null) {
try {
smsConn.close();
}
catch ( IOException ioe) {
System.out.println("Closing connection caught: ");
ioe.printStackTrace();
}
}
}
public void cleanUpReceiverConnections(){
if (smsConn != null) {
try {
smsConn.close();
smsConn=null;
}
catch ( IOException ioe) {
System.out.println("Closing connection caught: ");
ioe.printStackTrace();
}
}
}
/**
* @return Returns the destinationPhoneNumber.
*/
public String getDestinationPhoneNumber(){
return destinationPhoneNumber;
}
/**
* @param destinationPhoneNumber The destinationPhoneNumber to set.
*/
public void setDestinationPhoneNumber( String destinationPhoneNumber){
this.destinationPhoneNumber=destinationPhoneNumber;
}
/**
* @return Returns the smsReceivePort.
*/
public String getSmsReceivePort(){
return smsReceivePort;
}
/**
* @param smsReceivePort The smsReceivePort to set.
*/
public void setSmsReceivePort( String smsReceivePort){
this.smsReceivePort=smsReceivePort;
}
/**
* @return Returns the smsSendPort.
*/
public String getSmsSendPort(){
return smsSendPort;
}
/**
* @param smsSendPort The smsSendPort to set.
*/
public void setSmsSendPort( String smsSendPort){
this.smsSendPort=smsSendPort;
}
}