After publishing the article on “How to send WAP Push data through SMPP”, there is a lot of requests on how to formulate the GSM SMS User Data.
Basically, the following is an example in java with remark in the code to explain how this is done:
public String toSmsBinary() { /** GSM SMS User Data 06: UDH Length which is 6 05: 16 bit address 04: Length(4) 0B84: Destination Port(2948) 23F0: Source Port(9200) Wireless Session Protocol 90: Transaction ID 06: PDU Type(Push) 01: Headers Length is 1 AE: Content-Type is application/vnd.wap.sic */ StringBuilder ud = new StringBuilder().append("0605040b8423f0900601ae"); ud.append(toWBXML()); return ud.toString(); }
The above function creates the GSM SMS User Data and Wireless Session Protocol (WSP) header.
public String toWBXML() { /** 02: Version number - WBXML version 1.2 05: SI 1.0 Public Identifier 6A: Charset=UTF-8 (MIBEnum 106) 00: String table length 45: si, with content */ StringBuilder wbxml = new StringBuilder().append("02056a0045"); wbxml.append(indicationToWBXML()); wbxml.append("01"); return wbxml.toString(); }
The above function creates the WAP Binary XML header and the following function will formulate the rest of the WAP Binary XML body.
public String indicationToWBXML() { StringBuilder wbxml = new StringBuilder().append("c6"); if (siId != null && siId.length() > 0) { //si-id attribute wbxml.append("11"); // string literal wbxml.append("03"); // si-id string wbxml.append(hexDump(siId.getBytes())); // end string wbxml.append("00"); } if (href != null && href.length() > 0) { if (href.startsWith("http://www.")) { wbxml.append("0d"); href = href.substring(11); } else if (href.startsWith("https://www.")) { wbxml.append("0f"); href = href.substring(12); } else if (href.startsWith("http://")) { wbxml.append("0c"); href = href.substring(7); } else if (href.startsWith("https://")) { wbxml.append("0e"); href = href.substring(8); } //String literal wbxml.append("03"); wbxml.append(hexDump(href.getBytes())); // end string wbxml.append("00"); wbxml.append(getDecodedAction()); // > wbxml.append("01"); // The text value of the URL wbxml.append("03"); byte[] bytes = value.getBytes(); wbxml.append(hexDump(bytes)); wbxml.append("00"); } wbxml.append("01"); return wbxml.toString(); }
You can download the full source code at SiWapPush.java.