Link Kit C-SDK  4.0.0
函数 | 变量
aiot_mqtt_api.c 文件参考

MQTT模块实现, 其中包含了连接到物联网平台和收发数据的API接口 更多...

#include "core_mqtt.h"
aiot_mqtt_api.c 的引用(Include)关系图:

函数

static int32_t _core_mqtt_sysdep_return (int32_t sysdep_code, int32_t core_code)
 
static int32_t _core_mqtt_5_feature_is_enabled (core_mqtt_handle_t *mqtt_handle)
 
static void _core_mqtt_event_notify_process_handler (core_mqtt_handle_t *mqtt_handle, aiot_mqtt_event_t *event, core_mqtt_event_t *core_event)
 
static void _core_mqtt_event_notify (core_mqtt_handle_t *mqtt_handle, aiot_mqtt_event_type_t type)
 
static void _core_mqtt_connect_event_notify (core_mqtt_handle_t *mqtt_handle)
 
static void _core_mqtt_disconnect_event_notify (core_mqtt_handle_t *mqtt_handle, aiot_mqtt_disconnect_event_type_t disconnect)
 
static void _core_mqtt_exec_inc (core_mqtt_handle_t *mqtt_handle)
 
static void _core_mqtt_exec_dec (core_mqtt_handle_t *mqtt_handle)
 
