Skip to content

Commit

Permalink
* MDF [supplemental/mqtt_msg] unified mqtt_get_next_packet_id
Browse files Browse the repository at this point in the history
Signed-off-by: jaylin <[email protected]>
  • Loading branch information
JaylinYu committed Nov 17, 2023
1 parent 8948acb commit 3e0a9f7
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 18 deletions.
21 changes: 21 additions & 0 deletions src/supplemental/mqtt/mqtt_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -4216,3 +4216,24 @@ nni_mqtt_msgack_encode(nng_msg *msg, uint16_t packet_id, uint8_t reason_code,

return MQTT_SUCCESS;
}
/***
* @brief get next unique packet id for MQTT packet and increase by 1, skip 0
*
* @param nni_atomic_int* id
* @return uint16_t packet id
*/
uint16_t
mqtt_get_next_packet_id(nni_atomic_int *id)
{
int packet_id;
do {
packet_id = nni_atomic_get(id);
} while (
!nni_atomic_cas(id, packet_id, packet_id + 1));
/* PROTOCOL ERROR: When the expression is 0 */
if ((nni_atomic_get(id) & 0xFFFF) == 0) {
nni_atomic_set(id, 1);
}
log_error("id: %d",((uint16_t)packet_id & 0xFFFF) );
return (uint16_t)packet_id & 0xFFFF;
}
42 changes: 24 additions & 18 deletions src/supplemental/mqtt/mqtt_msg.h
Original file line number Diff line number Diff line change
Expand Up @@ -447,24 +447,27 @@ NNG_DECL void nni_mqtt_topic_array_free(nni_mqtt_topic *, size_t);

// mqtt topic_qos create/free/set
NNG_DECL nni_mqtt_topic_qos *nni_mqtt_topic_qos_array_create(size_t);
NNG_DECL void nni_mqtt_topic_qos_array_set(nni_mqtt_topic_qos *,
size_t, const char *, uint32_t, uint8_t, uint8_t, uint8_t, uint8_t);
NNG_DECL void nni_mqtt_topic_qos_array_set(nni_mqtt_topic_qos *, size_t,
const char *, uint32_t, uint8_t, uint8_t, uint8_t, uint8_t);
NNG_DECL void nni_mqtt_topic_qos_array_free(nni_mqtt_topic_qos *, size_t);

NNG_DECL void mqtt_close_unack_msg_cb(void *, void *);

NNG_DECL uint16_t nni_msg_get_pub_pid(nni_msg *);
NNG_DECL uint16_t mqtt_get_next_packet_id(nni_atomic_int *id);

NNG_DECL void nni_mqtt_msg_set_connect_property(nni_msg *, property *);
NNG_DECL property* nni_mqtt_msg_get_connect_property(nni_msg *);
NNG_DECL void nni_mqtt_msg_set_connect_property(nni_msg *, property *);
NNG_DECL property *nni_mqtt_msg_get_connect_property(nni_msg *);

NNG_DECL reason_code check_properties(property *prop);
NNG_DECL property *decode_buf_properties(uint8_t *packet, uint32_t packet_len, uint32_t *pos, uint32_t *len, bool copy_value);
NNG_DECL property *decode_properties(nng_msg *msg, uint32_t *pos, uint32_t *len, bool copy_value);
NNG_DECL int encode_properties(nng_msg *msg, property *prop, uint8_t cmd);

NNG_DECL uint32_t get_properties_len(property *prop);
NNG_DECL int property_free(property *prop);
NNG_DECL property *decode_buf_properties(uint8_t *packet, uint32_t packet_len,
uint32_t *pos, uint32_t *len, bool copy_value);
NNG_DECL property *decode_properties(
nng_msg *msg, uint32_t *pos, uint32_t *len, bool copy_value);
NNG_DECL int encode_properties(nng_msg *msg, property *prop, uint8_t cmd);

NNG_DECL uint32_t get_properties_len(property *prop);
NNG_DECL int property_free(property *prop);
NNG_DECL void property_foreach(property *prop, void (*cb)(property *));
NNG_DECL int property_dup(property **dup, const property *src);
NNG_DECL property *property_pub_by_will(property *will_prop);
Expand All @@ -474,21 +477,24 @@ NNG_DECL property *property_set_value_u8(uint8_t prop_id, uint8_t value);
NNG_DECL property *property_set_value_u16(uint8_t prop_id, uint16_t value);
NNG_DECL property *property_set_value_u32(uint8_t prop_id, uint32_t value);
NNG_DECL property *property_set_value_varint(uint8_t prop_id, uint32_t value);
NNG_DECL property *property_set_value_binary(uint8_t prop_id, uint8_t *value, uint32_t len, bool copy_value);
NNG_DECL property *property_set_value_str( uint8_t prop_id, const char *value, uint32_t len, bool copy_value);
NNG_DECL property *property_set_value_strpair(uint8_t prop_id, const char *key, uint32_t key_len, const char *value, uint32_t value_len, bool copy_value);
NNG_DECL property *property_set_value_binary(
uint8_t prop_id, uint8_t *value, uint32_t len, bool copy_value);
NNG_DECL property *property_set_value_str(
uint8_t prop_id, const char *value, uint32_t len, bool copy_value);
NNG_DECL property *property_set_value_strpair(uint8_t prop_id, const char *key,
uint32_t key_len, const char *value, uint32_t value_len, bool copy_value);

NNG_DECL property_type_enum property_get_value_type(uint8_t prop_id);
NNG_DECL property_data * property_get_value(property *prop, uint8_t prop_id);
NNG_DECL void property_append(property *prop_list, property *last);
NNG_DECL int property_value_copy(property *dest,const property *src);

/* introduced from mqtt_parser, might be duplicated */
NNG_DECL int nni_mqtt_pubres_decode(nng_msg *msg, uint16_t *packet_id,
uint8_t *reason_code, property **prop, uint8_t proto_ver);
NNG_DECL int nni_mqtt_msgack_encode(nng_msg *msg, uint16_t packet_id,
uint8_t reason_code, property *prop, uint8_t proto_ver);
NNG_DECL int nni_mqtt_pubres_header_encode(nng_msg *msg, uint8_t cmd);
NNG_DECL int nni_mqtt_pubres_decode(nng_msg *msg, uint16_t *packet_id,
uint8_t *reason_code, property **prop, uint8_t proto_ver);
NNG_DECL int nni_mqtt_msgack_encode(nng_msg *msg, uint16_t packet_id,
uint8_t reason_code, property *prop, uint8_t proto_ver);
NNG_DECL int nni_mqtt_pubres_header_encode(nng_msg *msg, uint8_t cmd);

#ifdef __cplusplus
}
Expand Down

0 comments on commit 3e0a9f7

Please sign in to comment.