Sending a bookmark over SMS

This post was written by Jeroen on March 3, 2009
Posted Under: SMS

Another use for SMS is configuring phones over the air (OTA). There are elaborate standard specifications written by the WAP Forum (now Open Mobile Alliance) and somewhat proprietary standards developed by Nokia and Ericsson.

Today I’ll show in detail how to send a bookmark according the Nokia / Ericsson specification. The specification is somewhat older, it dates from September 2001, but it seems almost all Nokia and many Ericsson devices still support this.

The bookmark is described in an XML file like the following:

<?xml version="1.0"?>
       <PARM NAME="NAME" VALUE="Mobile Tidings"/>
       <PARM NAME="URL" VALUE=""/>

As before we send this XML document using an unconfirmed push. Here are the layers we need to implement:

  • the XML document needs to be WBXML encoded and
  • the WBXML need to be wrapped in a WSP (Wireless Session Protocol) Push PDU
  • this needs to be wrapped in a WDP (Wireless Datagram Protocol) packet
  • this needs to be sent inside an SMS

As always we start with the AT command that is used to send the bookmark and analyze in detail how this AT command was constructed:



Here is a byte-for-byte explanation:


Size Value Description Section
1 octet 0×00 No SMSC supplied SMS
1 octet 0×41 SUBMIT-PDU + UDH present  
1 octet 0×00 message reference  
1 octet 0x0B Length of destination address in digits  
1 octet 0×91 Destination is an international telephone number  
6 octets 0x5121551532F4 Destination is ‘+15125551234’  
1 octet 0×00 Protocol identifier  
1 octet 0×04 Date coding scheme. This value stands for ‘8 bit data’.  
1 octet 0×78 User Data Length. Size of payload is 120 octets.  
1 octets 0x0B User data header length is 11 octets. UDH
1 octet 0×05 IEI 0×05 contains source and destination port.  
1 octet 0×04 IEDL. Content is 4 octets.  
2 octets 0xC34F Destination port is 49999. This is the port for OTA configuration.  
2 octets 0xC002 Source port is 49154.  
1 octet 0×00 IEI 0×00 contains concatenation information  
1 octet 0×03 EIDL. Content is 3 octets.  
1 octet 0xF0 Reference number  
1 octet 0×01 Total 1 parts  
1 octet 0×01 This is the 1st (and only) part  
1 octet 0x0A The WSP transaction ID WSP
1 octet 0×06 This is a push PDU  
1 octet 0x2D Headers consist of 45 octets  
1 octet 0x1F Indicates that the length is greater than 30 octets.  
1 octet 0x2B Length is 43 octets.  
40 octets 0x6170706C6963
Content type:
1 octet 0×00 end of string  
1 octet 0×81 Parameter name: 0×01 means ‘Charset  
1 octet 0xEA Parameter value: 0x6A means ‘UTF-8  
1 octet 0×01 WBXML Version 1.1 WBXML
1 octet 0×01 Unknown document type.  
1 octet 0x6A Encoding UTF-8  
1 octet 0×00 String table length  
1 octet 0×45 <CHARACTERISTIC-LIST> element, with content  
1 octet 0xC6 <CHARACTERISTIC> element, with content and attributes  
1 octet 0x7F attribute with value ’TYPE=BOOKMARK’  
1 octet 0×01 end of <CHARACTERISTIC> attributes  
1 octet 0×87 <PARM> element with attributes  
1 octet 0×15 attribute with value ‘NAME=NAME’  
1 octet 0×11 attribute ‘VALUE’  
1 octet 0×03 Inline string follows  
14 octets 0x4D6F62696C65
“Mobile Tidings”  
1 octet 0×00 end of inline string  
1 octet 0×01 end of <PARM> attributes  
octet 0×87 <PARM> element with attributes  
1 octet 0×17 attribute with value ‘NAME=URL’  
1 octet 0×11 attribute ‘VALUE’  
1 octet 0×03 Inline string follows  
24 octets 0x687474703A2F
1 octet 0×00 end of inline string  
1 octet 0×01 end of <PARM> attributes  
1 octet 0×01 end of <CHARACTERISTIC> element  
1 octet 0×01 end of <CHARACTERISTIC-LIST> element  
Tags: , , ,

Reader Comments

Hi I have followed you encoding to send Bookmark and it is successful. But when I open the bookmark in hand set it shows blank. There is no content.

My output is as follows. Please check and help me if anything is missing


Written By Nazmuz on October 3rd, 2009 @ 2:40 am


Where you encode the URL, you use attribute 0×15 (NAME=NAME), you should use 0×17 (NAME=URL).


Written By Jeroen on October 3rd, 2009 @ 9:32 am

Hi below is the break down of my PDU code. In the handset it shows that 1 Bookmark received but it is blank. Please help.

Destination is ‘+8801919438755′
Name is “Mobile Tidings”
Url is “”


Written By Nazmuz on October 3rd, 2009 @ 7:23 pm


I apologize. It seems I had a typo in my article which may have caused your problem…

In the complete PDU at the top of the article I had it correct, but in the breakdown I made an error. In the breakdown of the WBXML encoding I wrote 0×64 for ‘encoding is UTF-8′. In the complete PDU at the top it is 0x6A. The latter is correct. The value 0×64 stands for ‘us-dk’, a character set probably unknown to the receiving device… I have corrected the article. It is likely this was the cause of your problem.


Written By Jeroen on October 4th, 2009 @ 11:25 pm

Dear Jeroen,

Thanks a lot. My application is working fine now. It will be great full if you can send similar article on how to send MMS using AT command.

Written By Nazmuz on October 5th, 2009 @ 2:54 am


I send the PDU in your article, and replace the phone number with china mobile(CMCC), the bookmark can be sent and received, but it is displayed as blank. What’s reason to cause the problem? Thanks.
My PDU is below:

Written By Lance on February 21st, 2013 @ 12:25 am

Add a Comment

required, use real name
required, will not be published
optional, your blog address