static void _core_mqtt_sign_clean (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_handlerlist_insert (core_mqtt_handle_t *mqtt_handle, core_mqtt_sub_node_t *sub_node, aiot_mqtt_recv_handler_t handler, void *userdata)
 
static int32_t _core_mqtt_sublist_insert (core_mqtt_handle_t *mqtt_handle, core_mqtt_buff_t *topic, aiot_mqtt_recv_handler_t handler, void *userdata)
 
static int32_t _core_mqtt_topic_alias_list_insert (core_mqtt_handle_t *mqtt_handle, core_mqtt_buff_t *topic, uint16_t topic_alias, struct core_list_head *list)
 
static void _core_mqtt_topic_alias_list_remove_all (core_mqtt_handle_t *mqtt_handle)
 
static void _core_mqtt_sublist_handlerlist_destroy (core_mqtt_handle_t *mqtt_handle, struct core_list_head *list)
 
static void _core_mqtt_sublist_remove (core_mqtt_handle_t *mqtt_handle, core_mqtt_buff_t *topic)
 
static void _core_mqtt_sublist_remove_handler (core_mqtt_handle_t *mqtt_handle, core_mqtt_buff_t *topic, aiot_mqtt_recv_handler_t handler)
 
static void _core_mqtt_sublist_destroy (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_topic_is_valid (char *topic, uint32_t len)
 
static int32_t _core_mqtt_append_topic_map (core_mqtt_handle_t *mqtt_handle, aiot_mqtt_topic_map_t *map)
 
static int32_t _core_mqtt_remove_topic_map (core_mqtt_handle_t *mqtt_handle, aiot_mqtt_topic_map_t *map)
 
static void _core_mqtt_set_utf8_encoded_str (uint8_t *input, uint16_t input_len, uint8_t *output)
 
static void _core_mqtt_remain_len_encode (uint32_t input, uint8_t *output, uint32_t *output_idx)
 
static int32_t _core_mqtt_general_property_is_valid (general_property_t *general_property)
 
uint32_t _core_get_general_property_len (general_property_t *general_prop)
 
void _core_write_general_prop (uint8_t *pos, uint32_t *index, general_property_t *general_property, uint8_t *property_len_array, uint8_t property_len_offset)
 
static int32_t _read_variable_byte_interger (uint8_t *input, uint32_t *remainlen, uint8_t *offset)
 
static int32_t _core_mqtt_conn_pkt (core_mqtt_handle_t *mqtt_handle, uint8_t **pkt, uint32_t *pkt_len, conn_property_t *conn_prop)
 
static int32_t _core_mqtt_parse_property_element (core_mqtt_handle_t *mqtt_handle, uint8_t *property, uint32_t *idx, type_len_value_t *tlv, user_property_t *user_prop, uint32_t *variable_byte_integer)
 
static int32_t _core_mqtt_parse_general_properties (core_mqtt_handle_t *mqtt_handle, uint8_t *property, general_property_t *general_prop, uint32_t *parsed_property_len, uint8_t *parsed_offset, uint32_t remain_len)
 
static int32_t _core_mqtt_parse_conack_properties (core_mqtt_handle_t *mqtt_handle, uint8_t *property, connack_property_t *conack_prop, uint32_t remain_len)
 
static void _core_reclaim_user_properties_mem (core_mqtt_handle_t *mqtt_handle, user_property_t **user_property_list)
 
static int32_t _core_mqtt_connack_handle (core_mqtt_handle_t *mqtt_handle, uint8_t *connack, uint32_t remain_len)
 
static int32_t _core_mqtt_read (core_mqtt_handle_t *mqtt_handle, uint8_t *buffer, uint32_t len, uint32_t timeout_ms)
 
static int32_t _core_mqtt_write (core_mqtt_handle_t *mqtt_handle, uint8_t *buffer, uint32_t len, uint32_t timeout_ms)
 
static void _core_mqtt_connect_diag (core_mqtt_handle_t *mqtt_handle, uint8_t flag)
 
static void _core_mqtt_heartbeat_diag (core_mqtt_handle_t *mqtt_handle, uint8_t flag)
 
static int32_t _core_mqtt_read_remainlen (core_mqtt_handle_t *mqtt_handle, uint32_t *remainlen)
 
static int32_t _core_mqtt_add_extend_clientid (core_mqtt_handle_t *channel_handle, char **dst_clientid, char *extend)
 
static int32_t _core_mqtt_add_netstats_extend (core_mqtt_handle_t *mqtt_handle, char **dst_clientid)
 
static int32_t _core_mqtt_connect (core_mqtt_handle_t *mqtt_handle, conn_property_t *conn_prop)
 
static int32_t _core_mqtt_disconnect (core_mqtt_handle_t *mqtt_handle)
 
static uint16_t _core_mqtt_packet_id (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_publist_insert (core_mqtt_handle_t *mqtt_handle, uint8_t *packet, uint32_t len, uint16_t packet_id)
 
static void _core_mqtt_publist_remove (core_mqtt_handle_t *mqtt_handle, uint16_t packet_id)
 
static void _core_mqtt_publist_destroy (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_subunsub (core_mqtt_handle_t *mqtt_handle, char *topic, uint16_t topic_len, uint8_t qos, uint8_t pkt_type, general_property_t *general_property)
 
static int32_t _core_mqtt_heartbeat (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_repub (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_process_datalist_insert (core_mqtt_handle_t *mqtt_handle, core_mqtt_process_data_t *process_data)
 
static void _core_mqtt_process_datalist_remove (core_mqtt_handle_t *mqtt_handle, core_mqtt_process_data_t *process_data)
 
static void _core_mqtt_process_datalist_destroy (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_append_process_data (core_mqtt_handle_t *mqtt_handle, core_mqtt_process_data_t *process_data)
 
static int32_t _core_mqtt_remove_process_data (core_mqtt_handle_t *mqtt_handle, core_mqtt_process_data_t *process_data)
 
static void _core_mqtt_process_data_process (core_mqtt_handle_t *mqtt_handle, core_mqtt_event_t *core_event)
 
static int32_t _core_mqtt_reconnect (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_read_remainbytes (core_mqtt_handle_t *mqtt_handle, uint32_t remainlen, uint8_t **output)
 
static int32_t _core_mqtt_pingresp_handler (core_mqtt_handle_t *mqtt_handle, uint8_t *input, uint32_t len)
 
static int32_t _core_mqtt_puback_send (core_mqtt_handle_t *mqtt_handle, uint16_t packet_id)
 
static int32_t _core_mqtt_topic_compare (char *topic, uint32_t topic_len, char *cmp_topic, uint32_t cmp_topic_len)
 
static void _core_mqtt_handlerlist_append (core_mqtt_handle_t *mqtt_handle, struct core_list_head *dest, struct core_list_head *src, uint8_t *found)
 
static void _core_mqtt_handlerlist_destroy (core_mqtt_handle_t *mqtt_handle, struct core_list_head *list)
 
static int32_t _core_mqtt_parse_pub_properties (core_mqtt_handle_t *mqtt_handle, uint8_t *property, pub_property_t *pub_prop, uint32_t *parsed_property_len, uint8_t *parsed_offset, uint32_t remain_len)
 
uint8_t _core_mqtt_process_topic_alias (core_mqtt_handle_t *mqtt_handle, pub_property_t *pub_prop, uint32_t topic_len, char *topic, core_mqtt_topic_alias_node_t *alias_node)
 
static int32_t _core_mqtt_pub_handler (core_mqtt_handle_t *mqtt_handle, uint8_t *input, uint32_t len, uint8_t qos, uint32_t remain_len)
 
void _core_mqtt_flow_control_inc (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_puback_handler (core_mqtt_handle_t *mqtt_handle, uint8_t *input, uint32_t len)
 
static int32_t _core_mqtt_server_disconnect_handler (core_mqtt_handle_t *mqtt_handle, uint8_t *input, uint32_t len)
 
static void _core_mqtt_subunsuback_handler (core_mqtt_handle_t *mqtt_handle, uint8_t *input, uint32_t len, uint8_t packet_type)
 
int32_t core_mqtt_setopt (void *handle, core_mqtt_option_t option, void *data)
 
void * aiot_mqtt_init (void)
 初始化mqtt实例并设置默认参数 更多...
 
int32_t aiot_mqtt_setopt (void *handle, aiot_mqtt_option_t option, void *data)
 设置mqtt参数 更多...
 
int32_t aiot_mqtt_deinit (void **handle)
 释放mqtt实例句柄的资源 更多...
 
static int32_t _mqtt_connect_with_prop (void *handle, conn_property_t *connect_property)
 
int32_t aiot_mqtt_connect (void *handle)
 与MQTT服务器建立连接 更多...
 
int32_t aiot_mqtt_connect_with_prop (void *handle, conn_property_t *connect_property)
 与MQTT服务器建立连接. 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0 更多...
 
int32_t aiot_mqtt_disconnect (void *handle)
 与MQTT服务器断开连接 更多...
 
int32_t aiot_mqtt_heartbeat (void *handle)
 发送MQTT PINGREQ报文, 用于维持心跳 更多...
 
int32_t aiot_mqtt_process (void *handle)
 此函数用于处理定时心跳发送和qos1消息的重传逻辑 更多...
 
static int32_t _core_mqtt_tx_topic_alias_process (core_mqtt_handle_t *mqtt_handle, core_mqtt_buff_t *topic, uint16_t *alias_id_prt)
 
static int32_t _core_mqtt_check_flow_control (core_mqtt_handle_t *mqtt_handle, uint8_t qos)
 
static void _core_mqtt_check_flow_dec (core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_check_tx_payload_len (uint32_t pkt_len, core_mqtt_handle_t *mqtt_handle)
 
static int32_t _core_mqtt_pub (void *handle, core_mqtt_buff_t *topic, core_mqtt_buff_t *payload, uint8_t qos, pub_property_t *pub_prop)
 
int32_t _core_mqtt_disconnect_with_prop (void *handle, uint8_t reason_code, disconn_property_t *discon_property)
 
int32_t aiot_mqtt_disconnect_with_prop (void *handle, uint8_t reason_code, disconn_property_t *discon_property)
 与MQTT服务器断开连接 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0 更多...
 
static int32_t _mqtt_pub_with_prop (void *handle, char *topic, uint8_t *payload, uint32_t payload_len, uint8_t qos, pub_property_t *pub_prop)
 
int32_t aiot_mqtt_pub_with_prop (void *handle, char *topic, uint8_t *payload, uint32_t payload_len, uint8_t qos, pub_property_t *pub_prop)
 发送一条PUBLISH报文到MQTT服务器, QoS为0, 用于发布指定的消息 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0 更多...
 
int32_t aiot_mqtt_pub (void *handle, char *topic, uint8_t *payload, uint32_t payload_len, uint8_t qos)
 发送一条PUBLISH报文到MQTT服务器, QoS为0, 用于发布指定的消息 更多...
 
static int32_t _core_mqtt_sub (void *handle, core_mqtt_buff_t *topic, aiot_mqtt_recv_handler_t handler, uint8_t qos, void *userdata, sub_property_t *sub_prop)
 
static int32_t _mqtt_sub_with_prop (void *handle, char *topic, aiot_mqtt_recv_handler_t handler, uint8_t qos, void *userdata, sub_property_t *sub_prop)
 
int32_t aiot_mqtt_sub (void *handle, char *topic, aiot_mqtt_recv_handler_t handler, uint8_t qos, void *userdata)
 发送一条mqtt SUBSCRIBE报文到MQTT服务器, 用于订阅指定的topic 更多...
 
int32_t aiot_mqtt_sub_with_prop (void *handle, char *topic, aiot_mqtt_recv_handler_t handler, uint8_t qos, void *userdata, sub_property_t *sub_prop)
 发送一条mqtt SUBSCRIBE报文到MQTT服务器, 用于订阅指定的topic 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0 更多...
 
static int32_t _core_mqtt_unsub (void *handle, core_mqtt_buff_t *topic, unsub_property_t *unsub_prop)
 
static int32_t _mqtt_unsub (void *handle, char *topic, unsub_property_t *unsub_prop)
 
int32_t aiot_mqtt_unsub (void *handle, char *topic)
 发送一条mqtt UNSUBSCRIBE报文到MQTT服务器, 用于取消订阅指定的topic 更多...
 
int32_t aiot_mqtt_unsub_with_prop (void *handle, char *topic, unsub_property_t *unsub_prop)
 发送一条mqtt UNSUBSCRIBE报文到MQTT服务器, 用于取消订阅指定的topic 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0 更多...
 
int32_t aiot_mqtt_recv (void *handle)
 尝试从网络上接收MQTT报文 更多...
 
char * core_mqtt_get_product_key (void *handle)
 
char * core_mqtt_get_device_name (void *handle)
 
uint16_t core_mqtt_get_port (void *handle)
 
int32_t core_mqtt_get_nwkstats (void *handle, core_mqtt_nwkstats_info_t *nwk_stats_info)
 

变量

static int32_t last_failed_error_code = 0
 

详细描述

MQTT模块实现, 其中包含了连接到物联网平台和收发数据的API接口

日期
2019-12-27

函数说明

static int32_t _core_mqtt_sysdep_return ( int32_t  sysdep_code,
int32_t  core_code 
)
static
static int32_t _core_mqtt_5_feature_is_enabled ( core_mqtt_handle_t *  mqtt_handle)
static
static void _core_mqtt_event_notify_process_handler ( core_mqtt_handle_t *  mqtt_handle,
aiot_mqtt_event_t event,
core_mqtt_event_t *  core_event 
)
static
static void _core_mqtt_event_notify ( core_mqtt_handle_t *  mqtt_handle,
aiot_mqtt_event_type_t  type 
)
static

函数调用图:

static void _core_mqtt_connect_event_notify ( core_mqtt_handle_t *  mqtt_handle)
static

函数调用图:

static void _core_mqtt_disconnect_event_notify ( core_mqtt_handle_t *  mqtt_handle,
aiot_mqtt_disconnect_event_type_t  disconnect 
)
static

函数调用图:

static void _core_mqtt_exec_inc ( core_mqtt_handle_t *  mqtt_handle)
static
static void _core_mqtt_exec_dec ( core_mqtt_handle_t *  mqtt_handle)
static
static void _core_mqtt_sign_clean ( core_mqtt_handle_t *  mqtt_handle)
static
static int32_t _core_mqtt_handlerlist_insert ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_sub_node_t *  sub_node,
aiot_mqtt_recv_handler_t  handler,
void *  userdata 
)
static
static int32_t _core_mqtt_sublist_insert ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_buff_t *  topic,
aiot_mqtt_recv_handler_t  handler,
void *  userdata 
)
static

函数调用图:

static int32_t _core_mqtt_topic_alias_list_insert ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_buff_t *  topic,
uint16_t  topic_alias,
struct core_list_head *  list 
)
static
static void _core_mqtt_topic_alias_list_remove_all ( core_mqtt_handle_t *  mqtt_handle)
static
static void _core_mqtt_sublist_handlerlist_destroy ( core_mqtt_handle_t *  mqtt_handle,
struct core_list_head *  list 
)
static
static void _core_mqtt_sublist_remove ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_buff_t *  topic 
)
static

函数调用图:

static void _core_mqtt_sublist_remove_handler ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_buff_t *  topic,
aiot_mqtt_recv_handler_t  handler 
)
static
static void _core_mqtt_sublist_destroy ( core_mqtt_handle_t *  mqtt_handle)
static

函数调用图:

static int32_t _core_mqtt_topic_is_valid ( char *  topic,
uint32_t  len 
)
static
static int32_t _core_mqtt_append_topic_map ( core_mqtt_handle_t *  mqtt_handle,
aiot_mqtt_topic_map_t map 
)
static

函数调用图:

static int32_t _core_mqtt_remove_topic_map ( core_mqtt_handle_t *  mqtt_handle,
aiot_mqtt_topic_map_t map 
)
static

函数调用图:

static void _core_mqtt_set_utf8_encoded_str ( uint8_t *  input,
uint16_t  input_len,
uint8_t *  output 
)
static
static void _core_mqtt_remain_len_encode ( uint32_t  input,
uint8_t *  output,
uint32_t *  output_idx 
)
static
static int32_t _core_mqtt_general_property_is_valid ( general_property_t *  general_property)
static

函数调用图:

uint32_t _core_get_general_property_len ( general_property_t *  general_prop)

函数调用图:

void _core_write_general_prop ( uint8_t *  pos,
uint32_t *  index,
general_property_t *  general_property,
uint8_t *  property_len_array,
uint8_t  property_len_offset 
)

函数调用图:

static int32_t _read_variable_byte_interger ( uint8_t *  input,
uint32_t *  remainlen,
uint8_t *  offset 
)
static
static int32_t _core_mqtt_conn_pkt ( core_mqtt_handle_t *  mqtt_handle,
uint8_t **  pkt,
uint32_t *  pkt_len,
conn_property_t conn_prop 
)
static

函数调用图:

static int32_t _core_mqtt_parse_property_element ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  property,
uint32_t *  idx,
type_len_value_t *  tlv,
user_property_t user_prop,
uint32_t *  variable_byte_integer 
)
static

函数调用图:

static int32_t _core_mqtt_parse_general_properties ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  property,
general_property_t *  general_prop,
uint32_t *  parsed_property_len,
uint8_t *  parsed_offset,
uint32_t  remain_len 
)
static

函数调用图:

static int32_t _core_mqtt_parse_conack_properties ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  property,
connack_property_t conack_prop,
uint32_t  remain_len 
)
static

函数调用图:

static void _core_reclaim_user_properties_mem ( core_mqtt_handle_t *  mqtt_handle,
user_property_t **  user_property_list 
)
static
static int32_t _core_mqtt_connack_handle ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  connack,
uint32_t  remain_len 
)
static

函数调用图:

static int32_t _core_mqtt_read ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  buffer,
uint32_t  len,
uint32_t  timeout_ms 
)
static

