net: lwm2m: LwM2M Composite read support
Adeed enabler for composite read to LwM2M engine. Signed-off-by: Juha Heiskanen <juha.heiskanen@nordicsemi.no>
This commit is contained in:
parent
906feebb33
commit
3bec5de0fb
1 changed files with 44 additions and 9 deletions
|
@ -3328,6 +3328,22 @@ static int do_read_op(struct lwm2m_message *msg, uint16_t content_format)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_composite_read_op(struct lwm2m_message *msg, uint16_t content_format)
|
||||||
|
{
|
||||||
|
switch (content_format) {
|
||||||
|
|
||||||
|
#if defined(CONFIG_LWM2M_RW_SENML_JSON_SUPPORT)
|
||||||
|
case LWM2M_FORMAT_APP_SEML_JSON:
|
||||||
|
return do_composite_read_op_senml_json(msg);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
LOG_ERR("Unsupported content-format: %u", content_format);
|
||||||
|
return -ENOMSG;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int lwm2m_perform_read_object_instance(struct lwm2m_message *msg,
|
static int lwm2m_perform_read_object_instance(struct lwm2m_message *msg,
|
||||||
struct lwm2m_engine_obj_inst *obj_inst,
|
struct lwm2m_engine_obj_inst *obj_inst,
|
||||||
uint8_t *num_read)
|
uint8_t *num_read)
|
||||||
|
@ -3964,7 +3980,7 @@ static int handle_request(struct coap_packet *request,
|
||||||
|
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
/* No URI path or empty URI path option - allowed only during
|
/* No URI path or empty URI path option - allowed only during
|
||||||
* bootstrap.
|
* bootstrap or CoAP Fetch.
|
||||||
*/
|
*/
|
||||||
switch (code & COAP_REQUEST_MASK) {
|
switch (code & COAP_REQUEST_MASK) {
|
||||||
#if defined(CONFIG_LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP)
|
#if defined(CONFIG_LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP)
|
||||||
|
@ -3977,6 +3993,9 @@ static int handle_request(struct coap_packet *request,
|
||||||
r = -EPERM;
|
r = -EPERM;
|
||||||
goto error;
|
goto error;
|
||||||
#endif
|
#endif
|
||||||
|
case COAP_METHOD_FETCH:
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
r = -EPERM;
|
r = -EPERM;
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -4032,13 +4051,16 @@ static int handle_request(struct coap_packet *request,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(msg->ctx->bootstrap_mode && msg->path.level == 0)) {
|
/* Do Only Object find if Method is not a FETCH */
|
||||||
/* find registered obj */
|
if ((code & COAP_REQUEST_MASK) != COAP_METHOD_FETCH) {
|
||||||
obj = get_engine_obj(msg->path.obj_id);
|
if (!(msg->ctx->bootstrap_mode && msg->path.level == LWM2M_PATH_LEVEL_NONE)) {
|
||||||
if (!obj) {
|
/* find registered obj */
|
||||||
/* No matching object found - ignore request */
|
obj = get_engine_obj(msg->path.obj_id);
|
||||||
r = -ENOENT;
|
if (!obj) {
|
||||||
goto error;
|
/* No matching object found - ignore request */
|
||||||
|
r = -ENOENT;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4063,6 +4085,14 @@ static int handle_request(struct coap_packet *request,
|
||||||
msg->code = COAP_RESPONSE_CODE_CONTENT;
|
msg->code = COAP_RESPONSE_CODE_CONTENT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case COAP_METHOD_FETCH:
|
||||||
|
msg->operation = LWM2M_OP_READ;
|
||||||
|
/* check for observe */
|
||||||
|
observe = coap_get_option_int(msg->in.in_cpkt,
|
||||||
|
COAP_OPTION_OBSERVE);
|
||||||
|
msg->code = COAP_RESPONSE_CODE_CONTENT;
|
||||||
|
break;
|
||||||
|
|
||||||
case COAP_METHOD_POST:
|
case COAP_METHOD_POST:
|
||||||
if (msg->path.level == 1U) {
|
if (msg->path.level == 1U) {
|
||||||
/* create an object instance */
|
/* create an object instance */
|
||||||
|
@ -4221,7 +4251,12 @@ static int handle_request(struct coap_packet *request,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r = do_read_op(msg, accept);
|
if ((code & COAP_REQUEST_MASK) == COAP_METHOD_GET) {
|
||||||
|
r = do_read_op(msg, accept);
|
||||||
|
} else {
|
||||||
|
r = do_composite_read_op(msg, accept);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LWM2M_OP_DISCOVER:
|
case LWM2M_OP_DISCOVER:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue