{"id":852,"date":"2020-03-08T12:18:49","date_gmt":"2020-03-08T12:18:49","guid":{"rendered":"https:\/\/mobiletidings.com\/?p=852"},"modified":"2020-03-08T12:18:49","modified_gmt":"2020-03-08T12:18:49","slug":"sending-ota-bookmark-over-sms","status":"publish","type":"post","link":"https:\/\/techsofar.com\/sending-ota-bookmark-over-sms\/","title":{"rendered":"Sending A Bookmark Over SMS"},"content":{"rendered":"
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.<\/p>\n
Today I\u2019ll 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.<\/p>\n
The bookmark is described in an XML file like the following:<\/p>\n[php]\n
<?xml version="1.0"?>
\n<!DOCTYPE CHARACTERISTIC-LIST SYSTEM "settings.dtd">
\n<CHARACTERISTIC-LIST>
\n<CHARACTERISTIC TYPE="BOOKMARK">
\n<PARM NAME="NAME" VALUE="Mobile Tidings"\/>
\n<PARM NAME="URL" VALUE="http:\/\/mobiletidings.com"\/>
\n<\/CHARACTERISTIC>
\n<\/CHARACTERISTIC-LIST><\/p>\n[\/php]\n
As before we send this XML document using an unconfirmed push. Here are the layers we need to implement:<\/p>\n
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:<\/p>\n
AT+CMGS=133\n0041000B915121551532F40004780B0504C34FC0020003F001010A062D1F2B6170706C696361\n74696F6E2F782D7761702D70726F762E62726F777365722D626F6F6B6D61726B730081EA0101\n6A0045C67F01871511034D6F62696C6520546964696E6773000187171103687474703A2F2F6D\n6F62696C65746964696E67732E636F6D00010101<\/pre>\n<\/div>\n<\/p>\n
Here is a byte-for-byte explanation:<\/p>\n
<\/p>\n
Size<\/strong><\/td>\nValue<\/strong><\/td>\n | Description<\/strong><\/td>\n | Section<\/strong><\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | No SMSC supplied<\/td>\n | SMS<\/strong><\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d741<\/td>\n | SUBMIT-PDU + UDH present<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | message reference<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0x0B<\/td>\n | Length of destination address in digits<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d791<\/td>\n | Destination is an international telephone number<\/td>\n | <\/td>\n<\/tr>\n | 6 octets<\/td>\n | 0x5121551532F4<\/td>\n | Destination is \u2018+15125551234\u2019<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | Protocol identifier<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d704<\/td>\n | Date coding scheme. This value stands for \u20188 bit data\u2019.<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d778<\/td>\n | User Data Length. Size of payload is 120 octets.<\/td>\n | <\/td>\n<\/tr>\n | 1 octets<\/td>\n | 0x0B<\/td>\n | User data header length is 11 octets.<\/td>\n | UDH<\/strong><\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d705<\/td>\n | IEI 0\u00d705 contains source and destination port.<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d704<\/td>\n | IEDL. Content is 4 octets.<\/td>\n | <\/td>\n<\/tr>\n | 2 octets<\/td>\n | 0xC34F<\/td>\n | Destination port is 49999. This is the port for OTA configuration.<\/td>\n | <\/td>\n<\/tr>\n | 2 octets<\/td>\n | 0xC002<\/td>\n | Source port is 49154.<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | IEI 0\u00d700 contains concatenation information<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d703<\/td>\n | EIDL. Content is 3 octets.<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0xF0<\/td>\n | Reference number<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | Total 1 parts<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | This is the 1st (and only) part<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0x0A<\/td>\n | The WSP transaction ID<\/td>\n | WSP<\/strong><\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d706<\/td>\n | This is a push PDU<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0x2D<\/td>\n | Headers consist of 45 octets<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0x1F<\/td>\n | Indicates that the length is greater than 30 octets.<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0x2B<\/td>\n | Length is 43 octets.<\/td>\n | <\/td>\n<\/tr>\n | 40 octets<\/td>\n | 0x6170706C6963 | \n0x6174696F6E2F \n0x782D7761702D \n0x70726F762E62 \n0x726F77736572 \n0x2D626F6F6B6D \n0x61726B73<\/td>\n Content type: | \n\u201capplication\/\u201d \n\u201dx-wap-prov.browser-settings\u201d<\/td>\n <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | end of string<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d781<\/td>\n | Parameter name: 0\u00d701 means \u2018Charset<\/em>\u2018<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0xEA<\/td>\n | Parameter value: 0x6A means \u2018UTF-8<\/em>\u2018<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | WBXML Version 1.1<\/td>\n | WBXML<\/strong><\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | Unknown document type.<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0x6A<\/td>\n | Encoding UTF-8<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | String table length<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d745<\/td>\n | <CHARACTERISTIC-LIST> element, with content<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0xC6<\/td>\n | <CHARACTERISTIC> element, with content and attributes<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0x7F<\/td>\n | attribute with value \u2019TYPE=BOOKMARK\u2019<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | end of <CHARACTERISTIC> attributes<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d787<\/td>\n | <PARM> element with attributes<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d715<\/td>\n | attribute with value \u2018NAME=NAME\u2019<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d711<\/td>\n | attribute \u2018VALUE\u2019<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d703<\/td>\n | Inline string follows<\/td>\n | <\/td>\n<\/tr>\n | 14 octets<\/td>\n | 0x4D6F62696C65 | \n0x20546964696E \n0\u00d76773<\/td>\n \u201cMobile Tidings\u201d<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | end of inline string<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | end of <PARM> attributes<\/td>\n | <\/td>\n<\/tr>\n | octet<\/td>\n | 0\u00d787<\/td>\n | <PARM> element with attributes<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d717<\/td>\n | attribute with value \u2018NAME=URL\u2019<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d711<\/td>\n | attribute \u2018VALUE\u2019<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d703<\/td>\n | Inline string follows<\/td>\n | <\/td>\n<\/tr>\n | 24 octets<\/td>\n | 0x687474703A2F | \n0x2F6D6F62696C \n0x65746964696E \n0x67732E636F6D<\/td>\n \u201chttp:\/\/mobiletidings.com\u201d<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d700<\/td>\n | end of inline string<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | end of <PARM> attributes<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | end of <CHARACTERISTIC> element<\/td>\n | <\/td>\n<\/tr>\n | 1 octet<\/td>\n | 0\u00d701<\/td>\n | end of <CHARACTERISTIC-LIST> element<\/td>\n | <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"Another use for SMS is configuring phones over the air (OTA). There are elaborate standard specifications written by…\n","protected":false},"author":2,"featured_media":853,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/techsofar.com\/wp-content\/uploads\/2020\/03\/book-over-sms.jpg","_links":{"self":[{"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/posts\/852"}],"collection":[{"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/comments?post=852"}],"version-history":[{"count":0,"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/posts\/852\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/media\/853"}],"wp:attachment":[{"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/media?parent=852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/categories?post=852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techsofar.com\/wp-json\/wp\/v2\/tags?post=852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}} | |