函数调用图:

static int32_t _core_mqtt_write ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  buffer,
uint32_t  len,
uint32_t  timeout_ms 
)
static

函数调用图:

static void _core_mqtt_connect_diag ( core_mqtt_handle_t *  mqtt_handle,
uint8_t  flag 
)
static
static void _core_mqtt_heartbeat_diag ( core_mqtt_handle_t *  mqtt_handle,
uint8_t  flag 
)
static

函数调用图:

static int32_t _core_mqtt_read_remainlen ( core_mqtt_handle_t *  mqtt_handle,
uint32_t *  remainlen 
)
static

函数调用图:

static int32_t _core_mqtt_add_extend_clientid ( core_mqtt_handle_t *  channel_handle,
char **  dst_clientid,
char *  extend 
)
static
static int32_t _core_mqtt_add_netstats_extend ( core_mqtt_handle_t *  mqtt_handle,
char **  dst_clientid 
)
static

函数调用图:

static int32_t _core_mqtt_connect ( core_mqtt_handle_t *  mqtt_handle,
conn_property_t conn_prop 
)
static

函数调用图:

static int32_t _core_mqtt_disconnect ( core_mqtt_handle_t *  mqtt_handle)
static

函数调用图:

static uint16_t _core_mqtt_packet_id ( core_mqtt_handle_t *  mqtt_handle)
static
static int32_t _core_mqtt_publist_insert ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  packet,
uint32_t  len,
uint16_t  packet_id 
)
static
static void _core_mqtt_publist_remove ( core_mqtt_handle_t *  mqtt_handle,
uint16_t  packet_id 
)
static
static void _core_mqtt_publist_destroy ( core_mqtt_handle_t *  mqtt_handle)
static
static int32_t _core_mqtt_subunsub ( core_mqtt_handle_t *  mqtt_handle,
char *  topic,
uint16_t  topic_len,
uint8_t  qos,
uint8_t  pkt_type,
general_property_t *  general_property 
)
static

