Esempio n. 1
0
//--------------------------------------------
void mqtt_unsubscribe_decode(mqtt_fixed_header_t *fixhdr, mqtt_unsubscribe_header_t *unsubscribe)
{
	size_t len;

	unsubscribe->msg_id = ntohs(*((unsigned short *)&fixhdr->rem_buf[0]));

	for (len = 0; len < fixhdr->rem_len - 2;)
	{
		uint16_t name_len = ntohs(*((unsigned short *)(&fixhdr->rem_buf[2] + len)));
		uint8_t *name = fixhdr->rem_buf + 2 + len + 2;
		list_sub_remove_name(unsubscribe->sub_list, name, name_len);
		dprintf("subtopic:%.*s\n", name_len, name);
		len += name_len + 2;
	}

	assert(2 + len == fixhdr->rem_len);
}
Esempio n. 2
0
//--------------------------------------------
mqttsn_return_code_t mqttsn_unsubscribe_decode(mqttsn_fixed_header_t *fixhdr, mqttsn_unsubscribe_header_t *unsubscribe)
{
	mqttsn_flags_decode(&unsubscribe->flags, &fixhdr->rem_buf[0]);
	unsubscribe->msg_id = ntohs(*((uint16_t *)&fixhdr->rem_buf[1]));
	if (unsubscribe->flags.topic_id_type == MQTTSN_TOPIC_NAME)
	{
		unsubscribe->name_length = fixhdr->rem_len - 3;
		unsubscribe->name = &fixhdr->rem_buf[3];
		list_sub_remove_name(unsubscribe->sub_list, unsubscribe->name, unsubscribe->name_length);
	}
	if (unsubscribe->flags.topic_id_type == MQTTSN_PREDEF_TOPIC_ID)
	{
		unsubscribe->topic_id = ntohs(*((unsigned short *)&fixhdr->rem_buf[3]));
		list_sub_remove_topic_id(unsubscribe->sub_list, unsubscribe->topic_id);
	}
	if (unsubscribe->flags.topic_id_type == MQTTSN_SHORT_TOPIC_NAME)
		return MQTTSN_REFUSED_NOT_SUPPORTED;
	return MQTTSN_ACCEPTED;
}