Hi, please post a bit more of the log - I need to see the data exchanged. If you care about privacy, you can email me the *full* ReadMessages log.
On 19 March 2010 19:31, Moderator <[email protected]> wrote: > 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]<smslib%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/smslib?hl=en. > > -- 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.