函数调用图:

static int32_t _core_mqtt_heartbeat ( core_mqtt_handle_t *  mqtt_handle)
static

函数调用图:

static int32_t _core_mqtt_repub ( core_mqtt_handle_t *  mqtt_handle)
static

函数调用图:

static int32_t _core_mqtt_process_datalist_insert ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_process_data_t *  process_data 
)
static
static void _core_mqtt_process_datalist_remove ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_process_data_t *  process_data 
)
static
static void _core_mqtt_process_datalist_destroy ( core_mqtt_handle_t *  mqtt_handle)
static
static int32_t _core_mqtt_append_process_data ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_process_data_t *  process_data 
)
static

函数调用图:

static int32_t _core_mqtt_remove_process_data ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_process_data_t *  process_data 
)
static

函数调用图:

static void _core_mqtt_process_data_process ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_event_t *  core_event 
)
static
static int32_t _core_mqtt_reconnect ( core_mqtt_handle_t *  mqtt_handle)
static

函数调用图:

static int32_t _core_mqtt_read_remainbytes ( core_mqtt_handle_t *  mqtt_handle,
uint32_t  remainlen,
uint8_t **  output 
)
static

函数调用图:

static int32_t _core_mqtt_pingresp_handler ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  input,
uint32_t  len 
)
static

