3

I have CloudHopper SMPP server, at this moment I can receive a simple short messages.

if (pduRequest.getCommandId() == SmppConstants.CMD_ID_SUBMIT_SM) {
    SubmitSm request = (SubmitSm) pduRequest;
    request.getShortMessage();
    ....
}

But what I should do to receive long (Multipart) message? I don't know what object I have to use ... Help me, please.

Many thanks.

Amir
  • 10,600
  • 9
  • 48
  • 75
user1647166
  • 81
  • 1
  • 8

1 Answers1

0

The following processes a multipart long message PDU that you would get when receiving a long message that has been split into multiple PDUs:

import com.cloudhopper.commons.charset.GSMCharset;
import com.cloudhopper.commons.gsm.GsmUtil;
import com.cloudhopper.smpp.pdu.DeliverSm;
import com.cloudhopper.smpp.util.SmppUtil;

...

DeliverSm mobileOriginatedMessage = (DeliverSm) pduRequest;

boolean isUdh = SmppUtil.isUserDataHeaderIndicatorEnabled(mobileOriginatedMessage.getEsmClass());
if (isUdh) {
    byte[] userDataHeader = GsmUtil.getShortMessageUserDataHeader(messageBytes);
    int thisMessageId = userDataHeader[3] & 0xff;
    int totalMessages = userDataHeader[4] & 0xff;
    int currentMessageNum = userDataHeader[5] & 0xff;

    messageBytes = GsmUtil.getShortMessageUserData(messageBytes);

    GSMCharset gsmCharset = new GSMCharset();
    String message = gsmCharset.decode(messageBytes);       // Example decoding, depends on charset used

    System.out.println("thisMessageId: " + thisMessageId);  // unique to message, same across all message parts
    System.out.println("totalMessages: " + totalMessages);  
    System.out.println("currentMessageNum: " + currentMessageNum);
    System.out.println("Message: " + message);
}

...

The above shows how to:

  • Determine if a PDU is multipart long (UDH) message
  • Get all the UDH header information so you can know
    • what message the part belongs to
    • what part number was received in order to put the message back together in the right order
    • and what the total number of parts you are expecting is
  • Get the actual message text of each part
trf
  • 1,279
  • 1
  • 13
  • 33