Nets v3.0.0
stream-server.h File Reference

Network stream server functions. (TCP). More...

#include "nets/socket.h"

Typedefs

typedef struct StreamServer_T StreamServer_T
typedef StreamServer_TStreamServer
typedef struct StreamSession_T StreamSession_T
typedef StreamSession_TStreamSession
typedef void *(* OnStreamSessionCreate) (StreamServer streamServer, StreamSession streamSession)
 Stream session create function. (TCP).
typedef void(* OnStreamSessionDestroy) (StreamServer streamServer, StreamSession streamSession, int reason)
 Stream session destroy function. (TCP).
typedef int(* OnStreamSessionReceive) (StreamServer streamServer, StreamSession streamSession, const uint8_t *receiveBuffer, size_t byteCount)
 Stream session data receive function. (TCP).
typedef void(* OnStreamServerDatagram) (StreamServer streamServer, SocketAddress remoteAddress, const uint8_t *receiveBuffer, size_t byteCount)
 Stream server datagram receive function. (UDP).

Functions

NetsResult createStreamServer (SocketFamily socketFamily, const char *service, size_t sessionBufferSize, size_t connectionQueueSize, size_t receiveBufferSize, double timeoutTime, OnStreamSessionCreate onCreate, OnStreamSessionDestroy onDestroy, OnStreamSessionReceive onReceive, OnStreamServerDatagram onDatagram, void *handle, SslContext sslContext, StreamServer *streamServer)
 Creates a new stream server instance. (TCP).
void destroyStreamServer (StreamServer streamServer)
 Destroys stream server instance. (TCP).
size_t getStreamServerSessionBufferSize (StreamServer streamServer)
 Returns stream server session buffer size.
size_t getStreamServerReceiveBufferSize (StreamServer streamServer)
 Returns stream server receive buffer size in bytes.
OnStreamSessionCreate getStreamServerOnCreate (StreamServer streamServer)
 Returns stream server session create function.
OnStreamSessionDestroy getStreamServerOnDestroy (StreamServer streamServer)
 Returns stream server session destroy function.
OnStreamSessionReceive getStreamServerOnReceive (StreamServer streamServer)
 Returns stream server session data receive function.
OnStreamServerDatagram getStreamServerOnDatagram (StreamServer streamServer)
 Returns stream server datagram receive function.
double getStreamServerTimeoutTime (StreamServer streamServer)
 Returns stream server session timeout time. (in seconds).
void * getStreamServerHandle (StreamServer streamServer)
 Returns stream server handle.
uint8_t * getStreamServerReceiveBuffer (StreamServer streamServer)
 Returns stream server receive data buffer.
Socket getStreamServerSocket (StreamServer streamServer)
 Returns stream server socket instance.
Socket getStreamServerDatagramSocket (StreamServer streamServer)
 Returns stream server datagram socket instance.
bool isStreamServerRunning (StreamServer streamServer)
 Returns true if stream server receive thread is running. (MT-Safe).
bool isStreamServerSecure (StreamServer streamServer)
 Returns true if stream server use encrypted connection.
void lockStreamServerSessions (StreamServer streamServer)
 Locks stream server sessions access. (MT-Safe).
void unlockStreamServerSessions (StreamServer streamServer)
 Unlocks stream server sessions access. (MT-Safe).
StreamSessiongetStreamServerSessions (StreamServer streamServer)
 Returns stream server session buffer.
size_t getStreamServerSessionCount (StreamServer streamServer)
 Returns stream server session buffer.
Socket getStreamSessionSocket (StreamSession streamSession)
 Returns stream session socket instance.
SocketAddress getStreamSessionRemoteAddress (StreamSession streamSession)
 Returns stream session remote IP address instance.
void * getStreamSessionHandle (StreamSession streamSession)
 Returns stream session handle.
int updateStreamSession (StreamServer streamServer, StreamSession streamSession, double currentTime)
 Updates specified stream server session state.
void destroyStreamSession (StreamServer streamServer, StreamSession streamSession, int reason)
 Destroyes specified stream server session.
void flushStreamSessions (StreamServer streamServer)
 Flushes destroyed stream server sessions.
void aliveStreamSession (StreamSession streamSession)
 Resets specified stream server session timeout time.
NetsResult streamSessionSend (StreamSession streamSession, const void *data, size_t byteCount)
 Sends stream data to the specified session. (TCP).
NetsResult streamServerSendDatagram (StreamServer streamServer, SocketAddress remoteAddress, const void *data, size_t byteCount)
 Sends datagram to the specified socket address. (UDP).
NetsResult shutdownStreamSession (StreamSession streamSession, SocketShutdown shutdown)
 Shutdowns part of the full-duplex socket connection.

Detailed Description

