Function for reading variable length ints from packet.

pull/1022/head
Roger A. Light 7 years ago
parent 33a523eea9
commit ccc97d8c96

@ -280,6 +280,31 @@ void packet__write_uint32(struct mosquitto__packet *packet, uint32_t word)
}
int packet__read_varint(struct mosquitto__packet *packet, uint32_t *word)
{
int i;
int remaining_mult = 1;
uint8_t byte;
*word = 0;
for(i=0; i<4; i++){
if(packet->pos < packet->remaining_length){
byte = packet->payload[packet->pos];
word += (byte & 127) * remaining_mult;
remaining_mult *= 128;
packet->pos++;
if((byte & 128) == 0){
return MOSQ_ERR_SUCCESS;
}
}else{
return MOSQ_ERR_PROTOCOL;
}
}
return MOSQ_ERR_PROTOCOL;
}
int packet__write(struct mosquitto *mosq)
{
ssize_t write_length;

@ -32,6 +32,7 @@ int packet__read_bytes(struct mosquitto__packet *packet, void *bytes, uint32_t c
int packet__read_string(struct mosquitto__packet *packet, char **str, int *length);
int packet__read_uint16(struct mosquitto__packet *packet, uint16_t *word);
int packet__read_uint32(struct mosquitto__packet *packet, uint32_t *word);
int packet__read_varint(struct mosquitto__packet *packet, uint32_t *word);
void packet__write_byte(struct mosquitto__packet *packet, uint8_t byte);
void packet__write_bytes(struct mosquitto__packet *packet, const void *bytes, uint32_t count);

Loading…
Cancel
Save