コード例 #1
0
ファイル: registration.c プロジェクト: mythfish/wakaama
// 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;
}
コード例 #2
0
ファイル: registration.c プロジェクト: kartben/wakaama
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;
    }
}
コード例 #3
0
ファイル: registration.c プロジェクト: mhshami01/wakaama
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;
}
コード例 #4
0
ファイル: registration.c プロジェクト: RnDity/wakaama
// 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
}