Network stream server functions. (TCP).

Typedef Documentation

◆ StreamServer_T

Stream server structure. (TCP)

◆ StreamServer

Stream server instance. (TCP)

◆ StreamSession_T

Stream server session structure. (TCP)

◆ StreamSession

Stream server session instance. (TCP)

◆ OnStreamSessionCreate

typedef void *(* OnStreamSessionCreate) (StreamServer streamServer, StreamSession streamSession)

Stream session create function. (TCP).

Warning
This function is called asynchronously from the receive thread!
Returns
Custom stream session handle on success, otherwise NULL.
Parameters
streamServerstream server instance
streamSessiona new accepted stream session instance

◆ OnStreamSessionDestroy

typedef void(* OnStreamSessionDestroy) (StreamServer streamServer, StreamSession streamSession, int reason)

Stream session destroy function. (TCP).

Note
This function is called synchronously.
Parameters
streamServerstream server instance
streamSessionstream session instance
reasonsession destruction reason

◆ OnStreamSessionReceive

typedef int(* OnStreamSessionReceive) (StreamServer streamServer, StreamSession streamSession, const uint8_t *receiveBuffer, size_t byteCount)

Stream session data receive function. (TCP).

Server destroys session on this function non zero return result.

Warning
This function is called asynchronously from the receive thread!
Parameters
streamServerstream server instance
streamSessionstream session instance
[in]receiveBufferreceived data buffer
byteCountreceived byte count

◆ OnStreamServerDatagram

typedef void(* OnStreamServerDatagram) (StreamServer streamServer, SocketAddress remoteAddress, const uint8_t *receiveBuffer, size_t byteCount)

Stream server datagram receive function. (UDP).

Warning
This function is called asynchronously from the receive thread!
Parameters
streamServerstream server instance
remoteAddresssender socket remote address
[in]receiveBufferreceived data buffer
byteCountreceived byte count

Function Documentation

◆ createStreamServer()

NetsResult createStreamServer ( SocketFamily socketFamily,
const char * service,
size_t sessionBufferSize,
size_t connectionQueueSize,
size_t receiveBufferSize,
double timeoutTime,
OnStreamSessionCreate onCreate,
OnStreamSessionDestroy onDestroy,
OnStreamSessionReceive onReceive,
OnStreamServerDatagram onDatagram,
void * handle,
SslContext sslContext,
StreamServer * streamServer )

Creates a new stream server instance. (TCP).

Returns
The operation NetsResult code.
Parameters
socketFamilylocal socket IP address family
[in]servicelocal IP address service string (port)
sessionBufferSizesession buffer size
connectionQueueSizepending connections queue size
receiveBufferSizereceive data buffer size in bytes
timeoutTimesession timeout time in seconds
[in]onCreateon session create function
[in]onDestroyon session destroy function
[in]onReceiveon session data receive function
[in]onDatagramon datagram receive function or NULL
[in]handlereceive function argument or NULL
sslContextsocket SSL context instance or NULL
[out]streamServerpointer to the stream server instance

◆ destroyStreamServer()

void destroyStreamServer ( StreamServer streamServer)

Destroys stream server instance. (TCP).

Parameters
streamServertarget stream server instance or NULL

◆ getStreamServerSessionBufferSize()

size_t getStreamServerSessionBufferSize ( StreamServer streamServer)

Returns stream server session buffer size.

Parameters
streamServertarget stream server instance

◆ getStreamServerReceiveBufferSize()

size_t getStreamServerReceiveBufferSize ( StreamServer streamServer)

Returns stream server receive buffer size in bytes.

Parameters
streamServertarget stream server instance

◆ getStreamServerOnCreate()

OnStreamSessionCreate getStreamServerOnCreate ( StreamServer streamServer)

Returns stream server session create function.

Parameters
streamServertarget stream server instance

◆ getStreamServerOnDestroy()

OnStreamSessionDestroy getStreamServerOnDestroy ( StreamServer streamServer)

Returns stream server session destroy function.

Parameters
streamServertarget stream server instance

◆ getStreamServerOnReceive()

OnStreamSessionReceive getStreamServerOnReceive ( StreamServer streamServer)

Returns stream server session data receive function.

Parameters
streamServertarget stream server instance

◆ getStreamServerOnDatagram()

OnStreamServerDatagram getStreamServerOnDatagram ( StreamServer streamServer)

Returns stream server datagram receive function.

Parameters
streamServertarget stream server instance

◆ getStreamServerTimeoutTime()

double getStreamServerTimeoutTime ( StreamServer streamServer)

Returns stream server session timeout time. (in seconds).

Parameters
streamServertarget stream server instance

◆ getStreamServerHandle()

void * getStreamServerHandle ( StreamServer streamServer)

