Lines Matching full:client
87 /* The states for the RD client state machine */
137 } client; variable
149 if (client.rd_message.ctx) { in rd_get_message()
151 lwm2m_reset_message(&client.rd_message, true); in rd_get_message()
154 client.rd_message.ctx = client.ctx; in rd_get_message()
155 return &client.rd_message; in rd_get_message()
167 if (!client.ctx || !client.rd_message.ctx) { in lwm2m_get_ongoing_rd_msg()
170 return &client.rd_message; in lwm2m_get_ongoing_rd_msg()
175 client.last_tx = k_uptime_get(); in engine_update_tx_time()
180 client.next_event = timestamp; in next_event_at()
186 k_mutex_lock(&client.mutex, K_FOREVER); in set_sm_state_delayed()
193 } else if (client.engine_state == ENGINE_BOOTSTRAP_TRANS_DONE && in set_sm_state_delayed()
198 if (client.engine_state == ENGINE_UPDATE_SENT && in set_sm_state_delayed()
201 lwm2m_push_queued_buffers(client.ctx); in set_sm_state_delayed()
204 lwm2m_push_queued_buffers(client.ctx); in set_sm_state_delayed()
208 } else if (sm_state == ENGINE_DEREGISTERED && !client.server_disabled) { in set_sm_state_delayed()
213 if (client.server_disabled) { in set_sm_state_delayed()
224 client.engine_state = sm_state; in set_sm_state_delayed()
227 if (event > LWM2M_RD_CLIENT_EVENT_NONE && client.ctx->event_cb) { in set_sm_state_delayed()
228 client.ctx->event_cb(client.ctx, event); in set_sm_state_delayed()
235 lwm2m_socket_suspend(client.ctx); in set_sm_state_delayed()
237 lwm2m_close_socket(client.ctx); in set_sm_state_delayed()
240 client.last_state_change = k_uptime_get(); in set_sm_state_delayed()
242 k_mutex_unlock(&client.mutex); in set_sm_state_delayed()
253 k_mutex_lock(&client.mutex, K_FOREVER); in sm_is_bootstrap()
254 bool is_bootstrap = (client.engine_state >= ENGINE_DO_BOOTSTRAP_REG && in sm_is_bootstrap()
255 client.engine_state <= ENGINE_BOOTSTRAP_TRANS_DONE); in sm_is_bootstrap()
256 k_mutex_unlock(&client.mutex); in sm_is_bootstrap()
265 k_mutex_lock(&client.mutex, K_FOREVER); in sm_is_registered()
266 bool registered = (client.engine_state >= ENGINE_REGISTRATION_DONE && in sm_is_registered()
267 client.engine_state <= ENGINE_DEREGISTER_SENT); in sm_is_registered()
269 k_mutex_unlock(&client.mutex); in sm_is_registered()
275 k_mutex_lock(&client.mutex, K_FOREVER); in sm_is_suspended()
276 bool suspended = (client.engine_state == ENGINE_SUSPENDED); in sm_is_suspended()
278 k_mutex_unlock(&client.mutex); in sm_is_suspended()
285 k_mutex_lock(&client.mutex, K_FOREVER); in get_sm_state()
286 uint8_t state = client.engine_state; in get_sm_state()
288 k_mutex_unlock(&client.mutex); in get_sm_state()
295 k_mutex_lock(&client.mutex, K_FOREVER); in sm_handle_timeout_state()
298 switch (client.engine_state) { in sm_handle_timeout_state()
328 if (event > LWM2M_RD_CLIENT_EVENT_NONE && client.ctx->event_cb) { in sm_handle_timeout_state()
329 client.ctx->event_cb(client.ctx, event); in sm_handle_timeout_state()
331 k_mutex_unlock(&client.mutex); in sm_handle_timeout_state()
337 k_mutex_lock(&client.mutex, K_FOREVER); in sm_handle_failure_state()
341 if (client.engine_state == ENGINE_BOOTSTRAP_REG_SENT) { in sm_handle_failure_state()
345 if (client.engine_state == ENGINE_REGISTRATION_SENT) { in sm_handle_failure_state()
347 } else if (client.engine_state == ENGINE_UPDATE_SENT) { in sm_handle_failure_state()
349 k_mutex_unlock(&client.mutex); in sm_handle_failure_state()
351 } else if (client.engine_state == ENGINE_DEREGISTER_SENT) { in sm_handle_failure_state()
355 lwm2m_engine_stop(client.ctx); in sm_handle_failure_state()
358 if (event > LWM2M_RD_CLIENT_EVENT_NONE && client.ctx->event_cb) { in sm_handle_failure_state()
359 client.ctx->event_cb(client.ctx, event); in sm_handle_failure_state()
361 k_mutex_unlock(&client.mutex); in sm_handle_failure_state()
367 LOG_ERR("RD Client socket error: %d", error); in socket_fault_cb()
368 lwm2m_socket_close(client.ctx); in socket_fault_cb()
371 client.ctx->sec_obj_inst = -1; in socket_fault_cb()
373 client.last_update = 0; in socket_fault_cb()
389 if (client.engine_state > ENGINE_IDLE && in socket_fault_cb()
390 client.engine_state < ENGINE_SERVER_DISABLED) { in socket_fault_cb()
392 } else if (client.engine_state != ENGINE_SUSPENDED && in socket_fault_cb()
393 !client.server_disabled) { in socket_fault_cb()
401 k_mutex_lock(&client.mutex, K_FOREVER); in engine_trigger_update()
402 if (client.engine_state < ENGINE_REGISTRATION_SENT || in engine_trigger_update()
403 client.engine_state > ENGINE_UPDATE_SENT) { in engine_trigger_update()
404 k_mutex_unlock(&client.mutex); in engine_trigger_update()
408 client.trigger_update = true; in engine_trigger_update()
413 client.update_objects = true; in engine_trigger_update()
415 k_mutex_unlock(&client.mutex); in engine_trigger_update()
475 k_mutex_lock(&client.mutex, K_FOREVER); in engine_trigger_bootstrap()
477 if (client.use_bootstrap) { in engine_trigger_bootstrap()
480 k_mutex_unlock(&client.mutex); in engine_trigger_bootstrap()
486 client.use_bootstrap = true; in engine_trigger_bootstrap()
487 client.trigger_update = false; in engine_trigger_bootstrap()
489 k_mutex_unlock(&client.mutex); in engine_trigger_bootstrap()
520 if (options[1].len + 1 > sizeof(client.server_ep)) { in do_registration_reply_cb()
524 sizeof(client.server_ep)); in do_registration_reply_cb()
530 client.last_update = k_uptime_get(); in do_registration_reply_cb()
531 client.server_disabled = false; in do_registration_reply_cb()
532 client.retries = 0; in do_registration_reply_cb()
534 memcpy(client.server_ep, options[1].value, in do_registration_reply_cb()
536 client.server_ep[options[1].len] = '\0'; in do_registration_reply_cb()
539 client.server_ep); in do_registration_reply_cb()
548 lwm2m_server_disable(client.ctx->srv_obj_inst, DISABLE_TIMEOUT); in do_registration_reply_cb()
576 client.last_update = k_uptime_get(); in do_update_reply_cb()
577 client.server_disabled = false; in do_update_reply_cb()
578 client.retries = 0; in do_update_reply_cb()
597 if (client.ctx->sock_fd > -1) { in do_update_timeout_cb()
598 client.close_socket = true; in do_update_timeout_cb()
715 lwm2m_engine_stop(client.ctx); in sm_do_init()
716 client.trigger_update = false; in sm_do_init()
717 client.lifetime = 0U; in sm_do_init()
718 client.last_update = 0U; in sm_do_init()
719 client.close_socket = false; in sm_do_init()
722 if (client.use_bootstrap && IS_ENABLED(CONFIG_LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP)) { in sm_do_init()
761 client.ep_name); in sm_send_bootstrap_registration()
806 if (client.ctx->sock_fd > -1) { in sm_do_bootstrap_reg()
807 lwm2m_engine_stop(client.ctx); in sm_do_bootstrap_reg()
810 client.ctx->bootstrap_mode = true; in sm_do_bootstrap_reg()
811 ret = sm_next_bootstrap_inst(&client.ctx->sec_obj_inst); in sm_do_bootstrap_reg()
818 client.ep_name, client.ctx->sec_obj_inst); in sm_do_bootstrap_reg()
820 ret = lwm2m_engine_start(client.ctx); in sm_do_bootstrap_reg()
841 /* Transition only if the client is bootstrapping, otherwise retransmissions of bootstrap in engine_bootstrap_finish()
842 * finish may restart an already registered client. in engine_bootstrap_finish()
854 lwm2m_engine_stop(client.ctx); in sm_bootstrap_trans_done()
857 client.ctx->sec_obj_inst = -1; in sm_bootstrap_trans_done()
858 client.use_bootstrap = false; in sm_bootstrap_trans_done()
906 client.server_ep, strlen(client.server_ep)); in sm_send_registration()
932 "ep=%s", client.ep_name); in sm_send_registration()
942 if (sm_update_lifetime(client.ctx->srv_obj_inst, &client.lifetime) || in sm_send_registration()
945 "lt=%d", client.lifetime); in sm_send_registration()
1005 lwm2m_sprint_ip_addr(&client.ctx->remote_addr)); in sm_send_registration()
1017 k_mutex_lock(&client.mutex, K_FOREVER); in sm_handle_registration_update_failure()
1019 lwm2m_engine_context_close(client.ctx); in sm_handle_registration_update_failure()
1021 k_mutex_unlock(&client.mutex); in sm_handle_registration_update_failure()
1046 if (client.ctx->connection_suspended) { in sm_do_registration()
1047 if (lwm2m_engine_connection_resume(client.ctx)) { in sm_do_registration()
1048 lwm2m_engine_context_close(client.ctx); in sm_do_registration()
1056 uint16_t srv = (uint16_t) client.ctx->srv_obj_inst; in sm_do_registration()
1058 client.last_update = 0; in sm_do_registration()
1059 client.ctx->bootstrap_mode = false; in sm_do_registration()
1062 if (client.ctx->sock_fd > -1) { in sm_do_registration()
1063 if (client.close_socket) { in sm_do_registration()
1065 client.close_socket = false; in sm_do_registration()
1066 lwm2m_engine_stop(client.ctx); in sm_do_registration()
1068 lwm2m_engine_context_close(client.ctx); in sm_do_registration()
1081 client.ctx->srv_obj_inst = srv; in sm_do_registration()
1082 sm_update_lifetime(srv, &client.lifetime); in sm_do_registration()
1084 ret = lwm2m_get_u16(&LWM2M_OBJ(1, client.ctx->srv_obj_inst, 0), &ssid); in sm_do_registration()
1097 client.ctx->sec_obj_inst = (uint16_t) ret; in sm_do_registration()
1100 LOG_INF("RD Client started with endpoint '%s' with client lifetime %d using server " in sm_do_registration()
1102 client.ep_name, client.lifetime, client.ctx->srv_obj_inst); in sm_do_registration()
1104 ret = lwm2m_engine_start(client.ctx); in sm_do_registration()
1115 if (!client.server_disabled && fallback_to_bootstrap()) { in sm_do_registration()
1116 lwm2m_engine_stop(client.ctx); in sm_do_registration()
1120 lwm2m_engine_stop(client.ctx); in sm_do_registration()
1131 period = client.lifetime; in next_update()
1133 if (early > client.lifetime) { in next_update()
1134 early = client.lifetime; in next_update()
1137 next = MIN(period, client.lifetime - early); in next_update()
1140 return client.last_update + next * MSEC_PER_SEC; in next_update()
1146 return client.last_tx + CONFIG_LWM2M_QUEUE_MODE_UPTIME * MSEC_PER_SEC; in next_rx_off()
1160 k_mutex_lock(&client.mutex, K_FOREVER); in sm_registration_done()
1165 (client.trigger_update || in sm_registration_done()
1169 (client.engine_state != ENGINE_REGISTRATION_DONE_RX_OFF) && in sm_registration_done()
1176 k_mutex_unlock(&client.mutex); in sm_registration_done()
1184 update_objects = client.update_objects; in update_registration()
1185 client.trigger_update = false; in update_registration()
1186 client.update_objects = false; in update_registration()
1188 ret = lwm2m_engine_connection_resume(client.ctx); in update_registration()
1212 lwm2m_engine_stop(client.ctx); in sm_update_registration()
1228 if (lwm2m_engine_connection_resume(client.ctx)) { in sm_do_deregister()
1229 lwm2m_engine_context_close(client.ctx); in sm_do_deregister()
1264 client.server_ep, in sm_do_deregister()
1265 strlen(client.server_ep)); in sm_do_deregister()
1271 LOG_INF("Deregister from '%s'", client.server_ep); in sm_do_deregister()
1285 lwm2m_engine_stop(client.ctx); in sm_do_deregister()
1295 (void)lwm2m_get_bool(&LWM2M_OBJ(LWM2M_OBJECT_SERVER_ID, client.ctx->srv_obj_inst, in fallback_to_bootstrap()
1299 client.use_bootstrap = true; in fallback_to_bootstrap()
1311 LOG_ERR("sm_do_network_error, retries %d", client.retries); in sm_do_network_error()
1313 lwm2m_socket_close(client.ctx); in sm_do_network_error()
1315 if (client.retry_delay) { in sm_do_network_error()
1316 next_event_at(k_uptime_get() + client.retry_delay * MSEC_PER_SEC); in sm_do_network_error()
1317 client.retry_delay = 0; in sm_do_network_error()
1320 client.retry_delay = 1 << client.retries; in sm_do_network_error()
1321 client.retries++; in sm_do_network_error()
1324 if (client.retries > CONFIG_LWM2M_RD_CLIENT_MAX_RETRIES) { in sm_do_network_error()
1325 LOG_ERR("Network error, max retries reached (%d)", client.retries); in sm_do_network_error()
1328 if (client.ctx->srv_obj_inst > -1) { in sm_do_network_error()
1329 lwm2m_server_disable(client.ctx->srv_obj_inst, DISABLE_TIMEOUT); in sm_do_network_error()
1333 if (client.ctx->bootstrap_mode && in sm_do_network_error()
1337 if (sm_next_bootstrap_inst(&client.ctx->sec_obj_inst) < 0) { in sm_do_network_error()
1356 p1 = lwm2m_server_get_prio(client.ctx->srv_obj_inst); in sm_do_network_error()
1358 if (p1 < p2 || client.last_update != 0) { in sm_do_network_error()
1365 if (client.server_disabled) { in sm_do_network_error()
1378 if (client.ctx->bootstrap_mode) { in sm_do_network_error()
1379 lwm2m_engine_context_close(client.ctx); in sm_do_network_error()
1381 if (sm_next_bootstrap_inst(&client.ctx->sec_obj_inst) < 0) { in sm_do_network_error()
1382 client.ctx->sec_obj_inst = -1; in sm_do_network_error()
1389 if (!client.last_update || in sm_do_network_error()
1390 (k_uptime_get() - client.last_update) / MSEC_PER_SEC > client.lifetime) { in sm_do_network_error()
1400 err = lwm2m_socket_start(client.ctx); in sm_do_network_error()
1416 if (client.ctx->event_cb) { in sm_do_network_error()
1417 if (client.ctx->bootstrap_mode) { in sm_do_network_error()
1418 client.ctx->event_cb(client.ctx, in sm_do_network_error()
1421 client.ctx->event_cb(client.ctx, LWM2M_RD_CLIENT_EVENT_NETWORK_ERROR); in sm_do_network_error()
1429 k_mutex_lock(&client.mutex, K_FOREVER); in lwm2m_rd_client_service()
1433 if (client.ctx) { in lwm2m_rd_client_service()
1435 client.next_event = INT64_MAX; in lwm2m_rd_client_service()
1438 if (client.ctx->sock_fd > -1) { in lwm2m_rd_client_service()
1439 lwm2m_engine_stop(client.ctx); in lwm2m_rd_client_service()
1521 lwm2m_engine_stop(client.ctx); in lwm2m_rd_client_service()
1522 if (client.server_disabled) { in lwm2m_rd_client_service()
1539 int64_t end = client.last_state_change + timeout * MSEC_PER_SEC; in lwm2m_rd_client_service()
1544 } else if (client.next_event > end) { in lwm2m_rd_client_service()
1550 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_service()
1557 k_mutex_lock(&client.mutex, K_FOREVER); in lwm2m_rd_client_start()
1564 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_start()
1568 /* Check client idle state or socket is still active */ in lwm2m_rd_client_start()
1570 if (client.ctx && (client.engine_state != ENGINE_IDLE || client.ctx->sock_fd != -1)) { in lwm2m_rd_client_start()
1571 LOG_WRN("Client is already running. state %d ", client.engine_state); in lwm2m_rd_client_start()
1572 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_start()
1580 client.ctx = client_ctx; in lwm2m_rd_client_start()
1581 client.ctx->sock_fd = -1; in lwm2m_rd_client_start()
1582 client.ctx->fault_cb = socket_fault_cb; in lwm2m_rd_client_start()
1583 client.ctx->observe_cb = observe_cb; in lwm2m_rd_client_start()
1584 client.ctx->event_cb = event_cb; in lwm2m_rd_client_start()
1585 client.use_bootstrap = flags & LWM2M_RD_CLIENT_FLAG_BOOTSTRAP; in lwm2m_rd_client_start()
1586 client.ctx->srv_obj_inst = -1; in lwm2m_rd_client_start()
1587 client.ctx->sec_obj_inst = -1; in lwm2m_rd_client_start()
1588 client.retries = 0; in lwm2m_rd_client_start()
1590 strncpy(client.ep_name, ep_name, CLIENT_EP_LEN - 1); in lwm2m_rd_client_start()
1591 client.ep_name[CLIENT_EP_LEN - 1] = '\0'; in lwm2m_rd_client_start()
1592 LOG_INF("Start LWM2M Client: %s", client.ep_name); in lwm2m_rd_client_start()
1596 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_start()
1604 k_mutex_lock(&client.mutex, K_FOREVER); in lwm2m_rd_client_stop()
1606 if (client.ctx != client_ctx) { in lwm2m_rd_client_stop()
1607 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_stop()
1612 client.ctx->event_cb = event_cb; in lwm2m_rd_client_stop()
1615 if (sm_is_registered() && deregister && !client.server_disabled) { in lwm2m_rd_client_stop()
1618 client.server_disabled = false; in lwm2m_rd_client_stop()
1622 LOG_INF("Stop LWM2M Client: %s", client.ep_name); in lwm2m_rd_client_stop()
1624 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_stop()
1635 k_mutex_lock(&client.mutex, K_FOREVER); in lwm2m_rd_client_pause()
1637 if (!client.ctx) { in lwm2m_rd_client_pause()
1638 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_pause()
1642 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_pause()
1643 LOG_ERR("LwM2M client already suspended"); in lwm2m_rd_client_pause()
1647 LOG_INF("Suspend client"); in lwm2m_rd_client_pause()
1648 if (client.ctx->event_cb) { in lwm2m_rd_client_pause()
1649 client.ctx->event_cb(client.ctx, event); in lwm2m_rd_client_pause()
1654 lwm2m_close_socket(client.ctx); in lwm2m_rd_client_pause()
1656 lwm2m_socket_suspend(client.ctx); in lwm2m_rd_client_pause()
1662 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_pause()
1669 k_mutex_lock(&client.mutex, K_FOREVER); in lwm2m_rd_client_resume()
1671 if (!client.ctx || !lwm2m_rd_client_is_suspended(client.ctx)) { in lwm2m_rd_client_resume()
1672 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_resume()
1677 LOG_INF("Resume Client state"); in lwm2m_rd_client_resume()
1683 /* Clear Possible pending RD Client message */ in lwm2m_rd_client_resume()
1686 client.engine_state = suspended_client_state; in lwm2m_rd_client_resume()
1691 client.engine_state = ENGINE_DO_BOOTSTRAP_REG; in lwm2m_rd_client_resume()
1695 if (client.engine_state >= ENGINE_DO_REGISTRATION && in lwm2m_rd_client_resume()
1696 client.engine_state <= ENGINE_SERVER_DISABLED) { in lwm2m_rd_client_resume()
1697 if (!client.last_update || in lwm2m_rd_client_resume()
1698 (client.lifetime <= (k_uptime_get() - client.last_update) / MSEC_PER_SEC)) { in lwm2m_rd_client_resume()
1700 client.engine_state = ENGINE_DO_REGISTRATION; in lwm2m_rd_client_resume()
1703 client.engine_state = ENGINE_REGISTRATION_DONE_RX_OFF; in lwm2m_rd_client_resume()
1704 lwm2m_rd_client_connection_resume(client.ctx); in lwm2m_rd_client_resume()
1709 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_resume()
1716 if (client.ctx->srv_obj_inst != inst_id) { in lwm2m_rd_client_server_disabled()
1720 k_mutex_lock(&client.mutex, K_FOREVER); in lwm2m_rd_client_server_disabled()
1722 client.server_disabled = true; in lwm2m_rd_client_server_disabled()
1732 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_server_disabled()
1744 return client.ctx; in lwm2m_rd_client_ctx()
1749 client.ctx = ctx; in lwm2m_rd_client_set_ctx()
1754 if (client.ctx != client_ctx) { in lwm2m_rd_client_connection_resume()
1758 if (client.engine_state == ENGINE_REGISTRATION_DONE_RX_OFF) { in lwm2m_rd_client_connection_resume()
1769 client.engine_state = ENGINE_REGISTRATION_DONE; in lwm2m_rd_client_connection_resume()
1774 client.trigger_update = true; in lwm2m_rd_client_connection_resume()
1777 client.engine_state = ENGINE_DO_REGISTRATION; in lwm2m_rd_client_connection_resume()
1787 if (client.ctx != client_ctx) { in lwm2m_rd_client_timeout()
1794 k_mutex_lock(&client.mutex, K_FOREVER); in lwm2m_rd_client_timeout()
1798 k_mutex_unlock(&client.mutex); in lwm2m_rd_client_timeout()
1804 if (client.ctx != client_ctx || !sm_is_registered()) { in lwm2m_rd_client_is_registred()
1812 if (client.ctx != client_ctx || !sm_is_suspended()) { in lwm2m_rd_client_is_suspended()
1822 client.ctx = NULL; in lwm2m_rd_client_init()
1823 client.rd_message.ctx = NULL; in lwm2m_rd_client_init()
1824 client.engine_state = ENGINE_IDLE; in lwm2m_rd_client_init()
1825 k_mutex_init(&client.mutex); in lwm2m_rd_client_init()