函数调用图:

static int32_t _core_mqtt_puback_send ( core_mqtt_handle_t *  mqtt_handle,
uint16_t  packet_id 
)
static

函数调用图:

static int32_t _core_mqtt_topic_compare ( char *  topic,
uint32_t  topic_len,
char *  cmp_topic,
uint32_t  cmp_topic_len 
)
static
static void _core_mqtt_handlerlist_append ( core_mqtt_handle_t *  mqtt_handle,
struct core_list_head *  dest,
struct core_list_head *  src,
uint8_t *  found 
)
static
static void _core_mqtt_handlerlist_destroy ( core_mqtt_handle_t *  mqtt_handle,
struct core_list_head *  list 
)
static
static int32_t _core_mqtt_parse_pub_properties ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  property,
pub_property_t pub_prop,
uint32_t *  parsed_property_len,
uint8_t *  parsed_offset,
uint32_t  remain_len 
)
static

函数调用图:

uint8_t _core_mqtt_process_topic_alias ( core_mqtt_handle_t *  mqtt_handle,
pub_property_t pub_prop,
uint32_t  topic_len,
char *  topic,
core_mqtt_topic_alias_node_t *  alias_node 
)

函数调用图:

static int32_t _core_mqtt_pub_handler ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  input,
uint32_t  len,
uint8_t  qos,
uint32_t  remain_len 
)
static

函数调用图:

void _core_mqtt_flow_control_inc ( core_mqtt_handle_t *  mqtt_handle)

函数调用图:

static int32_t _core_mqtt_puback_handler ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  input,
uint32_t  len 
)
static

函数调用图:

static int32_t _core_mqtt_server_disconnect_handler ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  input,
uint32_t  len 
)
static

函数调用图:

static void _core_mqtt_subunsuback_handler ( core_mqtt_handle_t *  mqtt_handle,
uint8_t *  input,
uint32_t  len,
uint8_t  packet_type 
)
static

函数调用图:

int32_t core_mqtt_setopt ( void *  handle,
core_mqtt_option_t  option,
void *  data 
)

函数调用图:

void* aiot_mqtt_init ( void  )

初始化mqtt实例并设置默认参数

返回
void*
返回值
非NULLMQTT实例句柄
NULL初始化失败, 一般是内存分配失败导致

函数调用图:

int32_t aiot_mqtt_setopt ( void *  handle,
aiot_mqtt_option_t  option,
void *  data 
)

设置mqtt参数

下面列出常用的配置选项, 至少需要配置以下选项才可使用MQTT的基本功能

