// update the registration of a given server int lwm2m_update_registration(lwm2m_context_t * contextP, uint16_t shortServerID) { lwm2m_server_t * targetP; targetP = contextP->serverList; if (targetP == NULL) { if (object_getServers(contextP) == -1) { return NOT_FOUND_4_04; } } while (targetP != NULL) { if (targetP->shortID == shortServerID) { // found the server, trigger the update transaction return prv_update_registration(contextP, targetP); } else { // try next server targetP = targetP->next; } } // no server found return NOT_FOUND_4_04; }
int lwm2m_start(lwm2m_context_t * contextP) { lwm2m_server_t * targetP; int result; result = object_getServers(contextP); return result; }
// update the registration of a given server int lwm2m_update_registration(lwm2m_context_t * contextP, uint16_t shortServerID, bool withObjects) { lwm2m_server_t * targetP; uint8_t result; LOG_ARG("State: %s, shortServerID: %d", STR_STATE(contextP->state), shortServerID); result = COAP_NO_ERROR; targetP = contextP->serverList; if (targetP == NULL) { if (object_getServers(contextP) == -1) { LOG("No server found"); return COAP_404_NOT_FOUND; } } while (targetP != NULL && result == COAP_NO_ERROR) { if (shortServerID != 0) { if (targetP->shortID == shortServerID) { // found the server, trigger the update transaction if (targetP->status == STATE_REGISTERED) { return prv_updateRegistration(contextP, targetP, withObjects); } else { return COAP_400_BAD_REQUEST; } } } else { if (targetP->status == STATE_REGISTERED) { result = prv_updateRegistration(contextP, targetP, withObjects); } } targetP = targetP->next; } if (shortServerID != 0 && targetP == NULL) { // no server found result = COAP_404_NOT_FOUND; } return result; }
static int prv_refreshServerList(lwm2m_context_t * contextP) { lwm2m_server_t * targetP; lwm2m_server_t * nextP; // Remove all servers marked as dirty targetP = contextP->bootstrapServerList; contextP->bootstrapServerList = NULL; while (targetP != NULL) { nextP = targetP->next; targetP->next = NULL; if (!targetP->dirty) { targetP->status = STATE_DEREGISTERED; contextP->bootstrapServerList = (lwm2m_server_t *)LWM2M_LIST_ADD(contextP->bootstrapServerList, targetP); } else { prv_deleteServer(targetP); } targetP = nextP; } targetP = contextP->serverList; contextP->serverList = NULL; while (targetP != NULL) { nextP = targetP->next; targetP->next = NULL; if (!targetP->dirty) { // TODO: Should we revert the status to STATE_DEREGISTERED ? contextP->serverList = (lwm2m_server_t *)LWM2M_LIST_ADD(contextP->serverList, targetP); } else { prv_deleteServer(targetP); } targetP = nextP; } return object_getServers(contextP, false); }
// update the registration of a given server int lwm2m_update_registration(lwm2m_context_t * contextP, uint16_t shortServerID, bool withObjects) { lwm2m_server_t * targetP; uint8_t result; result = COAP_NO_ERROR; targetP = contextP->serverList; if (targetP == NULL) { if (object_getServers(contextP) == -1) { return COAP_404_NOT_FOUND; } } while (targetP != NULL && result == COAP_NO_ERROR) { if (shortServerID != 0) { if (targetP->shortID == shortServerID) { // found the server, trigger the update transaction return prv_updateRegistration(contextP, targetP, withObjects); } } else { result = prv_updateRegistration(contextP, targetP, withObjects); } targetP = targetP->next; } if (shortServerID != 0 && targetP == NULL) { // no server found result = COAP_404_NOT_FOUND; } return result; }
static int refresh_server_list(lwm2m_context_t * contextP) { lwm2m_server_t * targetP; lwm2m_server_t * nextP; // Remove all servers marked as dirty targetP = contextP->bootstrapServerList; contextP->bootstrapServerList = NULL; while (targetP != NULL) { nextP = targetP->next; if (!targetP->dirty) { targetP->status = STATE_DEREGISTERED; targetP->next = contextP->bootstrapServerList; contextP->bootstrapServerList = targetP; } else { delete_server(targetP); } targetP = nextP; } targetP = contextP->serverList; contextP->serverList = NULL; while (targetP != NULL) { nextP = targetP->next; if (!targetP->dirty) { // TODO: Should we revert the status to STATE_DEREGISTERED ? targetP->next = contextP->serverList; contextP->serverList = targetP; } else { delete_server(targetP); } targetP = nextP; } return object_getServers(contextP); }
uint8_t bootstrap_handleFinish(lwm2m_context_t * context, void * fromSessionH) { lwm2m_server_t * bootstrapServer; LOG("Entering"); bootstrapServer = utils_findBootstrapServer(context, fromSessionH); if (bootstrapServer != NULL && bootstrapServer->status == STATE_BS_PENDING) { if (object_getServers(context, true) == 0) { LOG("Bootstrap server status changed to STATE_BS_FINISHING"); bootstrapServer->status = STATE_BS_FINISHING; return COAP_204_CHANGED; } else { return COAP_406_NOT_ACCEPTABLE; } } return COAP_IGNORE; }