summaryrefslogtreecommitdiff
path: root/src/agent/serviceadapter/protocolbinder/syncml_protocol_binder.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/agent/serviceadapter/protocolbinder/syncml_protocol_binder.c')
-rwxr-xr-xsrc/agent/serviceadapter/protocolbinder/syncml_protocol_binder.c3062
1 files changed, 3062 insertions, 0 deletions
diff --git a/src/agent/serviceadapter/protocolbinder/syncml_protocol_binder.c b/src/agent/serviceadapter/protocolbinder/syncml_protocol_binder.c
new file mode 100755
index 0000000..91e5217
--- /dev/null
+++ b/src/agent/serviceadapter/protocolbinder/syncml_protocol_binder.c
@@ -0,0 +1,3062 @@
+/*
+ * oma-dm-agent
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*lib*/
+#include <glib.h>
+#include <assert.h>
+
+/*sync-agent*/
+#include <sync_agent.h>
+
+/*dm-agent*/
+#include "common/dm_common.h"
+#include "common/util/util.h"
+#include "serviceadapter/protocolbinder/syncml_def.h"
+#include "serviceadapter/protocolbinder/syncml_protocol_binder.h"
+#include "serviceadapter/sa_command_internal.h"
+#include "serviceadapter/sa_command.h"
+#include "serviceadapter/sa_elements_internal.h"
+#include "serviceadapter/sa_elements.h"
+#include "serviceadapter/sa_define.h"
+
+#ifndef OMADM_AGENT_LOG
+#undef LOG_TAG
+#define LOG_TAG "OMA_DM_BINDER"
+#endif
+
+#define SYNC_AGENT_INIT_ESTIMATE_DOC_SIZE 10 /* TODO : remove */
+
+static ProtocolVersion __get_oma_dm_protocol_version(char *verdtd);
+static Location *__get_location(WBXMLTreeNode * node);
+static Cred *__get_cred(WBXMLTreeNode * node);
+static Chal *__get_chal(WBXMLTreeNode * node);
+
+static sync_agent_pb_error_e __append_location_to_wbxml_node(Location * pLocation, sync_agent_pb_protocol_binder_info_s * pBinder, WBXMLTreeNode * parent_node);
+static sync_agent_pb_error_e __append_cred_to_wbxml_node(Cred * pCred, sync_agent_pb_protocol_binder_info_s * pBinder, WBXMLTreeNode * parent_node);
+static sync_agent_pb_error_e __append_chal_to_wbxml_node(Chal * pChal, sync_agent_pb_protocol_binder_info_s * pBinder, WBXMLTreeNode * parent_node);
+
+static sync_agent_pb_error_e _syncml_binder_syncml_start_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+static sync_agent_pb_error_e _syncml_binder_header_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+static sync_agent_pb_error_e _syncml_binder_final_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+static sync_agent_pb_error_e _syncml_binder_body_start_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+static sync_agent_pb_error_e _syncml_binder_status_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+static sync_agent_pb_error_e _syncml_binder_alert_command_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+static sync_agent_pb_error_e _syncml_binder_results_command_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+static sync_agent_pb_error_e _syncml_binder_replace_command_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node);
+
+static sync_agent_pb_error_e _syncml_binder_header_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_results_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_get_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_alert_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_add_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_replace_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_delete_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_atomic_end_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_atomic_start_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_sequence_end_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_sequence_start_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_exec_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_final_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_status_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+static sync_agent_pb_error_e _syncml_binder_copy_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent);
+
+const sync_agent_pb_function_info_s oma_dm_binder_function_info[] = {
+ {PE_SYNCML_START, "SyncML", _syncml_binder_syncml_start_converter_function, NULL, false},
+ {PE_SYNCML_END, "/SyncML", NULL, NULL, false},
+ {PE_HEADER, "SyncHdr", _syncml_binder_header_converter_function, _syncml_binder_header_reverse_converter_function, true},
+ {PE_BODY_START, "SyncBody", _syncml_binder_body_start_converter_function, NULL, false},
+ {PE_BODY_END, "/SyncBody", NULL, NULL, false},
+ {PE_FINAL, "Final", _syncml_binder_final_converter_function, _syncml_binder_final_reverse_converter_function, true},
+ {PE_ALERT, "Alert", _syncml_binder_alert_command_converter_function, _syncml_binder_alert_command_reverse_converter_function, true},
+ {PE_STATUS, "Status", _syncml_binder_status_converter_function, _syncml_binder_status_reverse_converter_function, true},
+ {PE_RESULTS_START, "Results", _syncml_binder_results_command_converter_function, _syncml_binder_results_command_reverse_converter_function, false},
+ {PE_RESULTS_END, "/Results", NULL, NULL, false},
+ {PE_GET, "Get", NULL, _syncml_binder_get_command_reverse_converter_function, true},
+ {PE_ADD, "Add", NULL, _syncml_binder_add_command_reverse_converter_function, true},
+ {PE_REPLACE, "Replace", _syncml_binder_replace_command_converter_function, _syncml_binder_replace_command_reverse_converter_function, true},
+ {PE_DELETE, "Delete", NULL, _syncml_binder_delete_command_reverse_converter_function, true},
+ {PE_EXEC, "Exec", NULL, _syncml_binder_exec_command_reverse_converter_function, true},
+ {PE_SEQUENCE_START, "Sequence", NULL, _syncml_binder_sequence_start_command_reverse_converter_function, false},
+ {PE_SEQUENCE_END, "/Sequence", NULL, _syncml_binder_sequence_end_command_reverse_converter_function, false},
+ {PE_ATOMIC_START, "Atomic", NULL, _syncml_binder_atomic_start_command_reverse_converter_function, false},
+ {PE_ATOMIC_END, "/Atomic", NULL, _syncml_binder_atomic_end_command_reverse_converter_function, false},
+ {PE_COPY, "Copy", NULL, _syncml_binder_copy_command_reverse_converter_function, true}
+};
+
+static sync_agent_pb_error_e __append_location_to_wbxml_node(Location * pLocation, sync_agent_pb_protocol_binder_info_s * pBinder, WBXMLTreeNode * parent_node)
+{
+ _INNER_FUNC_ENTER;
+ _DEBUG_VERBOSE("start");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ if (pLocation->locURI != NULL) {
+ WBXMLTreeNode *LocURI = sync_agent_add_child_text_node(pBinder, parent_node, ELEMENT_LOCURI, pLocation->locURI, strlen(pLocation->locURI));
+ if (LocURI == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ } else {
+ /* error case */
+ }
+
+ if (pLocation->locName != NULL) {
+ WBXMLTreeNode *locName = sync_agent_add_child_text_node(pBinder, parent_node, ELEMENT_LOCNAME, pLocation->locName, strlen(pLocation->locName));
+ if (locName == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+ error:
+ _DEBUG_VERBOSE("error : %d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+
+}
+
+static sync_agent_pb_error_e __append_cred_to_wbxml_node(Cred * pCred, sync_agent_pb_protocol_binder_info_s * pBinder, WBXMLTreeNode * parent_node)
+{
+ _INNER_FUNC_ENTER;
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ retvm_if((pCred) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pCred is NULL!!");
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ /* check validity */
+ WBXMLTreeNode *cred_node = sync_agent_add_child_node(pBinder, parent_node, ELEMENT_CRED);
+ if (cred_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *meta_node = sync_agent_add_child_node(pBinder, cred_node, ELEMENT_META);
+ if (meta_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *type_node = NULL;
+
+ switch (pCred->type) {
+ case AUTH_TYPE_BASIC:
+
+ if (pCred->format == FORMAT_TYPE_BASE64) {
+ WBXMLTreeNode *format_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, ELEMENT_FORMAT_BASE64, strlen(ELEMENT_FORMAT_BASE64));
+ if (format_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, ELEMENT_AUTH_BASIC, strlen(ELEMENT_AUTH_BASIC));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ if (pCred->data != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, cred_node, ELEMENT_DATA, pCred->data, strlen(pCred->data));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ break;
+ case AUTH_TYPE_MD5:
+ {
+ if (pCred->format == FORMAT_TYPE_BASE64) {
+ WBXMLTreeNode *format_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, ELEMENT_FORMAT_BASE64, strlen(ELEMENT_FORMAT_BASE64));
+ if (format_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, ELEMENT_AUTH_MD5, strlen(ELEMENT_AUTH_MD5));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ if (pCred->data != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, cred_node, ELEMENT_DATA, pCred->data, strlen(pCred->data));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+ break;
+ case AUTH_TYPE_HMAC:
+ {
+ /*do not use cred element */
+ }
+ break;
+ default:
+ break;
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ _DEBUG_VERBOSE("error : %d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e __append_chal_to_wbxml_node(Chal * pChal, sync_agent_pb_protocol_binder_info_s * pBinder, WBXMLTreeNode * parent_node)
+{
+ _INNER_FUNC_ENTER;
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ retvm_if((pChal) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pChal is NULL!!");
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ /* check validity */
+ WBXMLTreeNode *chal_node = sync_agent_add_child_node(pBinder, parent_node, ELEMENT_CHAL);
+ if (chal_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ WBXMLTreeNode *meta_node = sync_agent_add_child_node(pBinder, chal_node, ELEMENT_META);
+ if (meta_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *type_node = NULL;
+
+ switch (pChal->type) {
+ case AUTH_TYPE_BASIC:
+
+ if (pChal->format == FORMAT_TYPE_BASE64) {
+ WBXMLTreeNode *format_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, ELEMENT_FORMAT_BASE64, strlen(ELEMENT_FORMAT_BASE64));
+ if (format_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, ELEMENT_AUTH_BASIC, strlen(ELEMENT_AUTH_BASIC));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ break;
+ case AUTH_TYPE_MD5:
+ {
+ if (pChal->format == FORMAT_TYPE_BASE64) {
+ WBXMLTreeNode *format_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, ELEMENT_FORMAT_BASE64, strlen(ELEMENT_FORMAT_BASE64));
+ if (format_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, ELEMENT_AUTH_MD5, strlen(ELEMENT_AUTH_MD5));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *nextnonce_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_NEXTNONCE, pChal->nonce_plain, strlen(pChal->nonce_plain));
+ if (nextnonce_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ break;
+ case AUTH_TYPE_HMAC:
+ {
+ if (pChal->format == FORMAT_TYPE_BASE64) {
+ WBXMLTreeNode *format_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, ELEMENT_FORMAT_BASE64, strlen(ELEMENT_FORMAT_BASE64));
+ if (format_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, ELEMENT_AUTH_HMAC, strlen(ELEMENT_AUTH_HMAC));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *nextnonce_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_NEXTNONCE, pChal->nonce_plain, strlen(pChal->nonce_plain));
+ if (nextnonce_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ _DEBUG_VERBOSE("error : %d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_syncml_start_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+ WBXMLTreeNode *syncml_node = sync_agent_create_node(pBinder, ELEMENT_SYNCML);
+ if (syncml_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ *ppWbxml_dom_node = syncml_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(syncml_node);
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_header_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+ SyncHdr *pSyncHdr = (SyncHdr *) pContent;
+
+ /* add SyncHdr, VerDTD, VerProto node */
+ WBXMLTreeNode *synchdr_node = NULL;
+ synchdr_node = sync_agent_create_node(pBinder, ELEMENT_SYNCHDR);
+ if (synchdr_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ char *verDTD = ELEMENT_VERDTD;
+ char *verProto = ELEMENT_VERPROTO;
+
+ char *verDTD_data = NULL;
+ char *verProto_data = NULL;
+ if (pSyncHdr->version == VERSION_10) {
+ verDTD_data = ELEMENT_VERDTD_10;
+ verProto_data = ELEMENT_VERPROTO_10;
+ } else if (pSyncHdr->version == VERSION_11) {
+ verDTD_data = ELEMENT_VERDTD_11;
+ verProto_data = ELEMENT_VERPROTO_11;
+ } else if (pSyncHdr->version == VERSION_12) {
+ verDTD_data = ELEMENT_VERDTD_12;
+ verProto_data = ELEMENT_VERPROTO_12;
+ }
+
+ if (verDTD_data == NULL || verProto_data == NULL) {
+ err = SYNC_AGENT_PB_RETURN_NOT_DEFINED;
+ goto error;
+ }
+
+ WBXMLTreeNode *verdtd_node = sync_agent_add_child_text_node(pBinder, synchdr_node, verDTD, verDTD_data, strlen(verDTD_data));
+ if (verdtd_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *verProto_node = sync_agent_add_child_text_node(pBinder, synchdr_node, verProto, verProto_data, strlen(verProto_data));
+ if (verProto_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ /* session ID */
+ WBXMLTreeNode *sessionID_node = NULL;
+ if (pSyncHdr->sessionID != NULL) {
+ sessionID_node = sync_agent_add_child_text_node(pBinder, synchdr_node, ELEMENT_SESSIONID, pSyncHdr->sessionID, strlen(pSyncHdr->sessionID));
+ } else {
+ sessionID_node = sync_agent_add_child_node(pBinder, synchdr_node, ELEMENT_SESSIONID);
+ }
+
+ if (sessionID_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ /* msgID */
+ char *msgID_data = g_strdup_printf("%u", pSyncHdr->messageID);
+ if (msgID_data == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ WBXMLTreeNode *msgID_node = sync_agent_add_child_text_node(pBinder, synchdr_node, ELEMENT_MSGID, msgID_data, strlen(msgID_data));
+ str_free(&msgID_data);
+ if (msgID_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *target_node = sync_agent_add_child_node(pBinder, synchdr_node, ELEMENT_TARGET);
+ if (target_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ err = __append_location_to_wbxml_node(pSyncHdr->target, pBinder, target_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+
+ WBXMLTreeNode *source_node = sync_agent_add_child_node(pBinder, synchdr_node, ELEMENT_SOURCE);
+ if (source_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ err = __append_location_to_wbxml_node(pSyncHdr->source, pBinder, source_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+
+ if (pSyncHdr->responseURI) {
+ WBXMLTreeNode *respuri_node = sync_agent_add_child_text_node(pBinder, synchdr_node, ELEMENT_RESPURI, pSyncHdr->responseURI, strlen(pSyncHdr->responseURI));
+ if (respuri_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ if (pSyncHdr->cred != NULL) {
+ err = __append_cred_to_wbxml_node(pSyncHdr->cred, pBinder, synchdr_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }
+
+ char *meta = ELEMENT_META;
+ if (pSyncHdr->maxmsgsize != 0 || pSyncHdr->maxobjsize != 0) {
+ WBXMLTreeNode *meta_node = sync_agent_add_child_node(pBinder, synchdr_node, meta);
+ if (meta_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ unsigned int maxmsgsize = pSyncHdr->maxmsgsize;
+ unsigned int maxobjsize = pSyncHdr->maxobjsize;
+
+ if (maxmsgsize != 0) {
+ char *str_maxmsgsize = g_strdup_printf("%u", maxmsgsize);
+ if (str_maxmsgsize == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *maxmsgsize_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_MAXMSGSIZE, str_maxmsgsize, strlen(str_maxmsgsize));
+ str_free(&str_maxmsgsize);
+ if (maxmsgsize_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ if (maxobjsize != 0) {
+ char *str_maxobjsize = g_strdup_printf("%u", maxobjsize);
+ if (str_maxobjsize == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *maxmsgsize_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_MAXOBJSIZE, str_maxobjsize, strlen(str_maxobjsize));
+ str_free(&str_maxobjsize);
+ if (maxmsgsize_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+
+ *ppWbxml_dom_node = synchdr_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(synchdr_node);
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_final_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ WBXMLTreeNode *final_node = sync_agent_create_node(pBinder, ELEMENT_FINAL);
+ if (final_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ *ppWbxml_dom_node = final_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(final_node);
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_body_start_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ WBXMLTreeNode *syncbody_node = sync_agent_create_node(pBinder, ELEMENT_SYNCBODY);
+ if (syncbody_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ *ppWbxml_dom_node = syncbody_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(syncbody_node);
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_status_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ Status *pStatus = (Status *) pContent;
+ assert(pStatus != NULL);
+
+ CommandType type = pStatus->type;
+
+ WBXMLTreeNode *status_node = NULL;
+ status_node = sync_agent_create_node(pBinder, ELEMENT_STATUS);
+ if (status_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ unsigned int cmdID = pStatus->cmdID;
+ char *str_cmdID = g_strdup_printf("%u", cmdID);
+ if (str_cmdID == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *cmdid_node = sync_agent_add_child_text_node(pBinder, status_node, ELEMENT_CMDID, str_cmdID, strlen(str_cmdID));
+ str_free(&str_cmdID);
+ if (cmdid_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ unsigned int msgRef = pStatus->msgRef;
+ char *str_msgRef = g_strdup_printf("%u", msgRef);
+ if (str_msgRef == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *msgref_node = sync_agent_add_child_text_node(pBinder, status_node, ELEMENT_MSGREF, str_msgRef, strlen(str_msgRef));
+ str_free(&str_msgRef);
+ if (msgref_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ unsigned int cmdRef = pStatus->cmdRef;
+ char *str_cmdRef = g_strdup_printf("%u", cmdRef);
+ if (str_cmdRef == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *cmdref_node = sync_agent_add_child_text_node(pBinder, status_node, ELEMENT_CMDREF, str_cmdRef, strlen(str_cmdRef));
+ str_free(&str_cmdRef);
+ if (cmdref_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ char *str_command = NULL;
+ switch (type) {
+ case COMMAND_TYPE_ALERT:
+ {
+ str_command = ELEMENT_ALERT;
+ }
+ break;
+ case COMMAND_TYPE_HEADER:
+ {
+ str_command = ELEMENT_SYNCHDR;
+ }
+ break;
+ case COMMAND_TYPE_ADD:
+ {
+ str_command = ELEMENT_ADD;
+ }
+ break;
+ case COMMAND_TYPE_REPLACE:
+ {
+ str_command = ELEMENT_REPLACE;
+ }
+ break;
+ case COMMAND_TYPE_DELETE:
+ {
+ str_command = ELEMENT_DELETE;
+ }
+ break;
+ case COMMAND_TYPE_GET:
+ {
+ str_command = ELEMENT_GET;
+ }
+ break;
+ case COMMAND_TYPE_RESULTS:
+ {
+ str_command = ELEMENT_RESULTS;
+ }
+ break;
+ case COMMAND_TYPE_EXEC:
+ {
+ str_command = ELEMENT_EXEC;
+ }
+ break;
+ case COMMAND_TYPE_SEQUENCE:
+ {
+ str_command = ELEMENT_SEQUENCE;
+ }
+ break;
+ case COMMAND_TYPE_ATOMIC:
+ {
+ str_command = ELEMENT_ATOMIC;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (str_command == NULL) {
+ err = SYNC_AGENT_PB_RETURN_NOT_DEFINED;
+ goto error;
+ }
+
+ WBXMLTreeNode *command_node = sync_agent_add_child_text_node(pBinder, status_node, ELEMENT_CMD, str_command, strlen(str_command));
+ if (command_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ if (pStatus->targetRef != NULL) {
+ WBXMLTreeNode *targetref_node = sync_agent_add_child_text_node(pBinder, status_node, ELEMENT_TARGETREF, pStatus->targetRef->locURI, strlen(pStatus->targetRef->locURI));
+ if (targetref_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ if (pStatus->sourceRef != NULL) {
+ WBXMLTreeNode *sourceref_node = sync_agent_add_child_text_node(pBinder, status_node, ELEMENT_SOURCEREF, pStatus->sourceRef->locURI, strlen(pStatus->sourceRef->locURI));
+ if (sourceref_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ if (pStatus->cred != NULL) {
+ /*err = append_cred_to_wbxml_node(pStatus->cred, pBinder, status_node);
+ * if(err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ */
+ }
+
+ if (pStatus->chal != NULL) {
+ err = __append_chal_to_wbxml_node(pStatus->chal, pBinder, status_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+
+ }
+
+ WBXMLTreeNode *data_node = sync_agent_add_child_text_node(pBinder, status_node, ELEMENT_DATA, pStatus->data, strlen(pStatus->data));
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ if (type == COMMAND_TYPE_ALERT) {
+ GList *Iter = NULL;
+ Item *item = NULL;
+ if (pStatus->items != NULL) {
+ for (Iter = pStatus->items; Iter != NULL; Iter = g_list_next(Iter)) {
+ item = (Iter->data);
+ if (item != NULL) {
+ WBXMLTreeNode *item_node = sync_agent_add_child_node(pBinder, status_node, ELEMENT_ITEM);
+ if (item_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ char *data = NULL;
+ data = item->private.data;
+ if (data != NULL) {
+ WBXMLTreeNode *item_data_node = sync_agent_add_child_text_node(pBinder, item_node, ELEMENT_DATA, data, strlen(data));
+ if (item_data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ *ppWbxml_dom_node = status_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(status_node);
+
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_alert_command_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ Command *pCommand = (Command *) pContent;
+ CommandAlertPrivate *pAlert = (CommandAlertPrivate *) (&(pCommand->private));
+ WBXMLTreeNode *alert_node = NULL;
+
+ if (pAlert == NULL) {
+ err = SYNC_AGENT_PB_RETURN_NOT_DEFINED;
+ _DEBUG_TRACE("pAlert is not defined");
+ goto error;
+ }
+
+ if (pAlert->type == ALERT_UNKNOWN) {
+ /* error case */
+ err = SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR;
+ _DEBUG_TRACE("type is unknown");
+ goto error;
+ }
+
+ alert_node = sync_agent_create_node(pBinder, ELEMENT_ALERT);
+ if (alert_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ char *str_cmdID = g_strdup_printf("%u", pCommand->cmdID);
+ if (str_cmdID == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *cmdid_node = sync_agent_add_child_text_node(pBinder, alert_node, ELEMENT_CMDID, str_cmdID, strlen(str_cmdID));
+ str_free(&str_cmdID);
+ if (cmdid_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+/* if(pCommand->cred){
+ err = __append_cred_to_wbxml_node(pCommand->cred, pBinder, alert_node);
+ if(err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }*/
+
+ char *str_alert_type = g_strdup_printf("%d", pAlert->type);
+ if (str_alert_type == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *data_node = sync_agent_add_child_text_node(pBinder, alert_node, ELEMENT_DATA, str_alert_type, strlen(str_alert_type));
+ str_free(&str_alert_type);
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ if (pAlert->Correlator != NULL) {
+ char *pCorrelator = g_strdup(pAlert->Correlator);
+ if (pCorrelator == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ WBXMLTreeNode *correlator_node = sync_agent_add_child_text_node(pBinder, alert_node, ELEMENT_CORRELATOR, pCorrelator, strlen(pCorrelator));
+ str_free(&pCorrelator);
+ if (correlator_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ GList *Iter = NULL;
+ Item *item = NULL;
+ for (Iter = pAlert->items; Iter != NULL; Iter = g_list_next(Iter)) {
+ item = (Iter->data);
+ WBXMLTreeNode *item_node = sync_agent_add_child_node(pBinder, alert_node, ELEMENT_ITEM);
+ if (item_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ if (item->source != NULL) {
+ WBXMLTreeNode *source_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_SOURCE);
+ if (source_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ err = __append_location_to_wbxml_node(item->source, pBinder, source_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }
+ if (item->target != NULL) {
+ WBXMLTreeNode *target_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_TARGET);
+ if (target_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ err = __append_location_to_wbxml_node(item->target, pBinder, target_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }
+
+ if (item->format != NULL || item->contenttype != NULL) {
+ WBXMLTreeNode *meta_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_META);
+ if (meta_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->format != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, item->format, strlen(item->format));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ if (item->contenttype != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, item->contenttype, strlen(item->contenttype));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->moreData != 0) {
+ if (item->size > 0) {
+ char *str_size = g_strdup_printf("%u", item->size);
+ if (str_size == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ WBXMLTreeNode *size_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_SIZE, str_size, strlen(str_size));
+ str_free(&str_size);
+ if (size_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ }
+ }
+ }
+ }
+
+ if (item->dataType == ITEM_DATA) {
+ if (item->private.data != NULL) {
+ WBXMLTreeNode *data_node = sync_agent_add_child_text_node(pBinder, item_node, ELEMENT_DATA, item->private.data, strlen(item->private.data));
+ //WBXMLTreeNode* data_node = sync_agent_add_child_cdata_node(pBinder, item_node, ELEMENT_DATA, item->private.data, strlen(item->private.data));
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+
+ if (item->moreData != 0) {
+ WBXMLTreeNode *data_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_MOREDATA);
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+
+ *ppWbxml_dom_node = alert_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(alert_node);
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_results_command_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ Command *pCommand = (Command *) pContent;
+ CommandResultsPrivate *pResults = (CommandResultsPrivate *) (&(pCommand->private));
+ WBXMLTreeNode *results_node = NULL;
+ if (pResults == NULL) {
+ err = SYNC_AGENT_PB_RETURN_NOT_DEFINED;
+ _DEBUG_TRACE("pResults is not defined");
+ goto error;
+ }
+
+ results_node = sync_agent_create_node(pBinder, ELEMENT_RESULTS);
+ if (results_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ char *str_cmdID = g_strdup_printf("%u", pCommand->cmdID);
+ if (str_cmdID == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ WBXMLTreeNode *cmdid_node = sync_agent_add_child_text_node(pBinder, results_node, ELEMENT_CMDID, str_cmdID, strlen(str_cmdID));
+ str_free(&str_cmdID);
+ if (cmdid_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ if (pResults->msgRef != 0) {
+ char *str_msgRef = g_strdup_printf("%u", pResults->msgRef);
+ if (str_msgRef == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ WBXMLTreeNode *msgref_node = sync_agent_add_child_text_node(pBinder, results_node, ELEMENT_MSGREF, str_msgRef, strlen(str_msgRef));
+ str_free(&str_msgRef);
+ if (msgref_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ char *str_cmdRef = g_strdup_printf("%u", pResults->cmdRef);
+ if (str_cmdRef == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ WBXMLTreeNode *msgref_node = sync_agent_add_child_text_node(pBinder, results_node, ELEMENT_CMDREF, str_cmdRef, strlen(str_cmdRef));
+ str_free(&str_cmdRef);
+ if (msgref_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ /* if(content_type){
+ WBXMLTreeNode * meta_node = sync_agent_add_child_node(pBinder, results_node, ELEMENT_META);
+ sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, content_type, strlen(content_type));
+ } */
+
+ if (pResults->targetRef != NULL) {
+ WBXMLTreeNode *targetref_node = sync_agent_add_child_text_node(pBinder, results_node, ELEMENT_TARGETREF, pResults->targetRef->locURI, strlen(pResults->targetRef->locURI));
+ if (targetref_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ GList *Iter = NULL;
+ Item *item = NULL;
+ for (Iter = pResults->items; Iter != NULL; Iter = g_list_next(Iter)) {
+ item = (Iter->data);
+ WBXMLTreeNode *item_node = sync_agent_add_child_node(pBinder, results_node, ELEMENT_ITEM);
+ if (item_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->source != NULL) {
+ WBXMLTreeNode *source_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_SOURCE);
+ if (source_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ err = __append_location_to_wbxml_node(item->source, pBinder, source_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }
+ if (item->target != NULL) {
+ WBXMLTreeNode *target_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_TARGET);
+ if (target_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ err = __append_location_to_wbxml_node(item->target, pBinder, target_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }
+
+ if (item->format != NULL || item->contenttype != NULL) {
+ WBXMLTreeNode *meta_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_META);
+ if (meta_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->format != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, item->format, strlen(item->format));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ if (item->contenttype != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, item->contenttype, strlen(item->contenttype));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->moreData != 0) {
+ if (item->size > 0) {
+ char *str_size = g_strdup_printf("%u", item->size);
+ WBXMLTreeNode *size_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_SIZE, str_size, strlen(str_size));
+ str_free(&str_size);
+ if (size_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+ }
+ }
+ if (item->dataType == ITEM_DATA) {
+ if (item->private.data != NULL) {
+ WBXMLTreeNode *data_node = sync_agent_add_child_text_node(pBinder, item_node, ELEMENT_DATA, item->private.data, strlen(item->private.data));
+ //WBXMLTreeNode* data_node = sync_agent_add_child_cdata_node(pBinder, item_node, ELEMENT_DATA, item->private.data, strlen(item->private.data));
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+
+ if (item->moreData != 0) {
+ WBXMLTreeNode *data_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_MOREDATA);
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+
+ *ppWbxml_dom_node = results_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(results_node);
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_replace_command_converter_function(sync_agent_pb_protocol_binder_info_s * pBinder, Content_Ptr pContent, WBXMLTreeNode ** ppWbxml_dom_node)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ Command *pCommand = (Command *) pContent;
+ CommandChangePrivate *pChange = (CommandChangePrivate *) (&(pCommand->private));
+
+ if (pChange == NULL) {
+ err = SYNC_AGENT_PB_RETURN_NOT_DEFINED;
+ _DEBUG_TRACE("pChange is not defined");
+ _INNER_FUNC_EXIT;
+ return err;
+ }
+
+ WBXMLTreeNode *replace_node = NULL;
+ replace_node = sync_agent_create_node(pBinder, ELEMENT_REPLACE);
+ if (replace_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ char *str_cmdID = g_strdup_printf("%u", pCommand->cmdID);
+ if (str_cmdID == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ WBXMLTreeNode *cmdid_node = sync_agent_add_child_text_node(pBinder, replace_node, ELEMENT_CMDID, str_cmdID, strlen(str_cmdID));
+ str_free(&str_cmdID);
+ if (cmdid_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ GList *Iter = NULL;
+ Item *item = NULL;
+ for (Iter = pChange->items; Iter != NULL; Iter = g_list_next(Iter)) {
+ item = (Iter->data);
+ WBXMLTreeNode *item_node = sync_agent_add_child_node(pBinder, replace_node, ELEMENT_ITEM);
+ if (item_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->source != NULL) {
+ WBXMLTreeNode *source_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_SOURCE);
+ if (source_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ err = __append_location_to_wbxml_node(item->source, pBinder, source_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }
+ if (item->target != NULL) {
+ WBXMLTreeNode *target_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_TARGET);
+ if (target_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ err = __append_location_to_wbxml_node(item->target, pBinder, target_node);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto error;
+ }
+ if (item->format != NULL || item->contenttype != NULL) {
+ WBXMLTreeNode *meta_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_META);
+ if (meta_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->format != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_FORMAT, item->format, strlen(item->format));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ if (item->contenttype != NULL) {
+ WBXMLTreeNode *type_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_TYPE, item->contenttype, strlen(item->contenttype));
+ if (type_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ if (item->moreData != 0) {
+ if (item->size > 0) {
+ char *str_size = g_strdup_printf("%u", item->size);
+ WBXMLTreeNode *size_node = sync_agent_add_child_text_node(pBinder, meta_node, ELEMENT_SIZE, str_size, strlen(str_size));
+ str_free(&str_size);
+ if (size_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+ }
+ }
+ if (item->dataType == ITEM_DATA) {
+ if (item->private.data != NULL) {
+ //WBXMLTreeNode* data_node = sync_agent_add_child_cdata_node(pBinder, item_node, ELEMENT_DATA, item->private.data, strlen(item->private.data));
+ WBXMLTreeNode *data_node = sync_agent_add_child_text_node(pBinder, item_node, ELEMENT_DATA, item->private.data, strlen(item->private.data));
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+
+ if (item->moreData != 0) {
+ WBXMLTreeNode *data_node = sync_agent_add_child_node(pBinder, item_node, ELEMENT_MOREDATA);
+ if (data_node == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ }
+
+ *ppWbxml_dom_node = replace_node;
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+ error:
+ sync_agent_destroy_wbxml_node(replace_node);
+ _DEBUG_TRACE("error :%d", err);
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static ProtocolVersion __get_oma_dm_protocol_version(char *verdtd)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((verdtd) == NULL, VERSION_12, "verdtd is NULL!!");
+
+ ProtocolVersion protocol_version = VERSION_UNKNOWN;
+ if (strcmp(verdtd, ELEMENT_VERDTD_12) == 0) {
+ protocol_version = VERSION_12;
+ } else if (strcmp(verdtd, ELEMENT_VERDTD_11) == 0) {
+ protocol_version = VERSION_11;
+ } else if (strcmp(verdtd, ELEMENT_VERDTD_10) == 0) {
+ protocol_version = VERSION_10;
+ }
+
+ _INNER_FUNC_EXIT;
+ return protocol_version;
+}
+
+static Location *__get_location(WBXMLTreeNode * node)
+{
+
+ _INNER_FUNC_ENTER;
+
+ retvm_if((node) == NULL, NULL, "node is NULL!!");
+ DM_ERROR ret = DM_OK;
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+ Location *pLocation = NULL;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_name = NULL;
+
+ char *locURI = NULL;
+ char *locName = NULL;
+ /* get first child : required LocURI */
+ child = node->children;
+
+ child_name = (const char *)wbxml_tag_get_xml_name(child->name);
+ if (strcmp(child_name, ELEMENT_LOCURI) == 0) {
+ err = sync_agent_get_text_from_node(child, &locURI);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ } else {
+ /* error */
+ goto return_part;
+ }
+
+ /* get second child : optional LocName */
+ child = child->next;
+ if (child != NULL) {
+ child_name = (const char *)wbxml_tag_get_xml_name(child->name);
+ if (strcmp(child_name, ELEMENT_LOCNAME) == 0) {
+ err = sync_agent_get_text_from_node(child, &locName);
+ if (err != SYNC_AGENT_PB_RETURN_OK)
+ goto return_part;
+ } else {
+ /* error */
+ goto return_part;
+ }
+ }
+
+ ret = create_location(locURI, locName, &pLocation);
+ if (ret != DM_OK) {
+ goto return_part;
+ }
+
+ _INNER_FUNC_EXIT;
+ return pLocation;
+
+ return_part:
+ _DEBUG_VERBOSE("error : %d", ret);
+ if (pLocation != NULL) {
+ free_location(pLocation);
+ pLocation = NULL;
+ }
+
+ _INNER_FUNC_EXIT;
+ return NULL;
+}
+
+static Cred *__get_cred(WBXMLTreeNode * node)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((node) == NULL, NULL, "node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+ Cred *cred = NULL;
+
+ char *data = NULL;
+ char *type = NULL;
+ char *format = NULL;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grand_child = child->children;
+ const char *grand_child_xml_name = NULL;
+ grand_child_xml_name = (const char *)wbxml_tag_get_xml_name(grand_child->name);
+
+ if (strcmp(grand_child_xml_name, ELEMENT_TYPE) == 0) {
+ err = sync_agent_get_text_from_node(grand_child, &type);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_VERBOSE("Type = [%s]", type);
+ } else if (strcmp(grand_child_xml_name, ELEMENT_FORMAT) == 0) {
+ err = sync_agent_get_text_from_node(grand_child, &format);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_VERBOSE("Type = [%s]", format);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_DATA) == 0) {
+ err = sync_agent_get_text_from_node(child, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_VERBOSE("Data = [%s]", data);
+ }
+ }
+
+ cred = create_credwithdata(converttoauthtype(type), data);
+ if (cred == NULL) {
+ return NULL;
+ }
+
+ /*all auth type base 64 */
+ set_credformattype(cred, FORMAT_TYPE_BASE64);
+ _DEBUG_VERBOSE("base 64 format");
+
+ _INNER_FUNC_EXIT;
+ return cred;
+
+ return_part:
+ _DEBUG_VERBOSE("error");
+ free_cred(cred);
+
+ _INNER_FUNC_EXIT;
+ return NULL;
+}
+
+static Chal *__get_chal(WBXMLTreeNode * node)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((node) == NULL, NULL, "node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ Chal *chal = (Chal *) calloc(1, sizeof(Chal));
+ if (chal == NULL) {
+ _DEBUG_VERBOSE("alloc fail");
+ _INNER_FUNC_EXIT;
+ return NULL;
+ }
+ WBXMLTreeNode *chal_child = node->children;
+
+ WBXMLTreeNode *meta_child = NULL;
+ const char *meta_child_xml_name = NULL;
+ for (meta_child = chal_child->children; meta_child != NULL; meta_child = meta_child->next) {
+ meta_child_xml_name = (const char *)wbxml_tag_get_xml_name(meta_child->name);
+
+ if (strcmp(meta_child_xml_name, ELEMENT_TYPE) == 0) {
+ char *type = NULL;
+ err = sync_agent_get_text_from_node(meta_child, &type);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_VERBOSE("Type = [%s]", type);
+
+ chal->type = converttoauthtype(type);
+ } else if (strcmp(meta_child_xml_name, ELEMENT_FORMAT) == 0) {
+ char *format = NULL;
+ err = sync_agent_get_text_from_node(meta_child, &format);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_VERBOSE("Format = [%s]", format);
+
+ chal->format = converttoformattype(format);
+ } else if (strcmp(meta_child_xml_name, "NextNonce") == 0) {
+ char *nextnonce = NULL;
+ unsigned int nonce_len = 0;
+ err = sync_agent_get_binary_from_node(meta_child, &nextnonce, &nonce_len);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_VERBOSE("NextNonce =[%s] ", nextnonce);
+ if (chal->format == FORMAT_TYPE_BASE64 && chal->type == AUTH_TYPE_BASIC) {
+ chal->nonce_b64 = strdup(nextnonce);
+ } else if (chal->format == FORMAT_TYPE_BASE64 && (chal->type == AUTH_TYPE_MD5 || chal->type == AUTH_TYPE_HMAC)) {
+ chal->nonce_plain = (char *)calloc(1, nonce_len + 1);
+ if (chal->nonce_plain == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ memcpy(chal->nonce_plain, nextnonce, nonce_len);
+ chal->nonce_plain[nonce_len] = '\0';
+ }
+ chal->nonce_length = nonce_len;
+ }
+ }
+
+ _INNER_FUNC_EXIT;
+ return chal;
+
+ return_part:
+ _DEBUG_VERBOSE("error ");
+ free_chal(chal);
+ _INNER_FUNC_EXIT;
+ return NULL;
+}
+
+static sync_agent_pb_error_e _syncml_binder_header_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ /* get data from dom tree */
+ SyncHdr *pSyncHdr = (SyncHdr *) calloc(1, sizeof(SyncHdr));
+ if (pSyncHdr == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pSyncHdr is null");
+ goto return_part;
+ }
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_VERDTD) == 0) {
+ char *verdtd = NULL;
+ err = sync_agent_get_text_from_node(child, &verdtd);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_TRACE("VerDTD = [%s]", verdtd);
+
+ pSyncHdr->version = __get_oma_dm_protocol_version(verdtd);
+ } else if (strcmp(child_xml_name, ELEMENT_SESSIONID) == 0) {
+ char *sessionID = NULL;
+ err = sync_agent_get_text_from_node(child, &sessionID);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_TRACE("SessionID = [%s]", sessionID);
+
+ if (sessionID != NULL) {
+ pSyncHdr->sessionID = strdup(sessionID);
+ } else {
+ pSyncHdr->sessionID = NULL;
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_MSGID) == 0) {
+ char *msgID = NULL;
+ err = sync_agent_get_text_from_node(child, &msgID);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ _DEBUG_TRACE("MsgID = [%s]", msgID);
+ if (msgID != NULL)
+ pSyncHdr->messageID = atoi(msgID);
+ } else if (strcmp(child_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(child);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ pSyncHdr->target = pTargetLocation;
+ } else if (strcmp(child_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(child);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ pSyncHdr->source = pSourceLocation;
+ } else if (strcmp(child_xml_name, ELEMENT_RESPURI) == 0) {
+ char *resp_uri = NULL;
+ err = sync_agent_get_text_from_node(child, &resp_uri);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (resp_uri != NULL) {
+ _DEBUG_TRACE("resp_uri =[%s] ", resp_uri);
+ pSyncHdr->responseURI = strdup(resp_uri);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_CRED) == 0) {
+ Cred *pCred = NULL;
+ pCred = __get_cred(child);
+ if (pCred == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ _DEBUG_TRACE("Cred\n");
+ pSyncHdr->cred = pCred;
+ } else if (strcmp(child_xml_name, ELEMENT_META) == 0) {
+
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pSyncHdr;
+ } else {
+ _DEBUG_TRACE("error");
+ free_synchdr(pSyncHdr);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_results_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Item *item = NULL;
+
+ /* get data from dom tree */
+ Command *pResults = (Command *) calloc(1, sizeof(Command));
+ if (pResults == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pResults is null");
+ goto return_part;
+ }
+
+ pResults->type = COMMAND_TYPE_RESULTS;
+ pResults->msgID = pSyncHdr->messageID;
+ pResults->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID = [%s]", cmd_id);
+ pResults->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_MSGREF) == 0) {
+ char *msg_ref = NULL;
+ err = sync_agent_get_text_from_node(child, &msg_ref);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (msg_ref != NULL) {
+ _DEBUG_TRACE("MsgRef = [%s]", msg_ref);
+ pResults->private.results.msgRef = atoi(msg_ref);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_CMDREF) == 0) {
+ char *cmd_ref = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_ref);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_ref != NULL) {
+ _DEBUG_TRACE("MsgRef = [%s]", cmd_ref);
+ pResults->private.results.cmdRef = atoi(cmd_ref);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_META) == 0) {
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_TYPE) == 0) {
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandchild, &contentType);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ pResults->private.results.type = strdup(contentType);
+ }
+ }
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_TARGETREF) == 0) {
+ //TODO targetRef
+ } else if (strcmp(child_xml_name, ELEMENT_SOURCEREF) == 0) {
+ //TODO sourceRef
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+ /*create item in results command */
+ if (item == NULL)
+ item = create_Item();
+ if (item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ item->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ item->target = pTargetLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grandgrandchild = NULL;
+ const char *grandgrandchild_xml_name = NULL;
+
+ for (grandgrandchild = grandchild->children; grandgrandchild != NULL; grandgrandchild = grandgrandchild->next) {
+ grandgrandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandgrandchild->name);
+
+ if (strcmp(grandgrandchild_xml_name, ELEMENT_TYPE) == 0) {
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &contentType);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ item->contenttype = strdup(contentType);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_SIZE) == 0) {
+ char *size = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &size);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (size != NULL) {
+ _DEBUG_TRACE("Size = [%s]", size);
+ item->size = atoi(size);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_FORMAT) == 0) {
+ char *format = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &format);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (format != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", format);
+ item->format = strdup(format);
+ }
+ }
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_DATA) == 0) {
+ char *data = NULL;
+ err = sync_agent_get_text_from_cdata_node(grandchild, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (data != NULL) {
+ _DEBUG_TRACE("Data =[%s] ", data);
+ item->private.data = g_strdup(data);
+ item->dataType = ITEM_DATA;
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_MOREDATA) == 0) {
+ _DEBUG_TRACE(ELEMENT_MOREDATA);
+ item->moreData = 1;
+ }
+ }
+ pResults->private.results.items = g_list_append(pResults->private.results.items, item);
+ item = NULL;
+ }
+ }
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pResults;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pResults);
+ free_Item(item);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_get_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Item *item = NULL;
+
+ /* get data from dom tree */
+ Command *pGet = (Command *) calloc(1, sizeof(Command));
+ if (pGet == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pGet is null");
+ goto return_part;
+ }
+
+ pGet->type = COMMAND_TYPE_GET;
+ pGet->msgID = pSyncHdr->messageID;
+ pGet->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID = [%s]", cmd_id);
+ pGet->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_META) == 0) {
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_TYPE) == 0) {
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandchild, &contentType);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ pGet->private.access.type = strdup(contentType);
+ }
+ }
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+
+ if (item == NULL)
+ item = create_Item();
+ if (item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ item->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ item->target = pTargetLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grandgrandchild = NULL;
+ const char *grandgrandchild_xml_name = NULL;
+
+ for (grandgrandchild = grandchild->children; grandgrandchild != NULL; grandgrandchild = grandgrandchild->next) {
+ grandgrandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandgrandchild->name);
+
+ if (strcmp(grandgrandchild_xml_name, ELEMENT_TYPE) == 0) {
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &contentType);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ item->contenttype = strdup(contentType);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_SIZE) == 0) {
+ char *size = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &size);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (size != NULL) {
+ _DEBUG_TRACE("Size = [%s]", size);
+ item->size = atoi(size);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_FORMAT) == 0) {
+ char *format = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &format);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (format != NULL) {
+ _DEBUG_TRACE("Content Type =[%s] ", format);
+ item->format = strdup(format);
+ }
+ }
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_DATA) == 0) {
+ char *data = NULL;
+ err = sync_agent_get_text_from_cdata_node(grandchild, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (data != NULL) {
+ _DEBUG_TRACE("Data = [%s]", data);
+ item->private.data = strdup(data);
+ item->dataType = ITEM_DATA;
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_MOREDATA) == 0) {
+ _DEBUG_TRACE(ELEMENT_MOREDATA);
+ item->moreData = 1;
+ }
+ }
+
+ pGet->private.access.items = g_list_append(pGet->private.access.items, item);
+ item = NULL;
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pGet;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pGet);
+ free_Item(item);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_alert_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Item *item = NULL;
+
+ /* get data from dom tree */
+ Command *pAlert = (Command *) calloc(1, sizeof(Command));
+ if (pAlert == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pAlert is null");
+ goto return_part;
+ }
+
+ pAlert->type = COMMAND_TYPE_ALERT;
+ pAlert->msgID = pSyncHdr->messageID;
+ pAlert->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID = [%s]", cmd_id);
+ pAlert->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_DATA) == 0) {
+ char *data = NULL;
+ err = sync_agent_get_text_from_node(child, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (data != NULL) {
+ _DEBUG_TRACE("Data = [%s]", data);
+ pAlert->private.alert.type = atoi(data);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+ _DEBUG_TRACE("alert item");
+ if (item == NULL) {
+ item = create_Item();
+ }
+ if (item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ pAlert->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ item->target = pTargetLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grandgrandchild = NULL;
+ const char *grandgrandchild_xml_name = NULL;
+
+ for (grandgrandchild = grandchild->children; grandgrandchild != NULL; grandgrandchild = grandgrandchild->next) {
+ grandgrandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandgrandchild->name);
+
+ if (strcmp(grandgrandchild_xml_name, ELEMENT_MAXOBJSIZE) == 0) {
+ char *maxObjSize = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &maxObjSize);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (maxObjSize != NULL) {
+ _DEBUG_TRACE("MaxObjSize = [%s]", maxObjSize);
+ pAlert->private.alert.maxObjSize = atoi(maxObjSize);
+ }
+ }
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_DATA) == 0) {
+ char *data = NULL;
+ /*err = sync_agent_get_text_from_cdata_node(grandchild, &data); */
+ err = sync_agent_get_text_from_node(grandchild, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (data != NULL) {
+ _DEBUG_TRACE("item Data =[%s] ", data);
+ item->private.data = g_strdup(data);
+ item->dataType = ITEM_DATA;
+ }
+ }
+ }
+ pAlert->private.alert.items = g_list_append(pAlert->private.alert.items, item);
+ item = NULL;
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pAlert;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pAlert);
+ free_Item(item);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_add_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Item *item = NULL;
+
+ /* get data from dom tree */
+ Command *pAdd = (Command *) calloc(1, sizeof(Command));
+ if (pAdd == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pAdd is null");
+ goto return_part;
+ }
+
+ pAdd->type = COMMAND_TYPE_ADD;;
+ pAdd->msgID = pSyncHdr->messageID;
+ pAdd->private.change.type = CHANGE_ADD;
+ pAdd->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID =[%s] ", cmd_id);
+ pAdd->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+
+ if (item == NULL)
+ item = create_Item();
+ if (item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ item->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ item->target = pTargetLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grandgrandchild = NULL;
+ const char *grandgrandchild_xml_name = NULL;
+
+ for (grandgrandchild = grandchild->children; grandgrandchild != NULL; grandgrandchild = grandgrandchild->next) {
+ grandgrandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandgrandchild->name);
+
+ if (strcmp(grandgrandchild_xml_name, ELEMENT_TYPE) == 0) {
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &contentType);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ item->contenttype = strdup(contentType);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_SIZE) == 0) {
+ char *size = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &size);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (size != NULL) {
+ _DEBUG_TRACE("Size =[%s] ", size);
+ item->size = atoi(size);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_FORMAT) == 0) {
+ char *format = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &format);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (format != NULL) {
+ _DEBUG_TRACE("format =[%s] ", format);
+ item->format = strdup(format);
+ }
+ }
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_DATA) == 0) {
+ char *data = NULL;
+ err = sync_agent_get_text_from_cdata_node(grandchild, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (data != NULL) {
+ _DEBUG_TRACE("Data =[%s] ", data);
+ item->private.data = g_strdup(data);
+ item->dataType = ITEM_DATA;
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_MOREDATA) == 0) {
+ _DEBUG_TRACE(ELEMENT_MOREDATA);
+ item->moreData = 1;
+ }
+ }
+ pAdd->private.change.items = g_list_append(pAdd->private.change.items, item);
+ item = NULL;
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pAdd;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pAdd);
+ free_Item(item);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_replace_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Item *item = NULL;
+
+ /* get data from dom tree */
+ Command *pReplace = (Command *) calloc(1, sizeof(Command));
+ if (pReplace == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pReplace is null");
+ goto return_part;
+ }
+
+ pReplace->type = COMMAND_TYPE_REPLACE;;
+ pReplace->msgID = pSyncHdr->messageID;
+ pReplace->private.change.type = CHANGE_REPLACE;
+ pReplace->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id) {
+ _DEBUG_TRACE("CmdID =[%s] ", cmd_id);
+ pReplace->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+
+ if (item == NULL)
+ item = create_Item();
+ if (item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ item->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ item->target = pTargetLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grandgrandchild = NULL;
+ const char *grandgrandchild_xml_name = NULL;
+
+ for (grandgrandchild = grandchild->children; grandgrandchild != NULL; grandgrandchild = grandgrandchild->next) {
+ grandgrandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandgrandchild->name);
+ if (strcmp(grandgrandchild_xml_name, ELEMENT_TYPE) == 0) {
+
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &contentType);
+ _DEBUG_TRACE("%d\n", err);
+
+ /* if (err != SYNC_AGENT_PB_RETURN_OK || err != SYNC_AGENT_PB_RETURN_UTIL_NO_TEXT_VALUE) {
+ goto return_part;
+ } */
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ item->contenttype = strdup(contentType);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_SIZE) == 0) {
+
+ char *size = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &size);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (size != NULL) {
+ _DEBUG_TRACE("Size =[%s] ", size);
+ item->size = atoi(size);
+ }
+ } else if (strcmp(grandgrandchild_xml_name, ELEMENT_FORMAT) == 0) {
+ char *format = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &format);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (format != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", format);
+ item->format = strdup(format);
+ }
+ }
+ }
+
+ } else if (strcmp(grandchild_xml_name, ELEMENT_DATA) == 0) {
+ char *data = NULL;
+ err = sync_agent_get_text_from_cdata_node(grandchild, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (data != NULL) {
+ _DEBUG_TRACE("Data = [%s]", data);
+ item->private.data = g_strdup(data);
+ item->dataType = ITEM_DATA;
+ }
+ }
+ }
+ pReplace->private.change.items = g_list_append(pReplace->private.change.items, item);
+ item = NULL;
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pReplace;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pReplace);
+ free_Item(item);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_delete_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Item *item = NULL;
+
+ /* get data from dom tree */
+ Command *pDelete = (Command *) calloc(1, sizeof(Command));
+ if (pDelete == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pDelete is null");
+ goto return_part;
+ }
+
+ pDelete->type = COMMAND_TYPE_DELETE;
+ pDelete->msgID = pSyncHdr->messageID;
+ pDelete->private.change.type = CHANGE_DELETE;
+ pDelete->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID = [%s]", cmd_id);
+ pDelete->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+ /* create Item */
+ if (item == NULL)
+ item = create_Item();
+ if (item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ item->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ item->target = pTargetLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grandgrandchild = NULL;
+ const char *grandgrandchild_xml_name = NULL;
+
+ for (grandgrandchild = grandchild->children; grandgrandchild != NULL; grandgrandchild = grandgrandchild->next) {
+ grandgrandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandgrandchild->name);
+
+ if (strcmp(grandgrandchild_xml_name, ELEMENT_TYPE) == 0) {
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &contentType);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ item->contenttype = strdup(contentType);
+ }
+ }
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_DATA) == 0) {
+
+ }
+ }
+ pDelete->private.change.items = g_list_append(pDelete->private.change.items, item);
+ item = NULL;
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pDelete;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pDelete);
+ free_Item(item);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_exec_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+
+ /* get data from dom tree */
+ Command *pExec = (Command *) calloc(1, sizeof(Command));
+ if (pExec == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pExec is null");
+ goto return_part;
+ }
+
+ pExec->type = COMMAND_TYPE_EXEC;
+ pExec->msgID = pSyncHdr->messageID;
+ pExec->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID =[%s] ", cmd_id);
+ pExec->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_CORRELATOR) == 0) {
+ char *pCorrelator = NULL;
+ err = sync_agent_get_text_from_node(child, &pCorrelator);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (pCorrelator != NULL) {
+ _DEBUG_TRACE("pCorrelator = [%s]", pCorrelator);
+ pExec->private.exec.correlator = strdup(pCorrelator);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+ /* create Item */
+ pExec->private.exec.item = create_Item();
+ if (pExec->private.exec.item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ pExec->private.exec.item->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ pExec->private.exec.item->target = pTargetLocation;
+ }
+ }
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pExec;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pExec);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_sequence_start_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+
+ /* get data from dom tree */
+ Command *pSequence = (Command *) calloc(1, sizeof(Command));
+
+ if (pSequence == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pSequence is null");
+ goto return_part;
+ }
+
+ pSequence->type = COMMAND_TYPE_SEQUENCE;
+ pSequence->msgID = pSyncHdr->messageID;
+ pSequence->refCount = 1;
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pSequence;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pSequence);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+}
+
+static sync_agent_pb_error_e _syncml_binder_sequence_end_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+
+ _INNER_FUNC_ENTER;
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ } else {
+ _DEBUG_TRACE("error");
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+
+}
+
+static sync_agent_pb_error_e _syncml_binder_atomic_start_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Command *pAtomic = (Command *) calloc(1, sizeof(Command));
+
+ if (pAtomic == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pExec is null");
+ goto return_part;
+ }
+
+ pAtomic->type = COMMAND_TYPE_ATOMIC;
+ pAtomic->msgID = pSyncHdr->messageID;
+ pAtomic->refCount = 1;
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pAtomic;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pAtomic);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_atomic_end_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+
+ _INNER_FUNC_ENTER;
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ } else {
+ _DEBUG_TRACE("error");
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_final_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ int *pFinal = (int *)1;
+ *pContent = pFinal;
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_status_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ /* get data from dom tree */
+ Status *pStatus = (Status *) calloc(1, sizeof(Status));
+ if (pStatus == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pStatus is null");
+ goto return_part;
+ }
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID =[%s] ", cmd_id);
+ pStatus->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_MSGREF) == 0) {
+ char *msgref = NULL;
+ err = sync_agent_get_text_from_node(child, &msgref);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (msgref != NULL) {
+ _DEBUG_TRACE("MsgRef = [%s]", msgref);
+ pStatus->msgRef = atoi(msgref);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_CMDREF) == 0) {
+ char *cmdref = NULL;
+ err = sync_agent_get_text_from_node(child, &cmdref);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmdref != NULL) {
+ _DEBUG_TRACE("CmdRef = [%s]", cmdref);
+ pStatus->cmdRef = atoi(cmdref);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_CMD) == 0) {
+ char *cmd = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd != NULL) {
+ _DEBUG_TRACE("Cmd =[%s] ", cmd);
+ pStatus->type = converttocommandtype(cmd);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_TARGETREF) == 0) {
+ char *targetref = NULL;
+ Location *pLocation = NULL;
+ err = sync_agent_get_text_from_node(child, &targetref);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (targetref != NULL) {
+ DM_ERROR ret = DM_OK;
+ _DEBUG_TRACE("TargetRef = [%s]", targetref);
+ ret = create_location(targetref, NULL, &pLocation);
+ if(ret != DM_OK) {
+ _DEBUG_VERBOSE("create_location failed");
+ goto return_part;
+ }
+ pStatus->targetRef = pLocation;
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_SOURCEREF) == 0) {
+ char *sourceref = NULL;
+ Location *pLocation = NULL;
+ err = sync_agent_get_text_from_node(child, &sourceref);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (sourceref != NULL) {
+ DM_ERROR ret = DM_OK;
+ _DEBUG_TRACE("SourceRef = [%s]", sourceref);
+ ret = create_location(sourceref, NULL, &pLocation);
+ if(ret != DM_OK) {
+ _DEBUG_VERBOSE("create_location failed");
+ goto return_part;
+ }
+ pStatus->sourceRef = pLocation;
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_CRED) == 0) {
+ _DEBUG_TRACE(ELEMENT_CRED);
+ pStatus->cred = __get_cred(child);
+ } else if (strcmp(child_xml_name, ELEMENT_CHAL) == 0) {
+ _DEBUG_TRACE("Chal\n");
+ pStatus->chal = __get_chal(child);
+ } else if (strcmp(child_xml_name, ELEMENT_DATA) == 0) {
+ char *data = NULL;
+ err = sync_agent_get_text_from_node(child, &data);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (data != NULL) {
+ _DEBUG_TRACE("Data = [%s]\n", data);
+ pStatus->data = strdup(data);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+ /* TODO : item */
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pStatus;
+ } else {
+ _DEBUG_TRACE("error");
+ free_status(pStatus);
+ }
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+static sync_agent_pb_error_e _syncml_binder_copy_command_reverse_converter_function(sync_agent_pb_protocol_binder_reverse_info_s * pReverse_binder, WBXMLTreeNode * wbxml_dom_node, Content_Ptr * pContent)
+{
+ _INNER_FUNC_ENTER;
+
+ retvm_if((pReverse_binder) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "pReverse_binder is NULL!!");
+ retvm_if((wbxml_dom_node) == NULL, SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY, "wbxml_dom_node is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ void *user_data = sync_agent_get_user_data_from_reverse_protocol_binder(pReverse_binder);
+ SyncHdr *pSyncHdr = (SyncHdr *) user_data;
+ Item *item = NULL;
+ /* get data from dom tree */
+ Command *pCopy = (Command *) calloc(1, sizeof(Command));
+ if (pCopy == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ _DEBUG_TRACE("pCopy is null");
+ goto return_part;
+ }
+
+ pCopy->type = COMMAND_TYPE_COPY;
+ pCopy->msgID = pSyncHdr->messageID;
+ pCopy->private.change.type = CHANGE_COPY;
+ pCopy->refCount = 1;
+
+ WBXMLTreeNode *child = NULL;
+ const char *child_xml_name = NULL;
+ for (child = wbxml_dom_node->children; child != NULL; child = child->next) {
+ child_xml_name = (const char *)wbxml_tag_get_xml_name(child->name);
+
+ if (strcmp(child_xml_name, ELEMENT_CMDID) == 0) {
+ char *cmd_id = NULL;
+ err = sync_agent_get_text_from_node(child, &cmd_id);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (cmd_id != NULL) {
+ _DEBUG_TRACE("CmdID = [%s]", cmd_id);
+ pCopy->cmdID = atoi(cmd_id);
+ }
+ } else if (strcmp(child_xml_name, ELEMENT_ITEM) == 0) {
+ /* create Item */
+
+ if (item == NULL)
+ item = create_Item();
+ if (item == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+
+ WBXMLTreeNode *grandchild = NULL;
+ const char *grandchild_xml_name = NULL;
+ for (grandchild = child->children; grandchild != NULL; grandchild = grandchild->next) {
+ grandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandchild->name);
+
+ if (strcmp(grandchild_xml_name, ELEMENT_SOURCE) == 0) {
+ Location *pSourceLocation = __get_location(grandchild);
+ if (pSourceLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pSourceLocation != NULL)
+ item->source = pSourceLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_TARGET) == 0) {
+ Location *pTargetLocation = __get_location(grandchild);
+ if (pTargetLocation == NULL) {
+ err = SYNC_AGENT_PB_RETURN_OUT_OF_MEMORY;
+ goto return_part;
+ }
+ if (pTargetLocation != NULL)
+ item->target = pTargetLocation;
+ } else if (strcmp(grandchild_xml_name, ELEMENT_META) == 0) {
+ WBXMLTreeNode *grandgrandchild = NULL;
+ const char *grandgrandchild_xml_name = NULL;
+
+ for (grandgrandchild = grandchild->children; grandgrandchild != NULL; grandgrandchild = grandgrandchild->next) {
+ grandgrandchild_xml_name = (const char *)wbxml_tag_get_xml_name(grandgrandchild->name);
+
+ if (strcmp(grandgrandchild_xml_name, ELEMENT_TYPE) == 0) {
+ char *contentType = NULL;
+ err = sync_agent_get_text_from_node(grandgrandchild, &contentType);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+ if (contentType != NULL) {
+ _DEBUG_TRACE("Content Type = [%s]", contentType);
+ item->contenttype = strdup(contentType);
+ }
+ }
+ }
+ } else if (strcmp(grandchild_xml_name, ELEMENT_DATA) == 0) {
+
+ }
+ }
+ pCopy->private.change.items = g_list_append(pCopy->private.change.items, item);
+ item = NULL;
+ }
+ }
+
+ return_part:
+ if (err == SYNC_AGENT_PB_RETURN_OK) {
+ _DEBUG_TRACE("end");
+ *pContent = pCopy;
+ } else {
+ _DEBUG_TRACE("error");
+ free_command(pCopy);
+ free_Item(item);
+ }
+
+ _INNER_FUNC_EXIT;
+ return err;
+}
+
+sync_agent_pb_error_e init_syncml_binder_function_set(sync_agent_pb_protocol_binder_function_set_s ** pBinder_function_set)
+{
+ _EXTERN_FUNC_ENTER;
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ err = sync_agent_init_binder_function_set(sizeof(oma_dm_binder_function_info) / sizeof(sync_agent_pb_function_info_s), (sync_agent_pb_function_info_s *) oma_dm_binder_function_info, pBinder_function_set);
+
+ _EXTERN_FUNC_EXIT;
+ return err;
+}
+
+void free_syncml_binder_function_set(sync_agent_pb_protocol_binder_function_set_s * pBinder_function_set)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retm_if((pBinder_function_set) == NULL, "pBinder_function_set is NULL!!");
+
+ sync_agent_free_binder_function_set(pBinder_function_set);
+
+ _EXTERN_FUNC_EXIT;
+}
+
+sync_agent_pb_protocol_binder_info_s *syncml_binder_init(sync_agent_pb_protocol_binder_info_s * pBinder, sync_agent_pb_encoding_e enc, bool use_strtbl, bool use_flow_mode, sync_agent_pb_protocol_binder_function_set_s * pBinder_function_set)
+{
+ _EXTERN_FUNC_ENTER;
+
+ sync_agent_pb_protocol_binder_info_s *pOutBinder = NULL;
+
+ pOutBinder = sync_agent_init_protocol_binder(pBinder, SYNC_AGENT_PB_PROTOCOL_SYNCML_SYNCML12, NULL, enc, 1, use_strtbl, false, use_flow_mode, false, NULL, NULL, pBinder_function_set);
+
+ if (pOutBinder == NULL) {
+ goto return_part;
+ }
+ //protocol_binder_set_estimate_doc_size(pOutBinder, SYNC_AGENT_INIT_ESTIMATE_DOC_SIZE);
+
+ return_part:
+ _EXTERN_FUNC_EXIT;
+ return pOutBinder;
+}
+
+sync_agent_pb_error_e syncml_binder_append(sync_agent_pb_protocol_binder_info_s * pBinder, OMA_DM_Protocol_Element protocol_element, Content_Ptr pContent)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR, "pBinder is NULL!!");
+
+ _DEBUG_TRACE(" protocol_element = %d, pContent = %p\n", protocol_element, pContent);
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ err = sync_agent_append_element(pBinder, protocol_element, pContent);
+
+ _EXTERN_FUNC_EXIT;
+ return err;
+}
+
+void syncml_binder_terminate(sync_agent_pb_protocol_binder_info_s * pBinder)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retm_if((pBinder) == NULL, "pBinder is NULL!!");
+
+ sync_agent_destroy_protocol_binder(pBinder);
+
+ _EXTERN_FUNC_EXIT;
+}
+
+sync_agent_pb_error_e syncml_binder_get_stream(sync_agent_pb_protocol_binder_info_s * pBinder, char **byte_stream, unsigned int *byte_stream_size)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ err = sync_agent_get_stream_from_protocol_binder(pBinder, byte_stream, byte_stream_size);
+ if (err != SYNC_AGENT_PB_RETURN_OK) {
+ goto return_part;
+ }
+
+ return_part:
+ _EXTERN_FUNC_EXIT;
+ return err;
+}
+
+sync_agent_pb_error_e syncml_binder_get_stream_size(sync_agent_pb_protocol_binder_info_s * pBinder, unsigned int *byte_stream_size)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ err = sync_agent_get_stream_size_from_protocol_binder(pBinder, byte_stream_size);
+
+ _EXTERN_FUNC_EXIT;
+ return err;
+}
+
+sync_agent_pb_error_e syncml_binder_get_encoding(sync_agent_pb_protocol_binder_info_s * pBinder, sync_agent_pb_encoding_e * enc)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = SYNC_AGENT_PB_RETURN_OK;
+
+ err = sync_agent_get_encoding_from_protocol_binder(pBinder, enc);
+
+ _EXTERN_FUNC_EXIT;
+ return err;
+}
+
+sync_agent_pb_error_e reverse_syncml_binder_init(char *byte_stream,
+ unsigned int byte_stream_len, sync_agent_pb_decoding_e dec, sync_agent_pb_protocol_binder_function_set_s * pBinder_function_set, void *user_data, sync_agent_pb_protocol_binder_reverse_info_s ** ppBinder)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retvm_if((byte_stream) == NULL, SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR, "byte_stream is NULL!!");
+ retvm_if((pBinder_function_set) == NULL, SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR, "pBinder_function_set is NULL!!");
+
+ sync_agent_pb_protocol_e protocol = SYNC_AGENT_PB_PROTOCOL_UNKNOWN;
+ sync_agent_pb_error_e err = sync_agent_init_reverse_protocol_binder(byte_stream, byte_stream_len, dec,
+ &protocol, pBinder_function_set, user_data, ppBinder);
+
+ _EXTERN_FUNC_EXIT;
+ return err;
+}
+
+sync_agent_pb_error_e reverse_syncml_binder_next(sync_agent_pb_protocol_binder_reverse_info_s * pBinder, OMA_DM_Protocol_Element * protocol_element, char **protocol_element_name, Content_Ptr * pContent)
+{
+ _EXTERN_FUNC_ENTER;
+
+ retvm_if((pBinder) == NULL, SYNC_AGENT_PB_RETURN_UNKNOWN_ERROR, "pBinder is NULL!!");
+
+ sync_agent_pb_error_e err = sync_agent_next_element(pBinder, protocol_element, protocol_element_name, pContent);
+
+ _EXTERN_FUNC_EXIT;
+
+ return err;
+}