MQTT C Client Libraries Internals
Functions | Variables
SocketBuffer.c File Reference

Socket buffering related functions. More...

#include "SocketBuffer.h"
#include "LinkedList.h"
#include "Log.h"
#include "Messages.h"
#include "StackTrace.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "Heap.h"
Include dependency graph for SocketBuffer.c:

Functions

int socketcompare (void *a, void *b)
 List callback function for comparing socket_queues by socket. More...
 
int SocketBuffer_newDefQ (void)
 Create a new default queue when one has just been used.
 
void SocketBuffer_freeDefQ (void)
 Free the default queue memory.
 
int pending_socketcompare (void *a, void *b)
 List callback function for comparing pending_writes by socket. More...
 
int SocketBuffer_initialize (void)
 Initialize the socketBuffer module.
 
void SocketBuffer_terminate (void)
 Terminate the socketBuffer module.
 
void SocketBuffer_cleanup (int socket)
 Cleanup any buffers for a specific socket. More...
 
char * SocketBuffer_getQueuedData (int socket, size_t bytes, size_t *actual_len)
 Get any queued data for a specific socket. More...
 
int SocketBuffer_getQueuedChar (int socket, char *c)
 Get any queued character for a specific socket. More...
 
void SocketBuffer_interrupted (int socket, size_t actual_len)
 A socket read was interrupted so we need to queue data. More...
 
char * SocketBuffer_complete (int socket)
 A socket read has now completed so we can get rid of the queue. More...
 
void SocketBuffer_queueChar (int socket, char c)
 Queued a Charactor to a specific socket. More...
 
int SocketBuffer_pendingWrite (int socket, int count, iobuf *iovecs, int *frees, size_t total, size_t bytes)
 A socket write was interrupted so store the remaining data. More...
 
pending_writesSocketBuffer_getWrite (int socket)
 Get any queued write data for a specific socket. More...
 
int SocketBuffer_writeComplete (int socket)
 A socket write has now completed so we can get rid of the queue. More...
 
pending_writesSocketBuffer_updateWrite (int socket, char *topic, char *payload)
 Update the queued write data for a socket in the case of QoS 0 messages. More...
 

Variables

static socket_queuedef_queue
 Default input queue buffer.
 
static Listqueues
 List of queued input buffers.
 
static List writes
 List of queued write buffers.
 

Detailed Description

Socket buffering related functions.

Some other related functions are in the Socket module

Function Documentation

◆ pending_socketcompare()

int pending_socketcompare ( void *  a,
void *  b 
)

List callback function for comparing pending_writes by socket.

Parameters
afirst integer value
bsecond integer value
Returns
boolean indicating whether a and b are equal

◆ SocketBuffer_cleanup()

void SocketBuffer_cleanup ( int  socket)

Cleanup any buffers for a specific socket.

Parameters
socketthe socket to clean up
Here is the call graph for this function:

◆ SocketBuffer_complete()

char* SocketBuffer_complete ( int  socket)

A socket read has now completed so we can get rid of the queue.

Parameters
socketthe socket for which the operation is now complete
Returns
pointer to the default queue data
Here is the call graph for this function:

◆ SocketBuffer_getQueuedChar()

int SocketBuffer_getQueuedChar ( int  socket,
char *  c 
)

Get any queued character for a specific socket.

Parameters
socketthe socket to get queued data for
cthe character returned if any
Returns
completion code
Here is the call graph for this function:

◆ SocketBuffer_getQueuedData()

char* SocketBuffer_getQueuedData ( int  socket,
size_t  bytes,
size_t *  actual_len 
)

Get any queued data for a specific socket.

Parameters
socketthe socket to get queued data for
bytesthe number of bytes of data to retrieve
actual_lenthe actual length returned
Returns
the actual data
Here is the call graph for this function:

◆ SocketBuffer_getWrite()

pending_writes* SocketBuffer_getWrite ( int  socket)

Get any queued write data for a specific socket.

Parameters
socketthe socket to get queued data for
Returns
pointer to the queued data or NULL
Here is the call graph for this function:

◆ SocketBuffer_interrupted()

void SocketBuffer_interrupted ( int  socket,
size_t  actual_len 
)

A socket read was interrupted so we need to queue data.

Parameters
socketthe socket to get queued data for
actual_lenthe actual length of data that was read
Here is the call graph for this function:

◆ SocketBuffer_pendingWrite()

int SocketBuffer_pendingWrite ( int  socket,
int  count,
iobuf *  iovecs,
int *  frees,
size_t  total,
size_t  bytes 
)

A socket write was interrupted so store the remaining data.

Parameters
socketthe socket for which the write was interrupted
countthe number of iovec buffers
iovecsbuffer array
freesa set of flags indicating which of the iovecs array should be freed
totaltotal data length to be written
bytesactual data length that was written
Here is the call graph for this function:

◆ SocketBuffer_queueChar()

void SocketBuffer_queueChar ( int  socket,
char  c 
)

Queued a Charactor to a specific socket.

Parameters
socketthe socket for which to queue char for
cthe character to queue
Here is the call graph for this function:

◆ SocketBuffer_updateWrite()

pending_writes* SocketBuffer_updateWrite ( int  socket,
char *  topic,
char *  payload 
)

Update the queued write data for a socket in the case of QoS 0 messages.

Parameters
socketthe socket for which the operation is now complete
topicthe topic of the QoS 0 write
payloadthe payload of the QoS 0 write
Returns
pointer to the updated queued data structure, or NULL
Here is the call graph for this function:

◆ SocketBuffer_writeComplete()

int SocketBuffer_writeComplete ( int  socket)

A socket write has now completed so we can get rid of the queue.

Parameters
socketthe socket for which the operation is now complete
Returns
completion code, boolean - was the queue removed?
Here is the call graph for this function:

◆ socketcompare()

int socketcompare ( void *  a,
void *  b 
)

List callback function for comparing socket_queues by socket.

Parameters
afirst integer value
bsecond integer value
Returns
boolean indicating whether a and b are equal