Hi Lovely people,

I am using Huawei E160 modem to test the sample program included in
smslib project.
While running ReadMessages.java whose code is below, I can read the
messages already stored in the simcard of the modem with no error,
but when a new incoming message arrives, the following error occurs

65406 [SMSLib-AsyncMessageProcessor : modem.com1] ERROR smslib - GTW:
modem.com1: Unhandled SMS in inbox, skipping...
java.lang.NumberFormatException: For input string: "+C"
        at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:
48)
        at java.lang.Integer.parseInt(Integer.java:447)
        at
org.ajwcc.pduUtils.gsm3040.PduUtils.pduToBytes(PduUtils.java:1009)
        at
org.ajwcc.pduUtils.gsm3040.PduParser.parsePdu(PduParser.java:169)
        at
org.smslib.modem.ModemGateway.readMessagesPDU(ModemGateway.java:552)
        at
org.smslib.modem.ModemGateway.readMessages(ModemGateway.java:207)
        at org.smslib.modem.AModemDriver
$AsyncMessageProcessor.run(AModemDriver.java:858)
65406 [SMSLib-AsyncMessageProcessor : modem.com1] ERROR smslib - GTW:
modem.com1: ERROR PDU: +CMGL: 0,1,,30
Exception in thread "SMSLib-AsyncMessageProcessor : modem.com1"
java.lang.StringIndexOutOfBoundsException: String index out of range:
-1
        at java.lang.String.substring(String.java:1938)
        at
org.smslib.modem.ModemGateway.readMessagesPDU(ModemGateway.java:539)
        at
org.smslib.modem.ModemGateway.readMessages(ModemGateway.java:207)
        at org.smslib.modem.AModemDriver
$AsyncMessageProcessor.run(AModemDriver.java:858)

here is the java class

// ReadMessages.java - Sample application.
//
// This application shows you the basic procedure needed for reading
// SMS messages from your GSM modem, in synchronous mode.
//
// Operation description:
// The application setup the necessary objects and connects to the
phone.
// As a first step, it reads all messages found in the phone.
// Then, it goes to sleep, allowing the asynchronous callback handlers
to
// be called. Furthermore, for callback demonstration purposes, it
responds
// to each received message with a "Got It!" reply.
//
// Tasks:
// 1) Setup Service object.
// 2) Setup one or more Gateway objects.
// 3) Attach Gateway objects to Service object.
// 4) Setup callback notifications.
// 5) Run


import java.util.ArrayList;
import java.util.List;
import javax.crypto.spec.SecretKeySpec;
import org.smslib.ICallNotification;
import org.smslib.IGatewayStatusNotification;
import org.smslib.IInboundMessageNotification;
import org.smslib.IOrphanedMessageNotification;
import org.smslib.InboundMessage;
import org.smslib.Library;
import org.smslib.Service;
import org.smslib.AGateway.GatewayStatuses;
import org.smslib.AGateway.Protocols;
import org.smslib.InboundMessage.MessageClasses;
import org.smslib.Message.MessageTypes;
import org.smslib.crypto.AESKey;
import org.smslib.modem.SerialModemGateway;

public class ReadMessages
{
        Service srv;

