84 #include <libxml/xmlmemory.h> 85 #include <libxml/tree.h> 86 #include <libxml/debugXML.h> 87 #include <libxml/encoding.h> 126 {
"SYNCSETTINGS", 0x15 },
127 {
"WAP-PROVISIONINGDOC", 0x05 },
128 {
"CHARACTERISTIC-LIST", 0x05 },
129 {
"CHARACTERISTIC", 0x06 },
133 #define NUMBER_OF_ELEMENTS sizeof(ota_elements)/sizeof(ota_elements[0]) 141 {
"AddrType", 0x46 },
143 {
"AuthLevel", 0x48 },
144 {
"AuthScheme", 0x49 },
151 {
"HostAddr", 0x50 },
155 {
"RemoteDB", 0x54 },
157 {
"Username", 0x57 },
161 #define NUMBER_OF_SYNCSETTINGS_ELEMENTS sizeof(ota_syncsettings_elements)/sizeof(ota_syncsettings_elements[0]) 173 {
"TYPE",
"ADDRESS", 0x06 },
174 {
"TYPE",
"URL", 0x07 },
175 {
"TYPE",
"MMSURL", 0x7c },
176 {
"TYPE",
"NAME", 0x08 },
177 {
"TYPE",
"ID", 0x7d },
178 {
"TYPE",
"BOOKMARK", 0x7f },
179 {
"NAME",
"BEARER", 0x12 },
180 {
"NAME",
"PROXY", 0x13 },
181 {
"NAME",
"PORT", 0x14 },
182 {
"NAME",
"NAME", 0x15 },
183 {
"NAME",
"PROXY_TYPE", 0x16 },
184 {
"NAME",
"URL", 0x17 },
185 {
"NAME",
"PROXY_AUTHNAME", 0x18 },
186 {
"NAME",
"PROXY_AUTHSECRET", 0x19 },
187 {
"NAME",
"SMS_SMSC_ADDRESS", 0x1a },
188 {
"NAME",
"USSD_SERVICE_CODE", 0x1b },
189 {
"NAME",
"GPRS_ACCESSPOINTNAME", 0x1c },
190 {
"NAME",
"PPP_LOGINTYPE", 0x1d },
191 {
"NAME",
"PROXY_LOGINTYPE", 0x1e },
192 {
"NAME",
"CSD_DIALSTRING", 0x21 },
193 {
"NAME",
"CSD_CALLTYPE", 0x28 },
194 {
"NAME",
"CSD_CALLSPEED", 0x29 },
195 {
"NAME",
"PPP_AUTHTYPE", 0x22 },
196 {
"NAME",
"PPP_AUTHNAME", 0x23 },
197 {
"NAME",
"PPP_AUTHSECRET", 0x24 },
198 {
"NAME",
"ISP_NAME", 0x7e },
199 {
"NAME",
"INLINE", 0x10 },
200 {
"VALUE",
"GSM/CSD", 0x45 },
201 {
"VALUE",
"GSM/SMS", 0x46 },
202 {
"VALUE",
"GSM/USSD", 0x47 },
203 {
"VALUE",
"IS-136/CSD", 0x48 },
204 {
"VALUE",
"GPRS", 0x49 },
205 {
"VALUE",
"9200", 0x60 },
206 {
"VALUE",
"9201", 0x61 },
207 {
"VALUE",
"9202", 0x62 },
208 {
"VALUE",
"9203", 0x63 },
209 {
"VALUE",
"AUTOMATIC", 0x64 },
210 {
"VALUE",
"MANUAL", 0x65 },
211 {
"VALUE",
"AUTO", 0x6a },
212 {
"VALUE",
"9600", 0x6b },
213 {
"VALUE",
"14400", 0x6c },
214 {
"VALUE",
"19200", 0x6d },
215 {
"VALUE",
"28800", 0x6e },
216 {
"VALUE",
"38400", 0x6f },
217 {
"VALUE",
"PAP", 0x70 },
218 {
"VALUE",
"CHAP", 0x71 },
219 {
"VALUE",
"ANALOGUE", 0x72 },
220 {
"VALUE",
"ISDN", 0x73 },
221 {
"VALUE",
"43200", 0x74 },
222 {
"VALUE",
"57600", 0x75 },
223 {
"VALUE",
"MSISDN_NO", 0x76 },
224 {
"VALUE",
"IPV4", 0x77 },
225 {
"VALUE",
"MS_CHAP", 0x78 },
226 {
"VALUE",
"INLINE", 0x11 }
229 #define NUMBER_OF_ATTRIBUTES sizeof(ota_attributes)/sizeof(ota_attributes[0]) 238 {
"VERSION",
"1.0", 0x46 },
239 {
"VERSION",
"INLINE", 0x45 },
240 {
"TYPE",
"PXLOGICAL", 0x51 },
241 {
"TYPE",
"PXPHYSICAL", 0x52 },
242 {
"TYPE",
"PORT", 0x53 },
243 {
"TYPE",
"VALIDITY", 0x54 },
244 {
"TYPE",
"NAPDEF", 0x55 },
245 {
"TYPE",
"BOOTSTRAP", 0x56 },
246 {
"TYPE",
"VENDORCONFIG", 0x57 },
247 {
"TYPE",
"PXAUTHINFO", 0x59 },
248 {
"TYPE",
"NAPAUTHINFO", 0x5A },
249 {
"TYPE",
"ACCESS", 0x5B },
250 {
"TYPE",
"BEARERINFO", 0x5C },
251 {
"TYPE",
"DNS-ADDRINFO", 0x5D },
252 {
"TYPE",
"CLIENTIDENTITY", 0x58 },
253 {
"TYPE",
"APPLICATION", 0x55, 1 },
254 {
"TYPE",
"APPADDR", 0x56, 1 },
255 {
"TYPE",
"APPAUTH", 0x57, 1 },
256 {
"TYPE",
"RESOURCE", 0x59, 1 },
257 {
"TYPE",
"WLAN", 0x5A, 1 },
258 {
"TYPE",
"SEC-SSID", 0x5B, 1 },
259 {
"TYPE",
"EAP", 0x5C, 1 },
260 {
"TYPE",
"CERT", 0x5D, 1 },
261 {
"TYPE",
"WEPKEY", 0x5E, 1 },
262 {
"TYPE",
"INLINE", 0x50 },
263 {
"NAME",
"NAME", 0x7 },
264 {
"NAME",
"NAP-ADDRESS", 0x8 },
265 {
"NAME",
"NAP-ADDRTYPE", 0x9 },
266 {
"NAME",
"CALLTYPE", 0xA },
267 {
"NAME",
"VALIDUNTIL", 0xB },
268 {
"NAME",
"AUTHTYPE", 0xC },
269 {
"NAME",
"AUTHNAME", 0xD },
270 {
"NAME",
"AUTHSECRET", 0xE },
271 {
"NAME",
"LINGER", 0xF },
272 {
"NAME",
"BEARER", 0x10 },
273 {
"NAME",
"NAPID", 0x11 },
274 {
"NAME",
"COUNTRY", 0x12 },
275 {
"NAME",
"NETWORK", 0x13 },
276 {
"NAME",
"INTERNET", 0x14 },
277 {
"NAME",
"PROXY-ID", 0x15 },
278 {
"NAME",
"PROXY-PROVIDER-ID", 0x16 },
279 {
"NAME",
"DOMAIN", 0x17 },
280 {
"NAME",
"PROVURL", 0x18 },
281 {
"NAME",
"PXAUTH-TYPE", 0x19 },
282 {
"NAME",
"PXAUTH-ID", 0x1A },
283 {
"NAME",
"PXAUTH-PW", 0x1B },
284 {
"NAME",
"STARTPAGE", 0x1C },
285 {
"NAME",
"BASAUTH-ID", 0x1D },
286 {
"NAME",
"BASAUTH-PW", 0x1E },
287 {
"NAME",
"PUSHENABLED", 0x1F },
288 {
"NAME",
"PXADDR", 0x20 },
289 {
"NAME",
"PXADDRTYPE", 0x21 },
290 {
"NAME",
"TO-NAPID", 0x22 },
291 {
"NAME",
"PORTNBR", 0x23 },
292 {
"NAME",
"SERVICE", 0x24 },
293 {
"NAME",
"LINKSPEED", 0x25 },
294 {
"NAME",
"DNLINKSPEED", 0x26 },
295 {
"NAME",
"LOCAL-ADDR", 0x27 },
296 {
"NAME",
"LOCAL-ADDRTYPE", 0x28 },
297 {
"NAME",
"CONTEXT-ALLOW", 0x29 },
298 {
"NAME",
"TRUST", 0x2A },
299 {
"NAME",
"MASTER", 0x2B },
300 {
"NAME",
"SID", 0x2C },
301 {
"NAME",
"SOC", 0x2D },
302 {
"NAME",
"WSP-VERSION", 0x2E },
303 {
"NAME",
"PHYSICAL-PROXY-ID", 0x2F },
304 {
"NAME",
"CLIENT-ID", 0x30 },
305 {
"NAME",
"DELIVERY-ERR-SDU", 0x31 },
306 {
"NAME",
"DELIVERY-ORDER", 0x32 },
307 {
"NAME",
"TRAFFIC-CLASS", 0x33 },
308 {
"NAME",
"MAX-SDU-SIZE", 0x34 },
309 {
"NAME",
"MAX-BITRATE-UPLINK", 0x35 },
310 {
"NAME",
"MAX-BITRATE-DNLINK", 0x36 },
311 {
"NAME",
"RESIDUAL-BER", 0x37 },
312 {
"NAME",
"SDU-ERROR-RATIO", 0x38 },
313 {
"NAME",
"TRAFFIC-HANDL-PRIO", 0x39 },
314 {
"NAME",
"TRANSFER-DELAY", 0x3A },
315 {
"NAME",
"GUARANTEED-BITRATE-UPLINK", 0x3B },
316 {
"NAME",
"GUARANTEED-BITRATE-DNLINK", 0x3C },
317 {
"NAME",
"PXADDR-FQDN", 0x3D },
318 {
"NAME",
"PROXY-PW", 0x3E },
319 {
"NAME",
"PPGAUTH-TYPE", 0x3F },
320 {
"NAME",
"PULLENABLED", 0x47 },
321 {
"NAME",
"DNS-ADDR", 0x48 },
322 {
"NAME",
"MAX-NUM-RETRY", 0x49 },
323 {
"NAME",
"FIRST-RETRY-TIMEOUT", 0x4A },
324 {
"NAME",
"REREG-THRESHOLD", 0x4B },
325 {
"NAME",
"T-BIT", 0x4C },
326 {
"NAME",
"AUTH-ENTITY", 0x4E },
327 {
"NAME",
"SPI", 0x4F },
328 {
"NAME",
"AACCEPT", 0x2E, 1 },
329 {
"NAME",
"AAUTHDATA", 0x2F, 1 },
330 {
"NAME",
"AAUTHLEVEL", 0x30, 1 },
331 {
"NAME",
"AAUTHNAME", 0x31, 1 },
332 {
"NAME",
"AAUTHSECRET", 0x32, 1 },
333 {
"NAME",
"AAUTHTYPE", 0x33, 1 },
334 {
"NAME",
"ADDR", 0x34, 1 },
335 {
"NAME",
"ADDRTYPE", 0x35, 1 },
336 {
"NAME",
"APPID", 0x36, 1 },
337 {
"NAME",
"APROTOCOL", 0x37, 1 },
338 {
"NAME",
"PROVIDER-ID", 0x38, 1 },
339 {
"NAME",
"TO-PROXY", 0x39, 1 },
340 {
"NAME",
"URI", 0x3A, 1 },
341 {
"NAME",
"RULE", 0x3B, 1 },
342 {
"NAME",
"APPREF", 0x3C, 1 },
343 {
"NAME",
"TO-APPREF", 0x3D, 1 },
344 {
"NAME",
"PRI-SSID", 0x3E, 1 },
345 {
"NAME",
"PRI-U-SSID", 0x3F, 1 },
346 {
"NAME",
"PRI-H-SSID", 0x40, 1 },
347 {
"NAME",
"S-SSID", 0x41, 1 },
348 {
"NAME",
"S-U-SSID", 0x42, 1 },
349 {
"NAME",
"NETMODE", 0x43, 1 },
350 {
"NAME",
"SECMODE", 0x44, 1 },
351 {
"NAME",
"EAPTYPE", 0x45, 1 },
352 {
"NAME",
"USERNAME", 0x46, 1 },
353 {
"NAME",
"PASSWORD", 0x47, 1 },
354 {
"NAME",
"REALM", 0x48, 1 },
355 {
"NAME",
"USE-PSEUD", 0x49, 1 },
356 {
"NAME",
"ENCAPS", 0x5B, 1 },
357 {
"NAME",
"VER-SER-REALM", 0x4C, 1 },
358 {
"NAME",
"CLIENT-AUTH", 0x4D, 1 },
359 {
"NAME",
"SES-VAL-TIME", 0x4E, 1 },
360 {
"NAME",
"CIP-SUIT", 0x4F, 1 },
361 {
"NAME",
"PEAP-V0", 0x60, 1 },
362 {
"NAME",
"PEAP-V1", 0x61, 1 },
363 {
"NAME",
"PEAP-V2", 0x62, 1 },
364 {
"NAME",
"ISS-NAME", 0x63, 1 },
365 {
"NAME",
"SUB-NAME", 0x64, 1 },
366 {
"NAME",
"CERT-TYPE", 0x65, 1 },
367 {
"NAME",
"SER-NUM", 0x66, 1 },
368 {
"NAME",
"SUB-KEY-ID", 0x67, 1 },
369 {
"NAME",
"THUMBPRINT", 0x68, 1 },
370 {
"NAME",
"WPA-PRES-KEY-ASC", 0x69, 1 },
371 {
"NAME",
"WPA-PRES-KEY-HEX", 0x6A, 1 },
372 {
"NAME",
"WEPKEYIND", 0x6B, 1 },
373 {
"NAME",
"WEPAUTHMODE", 0x6C, 1 },
374 {
"NAME",
"LENGTH", 0x6D, 1 },
375 {
"NAME",
"INDEX", 0x6E, 1 },
376 {
"NAME",
"DATA", 0x6F, 1 },
377 {
"NAME",
"WLANHAND", 0x70, 1 },
378 {
"NAME",
"EDIT-SET", 0x71, 1 },
379 {
"NAME",
"VIEW-SET", 0x72, 1 },
380 {
"NAME",
"FORW-SET", 0x73, 1 },
381 {
"NAME",
"INLINE", 0x5 },
382 {
"VALUE",
"IPV4", 0x85 },
383 {
"VALUE",
"IPV6", 0x86 },
384 {
"VALUE",
"E164", 0x87 },
385 {
"VALUE",
"ALPHA", 0x88 },
386 {
"VALUE",
"APN", 0x89 },
387 {
"VALUE",
"SCODE", 0x8A },
388 {
"VALUE",
"TETRA-ITSI", 0x8B },
389 {
"VALUE",
"MAN", 0x8C },
390 {
"VALUE",
"APPSRV", 0x8D, 1 },
391 {
"VALUE",
"OBEX", 0x8E, 1 },
392 {
"VALUE",
"ANALOG-MODEM", 0x90 },
393 {
"VALUE",
"V.120", 0x91 },
394 {
"VALUE",
"V.110", 0x92 },
395 {
"VALUE",
"X.31", 0x93 },
396 {
"VALUE",
"BIT-TRANSPARENT", 0x94 },
397 {
"VALUE",
"DIRECT-ASYNCHRONOUS-DATA-SERVICE", 0x95 },
398 {
"VALUE",
"PAP", 0x9A },
399 {
"VALUE",
"CHAP", 0x9B },
400 {
"VALUE",
"HTTP-BASIC", 0x9C },
401 {
"VALUE",
"HTTP-DIGEST", 0x9D },
402 {
"VALUE",
"WTLS-SS", 0x9E },
403 {
"VALUE",
"MD5", 0x9F },
404 {
"VALUE",
"GSM-USSD", 0xA2 },
405 {
"VALUE",
"GSM-SMS", 0xA3 },
406 {
"VALUE",
"ANSI-136-GUTS", 0xA4 },
407 {
"VALUE",
"IS-95-CDMA-SMS", 0xA5 },
408 {
"VALUE",
"IS-95-CDMA-CSD", 0xA6 },
409 {
"VALUE",
"IS-95-CDMA-PACKET", 0xA7 },
410 {
"VALUE",
"ANSI-136-CSD", 0xA8 },
411 {
"VALUE",
"ANSI-136-GPRS", 0xA9 },
412 {
"VALUE",
"GSM-CSD", 0xAA },
413 {
"VALUE",
"GSM-GPRS", 0xAB },
414 {
"VALUE",
"AMPS-CDPD", 0xAC },
415 {
"VALUE",
"PDC-CSD", 0xAD },
416 {
"VALUE",
"PDC-PACKET", 0xAE },
417 {
"VALUE",
"IDEN-SMS", 0xAF },
418 {
"VALUE",
"IDEN-CSD", 0xB0 },
419 {
"VALUE",
"IDEN-PACKET", 0xB1 },
420 {
"VALUE",
"FLEX/REFLEX", 0xB2 },
421 {
"VALUE",
"PHS-SMS", 0xB3 },
422 {
"VALUE",
"PHS-CSD", 0xB4 },
423 {
"VALUE",
"TETRA-SDS", 0xB5 },
424 {
"VALUE",
"TETRA-PACKET", 0xB6 },
425 {
"VALUE",
"ANSI-136-GHOST", 0xB7 },
426 {
"VALUE",
"MOBITEX-MPAK", 0xB8 },
427 {
"VALUE",
"CDMA2000-1X-SIMPLE-IP", 0xB9 },
428 {
"VALUE",
"CDMA2000-1X-MOBILE-IP", 0xBA },
429 {
"VALUE",
"3G-GSM", 0xBB },
430 {
"VALUE",
"WLAN", 0xBC },
431 {
"VALUE",
"AUTOBAUDING", 0xC5 },
432 {
"VALUE",
"CL-WSP", 0xCA },
433 {
"VALUE",
"CO-WSP", 0xCB },
434 {
"VALUE",
"CL-SEC-WSP", 0xCC },
435 {
"VALUE",
"CO-SEC-WSP", 0xCD },
436 {
"VALUE",
"CL-SEC-WTA", 0xCE },
437 {
"VALUE",
"CO-SEC-WTA", 0xCF },
438 {
"VALUE",
"OTA-HTTP-TO", 0xD0 },
439 {
"VALUE",
"OTA-HTTP-TLS-TO", 0xD1 },
440 {
"VALUE",
"OTA-HTTP-PO", 0xD2 },
441 {
"VALUE",
"OTA-HTTP-TLS-PO", 0xD3 },
442 {
"VALUE",
",", 0x90, 1 },
443 {
"VALUE",
"HTTP-", 0x91, 1 },
444 {
"VALUE",
"BASIC", 0x92, 1 },
445 {
"VALUE",
"DIGEST", 0x93, 1 },
446 {
"VALUE",
"AAA", 0xE0 },
447 {
"VALUE",
"HA", 0xE1 },
448 {
"VALUE",
"INLINE", 0x6 },
451 #define OMA_VALUE_TAG 0x06 453 #define NUMBER_OF_OMA_ATTRIBUTES sizeof(oma_ota_attributes)/sizeof(oma_ota_attributes[0]) 489 pDoc = xmlParseMemory(ota_c_text,
size);
500 error(0,
"OTA: No document to parse. Probably an error in OTA source");
523 if (document->intSubset && document->intSubset->ExternalID
524 && strcmp((
char *)document->intSubset->ExternalID,
"-//WAPFORUM//DTD PROV 1.0//EN") == 0) {
526 (*otabxml)->wbxml_version = 0x03;
527 (*otabxml)->public_id = 0x0B;
530 (*otabxml)->wbxml_version = 0x01;
531 (*otabxml)->public_id = 0x01;
533 (*otabxml)->code_page = 0;
539 node = xmlDocGetRootElement(document);
555 switch (node->type) {
556 case XML_ELEMENT_NODE:
560 case XML_COMMENT_NODE:
569 error(0,
"OTA compiler: Unknown XML node in the OTA source.");
580 if (node->children != NULL &&
parse_node(node->children, otabxml) == -1)
584 if (node->children != NULL &&
parse_node(node->children, otabxml) == -1)
592 warning(0,
"OTA compiler: Undefined return value in a parse function.");
597 if (node->next != NULL &&
parse_node(node->next, otabxml) == -1)
613 unsigned char status_bits, ota_hex;
640 if (!
only_blanks((
char *)node->children->content)) {
647 ota_hex = ota_hex | status_bits;
659 warning(0,
"OTA compiler: Unknown tag '%s' in OTA SyncSettings source",
678 unsigned char status_bits, ota_hex;
679 int add_end_tag, syncstat;
680 xmlAttrPtr attribute;
712 ota_hex = ota_hex | status_bits;
721 ota_hex = ota_hex | status_bits;
730 if (node->properties != NULL) {
731 attribute = node->properties;
732 while (attribute != NULL) {
734 attribute = attribute->next;
752 unsigned char ota_hex;
758 if (attr->children != NULL)
767 if ((*otabxml)->public_id == 0x0B) {
781 if (alist[i].
value != NULL) {
795 warning(0,
"OTA compiler: Unknown attribute '%s' in OTA source, " 801 ota_hex = alist[i].
token;
805 if (alist[i].
code_page != (*otabxml)->code_page) {
808 (*otabxml)->code_page = alist[i].
code_page;
811 if ((*otabxml)->public_id == 0x0B &&
name 817 if (alist[i].
code_page != (*otabxml)->code_page) {
820 (*otabxml)->code_page = alist[i].
code_page;
void error(int err, const char *fmt,...)
int ota_compile(Octstr *ota_doc, Octstr *charset, Octstr **ota_binary)
void output_octet_string(Octstr *os, simple_binary_t **sibxml)
unsigned char element_check_content(xmlNodePtr node)
#define NUMBER_OF_SYNCSETTINGS_ELEMENTS
static ota_2table_t ota_syncsettings_elements[]
#define NUMBER_OF_ATTRIBUTES
static ota_3table_t ota_attributes[]
void octstr_strip_blanks(Octstr *text)
#define octstr_get_cstr(ostr)
static ota_2table_t ota_elements[]
long octstr_search_char(const Octstr *ostr, int ch, long pos)
static ota_3table_t oma_ota_attributes[]
void simple_binary_destroy(simple_binary_t *binary)
static int parse_node(xmlNodePtr node, simple_binary_t **otabxml)
void parse_inline_string(Octstr *temp, simple_binary_t **binary)
Octstr * octstr_imm(const char *cstr)
int parse_charset(Octstr *os)
#define octstr_duplicate(ostr)
int octstr_case_compare(const Octstr *os1, const Octstr *os2)
static int parse_attribute(xmlAttrPtr attr, simple_binary_t **otabxml)
void warning(int err, const char *fmt,...)
void octstr_destroy(Octstr *ostr)
#define octstr_create(cstr)
static int parse_ota_syncsettings(xmlNodePtr node, simple_binary_t **otabxml)
static int parse_element(xmlNodePtr node, simple_binary_t **otabxml)
#define NUMBER_OF_ELEMENTS
long octstr_len(const Octstr *ostr)
void simple_binary_output(Octstr *os, simple_binary_t *binary)
static int parse_document(xmlDocPtr document, Octstr *charset, simple_binary_t **ota_binary)
void set_charset(Octstr *document, Octstr *charset)
int only_blanks(const char *text)
void parse_end(simple_binary_t **binary)
#define NUMBER_OF_OMA_ATTRIBUTES
void output_char(int byte, simple_binary_t **binary)
#define WBXML_CONTENT_BIT
#define create_octstr_from_node(node)
simple_binary_t * simple_binary_create(void)
void octstr_shrink_blanks(Octstr *text)
int octstr_compare(const Octstr *ostr1, const Octstr *ostr2)