Combined the functions for registering LWM2M server and bootstrap
server into a single function for simpler API. Updated the LWM2M example to register to a single server by default but with a configuration option to use multiple servers.
This commit is contained in:
parent
be71b5fc1d
commit
962aa01d30
@ -52,29 +52,25 @@
|
||||
#define DEBUG DEBUG_NONE
|
||||
#include "net/ipv6/uip-debug.h"
|
||||
|
||||
/* Define this macro to non-zero to register via a bootstrap server */
|
||||
#ifndef REGISTER_WITH_LWM2M_BOOTSTRAP_SERVER
|
||||
#define REGISTER_WITH_LWM2M_BOOTSTRAP_SERVER 0
|
||||
#endif
|
||||
|
||||
#ifndef REGISTER_WITH_LWM2M_SERVER
|
||||
#define REGISTER_WITH_LWM2M_SERVER 1
|
||||
#if REGISTER_WITH_LWM2M_BOOTSTRAP_SERVER
|
||||
#define SERVER_TYPE LWM2M_RD_CLIENT_BOOTSTRAP_SERVER
|
||||
#else
|
||||
#define SERVER_TYPE LWM2M_RD_CLIENT_LWM2M_SERVER
|
||||
#endif
|
||||
|
||||
#ifndef LWM2M_SERVER_ADDRESS
|
||||
#define LWM2M_SERVER_ADDRESS "coap://[fd00::1]"
|
||||
#endif
|
||||
|
||||
#ifndef LWM2M_SERVER_ADDRESS_SECOND
|
||||
#define LWM2M_SERVER_ADDRESS_SECOND "coap://[fd00::1]:5686"
|
||||
#endif
|
||||
static lwm2m_session_info_t session_info;
|
||||
|
||||
#ifndef LWM2M_SESSIONS
|
||||
#define LWM2M_SESSIONS 2
|
||||
#endif
|
||||
|
||||
static lwm2m_session_info_t session_info;
|
||||
|
||||
#if LWM2M_SESSIONS == 2
|
||||
/* Define this macro to register with a second LWM2M server */
|
||||
#ifdef LWM2M_SERVER_ADDRESS_SECOND
|
||||
static lwm2m_session_info_t session_info_second;
|
||||
#endif
|
||||
|
||||
@ -163,27 +159,17 @@ setup_lwm2m_servers(void)
|
||||
coap_endpoint_t server_ep;
|
||||
if(coap_endpoint_parse(LWM2M_SERVER_ADDRESS, strlen(LWM2M_SERVER_ADDRESS),
|
||||
&server_ep) != 0) {
|
||||
#if REGISTER_WITH_LWM2M_BOOTSTRAP_SERVER
|
||||
lwm2m_rd_client_register_with_bootstrap_server(&session_info, &server_ep);
|
||||
#else
|
||||
lwm2m_rd_client_register_with_server(&session_info, &server_ep);
|
||||
#endif
|
||||
lwm2m_rd_client_register_with_server(&session_info, &server_ep, SERVER_TYPE);
|
||||
}
|
||||
#endif /* LWM2M_SERVER_ADDRESS */
|
||||
|
||||
#if LWM2M_SESSIONS == 2
|
||||
#ifdef LWM2M_SERVER_ADDRESS_SECOND
|
||||
coap_endpoint_t server_ep_second;
|
||||
if(coap_endpoint_parse(LWM2M_SERVER_ADDRESS_SECOND, strlen(LWM2M_SERVER_ADDRESS_SECOND),
|
||||
&server_ep_second) != 0) {
|
||||
#if REGISTER_WITH_LWM2M_BOOTSTRAP_SERVER
|
||||
lwm2m_rd_client_register_with_bootstrap_server(&session_info_second, &server_ep_second);
|
||||
#else
|
||||
lwm2m_rd_client_register_with_server(&session_info_second, &server_ep_second);
|
||||
#endif
|
||||
lwm2m_rd_client_register_with_server(&session_info_second, &server_ep_second, SERVER_TYPE);
|
||||
}
|
||||
#endif /* LWM2M_SERVER_ADDRESS_SECOND */
|
||||
#endif /* LWM2M_SESSIONS == 2 */
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
PROCESS_THREAD(example_ipso_objects, ev, data)
|
||||
|
@ -108,10 +108,6 @@
|
||||
#define FLAG_RD_DATA_UPDATE_TRIGGERED 0x02
|
||||
#define FLAG_RD_DATA_UPDATE_ON_DIRTY 0x10
|
||||
|
||||
/* The type of server to use: bootstrap or registration */
|
||||
#define USE_BOOTSTRAP_SERVER 0
|
||||
#define USE_REGISTRATION_SERVER 1
|
||||
|
||||
LIST(session_info_list);
|
||||
|
||||
/* Shared by all sessions, used by only one at a time in the FSM */
|
||||
@ -119,7 +115,7 @@ static char query_data[64]; /* allocate some data for queries and updates */
|
||||
static uint8_t rd_data[128]; /* allocate some data for the RD */
|
||||
|
||||
static coap_timer_t rd_timer; /* Timer to tick the FSM periodically */
|
||||
static char default_ep [20];
|
||||
static char default_ep[20];
|
||||
|
||||
#if LWM2M_QUEUE_MODE_ENABLED
|
||||
static coap_timer_t queue_mode_client_awake_timer; /* Timer to control the client's
|
||||
@ -135,7 +131,7 @@ static void queue_mode_awake_timer_callback(coap_timer_t *timer);
|
||||
|
||||
static void check_periodic_observations();
|
||||
static void update_callback(coap_callback_request_state_t *callback_state);
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int
|
||||
set_rd_data(lwm2m_session_info_t *session_info)
|
||||
{
|
||||
@ -239,9 +235,8 @@ lwm2m_rd_client_set_endpoint_name(lwm2m_session_info_t *session_info, const char
|
||||
void
|
||||
lwm2m_rd_client_set_default_endpoint_name(const char *endpoint)
|
||||
{
|
||||
if(default_ep != NULL) {
|
||||
strcpy(default_ep, endpoint);
|
||||
}
|
||||
strncpy(default_ep, endpoint, sizeof(default_ep) - 1);
|
||||
default_ep[sizeof(default_ep) - 1] = '\0';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
void
|
||||
@ -261,8 +256,10 @@ lwm2m_rd_client_set_automatic_update(lwm2m_session_info_t *session_info, int upd
|
||||
(update != 0 ? FLAG_RD_DATA_UPDATE_ON_DIRTY : 0);
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static void
|
||||
setup_session_default_values(lwm2m_session_info_t *session_info)
|
||||
void
|
||||
lwm2m_rd_client_register_with_server(lwm2m_session_info_t *session_info,
|
||||
const coap_endpoint_t *server,
|
||||
lwm2m_rd_client_server_type_t server_type)
|
||||
{
|
||||
if(session_info->ep == NULL) {
|
||||
session_info->ep = default_ep;
|
||||
@ -282,21 +279,25 @@ setup_session_default_values(lwm2m_session_info_t *session_info)
|
||||
#endif /* LWM2M_QUEUE_MODE_CONF_ENABLED */
|
||||
|
||||
session_info->rd_flags = FLAG_RD_DATA_UPDATE_ON_DIRTY;
|
||||
session_info->has_bs_server_info = 0;
|
||||
session_info->has_registration_server_info = 0;
|
||||
session_info->wait_until_network_check = 0;
|
||||
session_info->last_update = 0;
|
||||
session_info->last_rd_progress = 0;
|
||||
session_info->bootstrapped = 0;
|
||||
session_info->rd_state = INIT;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
void
|
||||
lwm2m_rd_client_register_with_server(lwm2m_session_info_t *session_info, const coap_endpoint_t *server)
|
||||
{
|
||||
|
||||
if(server_type == LWM2M_RD_CLIENT_BOOTSTRAP_SERVER) {
|
||||
coap_endpoint_copy(&session_info->bs_server_ep, server);
|
||||
session_info->has_bs_server_info = 1;
|
||||
session_info->use_server_type = LWM2M_RD_CLIENT_BOOTSTRAP_SERVER;
|
||||
} else {
|
||||
coap_endpoint_copy(&session_info->server_ep, server);
|
||||
session_info->use_server_type = LWM2M_RD_CLIENT_LWM2M_SERVER;
|
||||
session_info->has_registration_server_info = 1;
|
||||
}
|
||||
|
||||
list_add(session_info_list, session_info); /* Add to the list of sessions */
|
||||
setup_session_default_values(session_info);
|
||||
coap_endpoint_copy(&session_info->server_ep, server);
|
||||
session_info->has_registration_server_info = 1;
|
||||
session_info->use_server_type = USE_REGISTRATION_SERVER;
|
||||
session_info->rd_state = INIT;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int
|
||||
@ -324,18 +325,6 @@ update_registration_server(lwm2m_session_info_t *session_info)
|
||||
return 0;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
void
|
||||
lwm2m_rd_client_register_with_bootstrap_server(lwm2m_session_info_t *session_info, const coap_endpoint_t *server)
|
||||
{
|
||||
list_add(session_info_list, session_info); /* Add to the list of sessions */
|
||||
setup_session_default_values(session_info);
|
||||
coap_endpoint_copy(&session_info->bs_server_ep, server);
|
||||
session_info->has_bs_server_info = 1;
|
||||
session_info->use_server_type = USE_BOOTSTRAP_SERVER;
|
||||
session_info->bootstrapped = 0;
|
||||
session_info->rd_state = INIT;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
int
|
||||
lwm2m_rd_client_deregister(lwm2m_session_info_t *session_info)
|
||||
{
|
||||
@ -348,7 +337,7 @@ lwm2m_rd_client_deregister(lwm2m_session_info_t *session_info)
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static lwm2m_session_info_t *
|
||||
get_sessio_info_from_server_ep(const coap_endpoint_t *server_ep)
|
||||
get_session_info_from_server_ep(const coap_endpoint_t *server_ep)
|
||||
{
|
||||
lwm2m_session_info_t *session_info = (lwm2m_session_info_t *)list_head(session_info_list);
|
||||
while(session_info != NULL) {
|
||||
@ -359,10 +348,11 @@ get_sessio_info_from_server_ep(const coap_endpoint_t *server_ep)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
void
|
||||
lwm2m_rd_client_update_triggered(const coap_endpoint_t *server_ep)
|
||||
{
|
||||
lwm2m_session_info_t *session_info = get_sessio_info_from_server_ep(server_ep);
|
||||
lwm2m_session_info_t *session_info = get_session_info_from_server_ep(server_ep);
|
||||
if(session_info) {
|
||||
session_info->rd_flags |= FLAG_RD_DATA_UPDATE_TRIGGERED;
|
||||
}
|
||||
@ -675,7 +665,7 @@ periodic_process(coap_timer_t *timer)
|
||||
session_info->wait_until_network_check = now + 10000;
|
||||
if(has_network_access()) {
|
||||
/* Either do bootstrap then registration */
|
||||
if(session_info->use_server_type == USE_BOOTSTRAP_SERVER) {
|
||||
if(session_info->use_server_type == LWM2M_RD_CLIENT_BOOTSTRAP_SERVER) {
|
||||
session_info->rd_state = DO_BOOTSTRAP;
|
||||
} else {
|
||||
session_info->rd_state = DO_REGISTRATION;
|
||||
@ -685,7 +675,8 @@ periodic_process(coap_timer_t *timer)
|
||||
}
|
||||
break;
|
||||
case DO_BOOTSTRAP:
|
||||
if(session_info->use_server_type == USE_BOOTSTRAP_SERVER && session_info->bootstrapped == 0) {
|
||||
if(session_info->use_server_type == LWM2M_RD_CLIENT_BOOTSTRAP_SERVER &&
|
||||
session_info->bootstrapped == 0) {
|
||||
if(update_bootstrap_server(session_info)) {
|
||||
|
||||
/* prepare request, TID is set by COAP_BLOCKING_REQUEST() */
|
||||
@ -711,7 +702,7 @@ periodic_process(coap_timer_t *timer)
|
||||
break;
|
||||
case BOOTSTRAP_DONE:
|
||||
/* check that we should still use bootstrap */
|
||||
if(session_info->use_server_type == USE_BOOTSTRAP_SERVER) {
|
||||
if(session_info->use_server_type == LWM2M_RD_CLIENT_BOOTSTRAP_SERVER) {
|
||||
lwm2m_security_server_t *security;
|
||||
LOG_DBG("*** Bootstrap - checking for server info...\n");
|
||||
/* get the security object - ignore bootstrap servers */
|
||||
@ -748,7 +739,7 @@ periodic_process(coap_timer_t *timer)
|
||||
if(secure) {
|
||||
LOG_DBG("Secure CoAP requested but not supported - can not bootstrap\n");
|
||||
} else {
|
||||
lwm2m_rd_client_register_with_server(session_info, &session_info->server_ep);
|
||||
lwm2m_rd_client_register_with_server(session_info, &session_info->server_ep, LWM2M_RD_CLIENT_LWM2M_SERVER);
|
||||
session_info->bootstrapped++;
|
||||
}
|
||||
}
|
||||
@ -777,7 +768,8 @@ periodic_process(coap_timer_t *timer)
|
||||
return;
|
||||
}
|
||||
|
||||
if(session_info->use_server_type == USE_REGISTRATION_SERVER && !lwm2m_rd_client_is_registered(session_info) &&
|
||||
if(session_info->use_server_type == LWM2M_RD_CLIENT_LWM2M_SERVER &&
|
||||
!lwm2m_rd_client_is_registered(session_info) &&
|
||||
update_registration_server(session_info)) {
|
||||
int len;
|
||||
|
||||
@ -891,7 +883,7 @@ periodic_process(coap_timer_t *timer)
|
||||
void
|
||||
lwm2m_rd_client_init(const char *ep)
|
||||
{
|
||||
strcpy(default_ep, ep);
|
||||
lwm2m_rd_client_set_default_endpoint_name(ep);
|
||||
|
||||
/* call the RD client periodically */
|
||||
coap_timer_set_callback(&rd_timer, periodic_process);
|
||||
@ -908,7 +900,7 @@ check_periodic_observations(void)
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
*Queue Mode Support
|
||||
* Queue Mode Support
|
||||
*/
|
||||
#if LWM2M_QUEUE_MODE_ENABLED
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
@ -46,6 +46,13 @@
|
||||
#ifndef LWM2M_RD_CLIENT_H_
|
||||
#define LWM2M_RD_CLIENT_H_
|
||||
|
||||
/* The type of server to use for registration: bootstrap or LWM2M */
|
||||
typedef enum {
|
||||
LWM2M_RD_CLIENT_BOOTSTRAP_SERVER,
|
||||
LWM2M_RD_CLIENT_LWM2M_SERVER
|
||||
} lwm2m_rd_client_server_type_t;
|
||||
|
||||
/* Session callback states */
|
||||
#define LWM2M_RD_CLIENT_BOOTSTRAPPED 1
|
||||
#define LWM2M_RD_CLIENT_REGISTERED 2
|
||||
#define LWM2M_RD_CLIENT_DEREGISTERED 3
|
||||
@ -76,7 +83,7 @@ typedef struct lwm2m_session_info {
|
||||
uint16_t lifetime;
|
||||
coap_endpoint_t bs_server_ep;
|
||||
coap_endpoint_t server_ep;
|
||||
uint8_t use_server_type;
|
||||
lwm2m_rd_client_server_type_t use_server_type;
|
||||
uint8_t has_bs_server_info;
|
||||
uint8_t has_registration_server_info;
|
||||
uint8_t bootstrapped; /* bootstrap done */
|
||||
@ -101,8 +108,7 @@ typedef struct lwm2m_session_info {
|
||||
} lwm2m_session_info_t;
|
||||
|
||||
int lwm2m_rd_client_is_registered(lwm2m_session_info_t *session_info);
|
||||
void lwm2m_rd_client_register_with_server(lwm2m_session_info_t *session_info, const coap_endpoint_t *server);
|
||||
void lwm2m_rd_client_register_with_bootstrap_server(lwm2m_session_info_t *session_info, const coap_endpoint_t *server);
|
||||
void lwm2m_rd_client_register_with_server(lwm2m_session_info_t *session_info, const coap_endpoint_t *server, lwm2m_rd_client_server_type_t server_type);
|
||||
uint16_t lwm2m_rd_client_get_lifetime(lwm2m_session_info_t *session_info);
|
||||
void lwm2m_rd_client_set_lifetime(lwm2m_session_info_t *session_info, uint16_t lifetime);
|
||||
void lwm2m_rd_client_set_endpoint_name(lwm2m_session_info_t *session_info, const char *endpoint);
|
||||
|
Loading…
Reference in New Issue
Block a user