static uint8_t prv_security_read(uint16_t instanceId, int * numDataP, lwm2m_tlv_t ** dataArrayP, lwm2m_object_t * objectP) { security_instance_t * targetP; uint8_t result; int i; targetP = (security_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId); if (NULL == targetP) return COAP_404_NOT_FOUND; // is the server asking for the full instance ? if (*numDataP == 0) { uint16_t resList[] = {LWM2M_SECURITY_URI_ID, LWM2M_SECURITY_BOOTSTRAP_ID, LWM2M_SECURITY_SECURITY_ID, LWM2M_SECURITY_PUBLIC_KEY_ID, LWM2M_SECURITY_SERVER_PUBLIC_KEY_ID, LWM2M_SECURITY_SECRET_KEY_ID, LWM2M_SECURITY_SMS_SECURITY_ID, LWM2M_SECURITY_SMS_KEY_PARAM_ID, LWM2M_SECURITY_SMS_SECRET_KEY_ID, LWM2M_SECURITY_SMS_SERVER_NUMBER_ID, LWM2M_SECURITY_SHORT_SERVER_ID, LWM2M_SECURITY_HOLD_OFF_ID}; int nbRes = sizeof(resList)/sizeof(uint16_t); *dataArrayP = lwm2m_tlv_new(nbRes); if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR; *numDataP = nbRes; for (i = 0 ; i < nbRes ; i++) { (*dataArrayP)[i].id = resList[i]; } } i = 0; do { result = prv_get_value((*dataArrayP) + i, targetP); i++; } while (i < *numDataP && result == COAP_205_CONTENT); return result; }
static uint8_t prv_server_read(uint16_t instanceId, int * numDataP, lwm2m_data_t ** dataArrayP, lwm2m_object_t * objectP) { server_instance_t * targetP; uint8_t result; int i; targetP = (server_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId); if (NULL == targetP) return COAP_404_NOT_FOUND; // is the server asking for the full instance ? if (*numDataP == 0) { uint16_t resList[] = { LWM2M_SERVER_SHORT_ID_ID, LWM2M_SERVER_LIFETIME_ID, LWM2M_SERVER_STORING_ID, LWM2M_SERVER_BINDING_ID }; int nbRes = sizeof(resList)/sizeof(uint16_t); *dataArrayP = lwm2m_data_new(nbRes); if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR; *numDataP = nbRes; for (i = 0 ; i < nbRes ; i++) { (*dataArrayP)[i].id = resList[i]; } } i = 0; do { result = prv_get_value((*dataArrayP) + i, targetP); i++; } while (i < *numDataP && result == COAP_205_CONTENT); return result; }
static uint8_t prv_server_read(uint16_t instanceId, int * numDataP, lwm2m_data_t ** dataArrayP, lwm2m_object_t * objectP) { server_instance_t * targetP; uint8_t result; int i; targetP = (server_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId); if (NULL == targetP) return COAP_404_NOT_FOUND; // is the server asking for the full instance ? if (*numDataP == 0) { uint16_t resList[] = { LWM2M_SERVER_SHORT_ID_ID, LWM2M_SERVER_LIFETIME_ID, LWM2M_SERVER_MIN_PERIOD_ID, LWM2M_SERVER_MAX_PERIOD_ID, LWM2M_SERVER_TIMEOUT_ID, LWM2M_SERVER_STORING_ID, LWM2M_SERVER_BINDING_ID, #ifndef LWM2M_VERSION_1_0 LWM2M_SERVER_REG_ORDER_ID, LWM2M_SERVER_INITIAL_REG_DELAY_ID, LWM2M_SERVER_REG_FAIL_BLOCK_ID, LWM2M_SERVER_REG_FAIL_BOOTSTRAP_ID, LWM2M_SERVER_COMM_RETRY_COUNT_ID, LWM2M_SERVER_COMM_RETRY_TIMER_ID, LWM2M_SERVER_SEQ_DELAY_TIMER_ID, LWM2M_SERVER_SEQ_RETRY_COUNT_ID, #endif }; int nbRes = sizeof(resList)/sizeof(uint16_t); #ifndef LWM2M_VERSION_1_0 /* Remove optional resources that don't exist */ if(targetP->registrationPriorityOrder < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_REG_ORDER_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } if(targetP->initialRegistrationDelayTimer < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_INITIAL_REG_DELAY_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } if(targetP->registrationFailureBlock < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_REG_FAIL_BLOCK_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } if(targetP->bootstrapOnRegistrationFailure < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_REG_FAIL_BOOTSTRAP_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } if(targetP->communicationRetryCount < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_COMM_RETRY_COUNT_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } if(targetP->communicationRetryTimer < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_COMM_RETRY_TIMER_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } if(targetP->communicationSequenceDelayTimer < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_SEQ_DELAY_TIMER_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } if(targetP->communicationSequenceRetryCount < 0) { for (i=0; i < nbRes; i++) { if (resList[i] == LWM2M_SERVER_SEQ_RETRY_COUNT_ID) { nbRes -= 1; memmove(&resList[i], &resList[i+1], (nbRes-i)*sizeof(resList[i])); break; } } } #endif *dataArrayP = lwm2m_data_new(nbRes); if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR; *numDataP = nbRes; for (i = 0 ; i < nbRes ; i++) { (*dataArrayP)[i].id = resList[i]; } } i = 0; do { result = prv_get_value((*dataArrayP) + i, targetP); i++; } while (i < *numDataP && result == COAP_205_CONTENT); return result; }