Index: Makefile =================================================================== RCS file: /home/pcvs/ports/textproc/wbxml2/Makefile,v retrieving revision 1.9 diff -u -r1.9 Makefile --- Makefile 19 Apr 2008 17:54:00 -0000 1.9 +++ Makefile 15 Jun 2008 03:18:00 -0000 @@ -7,7 +7,7 @@ PORTNAME= wbxml2 PORTVERSION= 0.9.2 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= textproc devel MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} \ http://czauner.onlineloop.com/pub/FreeBSD/distfiles/ @@ -22,7 +22,7 @@ USE_AUTOTOOLS= aclocal:19 autoconf:261 autoheader:261 automake:19 libtool:15 AUTOMAKE_ARGS= -acf USE_LDCONFIG= yes -USE_GNOME= pkgconfig +USE_GNOME= pkgconfig libxml2 CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib" Index: files/patch-configure.in =================================================================== RCS file: files/patch-configure.in diff -N files/patch-configure.in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-configure.in 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,16 @@ +--- configure.in.orig 2008-06-15 05:56:12.000000000 +1000 ++++ configure.in 2008-06-15 05:56:24.000000000 +1000 +@@ -1,11 +1,11 @@ + dnl Process this file with autoconf to produce a configure script. + AC_INIT(doxygen.h) +-AM_INIT_AUTOMAKE(wbxml2, 0.9.0) ++AM_INIT_AUTOMAKE(wbxml2, 0.9.2) + AM_CONFIG_HEADER(config.h) + + + dnl Define common variables +-VERSION="0.9.0" ++VERSION="0.9.2" + AC_SUBST(VERSION) + RELEASE="1" + AC_SUBST(RELEASE) Index: files/patch-libwbxml2.pc.in =================================================================== RCS file: files/patch-libwbxml2.pc.in diff -N files/patch-libwbxml2.pc.in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-libwbxml2.pc.in 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,8 @@ +--- libwbxml2.pc.in.orig 2006-07-11 21:47:44.000000000 +1000 ++++ libwbxml2.pc.in 2008-06-15 06:58:26.000000000 +1000 +@@ -8,4 +8,4 @@ + Version: @VERSION@ + Requires: libxml-2.0 >= 2.6 + Libs: -L${libdir} -lwbxml2 +-Cflags: -I${includedir} ++Cflags: -I${includedir} -DHAVE_EXPAT -D_REENTRANT -DWBXML_ENCODER_USE_STRTBL -DWBXML_SUPPORT_WML -DWBXML_SUPPORT_WTA -DWBXML_SUPPORT_SI -DWBXML_SUPPORT_SL -DWBXML_SUPPORT_CO -DWBXML_SUPPORT_PROV -DWBXML_SUPPORT_EMN -DWBXML_SUPPORT_DRMREL -DWBXML_SUPPORT_OTA_SETTINGS -DWBXML_SUPPORT_SYNCML -DWBXML_SUPPORT_WV -DWBXML_SUPPORT_AIRSYNC Index: files/patch-src_wbxml.h =================================================================== RCS file: files/patch-src_wbxml.h diff -N files/patch-src_wbxml.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-src_wbxml.h 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,9 @@ +--- src/wbxml.h.orig 2006-07-11 21:47:44.000000000 +1000 ++++ src/wbxml.h 2008-06-15 06:58:54.000000000 +1000 +@@ -285,6 +285,7 @@ + WBXMLVersion wbxml_version; /**< WBXML Version */ + WB_BOOL keep_ignorable_ws; /**< Keep Ignorable Whitespaces (Default: FALSE) */ + WB_BOOL use_strtbl; /**< Generate String Table (Default: TRUE) */ ++ WB_BOOL produce_anonymous; /**< Produce an anonymous document (Default: FALSE) */ + } WBXMLGenWBXMLParams; + Index: files/patch-src_wbxml_encoder.c =================================================================== RCS file: files/patch-src_wbxml_encoder.c diff -N files/patch-src_wbxml_encoder.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-src_wbxml_encoder.c 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,277 @@ +--- src/wbxml_encoder.c.orig 2006-07-11 21:47:45.000000000 +1000 ++++ src/wbxml_encoder.c 2008-06-15 08:45:31.000000000 +1000 +@@ -136,6 +136,7 @@ + const WBXMLTagEntry *current_tag; /**< Current Tag (See The Warning For This Field !) */ + const WBXMLTreeNode *current_text_parent; /**< Text parent of current Node (See The Warning For This Field !) */ + const WBXMLAttrEntry *current_attr; /**< Current Attribute */ ++ WBXMLTreeNode *current_node; + WB_UTINY tagCodePage; /**< Current Tag Code Page */ + WB_UTINY attrCodePage; /**< Current Attribute Code Page */ + WB_BOOL ignore_empty_text; /**< Do we ignore empty text nodes (ie: ignorable whitespaces)? */ +@@ -153,6 +154,7 @@ + WB_BOOL use_strtbl; /**< Do we use String Table when generating WBXML output ? (default: YES) */ + #endif /* WBXML_ENCODER_USE_STRTBL */ + WB_BOOL xml_encode_header; /**< Do we generate XML Header ? */ ++ WB_BOOL produce_anonymous; + WBXMLVersion wbxml_version; /**< WBXML Version to use (when generating WBXML output) */ + WBXMLCharsetMIBEnum output_charset; /**< Output charset encoding */ + WB_BOOL flow_mode; /**< Is Flow Mode encoding activated ? */ +@@ -269,6 +271,7 @@ + static WBXMLError wbxml_encode_entity(WBXMLEncoder *encoder, WB_ULONG value); + #endif /* 0 */ + static WBXMLError wbxml_encode_opaque(WBXMLEncoder *encoder, WBXMLBuffer *buff); ++static WBXMLError wbxml_encode_opaque_data(WBXMLEncoder *encoder, WB_UTINY *data, WB_ULONG data_len); + #if defined( WBXML_ENCODER_USE_STRTBL ) + static WBXMLError wbxml_encode_tableref(WBXMLEncoder *encoder, WB_ULONG offset); + #endif /* WBXML_ENCODER_USE_STRTBL */ +@@ -292,7 +295,9 @@ + #if defined( WBXML_SUPPORT_DRMREL ) + static WBXMLError wbxml_encode_drmrel_content(WBXMLEncoder *encoder, WB_UTINY *buffer); + #endif /* WBXML_SUPPORT_DRMREL */ +- ++#if defined( WBXML_SUPPORT_OTA_SETTINGS ) ++static WBXMLError wbxml_encode_ota_nokia_icon(WBXMLEncoder *encoder, WB_UTINY *buffer); ++#endif + #if defined( WBXML_ENCODER_USE_STRTBL ) + /* WBXML String Table Functions */ + static WBXMLStringTableElement *wbxml_strtbl_element_create(WBXMLBuffer *string, WB_BOOL is_stat); +@@ -383,6 +388,7 @@ + encoder->current_tag = NULL; + encoder->current_text_parent = NULL; + encoder->current_attr = NULL; ++ encoder->current_node = NULL; + + encoder->tagCodePage = 0; + encoder->attrCodePage = 0; +@@ -400,6 +406,7 @@ + encoder->cdata = NULL; + + encoder->xml_encode_header = TRUE; ++ encoder->produce_anonymous = FALSE; + + /* Default Version: WBXML 1.3 */ + encoder->wbxml_version = WBXML_VERSION_13; +@@ -450,6 +457,7 @@ + + encoder->current_tag = NULL; + encoder->current_attr = NULL; ++ encoder->current_node = NULL; + + encoder->tagCodePage = 0; + encoder->attrCodePage = 0; +@@ -507,7 +515,13 @@ + encoder->use_strtbl = use_strtbl; + #endif /* WBXML_ENCODER_USE_STRTBL */ + } +- ++WBXML_DECLARE(void) wbxml_encoder_set_produce_anonymous(WBXMLEncoder *encoder, WB_BOOL set_anonymous) ++{ ++ if (encoder == NULL) ++ return; ++ ++ encoder->produce_anonymous = set_anonymous; ++} + + WBXML_DECLARE(void) wbxml_encoder_set_wbxml_version(WBXMLEncoder *encoder, WBXMLVersion version) + { +@@ -637,6 +651,9 @@ + + WBXML_DECLARE(WBXMLError) wbxml_encoder_encode_node(WBXMLEncoder *encoder, WBXMLTreeNode *node) + { ++ if (encoder->flow_mode == FALSE) { ++ WBXML_WARNING((WBXML_ENCODER, "You should NOT call wbxml_encoder_encode_node() if you are not in Flow Mode encoding ! (use wbxml_encoder_set_flow_mode(encoder, TRUE))")); ++ } + return wbxml_encoder_encode_node_with_elt_end(encoder, node, TRUE); + } + +@@ -649,10 +666,6 @@ + if ((encoder == NULL) || (node == NULL)) + return WBXML_ERROR_BAD_PARAMETER; + +- if (encoder->flow_mode == FALSE) { +- WBXML_WARNING((WBXML_ENCODER, "You should NOT call wbxml_encoder_encode_node() if you are not in Flow Mode encoding ! (use wbxml_encoder_set_flow_mode(encoder, TRUE))")); +- } +- + /* Check that language table has been set */ + if (encoder->lang == NULL) + return WBXML_ERROR_BAD_PARAMETER; +@@ -965,6 +978,7 @@ + static WBXMLError parse_node(WBXMLEncoder *encoder, WBXMLTreeNode *node, WB_BOOL enc_end) + { + WBXMLError ret = WBXML_OK; ++ encoder->current_node = node; + + /* Parse this node */ + switch (node->type) { +@@ -1078,6 +1092,7 @@ + + /* Reset Current Tag */ + encoder->current_tag = NULL; ++ encoder->current_node = NULL; + + /* Parse next node */ + if (node->next != NULL) +@@ -1464,7 +1479,7 @@ + + /* Encode Public ID */ + /* If WBXML Public Id is '0x01' (unknown), or we forced it, add the XML Public ID in the String Table */ +- if (encoder->textual_publicid || (public_id == WBXML_PUBLIC_ID_UNKNOWN)) ++ if ((encoder->textual_publicid || (public_id == WBXML_PUBLIC_ID_UNKNOWN)) && !encoder->produce_anonymous) + { + if (encoder->lang->publicID->xmlPublicID != NULL) + { +@@ -1500,7 +1515,7 @@ + else { + #endif /* WBXML_ENCODER_USE_STRTBL */ + /* Length of String Table is length of XML Public ID */ +- strstbl_len = wbxml_buffer_len(pid); ++ strstbl_len = wbxml_buffer_len(pid) + 1; + + /* There is only the XML Public ID in String Table */ + public_id_index = 0; +@@ -1548,7 +1563,8 @@ + /* The append includes terminating NULL char */ + if (!wbxml_buffer_append(header, pid)) + return WBXML_ERROR_ENCODER_APPEND_DATA; +- ++ if (!wbxml_buffer_append_char(header, WBXML_STR_END)) ++ return WBXML_ERROR_ENCODER_APPEND_DATA; + /* Clean up */ + wbxml_buffer_destroy(pid); + } +@@ -1870,7 +1886,7 @@ + * Encoder Language Specific Attribute Values + */ + +- if (ctx == WBXML_VALUE_ELEMENT_CTX_ATTR) { ++ if ((ctx == WBXML_VALUE_ELEMENT_CTX_ATTR) && (encoder->current_attr != NULL)) { + switch (encoder->lang->langID) { + #if defined( WBXML_SUPPORT_SI ) + case WBXML_LANG_SI10: +@@ -1892,7 +1908,16 @@ + } + break; + #endif /* WBXML_SUPPORT_EMN */ +- ++#if defined( WBXML_SUPPORT_OTA_SETTINGS ) ++ case WBXML_LANG_OTA_SETTINGS: ++ if ((encoder->current_attr->wbxmlCodePage == 0x00) && ++ (encoder->current_attr->wbxmlToken == 0x11)) ++ { ++ if ((ret = wbxml_encode_ota_nokia_icon(encoder, buffer)) != WBXML_NOT_ENCODED) ++ return ret; ++ } ++ break; ++#endif /* WBXML_SUPPORT_OTA_SETTINGS */ + default: + break; + } +@@ -1936,7 +1961,8 @@ + #if defined( WBXML_SUPPORT_SYNCML ) + /* If this is a SyncML document ? */ + if ((encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML10) || +- (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11)) ++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11) || ++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML12)) + { + /** @todo We must check too if we are in a */ + +@@ -2219,6 +2245,11 @@ + * @param list The Value Element list + * @return WBXML_OK if encoding is OK, an error code otherwise + */ ++static WBXMLError wbxml_encode_opaque(WBXMLEncoder *encoder, WBXMLBuffer *buff) ++{ ++ return wbxml_encode_opaque_data(encoder, wbxml_buffer_get_cstr(buff), wbxml_buffer_len(buff)); ++} ++ + static WBXMLError wbxml_encode_value_element_list(WBXMLEncoder *encoder, WBXMLList *list) + { + WBXMLValueElement *elt = NULL; +@@ -2438,18 +2469,18 @@ + * @note opaque = OPAQUE length *byte + * length = mb_u_int32 + */ +-static WBXMLError wbxml_encode_opaque(WBXMLEncoder *encoder, WBXMLBuffer *buff) ++static WBXMLError wbxml_encode_opaque_data(WBXMLEncoder *encoder, WB_UTINY *data, WB_ULONG data_len) + { + /* Add WBXML_OPAQUE */ + if (!wbxml_buffer_append_char(encoder->output, WBXML_OPAQUE)) + return WBXML_ERROR_ENCODER_APPEND_DATA; + + /* Add Length */ +- if (!wbxml_buffer_append_mb_uint_32(encoder->output, wbxml_buffer_len(buff))) ++ if (!wbxml_buffer_append_mb_uint_32(encoder->output, data_len)) + return WBXML_ERROR_ENCODER_APPEND_DATA; + + /* Add Buffer */ +- if (!wbxml_buffer_append(encoder->output, buff)) ++ if (!wbxml_buffer_append_data(encoder->output, data, data_len)) + return WBXML_ERROR_ENCODER_APPEND_DATA; + + return WBXML_OK; +@@ -3146,8 +3177,54 @@ + } + + #endif /* WBXML_SUPPORT_DRMREL */ ++#if defined( WBXML_SUPPORT_OTA_SETTINGS ) ++static WBXMLError wbxml_encode_ota_nokia_icon(WBXMLEncoder *encoder, WB_UTINY *buffer) ++{ ++ WBXMLError ret = WBXML_NOT_ENCODED; ++ ++ /* Is a VALUE attribute ? */ ++ if ((encoder->current_tag != NULL) && ++ (encoder->current_attr->wbxmlCodePage == 0x00) && ++ (encoder->current_attr->wbxmlToken == 0x11) && ++ (encoder->current_node && encoder->current_node->attrs)) ++ { ++ WBXMLList *attrs = encoder->current_node->attrs; ++ WB_ULONG index = 0; ++ WB_ULONG nb_attrs = wbxml_list_len(attrs); ++ WB_BOOL found = FALSE; ++ ++ /* Search for a NAME="ICON" attribute */ ++ while (!found && (index < nb_attrs)) { ++ WBXMLAttribute *attr = (WBXMLAttribute*)wbxml_list_get(attrs, index); ++ ++ if ((WBXML_STRCMP("NAME", wbxml_attribute_get_xml_name(attr)) == 0) && ++ (WBXML_STRCMP("ICON", wbxml_attribute_get_xml_value(attr)) == 0)) ++ { ++ WB_UTINY *data = NULL; ++ WB_LONG data_len = 0; + ++ /* Decode Base64 */ ++ if ((data_len = wbxml_base64_decode(buffer, &data)) < 0) ++ return WBXML_NOT_ENCODED; ++ ++ /* Encode opaque */ ++ if ((ret = wbxml_encode_opaque_data(encoder, data, data_len)) != WBXML_OK) ++ return ret; ++ ++ /* Free Data */ ++ wbxml_free(data); ++ ++ found = TRUE; ++ } ++ ++ index++; ++ } ++ } ++ ++ return ret; ++} + ++#endif /* WBXML_SUPPORT_OTA_SETTINGS */ + #if defined( WBXML_ENCODER_USE_STRTBL ) + + /**************************** +@@ -4019,7 +4096,8 @@ + #if defined( WBXML_SUPPORT_SYNCML ) + /* Change text in from "application/vnd.syncml-devinf+wbxml" to "application/vnd.syncml-devinf+xml" */ + if (((encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML10) || +- (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11)) && ++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML11) || ++ (encoder->lang->langID == WBXML_LANG_SYNCML_SYNCML12)) && + (encoder->current_tag != NULL) && + (encoder->current_tag->wbxmlCodePage == 0x01 ) && + (encoder->current_tag->wbxmlToken == 0x13 ) && Index: files/patch-src_wbxml_encoder.h =================================================================== RCS file: files/patch-src_wbxml_encoder.h diff -N files/patch-src_wbxml_encoder.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-src_wbxml_encoder.h 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,10 @@ +--- src/wbxml_encoder.h.orig 2008-06-15 07:38:14.000000000 +1000 ++++ src/wbxml_encoder.h 2008-06-15 07:39:40.000000000 +1000 +@@ -116,6 +116,7 @@ + * @note This function has no effect if WBXML_ENCODER_USE_STRTBL compilation flag is not set + */ + WBXML_DECLARE(void) wbxml_encoder_set_use_strtbl(WBXMLEncoder *encoder, WB_BOOL use_strtbl); ++WBXML_DECLARE(void) wbxml_encoder_set_produce_anonymous(WBXMLEncoder *encoder, WB_BOOL set_anonymous); + + /** + * @brief Set the WBXML Version of the output document, when generating WBXML [Default: 'WBXML_VERSION_TOKEN_13' (1.3)] Index: files/patch-src_wbxml_parser.c =================================================================== RCS file: files/patch-src_wbxml_parser.c diff -N files/patch-src_wbxml_parser.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-src_wbxml_parser.c 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,300 @@ +--- src/wbxml_parser.c.orig 2006-07-11 21:47:45.000000000 +1000 ++++ src/wbxml_parser.c 2008-06-15 06:59:21.000000000 +1000 +@@ -153,11 +153,14 @@ + static WBXMLError parse_mb_uint32(WBXMLParser *parser, WB_ULONG *result); + + /* Language Specific Decoding Functions */ ++static WBXMLError decode_base64_value(WBXMLBuffer **data); ++ + #if defined( WBXML_SUPPORT_SI ) || defined( WBXML_SUPPORT_EMN ) + static WBXMLError decode_datetime(WBXMLBuffer *buff); + #endif /* WBXML_SUPPORT_SI || WBXML_SUPPORT_EMN */ + + static WBXMLError decode_opaque_content(WBXMLParser *parser, WBXMLBuffer **data); ++static WBXMLError decode_opaque_attr_value(WBXMLParser *parser, WBXMLBuffer **data); + + #if defined( WBXML_SUPPORT_WV ) + static WBXMLError decode_wv_content(WBXMLParser *parser, WBXMLBuffer **data); +@@ -165,10 +168,6 @@ + static WBXMLError decode_wv_datetime(WBXMLBuffer **data); + #endif /* WBXML_SUPPORT_WV */ + +-#if defined( WBXML_SUPPORT_DRMREL ) +-static WBXMLError decode_drmrel_keyvalue(WBXMLBuffer **data); +-#endif /* WBXML_SUPPORT_DRMREL */ +- + /* Macro for error handling */ + #define CHECK_ERROR if (ret != WBXML_OK) return ret; + +@@ -277,7 +276,7 @@ + parser->charset = WBXML_PARSER_DEFAULT_CHARSET; + + WBXML_WARNING((WBXML_PARSER, +- "No charset information found, using default : %s", ++ "No charset information found, using default : %x", + WBXML_PARSER_DEFAULT_CHARSET)); + } + } +@@ -659,12 +658,14 @@ + * Do NOT keep 'WBXML_VERSION_UNKNOWN' (0xffffffff) because only one byte will change. + * (for example, if the version is 0x02, then parser->version will be 0xffffff02) + */ +- parser->version = WBXML_VERSION_10; ++ WB_UTINY version = WBXML_VERSION_10; + +- if ((ret = parse_uint8(parser, (WB_UTINY*) &parser->version)) != WBXML_OK) ++ if ((ret = parse_uint8(parser, &version)) != WBXML_OK) + return ret; ++ ++ parser->version = version; + +- WBXML_DEBUG((WBXML_PARSER, "(%d) Parsed version: '0x%X'", parser->pos - 1, (WB_TINY) parser->version)); ++ WBXML_DEBUG((WBXML_PARSER, "(%d) Parsed version: 1.%d", parser->pos - 1, parser->version)); + + return WBXML_OK; + } +@@ -938,6 +939,8 @@ + if ((ret = parse_stag(parser, &tag, &element)) != WBXML_OK ) { + return ret; + } ++ ++ WBXML_DEBUG((WBXML_PARSER, "<%s>", wbxml_tag_get_xml_name(element))); + + /* Set Current Tag */ + if (element->type == WBXML_VALUE_TOKEN) { +@@ -990,11 +993,11 @@ + attrs, + is_empty); + } +- ++ + /* Free Attributes */ + free_attrs_table(attrs); + +- ++ + /* Parse *content */ + if (!is_empty) { + /* There can be NO content */ +@@ -1023,7 +1026,7 @@ + content = NULL; + } + +- WBXML_DEBUG((WBXML_PARSER, "(%d) End of Element", parser->pos)); ++ WBXML_DEBUG((WBXML_PARSER, "(%d) End of Element", parser->pos - 1)); + + /* Skip END */ + parser->pos++; +@@ -1037,7 +1040,9 @@ + element, + is_empty); + } +- ++ ++ WBXML_DEBUG((WBXML_PARSER, "", wbxml_tag_get_xml_name(element))); ++ + /* Free Tag */ + wbxml_tag_destroy(element); + +@@ -1078,7 +1083,7 @@ + WBXML_DEBUG((WBXML_PARSER, "(%d) Parsing switchPage", parser->pos)); + + if ((WB_UTINY) parser->version < (WB_UTINY) WBXML_VERSION_12) +- WBXML_WARNING((WBXML_PARSER, "No Switch Page mecanism possible in WBXML < %s", WBXML_VERSION_TEXT_12)); ++ WBXML_WARNING((WBXML_PARSER, "No Switch Page mecanism possible in WBXML < %s (current: %d)", WBXML_VERSION_TEXT_12, (WB_UTINY) parser->version)); + + /* Skip SWITCH_PAGE token */ + parser->pos++; +@@ -1946,7 +1951,10 @@ + WBXML_ERROR((WBXML_PARSER, "An Attribute value can't be 'opaque' in WBXML version < %s", WBXML_VERSION_TEXT_12)); + } + +- return parse_opaque(parser, result); ++ if ((ret = parse_opaque(parser, result)) != WBXML_OK) ++ return ret; ++ ++ return decode_opaque_attr_value(parser, result); + } + + +@@ -2209,6 +2217,40 @@ + * Language Specific Decoding Functions + */ + ++/** ++ * @brief Decode a BASE64 value ++ * @param data [in/out]The value to decode ++ * @return WBXML_OK if OK, another error code otherwise ++ */ ++static WBXMLError decode_base64_value(WBXMLBuffer **data) ++{ ++ WB_UTINY *result = NULL; ++ WBXMLError ret = WBXML_OK; ++ ++ if ((data == NULL) || (*data == NULL)) { ++ return WBXML_ERROR_INTERNAL; ++ } ++ ++ if ((result = wbxml_base64_encode((const WB_UTINY *) wbxml_buffer_get_cstr(*data), ++ wbxml_buffer_len(*data))) == NULL) ++ { ++ return WBXML_ERROR_B64_ENC; ++ } ++ ++ /* Reset buffer */ ++ wbxml_buffer_delete(*data, 0, wbxml_buffer_len(*data)); ++ ++ /* Set data */ ++ if (!wbxml_buffer_append_cstr(*data, result)) { ++ ret = WBXML_ERROR_NOT_ENOUGH_MEMORY; ++ } ++ ++ wbxml_free(result); ++ ++ return ret; ++} ++ ++ + #if ( defined( WBXML_SUPPORT_SI ) || defined( WBXML_SUPPORT_EMN ) ) + + /************************************** +@@ -2297,8 +2339,6 @@ + * @param parser The WBXML Parser + * @param data The Opaque data buffer + * @return WBXML_OK if OK, another error code otherwise +- * @note Used for: +- * - WV 1.1 / 1.2 + */ + static WBXMLError decode_opaque_content(WBXMLParser *parser, + WBXMLBuffer **data) +@@ -2318,13 +2358,14 @@ + #if defined( WBXML_SUPPORT_DRMREL ) + + case WBXML_LANG_DRMREL10: ++ /* ds:KeyValue */ + if ((parser->current_tag->wbxmlCodePage == 0x00) && + (parser->current_tag->wbxmlToken == 0x0C)) + { + WBXMLError ret = WBXML_OK; + +- /* Decode */ +- if ((ret = decode_drmrel_keyvalue(data)) != WBXML_OK) ++ /* Decode base64 value */ ++ if ((ret = decode_base64_value(data)) != WBXML_OK) + return ret; + + return WBXML_OK; +@@ -2332,7 +2373,62 @@ + break; + + #endif /* WBXML_SUPPORT_DRMREL */ +- ++ ++#if defined( WBXML_SUPPORT_SYNCML ) ++ ++ case WBXML_LANG_SYNCML_SYNCML10: ++ case WBXML_LANG_SYNCML_SYNCML11: ++ case WBXML_LANG_SYNCML_SYNCML12: ++ /* NextNonce */ ++ if ((parser->current_tag->wbxmlCodePage == 0x01) && ++ (parser->current_tag->wbxmlToken == 0x10)) ++ { ++ WBXMLError ret = WBXML_OK; ++ ++ /* Decode base64 value */ ++ if ((ret = decode_base64_value(data)) != WBXML_OK) ++ return ret; ++ ++ return WBXML_OK; ++ } ++ break; ++ ++#endif /* WBXML_SUPPORT_SYNCML */ ++ ++ default: ++ /* NOP */ ++ break; ++ } /* switch */ ++ ++ return WBXML_OK; ++} ++ ++ ++/** ++ * @brief Decode an Opaque Attribute Value buffer ++ * @param parser The WBXML Parser ++ * @param data The Opaque data buffer ++ * @return WBXML_OK if OK, another error code otherwise ++ */ ++static WBXMLError decode_opaque_attr_value(WBXMLParser *parser, WBXMLBuffer **data) ++{ ++ switch (parser->langTable->langID) ++ { ++#if defined( WBXML_SUPPORT_OTA_SETTINGS ) ++ ++ case WBXML_LANG_OTA_SETTINGS: ++ { ++ WBXMLError ret = WBXML_OK; ++ ++ /* Decode base64 value */ ++ if ((ret = decode_base64_value(data)) != WBXML_OK) ++ return ret; ++ ++ return WBXML_OK; ++ } ++ ++#endif /* WBXML_SUPPORT_OTA_SETTINGS */ ++ + default: + /* NOP */ + break; +@@ -2705,49 +2801,3 @@ + } + + #endif /* WBXML_SUPPORT_WV */ +- +- +-#if defined( WBXML_SUPPORT_DRMREL ) +- +-/************************************** +- * DRMREL 1.0 +- */ +- +-/** +- * @brief Decode a DRMREL 'KeyValue' +- * @param data The KeyValue to decode +- * @return WBXML_OK if OK, another error code otherwise +- * @note Used for: +- * - DRMREL 1.0 +- * @note [OMA-Download-DRMREL-v1_0-20020913-C.PDF] - 7.1: +- * "The content of the element MUST be in binary format using the ‘opaque’ token." +- */ +-static WBXMLError decode_drmrel_keyvalue(WBXMLBuffer **data) +-{ +- WB_UTINY *result = NULL; +- WBXMLError ret = WBXML_OK; +- +- if ((data == NULL) || (*data == NULL)) { +- return WBXML_ERROR_INTERNAL; +- } +- +- if ((result = wbxml_base64_encode((const WB_UTINY *) wbxml_buffer_get_cstr(*data), +- wbxml_buffer_len(*data))) == NULL) +- { +- return WBXML_ERROR_B64_ENC; +- } +- +- /* Reset buffer */ +- wbxml_buffer_delete(*data, 0, wbxml_buffer_len(*data)); +- +- /* Set data */ +- if (!wbxml_buffer_append_cstr(*data, result)) { +- ret = WBXML_ERROR_NOT_ENOUGH_MEMORY; +- } +- +- wbxml_free(result); +- +- return ret; +-} +- +-#endif /* WBXML_SUPPORT_DRMREL */ Index: files/patch-src_wbxml_tables.h =================================================================== RCS file: files/patch-src_wbxml_tables.h diff -N files/patch-src_wbxml_tables.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-src_wbxml_tables.h 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,13 @@ +--- src/wbxml_tables.h.orig 2008-06-15 07:35:57.000000000 +1000 ++++ src/wbxml_tables.h 2008-06-15 07:36:37.000000000 +1000 +@@ -108,8 +108,8 @@ + + /* SyncML 1.2 */ + #define WBXML_PUBLIC_ID_SYNCML_SYNCML12 0x1201 +-#define WBXML_PUBLIC_ID_SYNCML_DEVINF12 0x1202 +-#define WBXML_PUBLIC_ID_SYNCML_METINF12 0x1203 ++#define WBXML_PUBLIC_ID_SYNCML_METINF12 0x1202 ++#define WBXML_PUBLIC_ID_SYNCML_DEVINF12 0x1203 + + #define XML_PUBLIC_ID_SYNCML_SYNCML12 "-//SYNCML//DTD SyncML 1.2//EN" + #define XML_PUBLIC_ID_SYNCML_DEVINF12 "-//SYNCML//DTD DevInf 1.2//EN" Index: files/patch-src_wbxml_tree.c =================================================================== RCS file: files/patch-src_wbxml_tree.c diff -N files/patch-src_wbxml_tree.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-src_wbxml_tree.c 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,253 @@ +--- src/wbxml_tree.c.orig 2006-07-11 21:47:45.000000000 +1000 ++++ src/wbxml_tree.c 2008-06-15 06:59:31.000000000 +1000 +@@ -137,6 +137,7 @@ + + /* Use String Table */ + wbxml_encoder_set_use_strtbl(wbxml_encoder, TRUE); ++ wbxml_encoder_set_produce_anonymous(wbxml_encoder, FALSE); + } + else { + /* WBXML Version */ +@@ -153,6 +156,7 @@ + + /* String Table */ + wbxml_encoder_set_use_strtbl(wbxml_encoder, params->use_strtbl); ++ wbxml_encoder_set_produce_anonymous(wbxml_encoder, params->produce_anonymous); + + /** @todo Add parameter to call : wbxml_encoder_set_output_charset() */ + } +@@ -256,7 +262,8 @@ + + #else /* HAVE_EXPAT */ + +-#if defined( HAVE_LIBXML ) ++//#if defined( HAVE_LIBXML ) ++#if 0 + + /** @todo Use LibXML2 SAX interface ! */ + return WBXML_ERROR_NO_XMLPARSER; +@@ -333,7 +340,8 @@ + } + + +-#if defined( HAVE_LIBXML ) ++// #if defined( HAVE_LIBXML ) ++#if 0 + + WBXML_DECLARE(WBXMLError) wbxml_tree_from_libxml_doc(xmlDocPtr libxml_doc, + WBXMLTree **tree) +@@ -617,6 +625,40 @@ + } + + ++WBXML_DECLARE(WBXMLError) wbxml_tree_node_extract(WBXMLTreeNode *node) ++{ ++ if (node == NULL) ++ return WBXML_ERROR_BAD_PARAMETER; ++ ++ /* Parent link */ ++ if (node->parent != NULL) { ++ if (node->parent->children == node) { ++ /* Update parent children */ ++ node->parent->children = node->next; ++ } ++ ++ /* No more parent */ ++ node->parent = NULL; ++ } ++ ++ /* Next link */ ++ if (node->next != NULL) { ++ /* Link next node to previous node */ ++ node->next->prev = node->prev; ++ node->next = NULL; ++ } ++ ++ /* Previous link */ ++ if (node->prev != NULL) { ++ /* Link previous node to next node */ ++ node->prev->next = node->next; ++ node->prev = NULL; ++ } ++ ++ return WBXML_OK; ++} ++ ++ + WBXML_DECLARE(WBXMLError) wbxml_tree_node_add_attr(WBXMLTreeNode *node, + WBXMLAttribute *attr) + { +@@ -938,34 +982,17 @@ + } + + +-/** @todo Rewrite this function (use wbxml_tree_node_* functions) */ + WBXML_DECLARE(WB_BOOL) wbxml_tree_add_node(WBXMLTree *tree, WBXMLTreeNode *parent, WBXMLTreeNode *node) + { + WBXMLTreeNode *tmp = NULL; + + if ((tree == NULL) || (node == NULL)) + return FALSE; +- +- /* Set parent to new node */ +- node->parent = parent; +- ++ + /* Check if this is the Root Element */ + if (parent != NULL) { +- /* This is not the Root Element... search for previous sibbling element */ +- if (parent->children != NULL) { +- /* Add this Node to end of Sibbling Node list of Parent */ +- tmp = parent->children; +- +- while (tmp->next != NULL) +- tmp = tmp->next; +- +- node->prev = tmp; +- tmp->next = node; +- } +- else { +- /* No previous sibbling element */ +- parent->children = node; +- } ++ if (!wbxml_tree_node_add_child(parent, node)) ++ return FALSE; + } + else { + /* We do NOT allow replacement of an existing Tree Node */ +@@ -974,53 +1001,28 @@ + + /* This is the Root Element */ + tree->root = node; ++ node->parent = NULL; + } + + return TRUE; + } + + +-/** @todo Rewrite this function (use wbxml_tree_node_* functions) */ + WBXML_DECLARE(WBXMLError) wbxml_tree_extract_node(WBXMLTree *tree, + WBXMLTreeNode *node) + { + if ((tree == NULL) || (node == NULL)) + return WBXML_ERROR_BAD_PARAMETER; +- +- /* Parent link */ +- if (node->parent != NULL) { +- if (node->parent->children == node) { +- /* Update parent children */ +- node->parent->children = node->next; +- } +- +- /* No more parent */ +- node->parent = NULL; +- } +- else { ++ ++ if (node == tree->root) { + /* Root removed ! */ + tree->root = node->next; + } + +- /* Next link */ +- if (node->next != NULL) { +- /* Link next node to previous node */ +- node->next->prev = node->prev; +- node->next = NULL; +- } +- +- /* Previous link */ +- if (node->prev != NULL) { +- /* Link previous node to next node */ +- node->prev->next = node->next; +- node->prev = NULL; +- } +- +- return WBXML_OK; ++ return wbxml_tree_node_extract(node); + } + + +-/** @todo Rewrite this function (use wbxml_tree_node_* functions) */ + WBXML_DECLARE(WBXMLTreeNode *) wbxml_tree_add_elt(WBXMLTree *tree, + WBXMLTreeNode *parent, + WBXMLTag *tag) +@@ -1048,7 +1050,6 @@ + } + + +-/** @todo Rewrite this function (use wbxml_tree_node_* functions) */ + WBXML_DECLARE(WBXMLTreeNode *) wbxml_tree_add_elt_with_attrs(WBXMLTree *tree, + WBXMLTreeNode *parent, + WBXMLTag *tag, +@@ -1075,36 +1076,15 @@ + } + + +-/** @todo Rewrite this function (use wbxml_tree_node_* functions) */ + WBXML_DECLARE(WBXMLTreeNode *) wbxml_tree_add_xml_elt(WBXMLTree *tree, + WBXMLTreeNode *parent, + WB_UTINY *name) + { +- const WBXMLTagEntry *tag_entry = NULL; + WBXMLTreeNode *node = NULL; +- WBXMLTag *tag = NULL; + +- /* Search for XML Tag Name in Table */ +- if ((tag_entry = wbxml_tables_get_tag_from_xml(tree->lang, (const WB_UTINY *) name)) != NULL) { +- /* Found : token tag */ +- tag = wbxml_tag_create_token(tag_entry); +- } +- else { +- /* Not found : literal tag */ +- tag = wbxml_tag_create_literal(name); +- } +- +- if (tag == NULL) +- return NULL; +- +- /* Create a new Node */ +- if ((node = wbxml_tree_node_create(WBXML_TREE_ELEMENT_NODE)) == NULL) { +- wbxml_tag_destroy(tag); ++ /* Create element node */ ++ if ((node = wbxml_tree_node_create_xml_elt(tree->lang, (const WB_UTINY *) name)) == NULL) + return NULL; +- } +- +- /* Set Node Tag */ +- node->name = tag; + + /* Add this Node to Tree */ + if (!wbxml_tree_add_node(tree, parent, node)) { +@@ -1116,7 +1096,6 @@ + } + + +-/** @todo Rewrite this function (use wbxml_tree_node_* functions) */ + WBXML_DECLARE(WBXMLTreeNode *) wbxml_tree_add_xml_elt_with_attrs(WBXMLTree *tree, + WBXMLTreeNode *parent, + WB_UTINY *name, +@@ -1143,7 +1122,6 @@ + } + + +-/** @todo Rewrite this function (use wbxml_tree_node_* functions) */ + WBXML_DECLARE(WBXMLTreeNode *) wbxml_tree_add_text(WBXMLTree *tree, + WBXMLTreeNode *parent, + const WB_UTINY *text, +@@ -1152,13 +1130,7 @@ + WBXMLTreeNode *node = NULL; + + /* Create a new Node */ +- if ((node = wbxml_tree_node_create(WBXML_TREE_TEXT_NODE)) == NULL) { +- return NULL; +- } +- +- /* Set Content */ +- if ((node->content = wbxml_buffer_create(text, len, len)) == NULL) { +- wbxml_tree_node_destroy(node); ++ if ((node = wbxml_tree_node_create_text(text, len)) == NULL) { + return NULL; + } + Index: files/patch-src_wbxml_tree.h =================================================================== RCS file: files/patch-src_wbxml_tree.h diff -N files/patch-src_wbxml_tree.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-src_wbxml_tree.h 15 Jun 2008 03:18:00 -0000 @@ -0,0 +1,10 @@ +--- src/wbxml_tree.h.orig 2008-06-15 08:10:30.000000000 +1000 ++++ src/wbxml_tree.h 2008-06-15 08:11:09.000000000 +1000 +@@ -308,6 +308,7 @@ + WBXML_DECLARE(WB_BOOL) wbxml_tree_node_add_child(WBXMLTreeNode *parent, + WBXMLTreeNode *node); + ++WBXML_DECLARE(WBXMLError) wbxml_tree_node_extract(WBXMLTreeNode *node); + /** + * @brief Add a WBXML Attribute to a Tree Node structure + * @param node The Tree Node to modify