        public void doIt() throws Exception
        {
                // Define a list which will hold the read messages.
                List<InboundMessage> msgList;

                // Create the notification callback method for inbound & status
report
                // messages.
                InboundNotification inboundNotification = new 
InboundNotification();

                // Create the notification callback method for inbound voice 
calls.
                CallNotification callNotification = new CallNotification();

                //Create the notification callback method for gateway statuses.
                GatewayStatusNotification statusNotification = new
GatewayStatusNotification();

                OrphanedMessageNotification orphanedMessageNotification = new
OrphanedMessageNotification();

                try
                {
                        System.out.println("Example: Read messages from a 
serial gsm
modem.");
                        System.out.println(Library.getLibraryDescription());
                        System.out.println("Version: " + 
Library.getLibraryVersion());

                        // Create new Service object - the parent of all and 
the main
interface
                        // to you.
                        this.srv = new Service();
                         System.out.println("1");
                        // Create the Gateway representing the serial GSM modem.
                        SerialModemGateway gateway = new 
SerialModemGateway("modem.com1",
"COM7", 115200, "Huawei", "E160");
 
gateway.getATHandler().setStorageLocations("SMMTME");
                        // Set the modem protocol to PDU (alternative is TEXT). 
PDU is the
default, anyway...
                        gateway.setProtocol(Protocols.PDU);

                        // Do we want the Gateway to be used for Inbound 
messages?
                        gateway.setInbound(true);

                        // Do we want the Gateway to be used for Outbound 
messages?
                        gateway.setOutbound(true);
                        System.out.println("2");
                        // Let SMSLib know which is the SIM PIN.
                        //gateway.setSimPin("0000");

                        // Set up the notification methods.
                        
this.srv.setInboundMessageNotification(inboundNotification);
                        //this.srv.setCallNotification(callNotification);
                        
//this.srv.setGatewayStatusNotification(statusNotification);
                        //
this.srv.setOrphanedMessageNotification(orphanedMessageNotification);

                        // Add the Gateway to the Service object.
                        this.srv.addGateway(gateway);
                        System.out.println("3");
                        // Similarly, you may define as many Gateway objects, 
representing
                        // various GSM modems, add them in the Service object 
and control
all of them.

                        // Start! (i.e. connect to all defined Gateways)
                        this.srv.startService();

                        // Printout some general information about the modem.
                        System.out.println();
                        System.out.println("Modem Information:");
                        System.out.println("  Manufacturer: " + 
gateway.getManufacturer());
                        System.out.println("  Model: " + gateway.getModel());
                        System.out.println("  Serial No: " + 
gateway.getSerialNo());
                        System.out.println("  SIM IMSI: " + gateway.getImsi());
                        System.out.println("  Signal Level: " + 
gateway.getSignalLevel() +
"%");
                        System.out.println("  Battery Level: " + 
gateway.getBatteryLevel()
+ "%");
                        System.out.println();

                        // In case you work with encrypted messages, its a good 
time to
declare your keys.
                        // Create a new AES Key with a known key value.
                        // Register it in KeyManager in order to keep it 
active. SMSLib
will then automatically
                        // encrypt / decrypt all messages send to / received 
from this
number.
                        //this.srv.getKeyManager().registerKey("+254721663208", 
new
AESKey(new SecretKeySpec("0011223344556677".getBytes(), "AES")));

                        // Read Messages. The reading is done via the Service 
object and
                        // affects all Gateway objects defined. This can also 
be more
directed to a specific
                        // Gateway - look the JavaDocs for information on the 
Service
method calls.
                        msgList = new ArrayList<InboundMessage>();
                        this.srv.readMessages(msgList, MessageClasses.ALL);
 
System.out.println("msgList.size(2)="+msgList.size());
                        for (InboundMessage msg : msgList)
                                System.out.println(msg);

                        // Sleep now. Emulate real world situation and give a 
chance to the
notifications
                        // methods to be called in the event of message or 
voice call
reception.

                        System.out.println("Now Sleeping - Hit <enter> to stop 
service.");
                        System.in.read(); System.in.read();
                }
                catch (Exception e)
                {
                     System.out.println("e.printStackTrace();1");
                        e.printStackTrace();
                }
                finally
                {
                        this.srv.stopService();
                }
        }

        public class InboundNotification implements
IInboundMessageNotification
        {

            public void process(String gatewayId, MessageTypes
msgType, InboundMessage msg)
                {
                System.out.println("bbbbbbbbbbbbbbb");
                        if (msgType == MessageTypes.INBOUND) 
System.out.println(">>> New
Inbound message detected from Gateway: " + gatewayId);
                        else if (msgType == MessageTypes.STATUSREPORT)
System.out.println(">>> New Inbound Status Report message detected
from Gateway: " + gatewayId);
                        System.out.println(msg);
                }
        }

        public class CallNotification implements ICallNotification
        {
                public void process(String gatewayId, String callerId)
                {
                        System.out.println(">>> New call detected from Gateway: 
" +
gatewayId + " : " + callerId);
                }
        }

        public class GatewayStatusNotification implements
IGatewayStatusNotification
        {
                public void process(String gatewayId, GatewayStatuses oldStatus,
GatewayStatuses newStatus)
                {
                        System.out.println(">>> Gateway Status change for " + 
gatewayId +
", OLD: " + oldStatus + " -> NEW: " + newStatus);
                }
        }

        public class OrphanedMessageNotification implements
IOrphanedMessageNotification
        {
                public boolean process(String gatewayId, InboundMessage msg)
                {
                        System.out.println(">>> Orphaned message part detected 
from " +
gatewayId);
                        System.out.println(msg);
                        // Since we are just testing, return FALSE and keep the 
orphaned
message part.
                        return false;
                }
        }

        public static void main(String args[])
        {
                ReadMessages app = new ReadMessages();
                try
                {
                        app.doIt();
                }
                catch (Exception e)
                {
                        System.out.println("e.printStackTrace();2");
                        e.printStackTrace();
                }
        }
}

-- 
You received this message because you are subscribed to the Google Groups 
"SMSLib User Group" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/smslib?hl=en.

Reply via email to