MQTT C Client Libraries Internals
|
functions to deal with reading and writing of MQTT packets from and to sockets More...
#include "MQTTPacket.h"
#include "Log.h"
#include "MQTTPersistence.h"
#include "Messages.h"
#include "StackTrace.h"
#include "WebSocket.h"
#include "MQTTTime.h"
#include <stdlib.h>
#include <string.h>
#include "Heap.h"
Macros | |
#define | min(A, B) ( (A) < (B) ? (A):(B)) |
#define | MAX_NO_OF_REMAINING_LENGTH_BYTES 4 |
#define | MAX_NO_OF_REMAINING_LENGTH_BYTES 4 |
Functions | |
const char * | MQTTPacket_name (int ptype) |
Converts an MQTT packet code into its name. More... | |
static char * | readUTFlen (char **pptr, char *enddata, int *len) |
Reads a "UTF" string from the input buffer. More... | |
static int | MQTTPacket_send_ack (int MQTTVersion, int type, int msgid, int dup, networkHandles *net) |
Send an MQTT acknowledgement packet down a socket. More... | |
void * | MQTTPacket_Factory (int MQTTVersion, networkHandles *net, int *error) |
Reads one MQTT packet from a socket. More... | |
int | MQTTPacket_send (networkHandles *net, Header header, char *buffer, size_t buflen, int freeData, int MQTTVersion) |
Sends an MQTT packet in one system call write. More... | |
int | MQTTPacket_sends (networkHandles *net, Header header, PacketBuffers *bufs, int MQTTVersion) |
Sends an MQTT packet from multiple buffers in one system call write. More... | |
int | MQTTPacket_encode (char *buf, size_t length) |
Encodes the message length according to the MQTT algorithm. More... | |
int | MQTTPacket_decode (networkHandles *net, size_t *value) |
Decodes the message length according to the MQTT algorithm. More... | |
int | readInt (char **pptr) |
Calculates an integer from two bytes read from the input buffer. More... | |
char * | readUTF (char **pptr, char *enddata) |
Reads a "UTF" string from the input buffer. More... | |
unsigned char | readChar (char **pptr) |
Reads one character from the input buffer. More... | |
void | writeChar (char **pptr, char c) |
Writes one character to an output buffer. More... | |
void | writeInt (char **pptr, int anInt) |
Writes an integer as 2 bytes to an output buffer. More... | |
void | writeUTF (char **pptr, const char *string) |
Writes a "UTF" string to an output buffer. More... | |
void | writeData (char **pptr, const void *data, int datalen) |
Writes length delimited data to an output buffer. More... | |
void * | MQTTPacket_header_only (int MQTTVersion, unsigned char aHeader, char *data, size_t datalen) |
Function used in the new packets table to create packets which have only a header. More... | |
int | MQTTPacket_send_disconnect (Clients *client, enum MQTTReasonCodes reason, MQTTProperties *props) |
Send an MQTT disconnect packet down a socket. More... | |
void * | MQTTPacket_publish (int MQTTVersion, unsigned char aHeader, char *data, size_t datalen) |
Function used in the new packets table to create publish packets. More... | |
void | MQTTPacket_freePublish (Publish *pack) |
Free allocated storage for a publish packet. More... | |
void | MQTTPacket_freeAck (Ack *pack) |
Free allocated storage for an ack packet. More... | |
int | MQTTPacket_send_puback (int MQTTVersion, int msgid, networkHandles *net, const char *clientID) |
Send an MQTT PUBACK packet down a socket. More... | |
void | MQTTPacket_freeSuback (Suback *pack) |
Free allocated storage for a suback packet. More... | |
void | MQTTPacket_freeUnsuback (Unsuback *pack) |
Free allocated storage for a suback packet. More... | |
int | MQTTPacket_send_pubrec (int MQTTVersion, int msgid, networkHandles *net, const char *clientID) |
Send an MQTT PUBREC packet down a socket. More... | |
int | MQTTPacket_send_pubrel (int MQTTVersion, int msgid, int dup, networkHandles *net, const char *clientID) |
Send an MQTT PUBREL packet down a socket. More... | |
int | MQTTPacket_send_pubcomp (int MQTTVersion, int msgid, networkHandles *net, const char *clientID) |
Send an MQTT PUBCOMP packet down a socket. More... | |
void * | MQTTPacket_ack (int MQTTVersion, unsigned char aHeader, char *data, size_t datalen) |
Function used in the new packets table to create acknowledgement packets. More... | |
int | MQTTPacket_send_publish (Publish *pack, int dup, int qos, int retained, networkHandles *net, const char *clientID) |
Send an MQTT PUBLISH packet down a socket. More... | |
void | MQTTPacket_free_packet (MQTTPacket *pack) |
Free allocated storage for a various packet tyoes. More... | |
void | writeInt4 (char **pptr, int anInt) |
Writes an integer as 4 bytes to an output buffer. More... | |
int | readInt4 (char **pptr) |
Calculates an integer from two bytes read from the input buffer. More... | |
void | writeMQTTLenString (char **pptr, MQTTLenString lenstring) |
int | MQTTLenStringRead (MQTTLenString *lenstring, char **pptr, char *enddata) |
int | MQTTPacket_VBIlen (int rem_len) |
int | MQTTPacket_VBIdecode (int(*getcharfn)(char *, int), unsigned int *value) |
Decodes the message length according to the MQTT algorithm. More... | |
int | bufchar (char *c, int count) |
int | MQTTPacket_decodeBuf (char *buf, unsigned int *value) |
Variables | |
static const char * | packet_names [] |
List of the predefined MQTT v3/v5 packet names. More... | |
const char ** | MQTTClient_packet_names = packet_names |
pf | new_packets [] |
Array of functions to build packets, indexed according to packet code. More... | |
static char * | bufptr |
functions to deal with reading and writing of MQTT packets from and to sockets
Some other related functions are in the MQTTPacketOut module
void* MQTTPacket_ack | ( | int | MQTTVersion, |
unsigned char | aHeader, | ||
char * | data, | ||
size_t | datalen | ||
) |
Function used in the new packets table to create acknowledgement packets.
MQTTVersion | the version of MQTT being used |
aHeader | the MQTT header byte |
data | the rest of the packet |
datalen | the length of the rest of the packet |
int MQTTPacket_decode | ( | networkHandles * | net, |
size_t * | value | ||
) |
Decodes the message length according to the MQTT algorithm.
socket | the socket from which to read the bytes |
value | the decoded length returned |
int MQTTPacket_encode | ( | char * | buf, |
size_t | length | ||
) |
Encodes the message length according to the MQTT algorithm.
buf | the buffer into which the encoded data is written |
length | the length to be encoded |
void* MQTTPacket_Factory | ( | int | MQTTVersion, |
networkHandles * | net, | ||
int * | error | ||
) |
Reads one MQTT packet from a socket.
socket | a socket from which to read an MQTT packet |
error | pointer to the error code which is completed if no packet is returned |
void MQTTPacket_free_packet | ( | MQTTPacket * | pack | ) |
Free allocated storage for a various packet tyoes.
pack | pointer to the suback packet structure |
void MQTTPacket_freeAck | ( | Ack * | pack | ) |
Free allocated storage for an ack packet.
pack | pointer to the publish packet structure |
void MQTTPacket_freePublish | ( | Publish * | pack | ) |
Free allocated storage for a publish packet.
pack | pointer to the publish packet structure |
void MQTTPacket_freeSuback | ( | Suback * | pack | ) |
Free allocated storage for a suback packet.
pack | pointer to the suback packet structure |
void MQTTPacket_freeUnsuback | ( | Unsuback * | pack | ) |
Free allocated storage for a suback packet.
pack | pointer to the suback packet structure |
void* MQTTPacket_header_only | ( | int | MQTTVersion, |
unsigned char | aHeader, | ||
char * | data, | ||
size_t | datalen | ||
) |
Function used in the new packets table to create packets which have only a header.
MQTTVersion | the version of MQTT |
aHeader | the MQTT header byte |
data | the rest of the packet |
datalen | the length of the rest of the packet |
const char* MQTTPacket_name | ( | int | ptype | ) |
Converts an MQTT packet code into its name.
ptype | packet code |
void* MQTTPacket_publish | ( | int | MQTTVersion, |
unsigned char | aHeader, | ||
char * | data, | ||
size_t | datalen | ||
) |
Function used in the new packets table to create publish packets.
MQTTVersion | |
aHeader | the MQTT header byte |
data | the rest of the packet |
datalen | the length of the rest of the packet |
int MQTTPacket_send | ( | networkHandles * | net, |
Header | header, | ||
char * | buffer, | ||
size_t | buflen, | ||
int | freeData, | ||
int | MQTTVersion | ||
) |
Sends an MQTT packet in one system call write.
socket | the socket to which to write the data |
header | the one-byte MQTT header |
buffer | the rest of the buffer to write (not including remaining length) |
buflen | the length of the data in buffer to be written |
MQTTVersion | the version of MQTT being used |
|
static |
Send an MQTT acknowledgement packet down a socket.
MQTTVersion | the version of MQTT being used |
type | the MQTT packet type e.g. SUBACK |
msgid | the MQTT message id to use |
dup | boolean - whether to set the MQTT DUP flag |
net | the network handle to send the data to |
int MQTTPacket_send_disconnect | ( | Clients * | client, |
enum MQTTReasonCodes | reason, | ||
MQTTProperties * | props | ||
) |
Send an MQTT disconnect packet down a socket.
socket | the open socket to send the data to |
int MQTTPacket_send_puback | ( | int | MQTTVersion, |
int | msgid, | ||
networkHandles * | net, | ||
const char * | clientID | ||
) |
Send an MQTT PUBACK packet down a socket.
MQTTVersion | the version of MQTT being used |
msgid | the MQTT message id to use |
socket | the open socket to send the data to |
clientID | the string client identifier, only used for tracing |
int MQTTPacket_send_pubcomp | ( | int | MQTTVersion, |
int | msgid, | ||
networkHandles * | net, | ||
const char * | clientID | ||
) |
Send an MQTT PUBCOMP packet down a socket.
MQTTVersion | the version of MQTT being used |
msgid | the MQTT message id to use |
socket | the open socket to send the data to |
clientID | the string client identifier, only used for tracing |
int MQTTPacket_send_publish | ( | Publish * | pack, |
int | dup, | ||
int | qos, | ||
int | retained, | ||
networkHandles * | net, | ||
const char * | clientID | ||
) |
Send an MQTT PUBLISH packet down a socket.
pack | a structure from which to get some values to use, e.g topic, payload |
dup | boolean - whether to set the MQTT DUP flag |
qos | the value to use for the MQTT QoS setting |
retained | boolean - whether to set the MQTT retained flag |
socket | the open socket to send the data to |
clientID | the string client identifier, only used for tracing |
int MQTTPacket_send_pubrec | ( | int | MQTTVersion, |
int | msgid, | ||
networkHandles * | net, | ||
const char * | clientID | ||
) |
Send an MQTT PUBREC packet down a socket.
MQTTVersion | the version of MQTT being used |
msgid | the MQTT message id to use |
socket | the open socket to send the data to |
clientID | the string client identifier, only used for tracing |
int MQTTPacket_send_pubrel | ( | int | MQTTVersion, |
int | msgid, | ||
int | dup, | ||
networkHandles * | net, | ||
const char * | clientID | ||
) |
Send an MQTT PUBREL packet down a socket.
MQTTVersion | the version of MQTT being used |
msgid | the MQTT message id to use |
dup | boolean - whether to set the MQTT DUP flag |
socket | the open socket to send the data to |
clientID | the string client identifier, only used for tracing |
int MQTTPacket_sends | ( | networkHandles * | net, |
Header | header, | ||
PacketBuffers * | bufs, | ||
int | MQTTVersion | ||
) |
Sends an MQTT packet from multiple buffers in one system call write.
socket | the socket to which to write the data |
header | the one-byte MQTT header |
count | the number of buffers |
buffers | the rest of the buffers to write (not including remaining length) |
buflens | the lengths of the data in the array of buffers to be written |
the | MQTT version being used |
int MQTTPacket_VBIdecode | ( | int(*)(char *, int) | getcharfn, |
unsigned int * | value | ||
) |
Decodes the message length according to the MQTT algorithm.
getcharfn | pointer to function to read the next character from the data source |
value | the decoded length returned |
unsigned char readChar | ( | char ** | pptr | ) |
Reads one character from the input buffer.
pptr | pointer to the input buffer - incremented by the number of bytes used & returned |
int readInt | ( | char ** | pptr | ) |
Calculates an integer from two bytes read from the input buffer.
pptr | pointer to the input buffer - incremented by the number of bytes used & returned |
int readInt4 | ( | char ** | pptr | ) |
Calculates an integer from two bytes read from the input buffer.
pptr | pointer to the input buffer - incremented by the number of bytes used & returned |
char* readUTF | ( | char ** | pptr, |
char * | enddata | ||
) |
Reads a "UTF" string from the input buffer.
UTF as in the MQTT v3 spec which really means a length delimited string. So it reads the two byte length then the data according to that length. The end of the buffer is provided too, so we can prevent buffer overruns caused by an incorrect length.
pptr | pointer to the input buffer - incremented by the number of bytes used & returned |
enddata | pointer to the end of the buffer not to be read beyond |
|
static |
Reads a "UTF" string from the input buffer.
UTF as in the MQTT v3 spec which really means a length delimited string. So it reads the two byte length then the data according to that length. The end of the buffer is provided too, so we can prevent buffer overruns caused by an incorrect length.
pptr | pointer to the input buffer - incremented by the number of bytes used & returned |
enddata | pointer to the end of the buffer not to be read beyond |
len | returns the calculcated value of the length bytes read |
void writeChar | ( | char ** | pptr, |
char | c | ||
) |
Writes one character to an output buffer.
pptr | pointer to the output buffer - incremented by the number of bytes used & returned |
c | the character to write |
void writeData | ( | char ** | pptr, |
const void * | data, | ||
int | datalen | ||
) |
Writes length delimited data to an output buffer.
pptr | pointer to the output buffer - incremented by the number of bytes used & returned |
data | the data to write |
datalen | the length of the data to write |
void writeInt | ( | char ** | pptr, |
int | anInt | ||
) |
Writes an integer as 2 bytes to an output buffer.
pptr | pointer to the output buffer - incremented by the number of bytes used & returned |
anInt | the integer to write |
void writeInt4 | ( | char ** | pptr, |
int | anInt | ||
) |
Writes an integer as 4 bytes to an output buffer.
pptr | pointer to the output buffer - incremented by the number of bytes used & returned |
anInt | the integer to write |
void writeUTF | ( | char ** | pptr, |
const char * | string | ||
) |
Writes a "UTF" string to an output buffer.
Converts C string to length-delimited.
pptr | pointer to the output buffer - incremented by the number of bytes used & returned |
string | the C string to write |
pf new_packets[] |
Array of functions to build packets, indexed according to packet code.
|
static |
List of the predefined MQTT v3/v5 packet names.