package tests.sms;
import javax.microedition.io.Connector;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;
import java.io.*;
import javax.microedition.io.*;
import com.nokia.mid.s40.io.LocalMessageProtocolMessage;
import com.nokia.mid.s40.io.LocalMessageProtocolConnection;
import com.nokia.mid.s40.codec.DataEncoder;
import com.nokia.mid.s40.codec.DataDecoder;
import javax.microedition.midlet.*;
class J2MEAPIClass implements Runnable {
public void run() {
try {
MessageConnection conn = (MessageConnection)Connector.open("sms://:5000");
TextMessage message = (TextMessage)conn.receive();
if (!message.getPayloadText().equals("Prova SMS")) {
System.out.println("FAIL - Wrong SMS text: " + message.getPayloadText());
}
if (!message.getAddress().equals("sms://unknown:5000")) {
System.out.println("FAIL - Wrong SMS address: " + message.getAddress());
}
} catch (Exception e) {
System.out.println("FAIL - Unexpected exception: " + e);
e.printStackTrace();
}
}
}
class NokiaAPIClass implements Runnable {
public void run() {
try {
System.out.println("START");
LocalMessageProtocolConnection client = (LocalMessageProtocolConnection)Connector.open("localmsg://nokia.messaging");
// Send protocol version message
DataEncoder dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "Common");
dataEncoder.putStart(14, "message");
dataEncoder.put(13, "name", "ProtocolVersion");
dataEncoder.put(10, "version", "2.[0-10]");
dataEncoder.putEnd(14, "message");
dataEncoder.putEnd(14, "event");
byte[] sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
// Receive protocol version message
LocalMessageProtocolMessage msg = client.newMessage(null);
client.receive(msg);
byte[] clientData = msg.getData();
DataDecoder dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
String name = dataDecoder.getString(13);
if (!name.equals("Common")) {
System.out.println("FAIL - Expected 'Common', got " + name);
}
String struct_name = dataDecoder.getName();
if (!struct_name.equals("message")) {
System.out.println("FAIL - Expected 'message', got " + struct_name);
}
dataDecoder.getStart(14);
String string2 = dataDecoder.getString(13);
String string = string2 + ":" + dataDecoder.getString(10);
dataDecoder.getEnd(14);
if (!string.startsWith("ProtocolVersion:")) {
System.out.println("FAIL - Expected 'ProtocolVersion:'");
}
if (string.indexOf(58) + 1 == -1) {
System.out.println("FAIL");
}
if (string.substring(string.indexOf(58) + 1).length() <= 0) {
System.out.println("FAIL - Version string length should be > 0");
}
// Subscribe for SMS messages
dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "SubscribeMessages");
dataEncoder.put(5, "trans_id", (long)(short)(System.currentTimeMillis() % 255));
dataEncoder.putEnd(14, "event");
sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
// Receive subscription OK message
msg = client.newMessage(null);
client.receive(msg);
clientData = msg.getData();
dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
if (!dataDecoder.getString(13).toLowerCase().equals("subscribemessages")) {
System.out.println("FAIL - Expected 'subscribemessages'");
}
dataDecoder.getInteger(5);
if (!dataDecoder.getString(10).toLowerCase().equals("ok")) {
System.out.println("FAIL - Expected 'ok'");
}
// Wait for a new message to arrive
msg = client.newMessage(null);
client.receive(msg);
clientData = msg.getData();
dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
if (!dataDecoder.getString(13).toLowerCase().equals("messagenotify")) {
System.out.println("FAIL - Expected 'messagenotify'");
}
dataDecoder.getInteger(5);
if (!dataDecoder.getString(10).equals("SMS")) {
System.out.println("FAIL - Expected 'SMS'");
}
long message_id = dataDecoder.getInteger(7);
// Ask for message details
dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "GetMessageEntity");
dataEncoder.put(5, "trans_id", (long)(short)(System.currentTimeMillis() % 255));
dataEncoder.put(7, "message_id", message_id);
dataEncoder.putStart(16, "entries");
dataEncoder.put(10, "entity_element", "body_text");
dataEncoder.put(10, "entity_element", "address");
dataEncoder.putEnd(16, "entries");
dataEncoder.putEnd(14, "event");
sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
// Receive message details
msg = client.newMessage(null);
client.receive(msg);
clientData = msg.getData();
dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
if (!dataDecoder.getString(13).toLowerCase().equals("getmessageentity")) {
System.out.println("FAIL - Expected 'getmessageentity'");
}
dataDecoder.getInteger(5);
if (!dataDecoder.getString(10).toLowerCase().equals("ok")) {
System.out.println("FAIL - Expected 'ok'");
}
long message_id_2 = dataDecoder.getInteger(7);
if (message_id != message_id_2) {
System.out.println("FAIL - Message ID should be the same");
}
dataDecoder.getStart(15);
String sms_text = dataDecoder.getString(11);
if (!sms_text.equals("Prova SMS")) {
System.out.println("FAIL - Wrong SMS text: " + sms_text);
}
dataDecoder.getString(10);
// Delete message
dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "DeleteMessages");
dataEncoder.put(5, "trans_id", (long)(short)(System.currentTimeMillis() % 255));
dataEncoder.putStart(16, "entries");
dataEncoder.put(7, "message_id", message_id_2);
dataEncoder.putEnd(16, "entries");
dataEncoder.putEnd(14, "event");
sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
client.close();
} catch (Exception e) {
System.out.println("FAIL - Unexpected exception: " + e);
e.printStackTrace();
}
}
}
public class SMSMIDlet extends MIDlet {
public void startApp() {
Thread first = new Thread(new J2MEAPIClass());
first.start();
Thread second = new Thread(new NokiaAPIClass());
second.start();
try {
first.join();
second.join();
} catch (Exception e) {
System.out.println("FAIL - Unexpected exception: " + e);
e.printStackTrace();
}
System.out.println("DONE");
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
};