lib60870-C
2.3.2
C source code library for the IEC 60870-5-101/104 protocols
|
Typedefs | |
typedef struct sServerSocket * | ServerSocket |
typedef struct sUdpSocket * | UdpSocket |
typedef struct sSocket * | Socket |
typedef struct sHandleSet * | HandleSet |
Enumerations | |
enum | SocketState { SOCKET_STATE_CONNECTING = 0 , SOCKET_STATE_FAILED = 1 , SOCKET_STATE_CONNECTED = 2 } |
Functions | |
PAL_API HandleSet | Handleset_new (void) |
Create a new connection handle set (HandleSet) More... | |
PAL_API void | Handleset_reset (HandleSet self) |
Reset the handle set for reuse. | |
PAL_API void | Handleset_addSocket (HandleSet self, const Socket sock) |
add a socket to an existing handle set More... | |
void | Handleset_removeSocket (HandleSet self, const Socket sock) |
remove a socket from an existing handle set | |
PAL_API int | Handleset_waitReady (HandleSet self, unsigned int timeoutMs) |
wait for a socket to become ready More... | |
PAL_API void | Handleset_destroy (HandleSet self) |
destroy the HandleSet instance More... | |
PAL_API ServerSocket | TcpServerSocket_create (const char *address, int port) |
Create a new TcpServerSocket instance. More... | |
PAL_API UdpSocket | UdpSocket_create (void) |
PAL_API bool | UdpSocket_bind (UdpSocket self, const char *address, int port) |
PAL_API bool | UdpSocket_sendTo (UdpSocket self, const char *address, int port, uint8_t *msg, int msgSize) |
PAL_API int | UdpSocket_receiveFrom (UdpSocket self, char *address, int maxAddrSize, uint8_t *msg, int msgSize) |
Receive data from UDP socket (store data and (optionally) the IP address of the sender. More... | |
PAL_API void | ServerSocket_listen (ServerSocket self) |
PAL_API Socket | ServerSocket_accept (ServerSocket self) |
accept a new incoming connection (non-blocking) More... | |
PAL_API void | Socket_activateTcpKeepAlive (Socket self, int idleTime, int interval, int count) |
active TCP keep alive for socket and set keep alive parameters More... | |
PAL_API void | ServerSocket_setBacklog (ServerSocket self, int backlog) |
set the maximum number of pending connections in the queue More... | |
PAL_API void | ServerSocket_destroy (ServerSocket self) |
destroy a server socket instance More... | |
PAL_API Socket | TcpSocket_create (void) |
create a TCP client socket More... | |
PAL_API void | Socket_setConnectTimeout (Socket self, uint32_t timeoutInMs) |
set the timeout to establish a new connection More... | |
PAL_API bool | Socket_bind (Socket self, const char *srcAddress, int srcPort) |
bind a socket to a particular IP address and port (for TcpSocket) More... | |
PAL_API bool | Socket_connect (Socket self, const char *address, int port) |
connect to a server More... | |
PAL_API bool | Socket_connectAsync (Socket self, const char *address, int port) |
PAL_API SocketState | Socket_checkAsyncConnectState (Socket self) |
PAL_API int | Socket_read (Socket self, uint8_t *buf, int size) |
read from socket to local buffer (non-blocking) More... | |
PAL_API int | Socket_write (Socket self, uint8_t *buf, int size) |
send a message through the socket More... | |
PAL_API char * | Socket_getLocalAddress (Socket self) |
PAL_API char * | Socket_getPeerAddress (Socket self) |
Get the address of the peer application (IP address and port number) More... | |
PAL_API char * | Socket_getPeerAddressStatic (Socket self, char *peerAddressString) |
Get the address of the peer application (IP address and port number) More... | |
PAL_API void | Socket_destroy (Socket self) |
destroy a socket (close the socket if a connection is established) More... | |
Thread and Socket abstraction layer. This functions have to be implemented to port lib60870 to a new hardware/OS platform when TCP/IP is required.
typedef struct sHandleSet* HandleSet |
Opaque reference for a set of server and socket handles
typedef struct sServerSocket* ServerSocket |
Opaque reference for a server socket instance
typedef struct sSocket* Socket |
Opaque reference for a client or connection socket instance
enum SocketState |
State of an asynchronous connect
add a socket to an existing handle set
self | the HandleSet instance |
sock | the socket to add |
PAL_API void Handleset_destroy | ( | HandleSet | self | ) |
destroy the HandleSet instance
self | the HandleSet instance to destroy |
PAL_API HandleSet Handleset_new | ( | void | ) |
Create a new connection handle set (HandleSet)
PAL_API int Handleset_waitReady | ( | HandleSet | self, |
unsigned int | timeoutMs | ||
) |
wait for a socket to become ready
This function is corresponding to the BSD socket select function. It returns the number of sockets on which data is pending or 0 if no data is pending on any of the monitored connections. The function will return after "timeout" ms if no data is pending. The function shall return -1 if a socket error occures.
self | the HandleSet instance |
timeout | in milliseconds (ms) |
PAL_API Socket ServerSocket_accept | ( | ServerSocket | self | ) |
accept a new incoming connection (non-blocking)
This function shall accept a new incoming connection. It is non-blocking and has to return NULL if no new connection is pending.
Implementation of this function is MANDATORY if server functionality is required.
NOTE: The behaviour of this function changed with version 0.8!
self | server socket instance |
PAL_API void ServerSocket_destroy | ( | ServerSocket | self | ) |
destroy a server socket instance
Free all resources allocated by this server socket instance.
Implementation of this function is MANDATORY if server functionality is required.
self | server socket instance |
PAL_API void ServerSocket_setBacklog | ( | ServerSocket | self, |
int | backlog | ||
) |
set the maximum number of pending connections in the queue
Implementation of this function is OPTIONAL.
self | the server socket instance |
backlog | the number of pending connections in the queue |
PAL_API void Socket_activateTcpKeepAlive | ( | Socket | self, |
int | idleTime, | ||
int | interval, | ||
int | count | ||
) |
active TCP keep alive for socket and set keep alive parameters
NOTE: implementation is mandatory for IEC 61850 MMS
self | server socket instance |
idleTime | time (in s) between last received message and first keep alive message |
interval | time (in s) between subsequent keep alive messages if no ACK received |
count | number of not missing keep alive ACKs until socket is considered dead |
PAL_API bool Socket_bind | ( | Socket | self, |
const char * | srcAddress, | ||
int | srcPort | ||
) |
bind a socket to a particular IP address and port (for TcpSocket)
NOTE: Don't use the socket when this functions returns false!
self | the client socket instance |
srcAddress | the local IP address or hostname as C string |
srcPort | the local TCP port to use. When < 1 the OS will chose the TCP port to use. |
PAL_API bool Socket_connect | ( | Socket | self, |
const char * | address, | ||
int | port | ||
) |
connect to a server
Connect to a server application identified by the address and port parameter.
The "address" parameter may either be a hostname or an IP address. The IP address has to be provided as a C string (e.g. "10.0.2.1").
Implementation of this function is MANDATORY if client functionality is required.
NOTE: return type changed from int to bool with version 0.8
self | the client socket instance |
address | the IP address or hostname as C string |
port | the TCP port of the application to connect to |
PAL_API void Socket_destroy | ( | Socket | self | ) |
destroy a socket (close the socket if a connection is established)
This function shall close the connection (if one is established) and free all resources allocated by the socket.
Implementation of this function is MANDATORY
self | the client, connection or server socket instance |
PAL_API char* Socket_getPeerAddress | ( | Socket | self | ) |
Get the address of the peer application (IP address and port number)
The peer address has to be returned as null terminated string
Implementation of this function is MANDATORY (libiec61850)
self | the client, connection or server socket instance |
PAL_API char* Socket_getPeerAddressStatic | ( | Socket | self, |
char * | peerAddressString | ||
) |
Get the address of the peer application (IP address and port number)
The peer address has to be returned as null terminated string
Implementation of this function is MANDATORY (lib60870 and libiec61850)
self | the client, connection or server socket instance |
peerAddressString | a string to store the peer address (the string should have space for at least 60 characters) |
PAL_API int Socket_read | ( | Socket | self, |
uint8_t * | buf, | ||
int | size | ||
) |
read from socket to local buffer (non-blocking)
The function shall return immediately if no data is available. In this case the function returns 0. If an error happens the function shall return -1.
Implementation of this function is MANDATORY
NOTE: The behaviour of this function changed with version 0.8!
self | the client, connection or server socket instance |
buf | the buffer where the read bytes are copied to |
size | the maximum number of bytes to read (size of the provided buffer) |
PAL_API void Socket_setConnectTimeout | ( | Socket | self, |
uint32_t | timeoutInMs | ||
) |
set the timeout to establish a new connection
self | the client socket instance |
timeoutInMs | the timeout in ms |
PAL_API int Socket_write | ( | Socket | self, |
uint8_t * | buf, | ||
int | size | ||
) |
send a message through the socket
Implementation of this function is MANDATORY
self | client, connection or server socket instance |
PAL_API ServerSocket TcpServerSocket_create | ( | const char * | address, |
int | port | ||
) |
Create a new TcpServerSocket instance.
Implementation of this function is MANDATORY if server functionality is required.
address | ip address or hostname to listen on |
port | the TCP port to listen on |
PAL_API Socket TcpSocket_create | ( | void | ) |
create a TCP client socket
Implementation of this function is MANDATORY if client functionality is required.
PAL_API int UdpSocket_receiveFrom | ( | UdpSocket | self, |
char * | address, | ||
int | maxAddrSize, | ||
uint8_t * | msg, | ||
int | msgSize | ||
) |
Receive data from UDP socket (store data and (optionally) the IP address of the sender.
self | UDP socket instance |
address | (optional) buffer to store the IP address as string |
maxAddrSize | (optional) size of the provided buffer to store the IP address |
msg | buffer to store the UDP message data |
msgSize | the maximum size of the message to receive |