// for each server update the registration if needed int lwm2m_update_registrations(lwm2m_context_t * contextP, uint32_t currentTime, struct timeval * timeoutP) { lwm2m_server_t * targetP; targetP = contextP->serverList; while (targetP != NULL) { switch (targetP->status) { case STATE_REGISTERED: if (targetP->registration + targetP->lifetime - timeoutP->tv_sec <= currentTime) { prv_update_registration(contextP, targetP); } break; case STATE_UNKNOWN: // TODO: is it disabled? prv_register(contextP, targetP); break; case STATE_REG_PENDING: break; case STATE_REG_UPDATE_PENDING: // TODO: check for timeout and retry? break; case STATE_DEREG_PENDING: break; } targetP = targetP->next; } return 0; }
void registration_start(lwm2m_context_t * contextP) { lwm2m_server_t * targetP; targetP = contextP->serverList; while (targetP != NULL) { if (targetP->status == STATE_DEREGISTERED || targetP->status == STATE_REG_FAILED) { prv_register(contextP, targetP); } targetP = targetP->next; } }
uint8_t registration_start(lwm2m_context_t * contextP) { lwm2m_server_t * targetP; uint8_t result; result = COAP_NO_ERROR; targetP = contextP->serverList; while (targetP != NULL && result == COAP_NO_ERROR) { if (targetP->status == STATE_DEREGISTERED || targetP->status == STATE_REG_FAILED) { result = prv_register(contextP, targetP); } targetP = targetP->next; } return result; }
// for each server update the registration if needed void registration_update(lwm2m_context_t * contextP, time_t currentTime, time_t * timeoutP) { time_t nextUpdate; time_t interval; lwm2m_server_t * targetP = contextP->serverList; #ifdef LWM2M_BOOTSTRAP bool allServerFailed = true; bool serverRegistered = false; while (targetP != NULL) { if (STATE_REGISTERED == targetP->status) { serverRegistered = true; allServerFailed = false; break; } else if (STATE_REG_FAILED != targetP->status) allServerFailed = false; targetP = targetP->next; } #endif targetP = contextP->serverList; while (targetP != NULL) { switch (targetP->status) { case STATE_REGISTERED: nextUpdate = targetP->lifetime; if (30 < nextUpdate) { nextUpdate -= 15; // update 15s earlier to have a chance to resend } interval = targetP->registration + nextUpdate - currentTime; if (0 >= interval) { LOG("Updating registration...\r\n"); prv_update_registration(contextP, targetP); } else if (interval < *timeoutP) { *timeoutP = interval; } break; case STATE_DEREGISTERED: // TODO: is it disabled? prv_register(contextP, targetP); break; case STATE_REG_UPDATE_PENDING: // TODO: check for timeout and retry? break; case STATE_DEREG_PENDING: break; case STATE_REG_FAILED: #ifdef LWM2M_BOOTSTRAP if (serverRegistered || NULL == contextP->bootstrapServerList) { #endif interval = targetP->registration + targetP->lifetime - currentTime; if (0 >= interval) { LOG("Retry registration...\r\n"); prv_register(contextP, targetP); } else if (interval < *timeoutP) { *timeoutP = interval; } #ifdef LWM2M_BOOTSTRAP } #endif break; default: break; } targetP = targetP->next; } #ifdef LWM2M_BOOTSTRAP if (allServerFailed && NULL != contextP->bootstrapServerList) { if (BOOTSTRAPPED == contextP->bsState || NOT_BOOTSTRAPPED == contextP->bsState) { contextP->bsState = BOOTSTRAP_REQUESTED; } } #endif }