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; } } } }
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; } } } }