9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
2422 lines
68 KiB
C
2422 lines
68 KiB
C
/*
|
|
* Copyright (C) 2015-2018 Alibaba Group Holding Limited
|
|
*/
|
|
|
|
|
|
|
|
#include "iotx_dm_internal.h"
|
|
|
|
static dm_mgr_ctx g_dm_mgr = {0};
|
|
|
|
static dm_mgr_ctx *_dm_mgr_get_ctx(void)
|
|
{
|
|
return &g_dm_mgr;
|
|
}
|
|
|
|
static void _dm_mgr_mutex_lock(void)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
if (ctx->mutex) {
|
|
HAL_MutexLock(ctx->mutex);
|
|
}
|
|
}
|
|
|
|
static void _dm_mgr_mutex_unlock(void)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
if (ctx->mutex) {
|
|
HAL_MutexUnlock(ctx->mutex);
|
|
}
|
|
}
|
|
|
|
static int _dm_mgr_next_devid(void)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
|
|
return ctx->global_devid++;
|
|
}
|
|
|
|
static int _dm_mgr_search_dev_by_devid(_IN_ int devid, _OU_ dm_mgr_dev_node_t **node)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *search_node = NULL;
|
|
|
|
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
|
|
if (search_node->devid == devid) {
|
|
if (node) {
|
|
*node = search_node;
|
|
}
|
|
return SUCCESS_RETURN;
|
|
}
|
|
}
|
|
|
|
return STATE_DEV_MODEL_DEVICE_NOT_FOUND;
|
|
}
|
|
|
|
static int _dm_mgr_search_dev_by_pkdn(_IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1],
|
|
_IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1], _OU_ dm_mgr_dev_node_t **node)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *search_node = NULL;
|
|
|
|
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
|
|
if ((strlen(search_node->product_key) == strlen(product_key)) &&
|
|
(memcmp(search_node->product_key, product_key, strlen(product_key)) == 0) &&
|
|
(strlen(search_node->device_name) == strlen(device_name)) &&
|
|
(memcmp(search_node->device_name, device_name, strlen(device_name)) == 0)) {
|
|
if (node) {
|
|
*node = search_node;
|
|
}
|
|
return SUCCESS_RETURN;
|
|
}
|
|
}
|
|
|
|
return STATE_DEV_MODEL_DEVICE_NOT_FOUND;
|
|
}
|
|
|
|
static int _dm_mgr_insert_dev(_IN_ int devid, _IN_ int dev_type, char product_key[IOTX_PRODUCT_KEY_LEN + 1],
|
|
char device_name[IOTX_DEVICE_NAME_LEN + 1])
|
|
{
|
|
int res = 0;
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (strlen(product_key) >= IOTX_PRODUCT_KEY_LEN + 1) {
|
|
return STATE_USER_INPUT_PK;
|
|
}
|
|
|
|
if (strlen(device_name) >= IOTX_DEVICE_NAME_LEN + 1) {
|
|
return STATE_USER_INPUT_DN;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, NULL);
|
|
if (res == SUCCESS_RETURN) {
|
|
return STATE_DEV_MODEL_DEVICE_ALREADY_EXIST;
|
|
}
|
|
|
|
node = DM_malloc(sizeof(dm_mgr_dev_node_t));
|
|
if (node == NULL) {
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(node, 0, sizeof(dm_mgr_dev_node_t));
|
|
|
|
node->devid = devid;
|
|
node->dev_type = dev_type;
|
|
memcpy(node->product_key, product_key, strlen(product_key));
|
|
memcpy(node->device_name, device_name, strlen(device_name));
|
|
INIT_LIST_HEAD(&node->linked_list);
|
|
|
|
list_add_tail(&node->linked_list, &ctx->dev_list);
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
static void _dm_mgr_destroy_devlist(void)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *del_node = NULL;
|
|
dm_mgr_dev_node_t *next_node = NULL;
|
|
|
|
list_for_each_entry_safe(del_node, next_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
|
|
list_del(&del_node->linked_list);
|
|
#ifdef DEPRECATED_LINKKIT
|
|
dm_shw_destroy(&del_node->dev_shadow);
|
|
#endif
|
|
DM_free(del_node);
|
|
}
|
|
}
|
|
|
|
#ifdef DEPRECATED_LINKKIT
|
|
static int _dm_mgr_legacy_thing_created(int devid)
|
|
{
|
|
int res = 0, message_len = 0;
|
|
const char *thing_created_fmt = "{\"devid\":%d}";
|
|
char *message = NULL;
|
|
|
|
message_len = strlen(thing_created_fmt) + DM_UTILS_UINT32_STRLEN + 1;
|
|
message = DM_malloc(message_len);
|
|
if (message == NULL) {
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(message, 0, message_len);
|
|
HAL_Snprintf(message, message_len, thing_created_fmt, devid);
|
|
|
|
res = _dm_msg_send_to_user(IOTX_DM_EVENT_LEGACY_THING_CREATED, message);
|
|
if (res != SUCCESS_RETURN) {
|
|
DM_free(message);
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
#endif
|
|
|
|
int dm_mgr_init(void)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
char product_key[IOTX_PRODUCT_KEY_LEN + 1] = {0};
|
|
char device_name[IOTX_DEVICE_NAME_LEN + 1] = {0};
|
|
|
|
memset(ctx, 0, sizeof(dm_mgr_ctx));
|
|
|
|
/* Create Mutex */
|
|
ctx->mutex = HAL_MutexCreate();
|
|
if (ctx->mutex == NULL) {
|
|
res = STATE_SYS_DEPEND_MUTEX_CREATE;
|
|
goto ERROR;
|
|
}
|
|
|
|
/* Init Device Id*/
|
|
ctx->global_devid = IOTX_DM_LOCAL_NODE_DEVID + 1;
|
|
|
|
/* Init Device List */
|
|
INIT_LIST_HEAD(&ctx->dev_list);
|
|
|
|
/* Local Node */
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, device_name);
|
|
res = _dm_mgr_insert_dev(IOTX_DM_LOCAL_NODE_DEVID, IOTX_DM_DEVICE_TYPE, product_key, device_name);
|
|
if (res != SUCCESS_RETURN) {
|
|
goto ERROR;
|
|
}
|
|
|
|
#ifdef DEPRECATED_LINKKIT
|
|
_dm_mgr_legacy_thing_created(IOTX_DM_LOCAL_NODE_DEVID);
|
|
#endif
|
|
|
|
return SUCCESS_RETURN;
|
|
|
|
ERROR:
|
|
if (ctx->mutex) {
|
|
HAL_MutexDestroy(ctx->mutex);
|
|
}
|
|
memset(ctx, 0, sizeof(dm_mgr_ctx));
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_deinit(void)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
|
|
_dm_mgr_mutex_lock();
|
|
_dm_mgr_destroy_devlist();
|
|
_dm_mgr_mutex_unlock();
|
|
|
|
if (ctx->mutex) {
|
|
HAL_MutexDestroy(ctx->mutex);
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_device_query(_IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1],
|
|
_IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1], _OU_ int *devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
/* duplicated parameters check is removed */
|
|
|
|
res = _dm_mgr_search_dev_by_pkdn(product_key, device_name, &node);
|
|
if (res == SUCCESS_RETURN) {
|
|
if (devid) {
|
|
*devid = node->devid;
|
|
}
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
return STATE_DEV_MODEL_DEVICE_NOT_FOUND;
|
|
}
|
|
|
|
int dm_mgr_device_create(_IN_ int dev_type, _IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1],
|
|
_IN_ char product_secret[IOTX_PRODUCT_SECRET_LEN + 1],
|
|
_IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1], _IN_ char device_secret[IOTX_DEVICE_SECRET_LEN + 1], _OU_ int *devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (product_key == NULL || product_secret == NULL || device_name == NULL ||
|
|
strlen(product_key) >= IOTX_PRODUCT_KEY_LEN + 1 ||
|
|
strlen(product_secret) >= IOTX_PRODUCT_SECRET_LEN + 1 ||
|
|
strlen(device_name) >= IOTX_DEVICE_NAME_LEN + 1) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
if (device_secret != NULL && strlen(device_secret) >= IOTX_DEVICE_SECRET_LEN + 1) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_pkdn(product_key, device_name, &node);
|
|
if (res == SUCCESS_RETURN) {
|
|
if (devid) {
|
|
*devid = node->devid;
|
|
}
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
node = DM_malloc(sizeof(dm_mgr_dev_node_t));
|
|
if (node == NULL) {
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(node, 0, sizeof(dm_mgr_dev_node_t));
|
|
|
|
node->devid = _dm_mgr_next_devid();
|
|
node->dev_type = dev_type;
|
|
#if defined(DEPRECATED_LINKKIT)
|
|
node->dev_shadow = NULL;
|
|
node->tsl_source = IOTX_DM_TSL_SOURCE_CLOUD;
|
|
#endif
|
|
memcpy(node->product_key, product_key, strlen(product_key));
|
|
memcpy(node->product_secret, product_secret, strlen(product_secret));
|
|
memcpy(node->device_name, device_name, strlen(device_name));
|
|
if (device_secret != NULL) {
|
|
memcpy(node->device_secret, device_secret, strlen(device_secret));
|
|
}
|
|
node->dev_status = IOTX_DM_DEV_STATUS_AUTHORIZED;
|
|
INIT_LIST_HEAD(&node->linked_list);
|
|
|
|
list_add_tail(&node->linked_list, &ctx->dev_list);
|
|
|
|
if (devid) {
|
|
*devid = node->devid;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_device_destroy(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_DEVID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
if (node->devid == IOTX_DM_LOCAL_NODE_DEVID) {
|
|
return STATE_DEV_MODEL_SUBD_NOT_DELETEABLE;
|
|
}
|
|
|
|
list_del(&node->linked_list);
|
|
|
|
#if defined(DEPRECATED_LINKKIT)
|
|
if (node->dev_shadow) {
|
|
dm_shw_destroy(&node->dev_shadow);
|
|
}
|
|
#endif
|
|
|
|
#if defined(DEVICE_MODEL_GATEWAY) && !defined(MQTT_AUTO_SUBSCRIBE)
|
|
dm_client_subdev_unsubscribe(node->product_key, node->device_name);
|
|
#endif
|
|
|
|
DM_free(node);
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_device_number(void)
|
|
{
|
|
int index = 0;
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *search_node = NULL;
|
|
|
|
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
|
|
index++;
|
|
}
|
|
|
|
return index;
|
|
}
|
|
|
|
int dm_mgr_get_devid_by_index(_IN_ int index, _OU_ int *devid)
|
|
{
|
|
int search_index = 0;
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *search_node = NULL;
|
|
|
|
if (index < 0 || devid == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
|
|
if (search_index == index) {
|
|
*devid = search_node->devid;
|
|
return SUCCESS_RETURN;
|
|
}
|
|
search_index++;
|
|
}
|
|
|
|
return STATE_DEV_MODEL_DEVICE_NOT_FOUND;
|
|
}
|
|
|
|
int dm_mgr_get_next_devid(_IN_ int devid, _OU_ int *devid_next)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *search_node = NULL;
|
|
dm_mgr_dev_node_t *next_node = NULL;
|
|
|
|
if (devid < 0 || devid_next == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
list_for_each_entry(next_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
|
|
if (search_node && search_node->devid == devid) {
|
|
*devid_next = next_node->devid;
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
if (next_node->devid == devid) {
|
|
search_node = next_node;
|
|
}
|
|
}
|
|
|
|
return STATE_DEV_MODEL_DEVICE_NOT_FOUND;
|
|
}
|
|
|
|
int dm_mgr_search_device_by_devid(_IN_ int devid, _OU_ char product_key[IOTX_PRODUCT_KEY_LEN + 1],
|
|
_OU_ char device_name[IOTX_DEVICE_NAME_LEN + 1], _OU_ char device_secret[IOTX_DEVICE_SECRET_LEN + 1])
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (product_key == NULL || device_name == NULL || device_secret == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memcpy(product_key, node->product_key, strlen(node->product_key));
|
|
memcpy(device_name, node->device_name, strlen(node->device_name));
|
|
memcpy(device_secret, node->device_secret, strlen(node->device_secret));
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_search_device_by_pkdn(_IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1],
|
|
_IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1],
|
|
_OU_ int *devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (product_key == NULL || device_name == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_pkdn(product_key, device_name, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
if (devid) {
|
|
*devid = node->devid;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_search_device_node_by_devid(_IN_ int devid, _OU_ void **node)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *search_node = NULL;
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &search_node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return STATE_DEV_MODEL_DEVICE_NOT_FOUND;
|
|
}
|
|
|
|
if (node) {
|
|
*node = (void *)search_node;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_get_dev_type(_IN_ int devid, _OU_ int *dev_type)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || dev_type == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
*dev_type = node->dev_type;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_set_dev_enable(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
node->status = IOTX_DM_DEV_AVAIL_ENABLE;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_set_dev_disable(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
node->status = IOTX_DM_DEV_AVAIL_DISABLE;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_get_dev_avail(_IN_ char product_key[IOTX_PRODUCT_KEY_LEN + 1],
|
|
_IN_ char device_name[IOTX_DEVICE_NAME_LEN + 1],
|
|
_OU_ iotx_dm_dev_avail_t *status)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (product_key == NULL || device_name == NULL || status == NULL ||
|
|
(strlen(product_key) >= IOTX_PRODUCT_KEY_LEN + 1) ||
|
|
(strlen(device_name) >= IOTX_DEVICE_NAME_LEN + 1)) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_pkdn(product_key, device_name, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
*status = node->status;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_set_dev_status(_IN_ int devid, _IN_ iotx_dm_dev_status_t status)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
node->dev_status = status;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_get_dev_status(_IN_ int devid, _OU_ iotx_dm_dev_status_t *status)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || status == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
*status = node->dev_status;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_set_device_secret(_IN_ int devid, _IN_ char device_secret[IOTX_DEVICE_SECRET_LEN + 1])
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || device_secret == NULL ||
|
|
strlen(device_secret) >= IOTX_DEVICE_SECRET_LEN + 1) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(node->device_secret, 0, IOTX_DEVICE_SECRET_LEN + 1);
|
|
memcpy(node->device_secret, device_secret, strlen(device_secret));
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_dev_initialized(int devid)
|
|
{
|
|
int res = 0, message_len = 0;
|
|
char *message = NULL;
|
|
const char *fmt = "{\"devid\":%d}";
|
|
|
|
message_len = strlen(fmt) + DM_UTILS_UINT32_STRLEN + 1;
|
|
message = DM_malloc(message_len);
|
|
if (message == NULL) {
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(message, 0, message_len);
|
|
HAL_Snprintf(message, message_len, fmt, devid);
|
|
|
|
res = _dm_msg_send_to_user(IOTX_DM_EVENT_INITIALIZED, message);
|
|
if (res != SUCCESS_RETURN) {
|
|
DM_free(message);
|
|
return res;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
#ifdef DEVICE_MODEL_GATEWAY
|
|
int dm_mgr_upstream_thing_sub_register(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_SUB_REGISTER;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_thing_sub_register(node->product_key, node->device_name, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_sub_register_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_SUBDEV_REGISTER_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_proxy_product_register(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_PROXY_PRODUCT_REGISTER;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_thing_proxy_product_register(node->product_key, node->product_secret, node->device_name, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_proxy_product_register_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_SUBDEV_REGISTER_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_SUB_UNREGISTER;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_thing_sub_unregister(node->product_key, node->device_name, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_sub_unregister_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_SUBDEV_UNREGISTER_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_topo_add(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_TOPO_ADD;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_thing_topo_add(node->product_key, node->device_name, node->device_secret, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_topo_add_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_TOPO_ADD_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_topo_delete(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_TOPO_DELETE;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_thing_topo_delete(node->product_key, node->device_name, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_topo_delete_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_TOPO_DELETE_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_topo_get(void)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_TOPO_GET;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
res = _dm_mgr_search_dev_by_pkdn(request.product_key, request.device_name, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_thing_topo_get(&request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = node->devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_topo_get_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_TOPO_GET_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_list_found(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_LIST_FOUND;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_thing_list_found(node->product_key, node->device_name, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_list_found_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_TOPO_ADD_NOTIFY_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_combine_login(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_EXT_SESSION_PREFIX;
|
|
request.service_name = DM_URI_COMBINE_LOGIN;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_combine_login(node->product_key, node->device_name, node->device_secret, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_combine_login_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_COMBINE_LOGIN_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_combine_logout(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_DEVID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
if (node->dev_status < IOTX_DM_DEV_STATUS_LOGINED) {
|
|
return STATE_DEV_MODEL_SUBD_NOT_LOGIN;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_EXT_SESSION_PREFIX;
|
|
request.service_name = DM_URI_COMBINE_LOGOUT;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Get Params And Method */
|
|
res = dm_msg_combine_logout(node->product_key, node->device_name, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Get Msg ID */
|
|
request.msgid = iotx_report_id();
|
|
|
|
/* Get Dev ID */
|
|
request.devid = devid;
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_combine_logout_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_COMBINE_LOGOUT_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(request.params);
|
|
|
|
return res;
|
|
}
|
|
|
|
#ifdef DEVICE_MODEL_SUBDEV_OTA
|
|
int dm_mgr_upstream_thing_firmware_version_update(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
char *uri = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_OTA_DEVICE_INFORM;
|
|
request.service_name = NULL;
|
|
memcpy(request.product_key, node->product_key, strlen(node->product_key));
|
|
memcpy(request.device_name, node->device_name, strlen(node->device_name));
|
|
|
|
/* Request URI */
|
|
res = dm_utils_service_name(request.service_prefix, request.service_name,
|
|
request.product_key, request.device_name, &uri);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
res = dm_client_publish(uri, (unsigned char *)payload, strlen(payload), dm_client_thing_model_up_raw_reply);
|
|
if (res < SUCCESS_RETURN) {
|
|
DM_free(uri);
|
|
return res;
|
|
}
|
|
|
|
DM_free(uri);
|
|
return SUCCESS_RETURN;
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
int dm_mgr_upstream_thing_model_up_raw(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0, res1 = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
char *uri = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_SYS_PREFIX;
|
|
request.service_name = DM_URI_THING_MODEL_UP_RAW;
|
|
memcpy(request.product_key, node->product_key, strlen(node->product_key));
|
|
memcpy(request.device_name, node->device_name, strlen(node->device_name));
|
|
|
|
/* Request URI */
|
|
res = dm_utils_service_name(request.service_prefix, request.service_name,
|
|
request.product_key, request.device_name, &uri);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
HEXDUMP_INFO(payload, payload_len);
|
|
|
|
res = dm_client_publish(uri, (unsigned char *)payload, payload_len, dm_client_thing_model_up_raw_reply);
|
|
#ifdef ALCS_ENABLED
|
|
res1 = dm_server_send(uri, (unsigned char *)payload, payload_len, NULL);
|
|
if (res1 < 0) {
|
|
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODEL_ALCS_SEND_FAILED, NULL);
|
|
}
|
|
#endif
|
|
|
|
DM_free(uri);
|
|
return res;
|
|
}
|
|
|
|
#if !defined(DEVICE_MODEL_RAWDATA_SOLO)
|
|
static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid, _IN_ const char *service_prefix,
|
|
_IN_ const char *service_name,
|
|
_IN_ char *params, _IN_ int params_len, _IN_ char *method, _OU_ dm_msg_request_t *request)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
request->msgid = msgid;
|
|
request->devid = devid;
|
|
request->service_prefix = service_prefix;
|
|
request->service_name = service_name;
|
|
memcpy(request->product_key, node->product_key, strlen(node->product_key));
|
|
memcpy(request->device_name, node->device_name, strlen(node->device_name));
|
|
request->params = params;
|
|
request->params_len = params_len;
|
|
request->method = method;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
#ifdef DEVICE_MODEL_SHADOW
|
|
int dm_mgr_upstream_thing_property_desired_get(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_t request;
|
|
int prop_desired_get_reply = 0;
|
|
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_PROPERTY_DESIRED_GET,
|
|
payload, payload_len, "thing.property.desired.get", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_property_desired_get_reply;
|
|
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
res = dm_opt_get(DM_OPT_DOWNSTREAM_EVENT_PROPERTY_DESIRED_GET_REPLY, &prop_desired_get_reply);
|
|
if (res == SUCCESS_RETURN && prop_desired_get_reply) {
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_PROPERTY_DESIRED_GET_REPLY, NULL);
|
|
}
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
/*TODO */
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_property_desired_delete(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_t request;
|
|
int prop_desired_delete_reply = 0;
|
|
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX,
|
|
DM_URI_THING_PROPERTY_DESIRED_DELETE,
|
|
payload, payload_len, "thing.property.desired.delete", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_property_desired_delete_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
res = dm_opt_get(DM_OPT_DOWNSTREAM_EVENT_PROPERTY_DESIRED_DELETE_REPLY, &prop_desired_delete_reply);
|
|
if (res == SUCCESS_RETURN && prop_desired_delete_reply) {
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_PROPERTY_DESIRED_DELETE_REPLY, NULL);
|
|
}
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
#endif
|
|
|
|
int dm_mgr_upstream_thing_property_post(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_t request;
|
|
int prop_post_reply = 0;
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_EVENT_PROPERTY_POST,
|
|
payload, payload_len, "thing.event.property.post", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_event_post_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
res = dm_opt_get(DM_OPT_DOWNSTREAM_EVENT_POST_REPLY, &prop_post_reply);
|
|
if (res == SUCCESS_RETURN && prop_post_reply) {
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_EVENT_PROPERTY_POST_REPLY, NULL);
|
|
}
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_ALL, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
#ifdef DEVICE_HISTORY_POST
|
|
int dm_mgr_upstream_thing_history_post(int devid, char *payload, int payload_len)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_t request;
|
|
int prop_post_reply = 0;
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_EVENT_HISTORY_POST,
|
|
payload, payload_len, "thing.event.property.history.post", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_event_post_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_EVENT_PROPERTY_POST_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_ALL, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
#endif /* #ifdef DEVICE_HISTORY_POST */
|
|
|
|
#ifdef LOG_REPORT_TO_CLOUD
|
|
static unsigned int log_size = 0;
|
|
int dm_mgr_upstream_thing_log_post(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len, int force_upload)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_t request;
|
|
extern REPORT_STATE g_report_status;
|
|
extern char *g_log_poll;
|
|
|
|
if (0 == force_upload) {
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
if (log_size + payload_len < OVERFLOW_LEN) {
|
|
log_size = push_log(payload, payload_len);
|
|
} else {
|
|
/* it should NOT happen; it means that it is too late to upload log files */
|
|
reset_log_poll();
|
|
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODEL_LOG_REPORT_ERROR, "it is too late to upload log");
|
|
return STATE_DEV_MODEL_LOG_REPORT_ERROR;
|
|
}
|
|
|
|
iotx_state_event(ITE_STATE_DEV_MODEL, STATE_DEV_MODLE_LOG_REPORT_SEND, "push log, len is %d, log_size is %d\n",
|
|
payload_len, log_size);
|
|
if (!(log_size > REPORT_LEN && DONE == g_report_status)) {
|
|
return SUCCESS_RETURN;
|
|
}
|
|
}
|
|
|
|
log_size = add_tail();
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_LOG_POST,
|
|
g_log_poll, log_size + 1, "thing.log.post", &request);
|
|
|
|
if (res != SUCCESS_RETURN) {
|
|
reset_log_poll();
|
|
return res;
|
|
}
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
reset_log_poll();
|
|
return res;
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len, _IN_ char *method,
|
|
_IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0, service_name_len = 0;
|
|
char *service_name = NULL;
|
|
dm_msg_request_t request;
|
|
int event_post_reply = 0;
|
|
|
|
if (devid < 0 || identifier == NULL || identifier_len <= 0 ||
|
|
method == NULL || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
service_name_len = strlen(DM_URI_THING_EVENT_POST) + identifier_len + 1;
|
|
service_name = DM_malloc(service_name_len);
|
|
if (service_name == NULL) {
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(service_name, 0, service_name_len);
|
|
HAL_Snprintf(service_name, service_name_len, DM_URI_THING_EVENT_POST, identifier_len, identifier);
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, service_name,
|
|
payload, payload_len, method, &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_event_post_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
res = dm_opt_get(DM_OPT_DOWNSTREAM_EVENT_POST_REPLY, &event_post_reply);
|
|
if (res == SUCCESS_RETURN && event_post_reply) {
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_EVENT_PROPERTY_POST_REPLY, NULL);
|
|
}
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_ALL, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
DM_free(service_name);
|
|
|
|
return res;
|
|
}
|
|
|
|
|
|
int dm_mgr_upstream_thing_deviceinfo_update(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_DEVICEINFO_UPDATE,
|
|
payload, payload_len, "thing.deviceinfo.update", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_deviceinfo_update_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_DEVICEINFO_UPDATE_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_deviceinfo_delete(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_DEVICEINFO_DELETE,
|
|
payload, payload_len, "thing.deviceinfo.delete", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_deviceinfo_delete_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_DEVICEINFO_DELETE_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_dsltemplate_get(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
char *params = "{}";
|
|
int params_len = strlen(params);
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_DSLTEMPLATE_GET,
|
|
params, params_len, "thing.dsltemplate.get", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_DSLTEMPLATE_GET_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_dynamictsl_get(_IN_ int devid)
|
|
{
|
|
int res = 0;
|
|
char *params = "{\"nodes\":[\"type\",\"identifier\"],\"addDefault\":false}";
|
|
int params_len = strlen(params);
|
|
dm_msg_request_t request;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
res = _dm_mgr_upstream_request_assemble(iotx_report_id(), devid, DM_URI_SYS_PREFIX, DM_URI_THING_DYNAMICTSL_GET,
|
|
params, params_len, "thing.dynamicTsl.get", &request);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
/* Callback */
|
|
request.callback = dm_client_thing_dynamictsl_get_reply;
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
dm_msg_cache_insert(request.msgid, request.devid, IOTX_DM_EVENT_DSLTEMPLATE_GET_REPLY, NULL);
|
|
#endif
|
|
/* Send Message To Cloud */
|
|
res = dm_msg_request(DM_MSG_DEST_CLOUD, &request);
|
|
#if !defined(DM_MESSAGE_CACHE_DISABLED)
|
|
if (res != SUCCESS_RETURN) {
|
|
dm_msg_cache_remove(request.msgid);
|
|
}
|
|
#endif
|
|
if (res == SUCCESS_RETURN) {
|
|
res = request.msgid;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
int dm_mgr_upstream_ntp_request(void)
|
|
{
|
|
int res = 0;
|
|
const char *ntp_request_fmt = "{\"deviceSendTime\":\"1234\"}";
|
|
char *uri = NULL;
|
|
dm_msg_request_t request;
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_t));
|
|
request.service_prefix = DM_URI_EXT_NTP_PREFIX;
|
|
request.service_name = DM_URI_NTP_REQUEST;
|
|
IOT_Ioctl(IOTX_IOCTL_GET_PRODUCT_KEY, request.product_key);
|
|
IOT_Ioctl(IOTX_IOCTL_GET_DEVICE_NAME, request.device_name);
|
|
|
|
/* Request URI */
|
|
res = dm_utils_service_name(request.service_prefix, request.service_name,
|
|
request.product_key, request.device_name, &uri);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
res = dm_client_publish(uri, (unsigned char *)ntp_request_fmt, strlen(ntp_request_fmt), dm_client_ntp_response);
|
|
DM_free(uri);
|
|
return res;
|
|
}
|
|
|
|
static int _dm_mgr_upstream_response_assemble(_IN_ int devid, _IN_ char *msgid, _IN_ int msgid_len,
|
|
_IN_ const char *prefix,
|
|
_IN_ const char *service_name, _IN_ int code, _OU_ dm_msg_request_payload_t *request, _OU_ dm_msg_response_t *response)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
request->id.value = msgid;
|
|
request->id.value_length = msgid_len;
|
|
|
|
response->service_prefix = DM_URI_SYS_PREFIX;
|
|
response->service_name = service_name;
|
|
memcpy(response->product_key, node->product_key, strlen(node->product_key));
|
|
memcpy(response->device_name, node->device_name, strlen(node->device_name));
|
|
response->code = (iotx_dm_error_code_t)code;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_service_response(_IN_ int devid, _IN_ char *msgid, _IN_ int msgid_len,
|
|
_IN_ iotx_dm_error_code_t code,
|
|
_IN_ char *identifier, _IN_ int identifier_len, _IN_ char *payload, _IN_ int payload_len, void *ctx)
|
|
{
|
|
int res = 0, service_name_len = 0;
|
|
char *service_name = NULL;
|
|
dm_msg_request_payload_t request;
|
|
dm_msg_response_t response;
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
|
memset(&response, 0, sizeof(dm_msg_response_t));
|
|
|
|
if (devid < 0 || msgid == NULL || msgid_len <= 0 || identifier == NULL || identifier_len <= 0 ||
|
|
payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
/* Service Name */
|
|
service_name_len = strlen(DM_URI_THING_SERVICE_RESPONSE) + identifier_len + 1;
|
|
service_name = DM_malloc(service_name_len);
|
|
if (service_name == NULL) {
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(service_name, 0, service_name_len);
|
|
HAL_Snprintf(service_name, service_name_len, DM_URI_THING_SERVICE_RESPONSE, identifier_len, identifier);
|
|
|
|
res = _dm_mgr_upstream_response_assemble(devid, msgid, msgid_len, DM_URI_SYS_PREFIX, service_name, code, &request,
|
|
&response);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
if (ctx != NULL) {
|
|
dm_msg_response(DM_MSG_DEST_LOCAL, &request, &response, payload, payload_len, ctx);
|
|
} else {
|
|
dm_msg_response(DM_MSG_DEST_CLOUD, &request, &response, payload, payload_len, ctx);
|
|
}
|
|
|
|
DM_free(service_name);
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_upstream_thing_property_get_response(_IN_ int devid, _IN_ char *msgid, _IN_ int msgid_len,
|
|
_IN_ iotx_dm_error_code_t code,
|
|
_IN_ char *payload, _IN_ int payload_len, _IN_ void *ctx)
|
|
{
|
|
int res = 0;
|
|
dm_msg_request_payload_t request;
|
|
dm_msg_response_t response;
|
|
const char *reply_service_name = NULL;
|
|
dm_msg_dest_type_t reply_msg_type;
|
|
#ifdef ALCS_ENABLED
|
|
dm_server_alcs_context_t *alcs_context = NULL;
|
|
#endif
|
|
|
|
if (devid < 0 || msgid == NULL || msgid_len <= 0 ||
|
|
payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
|
memset(&response, 0, sizeof(dm_msg_response_t));
|
|
|
|
/* Send Property Get Response Message To Local */
|
|
reply_service_name = DM_URI_THING_SERVICE_PROPERTY_GET;
|
|
reply_msg_type = DM_MSG_DEST_LOCAL;
|
|
|
|
/* Send Property Get Response Message To Cloud */
|
|
if (NULL == ctx) {
|
|
reply_service_name = DM_URI_THING_SERVICE_PROPERTY_GET_REPLY;
|
|
reply_msg_type = DM_MSG_DEST_CLOUD;
|
|
}
|
|
|
|
res = _dm_mgr_upstream_response_assemble(devid, msgid, msgid_len, DM_URI_SYS_PREFIX,
|
|
reply_service_name, code, &request, &response);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
dm_msg_response(reply_msg_type, &request, &response, payload, payload_len, ctx);
|
|
|
|
#ifdef ALCS_ENABLED
|
|
alcs_context = (dm_server_alcs_context_t *)ctx;
|
|
|
|
if (alcs_context) {
|
|
DM_free(alcs_context->ip);
|
|
DM_free(alcs_context->token);
|
|
DM_free(alcs_context);
|
|
}
|
|
#endif
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_upstream_rrpc_response(_IN_ int devid, _IN_ char *msgid, _IN_ int msgid_len, _IN_ iotx_dm_error_code_t code,
|
|
_IN_ char *rrpcid, _IN_ int rrpcid_len, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0, service_name_len = 0;
|
|
const char *rrpc_response_service_name = "rrpc/response/%.*s";
|
|
char *service_name = NULL;
|
|
dm_msg_request_payload_t request;
|
|
dm_msg_response_t response;
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
|
memset(&response, 0, sizeof(dm_msg_response_t));
|
|
|
|
if (devid < 0 || msgid == NULL || msgid_len <= 0 ||
|
|
rrpcid == NULL || rrpcid_len <= 0 || payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
/* Service Name */
|
|
service_name_len = strlen(rrpc_response_service_name) + rrpcid_len + 1;
|
|
service_name = DM_malloc(service_name_len);
|
|
if (service_name == NULL) {
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(service_name, 0, service_name_len);
|
|
HAL_Snprintf(service_name, service_name_len, rrpc_response_service_name, rrpcid_len, rrpcid);
|
|
|
|
res = _dm_mgr_upstream_response_assemble(devid, msgid, msgid_len, DM_URI_SYS_PREFIX, service_name, code, &request,
|
|
&response);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
dm_msg_response(DM_MSG_DEST_ALL, &request, &response, payload, payload_len, NULL);
|
|
|
|
DM_free(service_name);
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
#endif
|
|
|
|
#ifdef DEPRECATED_LINKKIT
|
|
int dm_mgr_deprecated_set_tsl_source(_IN_ int devid, _IN_ iotx_dm_tsl_source_t tsl_source)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
node->tsl_source = tsl_source;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_tsl_source(_IN_ int devid, _IN_ iotx_dm_tsl_source_t *tsl_source)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || tsl_source == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return res;
|
|
}
|
|
|
|
*tsl_source = node->tsl_source;
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
static int dm_mgr_deprecated_search_devid_by_node(_IN_ dm_mgr_dev_node_t *node, _OU_ int *devid)
|
|
{
|
|
dm_mgr_ctx *ctx = _dm_mgr_get_ctx();
|
|
dm_mgr_dev_node_t *search_node = NULL;
|
|
|
|
list_for_each_entry(search_node, &ctx->dev_list, linked_list, dm_mgr_dev_node_t) {
|
|
if (search_node == node) {
|
|
if (devid) {
|
|
*devid = search_node->devid;
|
|
}
|
|
return SUCCESS_RETURN;
|
|
}
|
|
}
|
|
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_search_devid_by_device_node(_IN_ void *node, _OU_ int *devid)
|
|
{
|
|
int res = 0;
|
|
|
|
if (node == NULL || devid == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = dm_mgr_deprecated_search_devid_by_node((dm_mgr_dev_node_t *)node, devid);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_set_tsl(int devid, iotx_dm_tsl_type_t tsl_type, const char *tsl, int tsl_len)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (tsl == NULL || tsl_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_create(tsl_type, tsl, tsl_len, &node->dev_shadow);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_property_data(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _OU_ void **data)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_property_data(node->dev_shadow, key, key_len, data);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_input_data(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _OU_ void **data)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_service_input_output_data(DM_SHW_DATA_TARGET_SERVICE_INPUT_DATA, node->dev_shadow, key, key_len, data);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_output_data(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _OU_ void **data)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_service_input_output_data(DM_SHW_DATA_TARGET_SERVICE_OUTPUT_DATA, node->dev_shadow, key, key_len,
|
|
data);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_event_output_data(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _OU_ void **data)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_event_output_data(node->dev_shadow, key, key_len, data);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_data_type(_IN_ void *data, _OU_ dm_shw_data_type_e *type)
|
|
{
|
|
if (data == NULL || type == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
return dm_shw_get_data_type(data, type);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_property_number(_IN_ int devid, _OU_ int *number)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || number == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_property_number(node->dev_shadow, number);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_number(_IN_ int devid, _OU_ int *number)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || number == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_service_number(node->dev_shadow, number);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_event_number(_IN_ int devid, _OU_ int *number)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || number == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_event_number(node->dev_shadow, number);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_property_by_index(_IN_ int devid, _IN_ int index, _OU_ void **property)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || index < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_property_by_index(node->dev_shadow, index, property);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_by_index(_IN_ int devid, _IN_ int index, _OU_ void **service)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || index < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_service_by_index(node->dev_shadow, index, service);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_event_by_index(_IN_ int devid, _IN_ int index, _OU_ void **event)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || index < 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_event_by_index(node->dev_shadow, index, event);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_by_identifier(_IN_ int devid, _IN_ char *identifier, _OU_ void **service)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || identifier == NULL || service == NULL || *service != NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_service_by_identifier(node->dev_shadow, identifier, service);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_event_by_identifier(_IN_ int devid, _IN_ char *identifier, _OU_ void **event)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || identifier == NULL || event == NULL || *event != NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return dm_shw_get_event_by_identifier(node->dev_shadow, identifier, event);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_property_identifier(_IN_ void *property, _OU_ char **identifier)
|
|
{
|
|
if (property == NULL || identifier == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
return dm_shw_get_property_identifier(property, identifier);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_method(_IN_ void *service, _OU_ char **method)
|
|
{
|
|
if (service == NULL || method == NULL || *method != NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
return dm_shw_get_service_method(service, method);
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_event_method(_IN_ void *event, _OU_ char **method)
|
|
{
|
|
if (event == NULL || method == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
return dm_shw_get_event_method(event, method);
|
|
}
|
|
|
|
int dm_mgr_deprecated_set_property_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value,
|
|
_IN_ int value_len)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_set_property_value(node->dev_shadow, key, key_len, value, value_len);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_property_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_property_value(node->dev_shadow, key, key_len, value);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_set_event_output_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value,
|
|
_IN_ int value_len)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_set_event_output_value(node->dev_shadow, key, key_len, value, value_len);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_event_output_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_event_output_value(node->dev_shadow, key, key_len, value);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_set_service_input_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value,
|
|
_IN_ int value_len)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_set_service_input_output_value(DM_SHW_DATA_TARGET_SERVICE_INPUT_DATA, node->dev_shadow, key, key_len,
|
|
value, value_len);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_input_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_service_input_output_value(DM_SHW_DATA_TARGET_SERVICE_INPUT_DATA, node->dev_shadow, key, key_len,
|
|
value);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_set_service_output_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value,
|
|
_IN_ int value_len)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_set_service_input_output_value(DM_SHW_DATA_TARGET_SERVICE_OUTPUT_DATA, node->dev_shadow, key, key_len,
|
|
value, value_len);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_get_service_output_value(_IN_ int devid, _IN_ char *key, _IN_ int key_len, _IN_ void *value)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || key == NULL || key_len <= 0 || value == NULL) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_get_service_input_output_value(DM_SHW_DATA_TARGET_SERVICE_OUTPUT_DATA, node->dev_shadow, key, key_len,
|
|
value);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_assemble_property(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len,
|
|
_IN_ lite_cjson_item_t *lite)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || identifier == NULL || identifier_len <= 0 || lite == NULL || lite->type != cJSON_Object) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_assemble_property(node->dev_shadow, identifier, identifier_len, lite);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_assemble_event_output(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len,
|
|
_IN_ lite_cjson_item_t *lite)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || identifier == NULL || identifier_len <= 0 || lite == NULL || lite->type != cJSON_Object) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_assemble_event_output(node->dev_shadow, identifier, identifier_len, lite);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_assemble_service_output(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len,
|
|
_IN_ lite_cjson_item_t *lite)
|
|
{
|
|
int res = 0;
|
|
dm_mgr_dev_node_t *node = NULL;
|
|
|
|
if (devid < 0 || identifier == NULL || identifier_len <= 0 || lite == NULL || lite->type != cJSON_Object) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
res = _dm_mgr_search_dev_by_devid(devid, &node);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
res = dm_shw_assemble_service_output(node->dev_shadow, identifier, identifier_len, lite);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
return SUCCESS_RETURN;
|
|
}
|
|
|
|
int dm_mgr_deprecated_upstream_thing_service_response(_IN_ int devid, _IN_ int msgid, _IN_ iotx_dm_error_code_t code,
|
|
_IN_ char *identifier, _IN_ int identifier_len, _IN_ char *payload, _IN_ int payload_len)
|
|
{
|
|
int res = 0, service_name_len = 0;
|
|
char *msgid_str = NULL, *service_name = NULL;
|
|
dm_msg_request_payload_t request;
|
|
dm_msg_response_t response;
|
|
|
|
memset(&request, 0, sizeof(dm_msg_request_payload_t));
|
|
memset(&response, 0, sizeof(dm_msg_response_t));
|
|
|
|
if (devid < 0 || msgid < 0 || identifier == NULL || identifier_len <= 0 ||
|
|
payload == NULL || payload_len <= 0) {
|
|
return STATE_USER_INPUT_INVALID;
|
|
}
|
|
|
|
/* Response Msg ID */
|
|
res = dm_utils_itoa(msgid, &msgid_str);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
request.id.value = msgid_str;
|
|
request.id.value_length = strlen(msgid_str);
|
|
|
|
/* Service Name */
|
|
service_name_len = strlen(DM_URI_THING_SERVICE_RESPONSE) + identifier_len + 1;
|
|
service_name = DM_malloc(service_name_len);
|
|
if (service_name == NULL) {
|
|
DM_free(msgid_str);
|
|
return STATE_SYS_DEPEND_MALLOC;
|
|
}
|
|
memset(service_name, 0, service_name_len);
|
|
HAL_Snprintf(service_name, service_name_len, DM_URI_THING_SERVICE_RESPONSE, identifier_len, identifier);
|
|
|
|
res = _dm_mgr_upstream_response_assemble(devid, msgid_str, strlen(msgid_str), DM_URI_SYS_PREFIX, service_name, code,
|
|
&request,
|
|
&response);
|
|
if (res != SUCCESS_RETURN) {
|
|
return FAIL_RETURN;
|
|
}
|
|
|
|
dm_msg_response(DM_MSG_DEST_ALL, &request, &response, payload, payload_len, NULL);
|
|
|
|
DM_free(msgid_str);
|
|
DM_free(service_name);
|
|
return SUCCESS_RETURN;
|
|
}
|
|
#endif
|