예제 #1
0
OCStackResult AddObserver (const char         *resUri,
                           const char         *query,
                           OCObservationId    obsId,
                           OCCoAPToken        *token,
                           OCDevAddr          *addr,
                           OCResource         *resHandle,
                           OCQualityOfService qos)
{
    ResourceObserver *obsNode = NULL;

    obsNode = (ResourceObserver *) OCCalloc(1, sizeof(ResourceObserver));
    if (obsNode)
    {
        obsNode->observeId = obsId;

        obsNode->resUri = (unsigned char *)OCMalloc(strlen(resUri)+1);
        VERIFY_NON_NULL (obsNode->resUri);
        memcpy (obsNode->resUri, resUri, strlen(resUri)+1);

        obsNode->qos = qos;
        if(query)
        {
            obsNode->query = (unsigned char *)OCMalloc(strlen(query)+1);
            VERIFY_NON_NULL (obsNode->query);
            memcpy (obsNode->query, query, strlen(query)+1);
        }

        obsNode->token.tokenLength = token->tokenLength;
        memcpy (obsNode->token.token, token->token, token->tokenLength);

        obsNode->addr = (OCDevAddr *)OCMalloc(sizeof(OCDevAddr));
        VERIFY_NON_NULL (obsNode->addr);
        memcpy (obsNode->addr, addr, sizeof(OCDevAddr));

        obsNode->resource = resHandle;

        LL_APPEND (serverObsList, obsNode);
        return OC_STACK_OK;
    }

exit:
    if (obsNode)
    {
        OCFree(obsNode->resUri);
        OCFree(obsNode->query);
        OCFree(obsNode->addr);
        OCFree(obsNode);
    }
    return OC_STACK_NO_MEMORY;
}
예제 #2
0
void GetDtlsPskCredentials(CADtlsPskCredsBlob_t **credInfo)
{
    // CA layer interface publishes security data structures ONLY if
    // stack is compiled in SECURED mode
    CADtlsPskCredsBlob_t * caBlob = NULL;
    if(secConfigData && credInfo)
    {
        unsigned int i = 0;
        OCSecBlob * osb = (OCSecBlob*)secConfigData->blob;
        for ( ;(i<secConfigData->numBlob) && osb; i++)
        {
            if (osb->type == OC_BLOB_TYPE_PSK)
            {
                caBlob = (CADtlsPskCredsBlob_t *)OCCalloc(sizeof(CADtlsPskCredsBlob_t), 1);
                if (caBlob)
                {
                    OCDtlsPskCredsBlob * ocBlob = (OCDtlsPskCredsBlob *)osb->val;

                    memcpy(caBlob->identity, ocBlob->identity, sizeof(caBlob->identity));
                    caBlob->num = ocBlob->num;
                    caBlob->creds =
                        (OCDtlsPskCreds*) OCMalloc(caBlob->num * sizeof(OCDtlsPskCreds));
                    if (caBlob->creds)
                    {
                        memcpy(caBlob->creds, ocBlob->creds,
                                caBlob->num * sizeof(OCDtlsPskCreds));
                        *credInfo = caBlob;
                        // We copied the credential blob in the CA data structure.
                        // Let's get out of here.
                        return;
                    }
                }
                break;
            }
            osb = config_data_next_blob(osb);
        }
    }

    // Clear memory if any memory allocation failed above
    if(caBlob)
    {
        OCFree(caBlob->creds);
        OCFree(caBlob);
    }
}