Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
9 let WSP = {};
10 Cu.import("resource://gre/modules/WspPduHelper.jsm", WSP);
11 let WBXML = {};
12 Cu.import("resource://gre/modules/WbxmlPduHelper.jsm", WBXML);
14 // set to true to see debug messages
15 let DEBUG = WBXML.DEBUG_ALL | false;
17 /**
18 * Public identifier for SL
19 *
20 * @see http://technical.openmobilealliance.org/tech/omna/omna-wbxml-public-docid.aspx
21 */
22 const PUBLIC_IDENTIFIER_SL = "-//WAPFORUM//DTD SL 1.0//EN";
24 this.PduHelper = {
26 /**
27 * @param data
28 * A wrapped object containing raw PDU data.
29 * @param contentType
30 * Content type of incoming SL message, should be "text/vnd.wap.sl" or
31 * "application/vnd.wap.slc".
32 *
33 * @return A message object containing attribute content and contentType.
34 * |content| will contain string of decoded SL message if successfully
35 * decoded, or raw data if failed.
36 * |contentType| will be string representing corresponding type of
37 * content.
38 */
39 parse: function parse_sl(data, contentType) {
40 // We only need content and contentType
41 let msg = {
42 contentType: contentType
43 };
45 /**
46 * Message is compressed by WBXML, decode into string.
47 *
48 * @see WAP-192-WBXML-20010725-A
49 */
50 if (contentType === "application/vnd.wap.slc") {
51 let appToken = {
52 publicId: PUBLIC_IDENTIFIER_SL,
53 tagTokenList: SL_TAG_FIELDS,
54 attrTokenList: SL_ATTRIBUTE_FIELDS,
55 valueTokenList: SL_VALUE_FIELDS,
56 globalTokenOverride: null
57 }
59 try {
60 let parseResult = WBXML.PduHelper.parse(data, appToken);
61 msg.content = parseResult.content;
62 msg.contentType = "text/vnd.wap.sl";
63 } catch (e) {
64 // Provide raw data if we failed to parse.
65 msg.content = data.array;
66 }
68 return msg;
69 }
71 /**
72 * Message is plain text, transform raw to string.
73 */
74 try {
75 let stringData = WSP.Octet.decodeMultiple(data, data.array.length);
76 msg.content = WSP.PduHelper.decodeStringContent(stringData, "UTF-8");
77 } catch (e) {
78 // Provide raw data if we failed to parse.
79 msg.content = data.array;
80 }
81 return msg;
83 }
84 };
86 /**
87 * Tag tokens
88 *
89 * @see WAP-168-SERVICELOAD-20010731-A, clause 9.3.1
90 */
91 const SL_TAG_FIELDS = (function () {
92 let names = {};
93 function add(name, codepage, number) {
94 let entry = {
95 name: name,
96 number: number,
97 };
98 if (!names[codepage]) {
99 names[codepage] = {};
100 }
101 names[codepage][number] = entry;
102 }
104 add("sl", 0, 0x05);
106 return names;
107 })();
109 /**
110 * Attribute Tokens
111 *
112 * @see WAP-168-SERVICELOAD-20010731-A, clause 9.3.2
113 */
114 const SL_ATTRIBUTE_FIELDS = (function () {
115 let names = {};
116 function add(name, value, codepage, number) {
117 let entry = {
118 name: name,
119 value: value,
120 number: number,
121 };
122 if (!names[codepage]) {
123 names[codepage] = {};
124 }
125 names[codepage][number] = entry;
126 }
128 add("action", "execute-low", 0, 0x05);
129 add("action", "execute-high", 0, 0x06);
130 add("action", "cache", 0, 0x07);
131 add("href", "", 0, 0x08);
132 add("href", "http://", 0, 0x09);
133 add("href", "http://www.", 0, 0x0A);
134 add("href", "https://", 0, 0x0B);
135 add("href", "https://www.", 0, 0x0C);
137 return names;
138 })();
140 const SL_VALUE_FIELDS = (function () {
141 let names = {};
142 function add(value, codepage, number) {
143 let entry = {
144 value: value,
145 number: number,
146 };
147 if (!names[codepage]) {
148 names[codepage] = {};
149 }
150 names[codepage][number] = entry;
151 }
153 add(".com/", 0, 0x85);
154 add(".edu/", 0, 0x86);
155 add(".net/", 0, 0x87);
156 add(".org/", 0, 0x88);
158 return names;
159 })();
161 this.EXPORTED_SYMBOLS = [
162 // Parser
163 "PduHelper",
164 ];