MQTT C Client Libraries Internals
Loading...
Searching...
No Matches
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.
 
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.
 
int SocketBuffer_initialize (void)
 Initialize the socketBuffer module.
 
void SocketBuffer_terminate (void)
 Terminate the socketBuffer module.
 
void SocketBuffer_cleanup (SOCKET socket)
 Cleanup any buffers for a specific socket.
 
char * SocketBuffer_getQueuedData (SOCKET socket, size_t bytes, size_t *actual_len)
 Get any queued data for a specific socket.
 
int SocketBuffer_getQueuedChar (SOCKET socket, char *c)
 Get any queued character for a specific socket.
 
void SocketBuffer_interrupted (SOCKET socket, size_t actual_len)
 A socket read was interrupted so we need to queue data.
 
char * SocketBuffer_complete (SOCKET socket)
 A socket read has now completed so we can get rid of the queue.
 
void SocketBuffer_queueChar (SOCKET socket, char c)
 Queued a Charactor to a specific socket.
 
int SocketBuffer_pendingWrite (SOCKET socket, int count, iobuf *iovecs, int *frees, size_t total, size_t bytes)
 A socket write was interrupted so store the remaining data.
 
pending_writesSocketBuffer_getWrite (SOCKET socket)
 Get any queued write data for a specific socket.
 
int SocketBuffer_writeComplete (SOCKET socket)
 A socket write has now completed so we can get rid of the queue.
 
pending_writesSocketBuffer_updateWrite (SOCKET socket, char *topic, char *payload)
 Update the queued write data for a socket in the case of QoS 0 messages.
 

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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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 ( SOCKET 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