net: lwm2m: Composite Observe operation placeholder
Added detetction for Composite Observervation request and cancel. Signed-off-by: Juha Heiskanen <juha.heiskanen@nordicsemi.no>
This commit is contained in:
parent
98cd71eef2
commit
312dd7f887
1 changed files with 58 additions and 37 deletions
|
@ -3966,6 +3966,42 @@ static bool lwm2m_engine_path_included(uint8_t code, bool bootstrap_mode)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lwm2m_engine_observation_handler(struct lwm2m_message *msg, int observe, uint16_t accept)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (observe == 0) {
|
||||||
|
/* add new observer */
|
||||||
|
r = coap_append_option_int(msg->out.out_cpkt, COAP_OPTION_OBSERVE,
|
||||||
|
OBSERVE_COUNTER_START);
|
||||||
|
if (r < 0) {
|
||||||
|
LOG_ERR("OBSERVE option error: %d", r);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = engine_add_observer(msg, msg->token, msg->tkl, accept);
|
||||||
|
if (r < 0) {
|
||||||
|
LOG_ERR("add OBSERVE error: %d", r);
|
||||||
|
}
|
||||||
|
} else if (observe == 1) {
|
||||||
|
/* remove observer */
|
||||||
|
r = engine_remove_observer_by_token(msg->ctx, msg->token, msg->tkl);
|
||||||
|
if (r < 0) {
|
||||||
|
#if defined(CONFIG_LWM2M_CANCEL_OBSERVE_BY_PATH)
|
||||||
|
r = engine_remove_observer_by_path(msg->ctx, &msg->path);
|
||||||
|
if (r < 0)
|
||||||
|
#endif /* CONFIG_LWM2M_CANCEL_OBSERVE_BY_PATH */
|
||||||
|
{
|
||||||
|
LOG_ERR("remove observe error: %d", r);
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
r = -EINVAL;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
static int handle_request(struct coap_packet *request,
|
static int handle_request(struct coap_packet *request,
|
||||||
struct lwm2m_message *msg)
|
struct lwm2m_message *msg)
|
||||||
{
|
{
|
||||||
|
@ -4241,50 +4277,35 @@ static int handle_request(struct coap_packet *request,
|
||||||
switch (msg->operation) {
|
switch (msg->operation) {
|
||||||
|
|
||||||
case LWM2M_OP_READ:
|
case LWM2M_OP_READ:
|
||||||
if (observe == 0) {
|
if (observe >= 0) {
|
||||||
/* add new observer */
|
/* Validate That Token is valid for Observation */
|
||||||
if (msg->token) {
|
if (!msg->token) {
|
||||||
r = coap_append_option_int(
|
|
||||||
msg->out.out_cpkt,
|
|
||||||
COAP_OPTION_OBSERVE,
|
|
||||||
OBSERVE_COUNTER_START);
|
|
||||||
if (r < 0) {
|
|
||||||
LOG_ERR("OBSERVE option error: %d", r);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = engine_add_observer(msg, token, tkl,
|
|
||||||
accept);
|
|
||||||
if (r < 0) {
|
|
||||||
LOG_ERR("add OBSERVE error: %d", r);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
LOG_ERR("OBSERVE request missing token");
|
LOG_ERR("OBSERVE request missing token");
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
} else if (observe == 1) {
|
|
||||||
/* remove observer */
|
if ((code & COAP_REQUEST_MASK) == COAP_METHOD_GET) {
|
||||||
r = engine_remove_observer_by_token(msg->ctx, token, tkl);
|
/* Normal Obeservation Request or Cancel */
|
||||||
|
r = lwm2m_engine_observation_handler(msg, observe, accept);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
#if defined(CONFIG_LWM2M_CANCEL_OBSERVE_BY_PATH)
|
goto error;
|
||||||
r = engine_remove_observer_by_path(msg->ctx,
|
|
||||||
&msg->path);
|
|
||||||
if (r < 0)
|
|
||||||
#endif /* CONFIG_LWM2M_CANCEL_OBSERVE_BY_PATH */
|
|
||||||
{
|
|
||||||
LOG_ERR("remove observe error: %d", r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = do_read_op(msg, accept);
|
||||||
|
} else {
|
||||||
|
/* Composite Observation request & cancel handler */
|
||||||
|
/* TODO add support for Composite observation support */
|
||||||
|
r = -ENOTSUP;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if ((code & COAP_REQUEST_MASK) == COAP_METHOD_GET) {
|
if ((code & COAP_REQUEST_MASK) == COAP_METHOD_GET) {
|
||||||
r = do_read_op(msg, accept);
|
r = do_read_op(msg, accept);
|
||||||
} else {
|
} else {
|
||||||
r = do_composite_read_op(msg, accept);
|
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