The software presented here is distributed under Logica Open Source License Version 1.0

From this page you can download and read the following software:

The Java SMPP Library

Version 1.3 was released on 28/11/2001.

  • Compiled library classes packed in jar file as
  • The jar file and all Java source files of the library as

Summary of changes:

  • Fixed bug where message could't be longer than 127 bytes as the length was stored as byte which is signed in Java, therefore a message longer than 127 appeared to be shorter than 0 :-). There were more fixes related to unsigned data expressing lengths and counts on different places: short message length, message payload size, SAR count, address count (in submit multi) etc., see detailed list of changes.
  • Added support for multibyte encoding. When setting the message you can now specify encoding of the message string you pass as the parameter to the setShortMessage function. The encoding must be one of the encodings supported by your Java RT, see supported encodings in Java 1.3. (there are constants defined in Data class for the encodings.)
    Note that you have to set data coding as well, it's not done automatically. The other way, after receiving a PDU, you first check the data coding and use appropriate string encoding when getting the message string (if necessary). If you use ASCII encoding, you aren't affected by this change, just use setMessage(String) as before.
  • Session now can check if the PDU can be sent in the current session's status. It means that for example if you are bound as receiver and try to submit a message, an exception will be thrown and no attempt will be made. This wasn't checked before.
    However, this checking is off by default in this release, but it's wise to turn it on in your application, see Session's Javadoc, function enableStateChecking().
  • Class PDU (and therefore all derived classes) now contains support for TLVs which aren't defined in SMPP, see PDU's Javadoc.
  • Few more bug fixes: receiver thread is now started when bound as transmitter, relative dates are not rejected now.

The detailed list of changes.

  • com/logica/smpp/Data.java
    • added multibyte encoding support
  • com/logica/smpp/Session.java
    • the receiver thread is now started even for the transmitter session - before transmitter sessions couldn't receive anything
    • receiver thread is started after the bind request is sent to the MC, before it was started before the bind req was sent to MC, therefore the response could be processed by the listener
    • implemented session states with checking if certain operation is allowed in the current session state
  • com/logica/smpp/pdu/ByteData.java
    • added methods for correction from 'smaller' int negative to 'bigger' int positive (for variables carrying lengths) (several times reported this, thanks!)
    • added support for checking length of data produced from string with multibyte encoding
    • added method for checking if length provided as int is within provided bounds
    • fixed date checking where relative dates were rejected as incorrect; now relative dates are checked only partially
  • com/logica/smpp/pdu/ByteDataList.java
    • better handling of lengths, now can specify size of length field, fixed bug related to the unsigned value stoed in signed Java integral variable
  • com/logica/smpp/pdu/DataSM.java
    • SAR fields now correctly return values > 127
  • com/logica/smpp/pdu/DeliverSM.java
    • message length now stored and returned as short to accomodate the lengths > 127 (they're stored as negative values in byte vars)
    • SAR fields now correctly return values > 127
    • added support for multibyte string encoding for short message
  • com/logica/smpp/pdu/PDU.java
    • added checking if debug's group is active when logging the buffer's hex dump in setData and getData
    • improved parsing of the pdu for the sake of debug speed improvement (in setData())
    • added support for additional (extra) optional parameters which aren't defined in the specs
  • com/logica/smpp/pdu/ReplaceSM.java
    • message length now stored and returned as short to accomodate the lengths > 127 (they're stored as negative values in byte vars)
    • added support for multibyte string encoding for short message
  • com/logica/smpp/pdu/SubmitMultiSM.java
    • message length now stored and returned as short to accomodate the lengths > 127 (they're stored as negative values in byte vars)
    • number of destination addresses now stored correctly (again octet > 127 problem) as ByteDataList was fixed
    • SAR fields now correctly return values > 127
    • added support for multibyte string encoding for short message
  • com/logica/smpp/pdu/SubmitMultiSMResp.java
    • number of unsuccessfull destination addresses now stored correctly (octet > 127 problem) as ByteDataList was fixed
  • com/logica/smpp/pdu/SubmitSM.java
    • message length now stored and returned as short to accomodate the lengths > 127 (they're stored as negative values in byte vars)
    • SAR fields now correctly return values > 127
    • added support for multibyte string encoding for short message
  • com/logica/smpp/pdu/tlv/TLV.java
    • TLV length now returned as int to allow express the lengths > 32767 (they're stored as negative values in vars of type short)
  • com/logica/smpp/pdu/tlv/TLVString.java
    • setValue() now sets flag that the value was set
  • com/logica/smpp/util/ByteBuffer.java
    • added support for appending strings with explicitly stated character encoding
    • fixed bug in appendString0 where if param string was null, NullPointerException was thrown

The SMSC Simulator

Version 1.1 was released on 12/10/2001.
Works with version 1.2 of the Java SMPP Library.

The main changes are that the Simulator now communicates with clients in asynchronous manner and that it recognizes registered delivery and sends a delivery receipt to the client after some short time after receiving the original PDU.

The detailed list of changes.

  • com/logica/smscsim/SMSCListener.java
    • added yield() to run() to give chance to other threads
    • debug now in a group
  • com/logica/smscsim/ShortMessageStore.java
    • added getMessage() returning a message data for message with given messageId
  • com/logica/smscsim/Simulator.java
    • added support for sending of delivery info
    • debug now in a group
  • com/logica/smscsim/SimulatorPDUProcessor.java
    • added reference to the DeliveryInfoSender to support automatic sending of delivery info PDUs
  • com/logica/smscsim/SimulatorPDUProcessorFactory.java
    • added reference to the DeliveryInfoSender to support automatic sending of delivery info PDUs

The Java test application

Version 1.1 was released on 12/10/2001.
Works with version 1.2 of the Java SMPP Library.

The main change is that the application can communicate with SMSC either in asynchronous or synchronous manner, you choose the type when binding to the SMSC.

  • com/logica/smpp/test/SMPPTest.java
    • added asynchronous processing capability as the library has this feature now
    • file moved to package com.logica.smpp.test, old package com.logica.smpptest not used anymore
    • the max address length checking reflected
    • added comments and references to the library
  • smpptest.cfg
    • bind-mode default changed to tr, i.e. transceiver
    • added sync-mode parameter to set default for asynchronous/synchronous processing