Initial commit: CCU621_M firmware project with BLE debug link support.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+292
@@ -0,0 +1,292 @@
|
||||
#include "iotx_dm_internal.h"
|
||||
|
||||
#ifdef ALCS_ENABLED
|
||||
|
||||
#ifdef LOG_REPORT_TO_CLOUD
|
||||
#include "iotx_log_report.h"
|
||||
#endif
|
||||
static int _dm_server_malloc_context(_IN_ NetworkAddr *remote, _IN_ CoAPMessage *message,
|
||||
_OU_ dm_server_alcs_context_t **context)
|
||||
{
|
||||
dm_server_alcs_context_t *alcs_context = NULL;
|
||||
|
||||
alcs_context = DM_malloc(sizeof(dm_server_alcs_context_t));
|
||||
if (alcs_context == NULL) {
|
||||
return STATE_SYS_DEPEND_MALLOC;
|
||||
}
|
||||
memset(alcs_context, 0, sizeof(dm_server_alcs_context_t));
|
||||
|
||||
alcs_context->ip = DM_malloc(strlen((char *)remote->addr) + 1);
|
||||
if (alcs_context->ip == NULL) {
|
||||
DM_free(alcs_context);
|
||||
return STATE_SYS_DEPEND_MALLOC;
|
||||
}
|
||||
memset(alcs_context->ip, 0, strlen((char *)remote->addr) + 1);
|
||||
memcpy(alcs_context->ip, (char *)remote->addr, strlen((char *)remote->addr) + 1);
|
||||
|
||||
alcs_context->port = remote->port;
|
||||
|
||||
alcs_context->token = DM_malloc(message->header.tokenlen);
|
||||
if (alcs_context->token == NULL) {
|
||||
DM_free(alcs_context->ip);
|
||||
DM_free(alcs_context);
|
||||
return STATE_SYS_DEPEND_MALLOC;
|
||||
}
|
||||
memset(alcs_context->token, 0, message->header.tokenlen);
|
||||
memcpy(alcs_context->token, message->token, message->header.tokenlen);
|
||||
|
||||
alcs_context->token_len = message->header.tokenlen;
|
||||
|
||||
*context = alcs_context;
|
||||
|
||||
return SUCCESS_RETURN;
|
||||
}
|
||||
|
||||
void dm_server_free_context(_IN_ void *ctx)
|
||||
{
|
||||
dm_server_alcs_context_t *context = (dm_server_alcs_context_t *)ctx;
|
||||
DM_free(context->ip);
|
||||
DM_free(context->token);
|
||||
DM_free(context);
|
||||
}
|
||||
|
||||
static dm_server_uri_map_t g_dm_server_uri_map[] = {
|
||||
#if !defined(DEVICE_MODEL_RAWDATA_SOLO)
|
||||
{DM_URI_THING_SERVICE_PROPERTY_SET, DM_URI_SYS_PREFIX, IOTX_DM_LOCAL_AUTH, dm_server_thing_service_property_set },
|
||||
{DM_URI_THING_SERVICE_PROPERTY_GET, DM_URI_SYS_PREFIX, IOTX_DM_LOCAL_AUTH, dm_server_thing_service_property_get },
|
||||
{DM_URI_THING_EVENT_PROPERTY_POST, DM_URI_SYS_PREFIX, IOTX_DM_LOCAL_AUTH, dm_server_thing_service_property_post },
|
||||
{DM_URI_THING_SERVICE_REQUEST_WILDCARD2, DM_URI_SYS_PREFIX, IOTX_DM_LOCAL_AUTH, dm_server_thing_service_request },
|
||||
#endif
|
||||
{DM_URI_DEV_CORE_SERVICE_DEV, NULL, IOTX_DM_LOCAL_NO_AUTH, dm_server_thing_dev_core_service_dev },
|
||||
};
|
||||
|
||||
int dm_server_subscribe_all(char product_key[IOTX_PRODUCT_KEY_LEN + 1], char device_name[IOTX_DEVICE_NAME_LEN + 1])
|
||||
{
|
||||
int res = 0, index = 0, auth = 0;
|
||||
int number = sizeof(g_dm_server_uri_map) / sizeof(dm_server_uri_map_t);
|
||||
char *uri = NULL;
|
||||
|
||||
for (index = 0; index < number; index++) {
|
||||
res = dm_utils_service_name((char *)g_dm_server_uri_map[index].uri_prefix, (char *)g_dm_server_uri_map[index].uri_name,
|
||||
product_key, device_name, &uri);
|
||||
if (res < SUCCESS_RETURN) {
|
||||
index--;
|
||||
continue;
|
||||
}
|
||||
|
||||
auth = (g_dm_server_uri_map[index].auth_type & IOTX_DM_SERVICE_LOCAL_AUTH) ? (IOTX_DM_MESSAGE_AUTH) :
|
||||
(IOTX_DM_MESSAGE_NO_AUTH);
|
||||
res = dm_server_subscribe(uri, (void *)g_dm_server_uri_map[index].callback, auth);
|
||||
if (res < SUCCESS_RETURN) {
|
||||
index--;
|
||||
DM_free(uri);
|
||||
continue;
|
||||
}
|
||||
DM_free(uri);
|
||||
}
|
||||
|
||||
return SUCCESS_RETURN;
|
||||
}
|
||||
|
||||
void dm_server_alcs_event_handler(void *pcontext, void *phandle, iotx_alcs_event_msg_t *msg)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#if !defined(DEVICE_MODEL_RAWDATA_SOLO)
|
||||
void dm_server_thing_service_property_set(CoAPContext *context, const char *paths, NetworkAddr *remote,
|
||||
CoAPMessage *message)
|
||||
{
|
||||
int res = 0;
|
||||
dm_msg_source_t source;
|
||||
dm_msg_dest_t dest;
|
||||
dm_msg_request_payload_t request;
|
||||
dm_msg_response_t response;
|
||||
dm_server_alcs_context_t *alcs_context = NULL;
|
||||
|
||||
res = _dm_server_malloc_context(remote, message, &alcs_context);
|
||||
if (res != SUCCESS_RETURN) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&source, 0, sizeof(dm_msg_source_t));
|
||||
memset(&dest, 0, sizeof(dm_msg_dest_t));
|
||||
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
||||
memset(&response, 0, sizeof(dm_msg_response_t));
|
||||
|
||||
source.uri = paths;
|
||||
source.payload = (unsigned char *)message->payload;
|
||||
source.payload_len = message->payloadlen;
|
||||
source.context = alcs_context;
|
||||
|
||||
dest.uri_name = DM_URI_THING_SERVICE_PROPERTY_SET;
|
||||
|
||||
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODLE_RX_LOCAL_MESSAGE, "recv property set from %s", remote->addr);
|
||||
|
||||
res = dm_msg_proc_thing_service_property_set(&source, &dest, &request, &response);
|
||||
if (res < SUCCESS_RETURN) {
|
||||
dm_server_free_context(alcs_context);
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef LOG_REPORT_TO_CLOUD
|
||||
{
|
||||
extern void send_permance_info(char *input, int input_len, char *comments, int report_format);
|
||||
if (SUCCESS_RETURN == check_target_msg(request.id.value, request.id.value_length)) {
|
||||
send_permance_info(request.id.value, request.id.value_length, "2", 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
dm_msg_response(DM_MSG_DEST_LOCAL, &request, &response, "{}", strlen("{}"), (void *)alcs_context);
|
||||
dm_server_free_context(alcs_context);
|
||||
}
|
||||
|
||||
void dm_server_thing_service_request(CoAPContext *context, const char *paths, NetworkAddr *remote,
|
||||
CoAPMessage *message)
|
||||
{
|
||||
int res = 0;
|
||||
dm_msg_source_t source;
|
||||
|
||||
dm_server_alcs_context_t *alcs_context = NULL;
|
||||
|
||||
res = _dm_server_malloc_context(remote, message, &alcs_context);
|
||||
if (res != SUCCESS_RETURN) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&source, 0, sizeof(dm_msg_source_t));
|
||||
|
||||
source.uri = paths;
|
||||
source.payload = (unsigned char *)message->payload;
|
||||
source.payload_len = message->payloadlen;
|
||||
source.context = alcs_context;
|
||||
|
||||
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODLE_RX_LOCAL_MESSAGE, "recv service request from %s", remote->addr);
|
||||
|
||||
if (dm_msg_proc_thing_service_request(&source) < 0) {
|
||||
dm_server_free_context(alcs_context);
|
||||
}
|
||||
}
|
||||
|
||||
void dm_server_thing_service_property_get(CoAPContext *context, const char *paths, NetworkAddr *remote,
|
||||
CoAPMessage *message)
|
||||
{
|
||||
int res = 0;
|
||||
dm_server_alcs_context_t *alcs_context = NULL;
|
||||
dm_msg_source_t source;
|
||||
dm_msg_dest_t dest;
|
||||
dm_msg_request_payload_t request;
|
||||
dm_msg_response_t response;
|
||||
unsigned char *data = NULL;
|
||||
int data_len = 0;
|
||||
|
||||
res = _dm_server_malloc_context(remote, message, &alcs_context);
|
||||
if (res != SUCCESS_RETURN) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&source, 0, sizeof(dm_msg_source_t));
|
||||
memset(&dest, 0, sizeof(dm_msg_dest_t));
|
||||
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
||||
memset(&response, 0, sizeof(dm_msg_response_t));
|
||||
|
||||
source.uri = paths;
|
||||
source.payload = (unsigned char *)message->payload;
|
||||
source.payload_len = message->payloadlen;
|
||||
source.context = alcs_context;
|
||||
|
||||
dest.uri_name = DM_URI_THING_SERVICE_PROPERTY_GET;
|
||||
|
||||
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODLE_RX_LOCAL_MESSAGE, "recv property get from %s", remote->addr);
|
||||
|
||||
dm_msg_proc_thing_service_property_get(&source, &dest, &request, &response, &data, &data_len);
|
||||
|
||||
#ifdef DEPRECATED_LINKKIT
|
||||
dm_msg_response(DM_MSG_DEST_LOCAL, &request, &response, (char *)data, data_len, alcs_context);
|
||||
DM_free(data);
|
||||
dm_server_free_context(alcs_context);
|
||||
#endif
|
||||
}
|
||||
|
||||
void dm_server_thing_service_property_post(CoAPContext *context, const char *paths, NetworkAddr *remote,
|
||||
CoAPMessage *message)
|
||||
{
|
||||
int res = 0;
|
||||
dm_server_alcs_context_t *alcs_context = NULL;
|
||||
dm_msg_source_t source;
|
||||
dm_msg_dest_t dest;
|
||||
dm_msg_request_payload_t request;
|
||||
dm_msg_response_t response;
|
||||
|
||||
res = _dm_server_malloc_context(remote, message, &alcs_context);
|
||||
if (res != SUCCESS_RETURN) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&source, 0, sizeof(dm_msg_source_t));
|
||||
memset(&dest, 0, sizeof(dm_msg_dest_t));
|
||||
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
||||
memset(&response, 0, sizeof(dm_msg_response_t));
|
||||
|
||||
source.uri = paths;
|
||||
source.payload = (unsigned char *)message->payload;
|
||||
source.payload_len = message->payloadlen;
|
||||
source.context = alcs_context;
|
||||
|
||||
dest.uri_name = DM_URI_THING_EVENT_PROPERTY_POST;
|
||||
|
||||
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODLE_RX_LOCAL_MESSAGE, "recv property post from %s", remote->addr);
|
||||
|
||||
dm_msg_proc_thing_service_property_post(&source, &dest, &request, &response);
|
||||
|
||||
dm_msg_response(DM_MSG_DEST_LOCAL, &request, &response, "{}", strlen("{}"), alcs_context);
|
||||
dm_server_free_context(alcs_context);
|
||||
}
|
||||
|
||||
#endif
|
||||
void dm_server_thing_dev_core_service_dev(CoAPContext *context, const char *paths, NetworkAddr *remote,
|
||||
CoAPMessage *message)
|
||||
{
|
||||
int res = 0;
|
||||
dm_server_alcs_context_t *alcs_context = NULL;
|
||||
dm_msg_source_t source;
|
||||
dm_msg_dest_t dest;
|
||||
dm_msg_request_payload_t request;
|
||||
dm_msg_response_t response;
|
||||
unsigned char *data = NULL;
|
||||
int data_len = 0;
|
||||
|
||||
res = _dm_server_malloc_context(remote, message, &alcs_context);
|
||||
if (res != SUCCESS_RETURN) {
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&source, 0, sizeof(dm_msg_source_t));
|
||||
memset(&dest, 0, sizeof(dm_msg_dest_t));
|
||||
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
||||
memset(&response, 0, sizeof(dm_msg_response_t));
|
||||
|
||||
source.uri = paths;
|
||||
source.payload = (unsigned char *)message->payload;
|
||||
source.payload_len = message->payloadlen;
|
||||
source.context = alcs_context;
|
||||
|
||||
dest.uri_name = DM_URI_DEV_CORE_SERVICE_DEV;
|
||||
|
||||
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODLE_RX_LOCAL_MESSAGE, "recv core service dev from %s", remote->addr);
|
||||
|
||||
res = dm_msg_proc_thing_dev_core_service_dev(&source, &dest, &request, &response, &data, &data_len);
|
||||
if (res < SUCCESS_RETURN) {
|
||||
dm_server_free_context(alcs_context);
|
||||
return;
|
||||
}
|
||||
|
||||
dm_msg_response(DM_MSG_DEST_LOCAL, &request, &response, (char *)data, data_len, alcs_context);
|
||||
|
||||
if (response.code == IOTX_DM_ERR_CODE_SUCCESS) {
|
||||
DM_free(data);
|
||||
}
|
||||
dm_server_free_context(alcs_context);
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user