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; }
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); } }