Returns stream server handle.

Parameters
streamServertarget stream server instance

◆ getStreamServerReceiveBuffer()

uint8_t * getStreamServerReceiveBuffer ( StreamServer streamServer)

Returns stream server receive data buffer.

Parameters
streamServertarget stream server instance

◆ getStreamServerSocket()

Socket getStreamServerSocket ( StreamServer streamServer)

Returns stream server socket instance.

Parameters
streamServertarget stream server instance

◆ getStreamServerDatagramSocket()

Socket getStreamServerDatagramSocket ( StreamServer streamServer)

Returns stream server datagram socket instance.

Parameters
streamServertarget stream server instance

◆ isStreamServerRunning()

bool isStreamServerRunning ( StreamServer streamServer)

Returns true if stream server receive thread is running. (MT-Safe).

Parameters
streamServertarget stream server instance

◆ isStreamServerSecure()

bool isStreamServerSecure ( StreamServer streamServer)

Returns true if stream server use encrypted connection.

Parameters
streamServertarget stream server instance

◆ lockStreamServerSessions()

void lockStreamServerSessions ( StreamServer streamServer)

Locks stream server sessions access. (MT-Safe).

Parameters
streamServertarget stream server instance

◆ unlockStreamServerSessions()

void unlockStreamServerSessions ( StreamServer streamServer)

Unlocks stream server sessions access. (MT-Safe).

Parameters
streamServertarget stream server instance

◆ getStreamServerSessions()

StreamSession * getStreamServerSessions ( StreamServer streamServer)

Returns stream server session buffer.

Warning
You should lock sessions before getting!
Parameters
streamServertarget stream server instance

◆ getStreamServerSessionCount()

size_t getStreamServerSessionCount ( StreamServer streamServer)

Returns stream server session buffer.

Warning
You should lock sessions before getting count!
Parameters
streamServertarget stream server instance

◆ getStreamSessionSocket()

Socket getStreamSessionSocket ( StreamSession streamSession)

Returns stream session socket instance.

Warning
You should lock sessions before getting socket!
Parameters
streamSessiontarget stream session instance

◆ getStreamSessionRemoteAddress()

SocketAddress getStreamSessionRemoteAddress ( StreamSession streamSession)

Returns stream session remote IP address instance.

Parameters
streamSessiontarget stream session instance

◆ getStreamSessionHandle()

void * getStreamSessionHandle ( StreamSession streamSession)

Returns stream session handle.

Warning
Handle may be null if socket is not fully connected!
Parameters
streamSessiontarget stream session instance

◆ updateStreamSession()

int updateStreamSession ( StreamServer streamServer,
StreamSession streamSession,
double currentTime )

Updates specified stream server session state.

Warning
You should lock sessions before updating!
Returns
Zero on success, otherwise failure reason.
Parameters
streamServertarget stream server instance
streamSessionstream session instance to update
currentTimecurrent time value

◆ destroyStreamSession()

void destroyStreamSession ( StreamServer streamServer,
StreamSession streamSession,
int reason )

Destroyes specified stream server session.

Warning
You should lock sessions before closing!
Parameters
streamServertarget stream server instance
streamSessionstream session instance to close
reasonstream session destruction reason

◆ flushStreamSessions()

void flushStreamSessions ( StreamServer streamServer)

Flushes destroyed stream server sessions.

Warning
You should lock sessions before closing!
Parameters
streamServertarget stream server instance

◆ aliveStreamSession()

void aliveStreamSession ( StreamSession streamSession)

Resets specified stream server session timeout time.

Warning
You should lock sessions before aliving!
Parameters
streamSessiontarget stream session instance

◆ streamSessionSend()

NetsResult streamSessionSend ( StreamSession streamSession,
const void * data,
size_t byteCount )

Sends stream data to the specified session. (TCP).

Warning
You should lock sessions before sending messages!
Returns
The operation NetsResult code.
Parameters
streamSessiontarget stream session instance
[in]datasend data buffer
byteCountdata byte count to send

◆ streamServerSendDatagram()

NetsResult streamServerSendDatagram ( StreamServer streamServer,
SocketAddress remoteAddress,
const void * data,
size_t byteCount )

Sends datagram to the specified socket address. (UDP).

Returns
The operation NetsResult code.
Parameters
streamServerstream server instance
remoteAddresstarget remote socket IP address
[in]datasend data buffer
byteCountdata byte count to send

◆ shutdownStreamSession()

NetsResult shutdownStreamSession ( StreamSession streamSession,
SocketShutdown shutdown )

Shutdowns part of the full-duplex socket connection.

Returns
The operation NetsResult code.
Parameters
streamSessiontarget stream session instance
shutdownsocket connection shutdown mode