Exemplo n.º 1
0
void dmtree_node_free(dmtree_node_t *node)
{
    if (node == NULL)
        return;

    dmtree_node_clean(node, true);

    free(node);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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;
}