void free_test_object(lwm2m_object_t * object) { LWM2M_LIST_FREE(object->instanceList); if (object->userData != NULL) { lwm2m_free(object->userData); object->userData = NULL; } lwm2m_free(object); }
static uint8_t prv_delete(uint16_t id, lwm2m_object_t * objectP) { acc_ctrl_oi_t* targetP; objectP->instanceList = lwm2m_list_remove(objectP->instanceList, id, (lwm2m_list_t**)&targetP); if (NULL == targetP) return COAP_404_NOT_FOUND; LWM2M_LIST_FREE(targetP->accCtrlValList); lwm2m_free(targetP); return COAP_202_DELETED; }
void acl_ctrl_free_object(lwm2m_object_t * objectP) { acc_ctrl_oi_t *accCtrlOiT; acc_ctrl_oi_t *accCtrlOiP = (acc_ctrl_oi_t*)objectP->instanceList; while (accCtrlOiP != NULL) { // first free acl (multiple resource!): LWM2M_LIST_FREE(accCtrlOiP->accCtrlValList); accCtrlOiT = accCtrlOiP; accCtrlOiP = accCtrlOiP->next; lwm2m_free(accCtrlOiT); } lwm2m_free(objectP); }
static void prv_deleteObservedList(lwm2m_context_t * contextP) { while (NULL != contextP->observedList) { lwm2m_observed_t * targetP; lwm2m_watcher_t * watcherP; targetP = contextP->observedList; contextP->observedList = contextP->observedList->next; for (watcherP = targetP->watcherList ; watcherP != NULL ; watcherP = watcherP->next) { if (watcherP->parameters != NULL) lwm2m_free(watcherP->parameters); } LWM2M_LIST_FREE(targetP->watcherList); lwm2m_free(targetP); } }
void observe_clear(lwm2m_context_t * contextP, lwm2m_uri_t * uriP) { lwm2m_observed_t * observedP; LOG_URI(uriP); observedP = contextP->observedList; while(observedP != NULL) { if (observedP->uri.objectId == uriP->objectId && (LWM2M_URI_IS_SET_INSTANCE(uriP) == false || observedP->uri.instanceId == uriP->instanceId)) { lwm2m_observed_t * nextP; lwm2m_watcher_t * watcherP; nextP = observedP->next; for (watcherP = observedP->watcherList; watcherP != NULL; watcherP = watcherP->next) { if (watcherP->parameters != NULL) lwm2m_free(watcherP->parameters); } LWM2M_LIST_FREE(observedP->watcherList); prv_unlinkObserved(contextP, observedP); lwm2m_free(observedP); observedP = nextP; } else { observedP = observedP->next; } } }
static uint8_t prv_write_resources(uint16_t instanceId, int numData, lwm2m_data_t* tlvArray, lwm2m_object_t* objectP, bool doCreate) { int i; uint8_t result = COAP_NO_ERROR; int64_t value; lwm2m_data_t* subTlvArray; int ri; acc_ctrl_oi_t* accCtrlOiP = (acc_ctrl_oi_t *) lwm2m_list_find(objectP->instanceList, instanceId); if (NULL == accCtrlOiP) return COAP_404_NOT_FOUND ; i = 0; do { switch (tlvArray[i].id) { case RES_M_OBJECT_ID: if (doCreate==false) { result = COAP_405_METHOD_NOT_ALLOWED; } else { if (1 != lwm2m_data_decode_int(&tlvArray[i], &value)) { result = COAP_400_BAD_REQUEST; } else if (value < 1 || value > 65534) { result = COAP_406_NOT_ACCEPTABLE; } else { accCtrlOiP->objectId = value; result = COAP_204_CHANGED; } } break; case RES_M_OBJECT_INSTANCE_ID: if (doCreate==false) { result = COAP_405_METHOD_NOT_ALLOWED; } else { if (1 != lwm2m_data_decode_int(&tlvArray[i], &value)) { result = COAP_400_BAD_REQUEST; } else if (value < 0 || value > MAX_DATA_VAL) { result = COAP_406_NOT_ACCEPTABLE; } else { accCtrlOiP->objectInstId = value; result = COAP_204_CHANGED; } } break; case RES_O_ACL: { if (tlvArray[i].type!= LWM2M_TYPE_MULTIPLE_RESOURCE) { result = COAP_400_BAD_REQUEST; } else { // MR-Write: Replace-implementation variant only // see LWM2M-TS:5.4.3 (wakaama has no part-update switch) // 1st: save accValueList! acc_ctrl_ri_t* acValListSave = accCtrlOiP->accCtrlValList; accCtrlOiP->accCtrlValList = NULL; subTlvArray = tlvArray[i].value.asChildren.array; if (tlvArray[i].value.asChildren.count == 0) { result = COAP_204_CHANGED; } else if (subTlvArray==NULL) { result = COAP_400_BAD_REQUEST; } else { for (ri=0; ri < tlvArray[i].value.asChildren.count; ri++) { if (1 != lwm2m_data_decode_int(&subTlvArray[ri], &value)) { result = COAP_400_BAD_REQUEST; break; } else if (value < 0 || value > 0xFFFF) { result = COAP_406_NOT_ACCEPTABLE; break; } else if (!prv_add_ac_val(accCtrlOiP, subTlvArray[ri].id, (uint16_t)value)) { result = COAP_500_INTERNAL_SERVER_ERROR; break; } else { result = COAP_204_CHANGED; } } } if (result != COAP_204_CHANGED) { // free pot. partial created new ones LWM2M_LIST_FREE(accCtrlOiP->accCtrlValList); // restore old values: accCtrlOiP->accCtrlValList = acValListSave; } else { // final free saved value list LWM2M_LIST_FREE(acValListSave); } } } break; case RES_M_ACCESS_CONTROL_OWNER: { if (1 == lwm2m_data_decode_int(tlvArray + i, &value)) { if (value >= 0 && value <= MAX_DATA_VAL) { accCtrlOiP->accCtrlOwner = value; result = COAP_204_CHANGED; } else { result = COAP_406_NOT_ACCEPTABLE; } } else { result = COAP_400_BAD_REQUEST; } } break; default: return COAP_404_NOT_FOUND ; } i++; } while (i < numData && result == COAP_204_CHANGED ); return result; }
void delete_bootstrap_server_list(lwm2m_context_t * contextP) { LWM2M_LIST_FREE(contextP->bootstrapServerList); contextP->bootstrapServerList = NULL; }