mqtt_message_t* ICACHE_FLASH_ATTR mqtt_msg_publish(mqtt_connection_t* connection, const char* topic, const char* data, int data_length, int qos, int retain, uint16_t* message_id) { init_message(connection); if(topic == NULL || topic[0] == '\0') return fail_message(connection); if(append_string(connection, topic, strlen(topic)) < 0) return fail_message(connection); if(qos > 0) { if((*message_id = append_message_id(connection, 0)) == 0) return fail_message(connection); } else *message_id = 0; if(connection->message.length + data_length > connection->buffer_length) return fail_message(connection); memcpy(connection->buffer + connection->message.length, data, data_length); connection->message.length += data_length; return fini_message(connection, MQTT_MSG_TYPE_PUBLISH, 0, qos, retain); }
mqtt_message_t* mqtt_msg_pubcomp(mqtt_connection_t* connection, uint16_t message_id) { init_message(connection); if(append_message_id(connection, message_id) == 0) return fail_message(connection); return fini_message(connection, MQTT_MSG_TYPE_PUBCOMP, 0, 0, 0); }
mqtt_message_t* ICACHE_FLASH_ATTR mqtt_msg_pubrel(mqtt_connection_t* connection, uint16_t message_id) { init_message(connection); if(append_message_id(connection, message_id) == 0) return fail_message(connection); return fini_message(connection, MQTT_MSG_TYPE_PUBREL, 0, 1, 0); }
mqtt_message_t* mqtt_msg_subscribe_init(mqtt_connection_t* connection, uint16_t *message_id) { init_message(connection); if((*message_id = append_message_id(connection, 0)) == 0) return fail_message(connection); return &connection->message; }
mqtt_message_t* ICACHE_FLASH_ATTR mqtt_msg_pubcomp(mqtt_connection_t* connection, uint16_t message_id) { if (init_message(connection) == 0) { return fail_message(connection); } if (append_message_id(connection, message_id) == 0) return fail_message(connection); return fini_message(connection, MQTT_MSG_TYPE_PUBCOMP, 0, 0, 0); }
mqtt_message_t* ICACHE_FLASH_ATTR mqtt_msg_unsubscribe(mqtt_connection_t* connection, const char* topic, uint16_t* message_id) { init_message(connection); if(topic == NULL || topic[0] == '\0') return fail_message(connection); if((*message_id = append_message_id(connection, 0)) == 0) return fail_message(connection); if(append_string(connection, topic, strlen(topic)) < 0) return fail_message(connection); return fini_message(connection, MQTT_MSG_TYPE_UNSUBSCRIBE, 0, 1, 0); }
web::uri_builder build_uri(const web::uri& base_url, const utility::string_t& command, transport_type transport, const utility::string_t& connection_data, const utility::string_t& query_string, const utility::string_t& last_message_id = _XPLATSTR(""), const utility::string_t& groups_token = _XPLATSTR("")) { _ASSERTE(command == _XPLATSTR("reconnect") || (last_message_id.length() == 0 && groups_token.length() == 0)); web::uri_builder builder(base_url); builder.append_path(command); append_transport(builder, transport); builder.append_query(_XPLATSTR("clientProtocol"), PROTOCOL); //append_connection_token(builder, connection_token); append_connection_data(builder, connection_data); append_message_id(builder, last_message_id); append_groups_token(builder, groups_token); return builder.append_query(query_string); }
mqtt_message_t* ICACHE_FLASH_ATTR mqtt_msg_subscribe(mqtt_connection_t* connection, const char* topic, int qos, uint16_t* message_id) { init_message(connection); if(topic == NULL || topic[0] == '\0') return fail_message(connection); if((*message_id = append_message_id(connection, 0)) == 0) return fail_message(connection); if(append_string(connection, topic, strlen(topic)) < 0) return fail_message(connection); if(connection->message.length + 1 > connection->buffer_length) return fail_message(connection); connection->buffer[connection->message.length++] = qos; return fini_message(connection, MQTT_MSG_TYPE_SUBSCRIBE, 0, 1, 0); }