22 #include <libsyncml/syncml.h>
24 #include <libsyncml/syncml_internals.h>
25 #include <libsyncml/sml_elements_internals.h>
26 #include <libsyncml/sml_command_internals.h>
27 #include <libsyncml/sml_session_internals.h>
28 #include "libsyncml/sml_error_internals.h"
32 #include "sml_xml_assm.h"
33 #include "sml_xml_assm_internals.h"
34 #include "sml_xml_parse.h"
35 #include "sml_xml_parse_internals.h"
36 #include "sml_wbxml.h"
37 #include "sml_wbxml_internals.h"
39 SmlBool smlWbxmlConvertTo(WBXMLConvXML2WBXMLParams *params,
const char *input,
char **output,
size_t *outputLen,
SmlError** error)
41 smlTrace(TRACE_ENTRY,
"%s(%p, %p, %p, %p, %p)", __func__, params, input, output, outputLen, error);
43 smlAssert(strlen(input));
48 wberror = wbxml_conv_xml2wbxml((WB_UTINY*)input, (WB_UTINY**)output, (WB_ULONG*)outputLen, params);
49 if (wberror != WBXML_OK)
52 smlTrace(TRACE_EXIT,
"%s", __func__);
56 smlErrorSet(error, SML_ERROR_GENERIC, (
char *)wbxml_errors_string(wberror));
61 SmlBool smlWbxmlConvertFrom(WBXMLConvWBXML2XMLParams *params,
const char *input,
size_t inputLen,
char **output,
size_t *outputLen,
SmlError** error)
63 smlTrace(TRACE_ENTRY,
"%s(%p, %p, %i, %p, %p, %p)", __func__, params, input, inputLen, output, outputLen, error);
66 smlTrace(TRACE_INTERNAL,
"WBXML2 VERSION: %s", WBXML_LIB_VERSION);
67 wberror = wbxml_conv_wbxml2xml_withlen((WB_UTINY*)input, inputLen, (WB_UTINY**)output, (WB_ULONG*)outputLen, params);
68 if (wberror != WBXML_OK)
71 smlTrace(TRACE_EXIT,
"%s", __func__);
75 smlErrorSet(error, SML_ERROR_GENERIC, (
char *)wbxml_errors_string(wberror));
80 static SmlBool smlWbxmlParserStart(
SmlXmlParser *parser,
const char *data,
unsigned int size,
SmlError **error)
82 smlTrace(TRACE_ENTRY,
"%s(%p, %p, %p, %p)", __func__, parser, data, size, error);
89 smlTrace(TRACE_INTERNAL,
"Wbxml input: %s", bin);
91 smlLog(
"received-%i.wbxml", data, size);
98 size_t buffer_size = 0;
99 WBXMLConvWBXML2XMLParams params = {WBXML_ENCODER_XML_GEN_COMPACT, WBXML_LANG_UNKNOWN, 0, TRUE};
100 if (!smlWbxmlConvertFrom(¶ms, data, size, &buffer, &buffer_size, error))
102 smlTrace(TRACE_INTERNAL,
"converted XML message: %s", buffer);
106 smlSafeCFree(&buffer);
108 smlTrace(TRACE_EXIT,
"%s", __func__);
113 smlSafeCFree(&buffer);
120 smlTrace(TRACE_ENTRY,
"%s(%p, %p)", __func__, functions, error);
122 smlAssert(functions);
124 SmlXmlParser *parser = smlXmlParserNew(functions, error);
128 functions->start = (SmlParserStartFunction)smlWbxmlParserStart;
130 smlTrace(TRACE_EXIT,
"%s: %p", __func__, parser);
138 SmlBool smlWbxmlAssemblerRun(
SmlXmlAssembler *assm,
char **data,
unsigned int *size, SmlBool *end, SmlBool
final,
unsigned int maxsize,
SmlError **error)
140 smlTrace(TRACE_ENTRY,
"%s(%p, %p, %p, %p, %i, %i, %p)", __func__, assm, data, size, end,
final, maxsize, error);
147 unsigned int buffer_size = 0;
148 if (!smlXmlAssemblerRun(assm, &buffer, &buffer_size, end,
final, 0, error))
151 WBXMLConvXML2WBXMLParams params = {WBXML_VERSION_12, FALSE, FALSE, FALSE};
153 if (opt && atoi(opt))
154 params.use_strtbl = TRUE;
155 if (!smlWbxmlConvertTo(¶ms, buffer, data, size, error))
157 smlSafeCFree(&buffer);
160 smlTrace(TRACE_INTERNAL,
"Wbxml assembled: %s", hex);
163 smlLog(
"sent-%i.wbxml", *data, *size);
165 smlTrace(TRACE_EXIT,
"%s", __func__);
170 smlSafeCFree(&buffer);
177 smlTrace(TRACE_ENTRY,
"%s(%p, %i, %p)", __func__, assm, headeronly, error);
181 unsigned int size = 0;
184 unsigned int buffer_size = 0;
185 if (!smlXmlAssemblerRunFull(assm, &buffer, &buffer_size, NULL, TRUE, FALSE, 0, error))
188 WBXMLConvXML2WBXMLParams params = {WBXML_VERSION_12, FALSE, FALSE, FALSE};
190 if (opt && atoi(opt))
191 params.use_strtbl = TRUE;
192 if (!smlWbxmlConvertTo(¶ms, buffer, &data, &size, error))
193 goto error_free_buffer;
196 smlSafeCFree(&buffer);
198 smlTrace(TRACE_EXIT,
"%s: %i", __func__, size);
202 smlSafeCFree(&buffer);
217 smlTrace(TRACE_ENTRY,
"%s(%p, %p, %p)", __func__, assembler, functions, error);
224 functions->run = (SmlAssemblerRunFunction)smlWbxmlAssemblerRun;
225 functions->check_size = (SmlAssemblerCheckFunction)smlWbxmlAssemblerCheckSize;
227 smlTrace(TRACE_EXIT,
"%s: %p", __func__, assm);