其余配置选项均设有默认值, 可按业务需要进行调整

  • AIOT_MQTTOPT_HOST: 配置连接的阿里云MQTT站点地址
  • AIOT_MQTTOPT_PORT: 配置连接的阿里云MQTT站点端口号
  • AIOT_MQTTOPT_PRODUCT_KEY: 配置设备的 productKey
  • AIOT_MQTTOPT_DEVICE_NAME: 配置设备的 deviceName
  • AIOT_MQTTOPT_DEVICE_SECRET: 配置设备的 deviceSecret
  • AIOT_MQTTOPT_NETWORK_CRED: 配置建立MQTT连接时的安全凭据
  • AIOT_MQTTOPT_RECV_HANDLER: 配置默认的数据接收回调函数
  • AIOT_MQTTOPT_EVENT_HANDLER: 配置MQTT事件通知回调函数
参数
[in]handlemqtt句柄
[in]option配置选项, 更多信息请参考aiot_mqtt_option_t
[in]data配置选项数据, 更多信息请参考aiot_mqtt_option_t
返回
int32_t
返回值
<STATE_SUCCESS参数设置失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS参数设置成功

函数调用图:

int32_t aiot_mqtt_deinit ( void **  handle)

释放mqtt实例句柄的资源

参数
[in]handle指向mqtt实例句柄的指针
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

static int32_t _mqtt_connect_with_prop ( void *  handle,
conn_property_t connect_property 
)
static

函数调用图:

int32_t aiot_mqtt_connect ( void *  handle)

与MQTT服务器建立连接

使用aiot_mqtt_setopt 配置的mqtt连接参数连接mqtt服务器, 使用的建联参数按如下顺序选择

  1. 若配置了以下选项, 直接用配置的连接参数连接 AIOT_MQTTOPT_HOST 选项指定的任意MQTT服务器
  2. 若配置了以下选项, 则强制以阿里云平台的签名算法计算连接参数作为MQTT的用户名/密码, 连接阿里云平台
参数
[in]handleMQTT实例句柄
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功
注解

当配置AIOT_MQTTOPT_USERNAME , AIOT_MQTTOPT_PASSWORDAIOT_MQTTOPT_CLIENTID 配置自定义连接凭据时,

此函数会忽略AIOT_MQTTOPT_PRODUCT_KEY , AIOT_MQTTOPT_DEVICE_NAMEAIOT_MQTTOPT_DEVICE_SECRET,

直接使用自定义凭据连接指定的MQTT服务器

函数调用图:

int32_t aiot_mqtt_connect_with_prop ( void *  handle,
conn_property_t conn_prop 
)

与MQTT服务器建立连接. 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0

使用aiot_mqtt_setopt 配置的mqtt连接参数连接mqtt服务器, 使用的建联参数按如下顺序选择

  1. 若配置了以下选项, 直接用配置的连接参数连接 AIOT_MQTTOPT_HOST 选项指定的任意MQTT服务器
  2. 若配置了以下选项, 则强制以阿里云平台的签名算法计算连接参数作为MQTT的用户名/密码, 连接阿里云平台
参数
[in]handleMQTT实例句柄
[in]conn_prop指定MQTT CONNECT报文的属性
返回
int32_t
返回值
STATE_MQTT_INVALID_PROTOCOL_VERSIONmqtt协议的版本号不对, 没有通过AIOT_MQTTOPT_VERSION将版本号将设置为5.0
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功
注解

当配置AIOT_MQTTOPT_USERNAME , AIOT_MQTTOPT_PASSWORDAIOT_MQTTOPT_CLIENTID 配置自定义连接凭据时,

此函数会忽略AIOT_MQTTOPT_PRODUCT_KEY , AIOT_MQTTOPT_DEVICE_NAMEAIOT_MQTTOPT_DEVICE_SECRET,

直接使用自定义凭据连接指定的MQTT服务器

函数调用图:

int32_t aiot_mqtt_disconnect ( void *  handle)

与MQTT服务器断开连接

向MQTT服务器发送MQTT DISCONNECT报文, 然后断开网络连接

如果需要再次与MQTT服务器建立连接, 调用aiot_mqtt_connect 即可

参数
[in]handleMQTT实例句柄
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

int32_t aiot_mqtt_heartbeat ( void *  handle)

发送MQTT PINGREQ报文, 用于维持心跳

aiot_mqtt_process 包含了定时发送心跳的机制, 如果有特殊需要的话, 可以使用此函数直接发送心跳报文

参数
[in]handleMQTT实例句柄
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

int32_t aiot_mqtt_process ( void *  handle)

此函数用于处理定时心跳发送和qos1消息的重传逻辑

  1. 发送心跳至mqtt broker以维护mqtt连接, 心跳发送间隔由AIOT_MQTTOPT_HEARTBEAT_INTERVAL_MS 配置项控制
  2. 如果一条qos1的mqtt PUBLISH报文在AIOT_MQTTOPT_REPUB_TIMEOUT_MS 时间内没有收到mqtt PUBACK应答报文, 该函数会重发此消息, 直到成功为止
