void dmtree_node_free(dmtree_node_t *node) { if (node == NULL) return; dmtree_node_clean(node, true); free(node); }
static void prv_get_tree_to_list(internals_t * internP, const char * uri, SmlItemListPtr_t * listP) { int code = OMADM_SYNCML_ERROR_COMMAND_FAILED; dmtree_node_t node; memset(&node, 0, sizeof(dmtree_node_t)); node.uri = strdup(uri); if (NULL == node.uri) { return; } if (OMADM_SYNCML_ERROR_NONE == dmtree_get(internP->dmtreeH, &node)) { SmlItemPtr_t itemP; itemP = smlAllocItem(); if (itemP) { code = prv_fill_item(itemP, node); if (OMADM_SYNCML_ERROR_SUCCESS == code) { code = prv_add_item_to_list(itemP, listP); } if (OMADM_SYNCML_ERROR_SUCCESS != code) { smlFreeItemPtr(itemP); } } if (!strcmp(node.format, "node") && 0 != node.data_size) { char ** childList; int i = 0; childList = strArray_buildChildList(uri, node.data_buffer, node.data_size); if (NULL != childList) { while (NULL != childList[i]) { prv_get_tree_to_list(internP, childList[i], listP); i++; } } strArray_free(childList); } } dmtree_node_clean(&node, true); }
static int prv_get(internals_t * internP, const char * uri, SmlItemPtr_t resultP) { int code = OMADM_SYNCML_ERROR_COMMAND_FAILED; dmtree_node_t node; memset(&node, 0, sizeof(dmtree_node_t)); node.uri = strdup(uri); if (node.uri) { code = dmtree_get(internP->dmtreeH, &node); if (OMADM_SYNCML_ERROR_NONE == code) { code = prv_fill_item(resultP, node); } dmtree_node_clean(&node, true); } return code; }
int replace_node(internals_t * internP, SmlItemPtr_t itemP) { int code; dmtree_node_t node; memset(&node, 0, sizeof(dmtree_node_t)); node.uri = smlPcdata2String(itemP->target->locURI); extract_from_meta(itemP->meta, &(node.format), &(node.type)); node.data_size = itemP->data->length; if (node.data_size) { node.data_buffer = itemP->data->content; } code = dmtree_replace(internP->dmtreeH, &node); PRV_CONVERT_CODE(code); dmtree_node_clean(&node, false); return code; }
int get_server_account(mo_mgr_t * iMgr, char * serverID, accountDesc_t ** accountP) { DMC_ERR_MANAGE; char * accMoUri = NULL; char * accountUri = NULL; char * uri = NULL; char * subUri = NULL; dmtree_node_t node; int code; memset(&node, 0, sizeof(dmtree_node_t)); DMC_FAIL(momgr_find_subtree(iMgr, NULL, DMACC_MO_URN, "ServerID", serverID, &accountUri)); DMC_FAIL_NULL(*accountP, malloc(sizeof(accountDesc_t)), OMADM_SYNCML_ERROR_DEVICE_FULL); memset(*accountP, 0, sizeof(accountDesc_t)); (*accountP)->dmtree_uri = accountUri; accountUri = NULL; DMC_FAIL_NULL(node.uri, strdup("./DevInfo/DevId"), OMADM_SYNCML_ERROR_DEVICE_FULL); DMC_FAIL(momgr_get_value(iMgr, &node)); (*accountP)->id = dmtree_node_as_string(&node); dmtree_node_clean(&node, true); // TODO handle IPv4 and IPv6 cases DMC_FAIL_NULL(uri, str_cat_2((*accountP)->dmtree_uri, "/AppAddr"), OMADM_SYNCML_ERROR_DEVICE_FULL); DMC_FAIL(momgr_find_subtree(iMgr, uri, NULL, "AddrType", "URI", &subUri)); free(uri); uri = NULL; DMC_FAIL_NULL(node.uri, str_cat_2(subUri, "/Addr"), OMADM_SYNCML_ERROR_DEVICE_FULL); DMC_FAIL(momgr_get_value(iMgr, &node)); (*accountP)->server_uri = dmtree_node_as_string(&node); dmtree_node_clean(&node, true); free(subUri); subUri = NULL; // TODO handle OBEX and HTTP authentification levels DMC_FAIL_NULL(uri, str_cat_2((*accountP)->dmtree_uri, "/AppAuth"), OMADM_SYNCML_ERROR_DEVICE_FULL); code = momgr_find_subtree(iMgr, uri, NULL, "AAuthLevel", "CLCRED", &subUri); switch (code) { case OMADM_SYNCML_ERROR_NONE: DMC_FAIL_NULL((*accountP)->toServerCred, malloc(sizeof(authDesc_t)), OMADM_SYNCML_ERROR_DEVICE_FULL); DMC_FAIL(prv_fill_credentials(iMgr, subUri, (*accountP)->toServerCred)); break; case OMADM_SYNCML_ERROR_NOT_FOUND: break; default: DMC_FAIL(code); } free(subUri); subUri = NULL; code = momgr_find_subtree(iMgr, uri, NULL, "AAuthLevel", "SRVCRED", &subUri); switch (code) { case OMADM_SYNCML_ERROR_NONE: DMC_FAIL_NULL((*accountP)->toClientCred, malloc(sizeof(authDesc_t)), OMADM_SYNCML_ERROR_DEVICE_FULL); DMC_FAIL(prv_fill_credentials(iMgr, subUri, (*accountP)->toClientCred)); break; case OMADM_SYNCML_ERROR_NOT_FOUND: break; default: DMC_FAIL(code); } free(subUri); subUri = NULL; DMC_ON_ERR: if (accMoUri) free(accMoUri); if (accountUri) free(accountUri); if (uri) free(uri); if (subUri) free(subUri); dmtree_node_clean(&node, true); return DMC_ERR; }
static int prv_fill_credentials(mo_mgr_t * iMgr, char * uri, authDesc_t * authP) { dmtree_node_t node; int code; memset(&node, 0, sizeof(dmtree_node_t)); node.uri = str_cat_2(uri, "/AAuthType"); if (!node.uri) return OMADM_SYNCML_ERROR_DEVICE_FULL; code = momgr_get_value(iMgr, &node); if (OMADM_SYNCML_ERROR_NONE == code) { authP->type = auth_value_as_type(node.data_buffer, node.data_size); } else if (OMADM_SYNCML_ERROR_NOT_FOUND != code) { dmtree_node_clean(&node, true); return code; } dmtree_node_clean(&node, true); node.uri = str_cat_2(uri, "/AAuthName"); if (!node.uri) return OMADM_SYNCML_ERROR_DEVICE_FULL; code = momgr_get_value(iMgr, &node); if (OMADM_SYNCML_ERROR_NONE == code) { authP->name = dmtree_node_as_string(&node); } else if (OMADM_SYNCML_ERROR_NOT_FOUND != code) { return code; } dmtree_node_clean(&node, true); node.uri = str_cat_2(uri, "/AAuthSecret"); if (!node.uri) return OMADM_SYNCML_ERROR_DEVICE_FULL; code = momgr_get_value(iMgr, &node); if (OMADM_SYNCML_ERROR_NONE == code) { authP->secret = dmtree_node_as_string(&node); } else if (OMADM_SYNCML_ERROR_NOT_FOUND != code) { return code; } dmtree_node_clean(&node, true); node.uri = str_cat_2(uri, "/AAuthData"); if (!node.uri) return OMADM_SYNCML_ERROR_DEVICE_FULL; code = momgr_get_value(iMgr, &node); if (OMADM_SYNCML_ERROR_NONE == code) { authP->data.buffer = (uint8_t *)node.data_buffer; authP->data.len = node.data_size; } else if (OMADM_SYNCML_ERROR_NOT_FOUND != code) { dmtree_node_clean(&node, true); return code; } dmtree_node_clean(&node, false); if (NULL == authP->name) { authP->name = strdup(""); if (NULL == authP->name) return OMADM_SYNCML_ERROR_DEVICE_FULL; } if (NULL == authP->secret) { authP->secret = strdup(""); if (NULL == authP->secret) return OMADM_SYNCML_ERROR_DEVICE_FULL; } return code; }