Esempio n. 1
0
coap_status_t object_server_read(lwm2m_context_t * contextP,
                                 lwm2m_uri_t * uriP,
                                 char ** bufferP,
                                 int * lengthP)
{
    if (!LWM2M_URI_IS_SET_INSTANCE(uriP))
    {
        return COAP_501_NOT_IMPLEMENTED;
    }
    else
    {
        lwm2m_server_t * serverP;

        serverP = (lwm2m_server_t *)lwm2m_list_find((lwm2m_list_t *)contextP->serverList, uriP->instanceId);
        if (serverP == NULL) return COAP_404_NOT_FOUND;

        if (!LWM2M_URI_IS_SET_RESOURCE(uriP))
        {
            return COAP_501_NOT_IMPLEMENTED;
        }
        else
        {
            switch (uriP->resourceId)
            {
            case RESOURCE_SHORTID_ID:
                *lengthP = lwm2m_int32ToPlainText(serverP->shortID, bufferP);
                if (0 != *lengthP)
                {
                    return COAP_205_CONTENT;
                }
                else
                {
                    return COAP_500_INTERNAL_SERVER_ERROR;
                }
                break;

            case RESOURCE_LIFETIME_ID:
                return COAP_501_NOT_IMPLEMENTED;
            case RESOURCE_MINPERIOD_ID:
                return COAP_404_NOT_FOUND;
            case RESOURCE_MAXPERIOD_ID:
                return COAP_404_NOT_FOUND;
            case RESOURCE_TIMEOUT_ID:
                return COAP_404_NOT_FOUND;
            case RESOURCE_STORING_ID:
                return COAP_501_NOT_IMPLEMENTED;
            case RESOURCE_BINDING_ID:
                return COAP_501_NOT_IMPLEMENTED;
            default:
                return COAP_405_METHOD_NOT_ALLOWED;
            }
        }
    }
}
Esempio n. 2
0
coap_status_t object_server_read(lwm2m_context_t * contextP,
                                 lwm2m_uri_t * uriP,
                                 char ** bufferP,
                                 int * lengthP)
{
    if (!LWM2M_URI_IS_SET_INSTANCE(uriP))
    {
        return COAP_501_NOT_IMPLEMENTED;
    }
    else
    {
        lwm2m_server_t * serverP;

        serverP = (lwm2m_server_t *)lwm2m_list_find((lwm2m_list_t *)contextP->serverList, uriP->instanceId);
        if (serverP == NULL) return COAP_404_NOT_FOUND;

        if (!LWM2M_URI_IS_SET_RESOURCE(uriP))
        {
            return COAP_501_NOT_IMPLEMENTED;
        }
        else
        {
            switch (uriP->resourceId)
            {
            case RESOURCE_SHORTID_ID:
                *lengthP = lwm2m_int32ToPlainText(serverP->shortID, bufferP);
                if (0 != *lengthP)
                {
                    return COAP_205_CONTENT;
                }
                else
                {
                    return COAP_500_INTERNAL_SERVER_ERROR;
                }
                break;

            case RESOURCE_LIFETIME_ID:
                {
                    int lifetime = serverP->lifetime;
                    if (lifetime == 0) lifetime = LIFETIME_DEFAULT;

                    *lengthP = lwm2m_int32ToPlainText(lifetime,bufferP);

                    if (0 != *lengthP)
                    {
                        return COAP_205_CONTENT;
                    }
                    else
                    {
                        return COAP_500_INTERNAL_SERVER_ERROR;
                    }
                }
                break;

            case RESOURCE_MINPERIOD_ID:
                return COAP_404_NOT_FOUND;
            case RESOURCE_MAXPERIOD_ID:
                return COAP_404_NOT_FOUND;
            case RESOURCE_TIMEOUT_ID:
                return COAP_404_NOT_FOUND;
            case RESOURCE_STORING_ID:
                return COAP_501_NOT_IMPLEMENTED;
            case RESOURCE_BINDING_ID:
                {
                    char * value;
                    int len;
                    switch (serverP->binding) {
                    case BINDING_U:
                        value = "U";
                        *lengthP = 1;
                        break;
                    case BINDING_UQ:
                        value = "UQ";
                        *lengthP = 2;
                        break;
                    case BINDING_S:
                        value="S";
                        *lengthP = 1;
                        break;
                    case BINDING_SQ:
                        value = "SQ";
                        *lengthP = 2;
                        break;
                    case BINDING_US:
                        value = "US";
                        *lengthP = 2;
                        break;
                    case BINDING_UQS:
                        value = "USQ";
                        *lengthP = 3;
                        break;
                    default:
                        return COAP_500_INTERNAL_SERVER_ERROR;
                    }
                    *bufferP = lwm2m_malloc(*lengthP);
                    if (NULL == *bufferP) return COAP_500_INTERNAL_SERVER_ERROR;
                    memcpy(*bufferP, value, *lengthP);
                    return COAP_205_CONTENT;
                }
            default:
                return COAP_405_METHOD_NOT_ALLOWED;
            }
        }
    }
}