参数
[in]handleMQTT实例句柄
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功
注解

该函数为非阻塞, 需要间歇性被调用, 调用间隔应当小于AIOT_MQTTOPT_HEARTBEAT_INTERVAL_MSAIOT_MQTTOPT_REPUB_TIMEOUT_MS 时间内没有收到mqtt的最小值,

以确保心跳发送和QoS1消息的重传逻辑正常工作

函数调用图:

static int32_t _core_mqtt_tx_topic_alias_process ( core_mqtt_handle_t *  mqtt_handle,
core_mqtt_buff_t *  topic,
uint16_t *  alias_id_prt 
)
static

函数调用图:

static int32_t _core_mqtt_check_flow_control ( core_mqtt_handle_t *  mqtt_handle,
uint8_t  qos 
)
static
static void _core_mqtt_check_flow_dec ( core_mqtt_handle_t *  mqtt_handle)
static

函数调用图:

static int32_t _core_mqtt_check_tx_payload_len ( uint32_t  pkt_len,
core_mqtt_handle_t *  mqtt_handle 
)
static

函数调用图:

static int32_t _core_mqtt_pub ( void *  handle,
core_mqtt_buff_t *  topic,
core_mqtt_buff_t *  payload,
uint8_t  qos,
pub_property_t pub_prop 
)
static

函数调用图:

int32_t _core_mqtt_disconnect_with_prop ( void *  handle,
uint8_t  reason_code,
disconn_property_t discon_property 
)

函数调用图:

int32_t aiot_mqtt_disconnect_with_prop ( void *  handle,
uint8_t  reason_code,
disconn_property_t disconn_property 
)

与MQTT服务器断开连接 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0

向MQTT服务器发送MQTT DISCONNECT报文, 然后断开网络连接

如果需要再次与MQTT服务器建立连接, 调用aiot_mqtt_connect 即可

参数
[in]handleMQTT实例句柄
[in]reason_code指定MQTT DISCONNECT的原因
[in]disconn_property指定MQTT DISCONNECT报文的属性
返回
int32_t
返回值
STATE_MQTT_INVALID_PROTOCOL_VERSIONmqtt协议的版本号不对, 没有通过AIOT_MQTTOPT_VERSION将版本号将设置为5.0
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

static int32_t _mqtt_pub_with_prop ( void *  handle,
char *  topic,
uint8_t *  payload,
uint32_t  payload_len,
uint8_t  qos,
pub_property_t pub_prop 
)
static

函数调用图:

int32_t aiot_mqtt_pub_with_prop ( void *  handle,
char *  topic,
uint8_t *  payload,
uint32_t  payload_len,
uint8_t  qos,
pub_property_t pub_prop 
)

发送一条PUBLISH报文到MQTT服务器, QoS为0, 用于发布指定的消息 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0

参数
[in]handleMQTT实例句柄
[in]topic指定MQTT PUBLISH报文的topic
[in]payload指定MQTT PUBLISH报文的payload
[in]payload_len指定MQTT PUBLISH报文的payload_len
[in]qos指定mqtt的qos值, 仅支持qos0和qos1
[in]pub_prop指定MQTT PUB报文的属性
返回
int32_t
返回值
STATE_MQTT_INVALID_PROTOCOL_VERSIONmqtt协议的版本号不对, 没有通过AIOT_MQTTOPT_VERSION将版本号将设置为5.0
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

int32_t aiot_mqtt_pub ( void *  handle,
char *  topic,
uint8_t *  payload,
uint32_t  payload_len,
uint8_t  qos 
)

发送一条PUBLISH报文到MQTT服务器, QoS为0, 用于发布指定的消息

参数
[in]handleMQTT实例句柄
[in]topic指定MQTT PUBLISH报文的topic
[in]payload指定MQTT PUBLISH报文的payload
[in]payload_len指定MQTT PUBLISH报文的payload_len
[in]qos指定mqtt的qos值, 仅支持qos0和qos1
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

static int32_t _core_mqtt_sub ( void *  handle,
core_mqtt_buff_t *  topic,
aiot_mqtt_recv_handler_t  handler,
uint8_t  qos,
void *  userdata,
sub_property_t sub_prop 
)
static

函数调用图:

static int32_t _mqtt_sub_with_prop ( void *  handle,
char *  topic,
aiot_mqtt_recv_handler_t  handler,
uint8_t  qos,
void *  userdata,
sub_property_t sub_prop 
)
static

函数调用图:

int32_t aiot_mqtt_sub ( void *  handle,
char *  topic,
aiot_mqtt_recv_handler_t  handler,
uint8_t  qos,
void *  userdata 
)

发送一条mqtt SUBSCRIBE报文到MQTT服务器, 用于订阅指定的topic

参数
[in]handleMQTT实例句柄
[in]topic指定MQTT SUBSCRIBE报文的topic
[in]handler与topic对应的MQTT PUBLISH报文回调函数, 当有消息发布到topic时, 该回调函数被调用 若handler为NULL传入, 则SDK调用AIOT_MQTTOPT_RECV_HANDLER 配置的回调函数 若多次调用aiot_mqtt_sub()并对同一topic指定不同的handler, 有消息到达时不同handler都会被调用到
[in]qos指定topic期望mqtt服务器支持的最大qos值, 仅支持qos0和qos1
[in]userdata可让SDK代为保存的用户上下文, 当回调函数被调用时, 此上下文会通过handler传回给用户 若未指定该上下文, 那么通过AIOT_MQTTOPT_USERDATA 配置的上下文会通过handler传回给用户
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

int32_t aiot_mqtt_sub_with_prop ( void *  handle,
char *  topic,
aiot_mqtt_recv_handler_t  handler,
uint8_t  qos,
void *  userdata,
sub_property_t sub_prop 
)

发送一条mqtt SUBSCRIBE报文到MQTT服务器, 用于订阅指定的topic 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0

参数
[in]handleMQTT实例句柄
[in]topic指定MQTT SUBSCRIBE报文的topic
[in]handler与topic对应的MQTT PUBLISH报文回调函数, 当有消息发布到topic时, 该回调函数被调用 若handler为NULL传入, 则SDK调用AIOT_MQTTOPT_RECV_HANDLER 配置的回调函数 若多次调用aiot_mqtt_sub()并对同一topic指定不同的handler, 有消息到达时不同handler都会被调用到
[in]qos指定topic期望mqtt服务器支持的最大qos值, 仅支持qos0和qos1
[in]userdata可让SDK代为保存的用户上下文, 当回调函数被调用时, 此上下文会通过handler传回给用户 若未指定该上下文, 那么通过AIOT_MQTTOPT_USERDATA 配置的上下文会通过handler传回给用户
[in]sub_prop指定MQTT SUBSCRIBE报文的属性
返回
int32_t
返回值
STATE_MQTT_INVALID_PROTOCOL_VERSIONmqtt协议的版本号不对, 没有通过AIOT_MQTTOPT_VERSION将版本号将设置为5.0
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

static int32_t _core_mqtt_unsub ( void *  handle,
core_mqtt_buff_t *  topic,
unsub_property_t unsub_prop 
)
static

函数调用图:

static int32_t _mqtt_unsub ( void *  handle,
char *  topic,
unsub_property_t unsub_prop 
)
static

函数调用图:

int32_t aiot_mqtt_unsub ( void *  handle,
char *  topic 
)

发送一条mqtt UNSUBSCRIBE报文到MQTT服务器, 用于取消订阅指定的topic

参数
[in]handleMQTT实例句柄
[in]topic指定MQTT UNSUBSCRIBE报文的topic
返回
int32_t
返回值
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

int32_t aiot_mqtt_unsub_with_prop ( void *  handle,
char *  topic,
unsub_property_t unsub_prop 
)

发送一条mqtt UNSUBSCRIBE报文到MQTT服务器, 用于取消订阅指定的topic 以MQTT 5.0协议的方式接入, 支持5.0的特性. 在调用这个接口前, 需要确保已经通过AIOT_MQTTOPT_VERSION的方式, 设置过版本号为AIOT_MQTT_VERSION_5_0

参数
[in]handleMQTT实例句柄
[in]topic指定MQTT UNSUBSCRIBE报文的topic
[in]unsub_prop指定MQTT UNSUBSCRIBE报文的属性
返回
int32_t
返回值
STATE_MQTT_INVALID_PROTOCOL_VERSIONmqtt协议的版本号不对, 没有通过AIOT_MQTTOPT_VERSION将版本号将设置为5.0
<STATE_SUCCESS执行失败, 更多信息请参考aiot_state_api.h
>=STATE_SUCCESS执行成功

函数调用图:

int32_t aiot_mqtt_recv ( void *  handle)

尝试从网络上接收MQTT报文

除了从网络上接收MQTT报文之外, 本函数也包含了重连机制

  1. 当MQTT心跳丢失超过AIOT_MQTTOPT_HEARTBEAT_MAX_LOST 配置的次数时, 触发重连机制
  2. 当SDK检测到网络断开时, 触发重连机制
参数
[in]handle
返回值
STATE_SYS_DEPEND_NWK_READ_LESSDATA执行成功, 此时网络上暂无可以收取的MQTT报文
>=STATE_SUCCESS执行成功
其他返回值执行失败, 更多信息请参考aiot_state_api.h
注解

当网络连接正常并且aiot_mqtt_deinit 未被调用时, 该函数为阻塞, 需要持续被调用

  1. 当网络连接断开时, 该函数会立即返回, 此时返回值为STATE_SYS_DEPEND_NWK_CLOSED
  2. aiot_mqtt_deinit 被调用时, 该函数会立即返回, 此时返回值为STATE_USER_INPUT_EXEC_DISABLED

函数调用图:

char* core_mqtt_get_product_key ( void *  handle)
char* core_mqtt_get_device_name ( void *  handle)
uint16_t core_mqtt_get_port ( void *  handle)
int32_t core_mqtt_get_nwkstats ( void *  handle,
core_mqtt_nwkstats_info_t *  nwk_stats_info 
)

变量说明

int32_t last_failed_error_code = 0
static