Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
NETWORK ENGINE: connect, accept, send and recv wrappers. Network Queue, thread-safe add/get message, ssl/tls secured communications

Data Structures

struct  N_HTTP_MULTIPART_PART
 a single part of a parsed multipart/form-data body More...
 
struct  N_HTTP_REQUEST
 parsed HTTP request for mock server callback More...
 
struct  N_HTTP_RESPONSE
 HTTP response to send from mock server callback. More...
 
struct  N_MOCK_SERVER
 mock HTTP server handle More...
 
struct  N_PROXY_CFG
 Parsed proxy URL components. More...
 
struct  N_SOCKET
 Structure of a N_SOCKET. More...
 
struct  N_SSE_CONN
 SSE connection handle. More...
 
struct  N_SSE_EVENT
 SSE event received from server. More...
 
struct  N_URL
 parsed URL components More...
 
struct  N_URL_PARAM
 a single query parameter key=value pair More...
 
struct  N_WS_CONN
 WebSocket connection. More...
 
struct  N_WS_FRAME
 A single parsed WebSocket frame (RFC 6455). More...
 
struct  N_WS_MESSAGE
 WebSocket message. More...
 
struct  NETWORK
 Structure of a NETWORK. More...
 
struct  NETWORK_HTTP_INFO
 structure for splitting HTTP requests More...
 
struct  NETWORK_POOL
 structure of a network pool More...
 

Macros

#define _OPEN_SYS_SOCK_IPV6   1
 
#define HEAD_CODE   3
 Code of a HEAD message.
 
#define HEAD_SIZE   10
 Size of a HEAD message.
 
#define N_ENUM_netw_code_type(_)
 Network codes definition.
 
#define N_URL_MAX_PARAMS   64
 maximum number of parsed query parameters
 
#define N_WS_OP_BINARY   0x02
 
#define N_WS_OP_CLOSE   0x08
 
#define N_WS_OP_PING   0x09
 
#define N_WS_OP_PONG   0x0A
 
#define N_WS_OP_TEXT   0x01
 WebSocket opcodes per RFC 6455.
 
#define netw_atomic_read_reactor_handle(netw)   __atomic_load_n(&(netw)->reactor_handle, __ATOMIC_ACQUIRE)
 Same contract for the back-pointer to the reactor.
 
#define netw_atomic_read_reactor_mode(netw)   __atomic_load_n(&(netw)->reactor_mode, __ATOMIC_ACQUIRE)
 Lock-free atomic read of the reactor_mode flag.
 
#define netw_atomic_read_state(netw)   __atomic_load_n(&(netw)->state, __ATOMIC_ACQUIRE)
 Lock-free atomic read of the network state field.
 
#define netw_atomic_write_reactor_handle(netw, val)   __atomic_store_n(&(netw)->reactor_handle, (val), __ATOMIC_RELEASE)
 
#define netw_atomic_write_reactor_mode(netw, val)   __atomic_store_n(&(netw)->reactor_mode, (val), __ATOMIC_RELEASE)
 
#define netw_atomic_write_state(netw, val)   __atomic_store_n(&(netw)->state, (val), __ATOMIC_RELEASE)
 Lock-free atomic write of the network state field.
 
#define NETW_COMPRESS_MIN_RATIO   10u
 
#define NETW_COMPRESS_THRESHOLD   256u
 Opportunistic compression policy.
 
#define NETW_COMPRESSED   NETW_COMPRESSED_ZLIB
 Legacy alias, the first compression commit shipped a single NETW_COMPRESSED flag before LZ4 was added.
 
#define NETW_IO_WANT_READ   -10
 single-attempt I/O (send_data_once / recv_data_once): the operation cannot progress until the socket is READABLE.
 
#define NETW_IO_WANT_WRITE   -11
 single-attempt I/O: the operation cannot progress until the socket is WRITABLE.
 
#define NETW_MAX_RETRIES   8
 Send or recv max number of retries.
 
#define NETW_RETRY_DELAY   1000
 Send or recv delay between retries in usec.
 
#define NETW_SOCKET_DISCONNECTED   -2
 Code for a disconnected recv.
 
#define NETW_SOCKET_ERROR   -1
 code for a socket error
 
#define NETW_THR_EXIT_ERROR   666
 Internal DONE value indicating a send/recv thread observed NETW_ERROR without an in-flight local shutdown.
 
#define NETW_THR_EXIT_OK   100
 Internal DONE value indicating a send/recv thread reached end-of-life cleanly (peer QUIT or local NETW_EXIT_ASKED ack'd).
 
#define NETWORK_CONSECUTIVE_SEND_WAIT   2048
 Flag to set consecutive send waiting timeout

 
#define NETWORK_DEPLETE_QUEUES_TIMEOUT   1024
 Flag to set network queues depletion timeout

 
#define NETWORK_DEPLETE_SOCKET_TIMEOUT   512
 Flag to set send buffer depletion timeout

 
#define NETWORK_DISABLE_ZERO_LENGTH_RECV   FALSE
 Enable/disable recv of length 0.
 
#define NETWORK_IPALL   0
 Flag for auto detection by OS of ip version to use.
 
#define NETWORK_IPV4   1
 Flag to force IPV4

 
#define NETWORK_IPV6   2
 Flag to force IPV6

 
#define NETWORK_TCP   0
 Flag for TCP transport (default)
 
#define NETWORK_UDP   1
 Flag for UDP transport.
 
#define NETWORK_WAIT_CLOSE_TIMEOUT   4096
 Flag to set network closing wait timeout.
 
#define SOCKET_SIZE_FORMAT   "%d"
 socket associated printf style
 

Typedefs

typedef ssize_t(* netw_func) (void *, char *, uint32_t)
 send/recv func ptr type
 
typedef int(* netw_sni_pick_cb) (const char *sni, N_STR **cert_pem, N_STR **key_pem, void *user_data)
 SNI cert-pick callback for netw_accept_ssl_with_sni_cb: given the client SNI host (may be NULL), fill *cert_pem and *key_pem with a server certificate and key (newly allocated; n_network frees them).
 
typedef int SOCKET
 default socket declaration
 

Enumerations

enum  __netw_code_type {
  NETW_CLIENT = 2 , NETW_SERVER = 4 , NETW_RESTART_TIMER = 8 , NETW_EMPTY_SENDBUF = 16 ,
  NETW_EMPTY_RECVBUF = 32 , NETW_RUN = 64 , NETW_EXIT_ASKED = 128 , NETW_EXITED = 256 ,
  NETW_ERROR = 512 , NETW_ENCRYPT_NONE = 1024 , NETW_ENCRYPT_OPENSSL = 2048 , NETW_THR_ENGINE_STARTED = 4096 ,
  NETW_THR_ENGINE_STOPPED = 8192 , NETW_DESTROY_RECVBUF = 16384 , NETW_DESTROY_SENDBUF = 32768 , NETW_COMPRESSED_ZLIB = 65536 ,
  NETW_COMPRESSED_LZ4 = 131072 , ____netw_code_type_UNKNOWN_VALUE__
}
 Network codes declaration. More...
 
enum  NETW_COMPRESS_MODE { NETW_COMPRESS_NONE = 0 , NETW_COMPRESS_ZLIB = 1 , NETW_COMPRESS_LZ4 = 2 }
 Compression mode selector for NETWORK.compress_mode. More...
 

Functions

int deplete_send_buffer (int fd, int timeout)
 wait for send buffer to be empty
 
size_t htonst (size_t value)
 host to network size_t
 
N_STRn_http_build_multipart (LIST *parts, const char *boundary)
 build a multipart/form-data body from a LIST of N_HTTP_MULTIPART_PART* using boundary (without "--"); returns a new N_STR (free with free_nstr) or NULL.
 
int n_http_decompress_body (const N_STR *body, const char *encoding, N_STR **out)
 decompress an HTTP body per its Content-Encoding ("gzip"/"deflate"; identity/NULL/unknown copies through).
 
int n_http_multipart_boundary (const char *content_type, char *out, size_t outsz)
 copy the boundary token from a Content-Type value into out (without the leading "--").
 
void n_http_multipart_free (LIST **parts)
 free a LIST returned by n_http_parse_multipart and NULL the pointer
 
LISTn_http_parse_multipart (const N_STR *body, const char *boundary)
 parse a multipart body (boundary given without "--") into a LIST of N_HTTP_MULTIPART_PART*; free with n_http_multipart_free.
 
int n_http_status_class (int status_code)
 leading digit of an HTTP status code (1..5), or 0 when outside 100..599
 
int n_http_status_is_client_error (int status_code)
 1 when status_code is a client error (4xx), else 0
 
int n_http_status_is_informational (int status_code)
 1 when status_code is informational (1xx), else 0
 
int n_http_status_is_redirect (int status_code)
 1 when status_code is a redirect (3xx), else 0
 
int n_http_status_is_server_error (int status_code)
 1 when status_code is a server error (5xx), else 0
 
int n_http_status_is_success (int status_code)
 1 when status_code is success (2xx), else 0
 
void n_mock_server_free (N_MOCK_SERVER **server)
 free a mock server and close the listening socket
 
void n_mock_server_run (N_MOCK_SERVER *server)
 run the mock server accept loop (blocks until stop_flag is set)
 
N_MOCK_SERVERn_mock_server_start (int port, void(*on_request)(N_HTTP_REQUEST *, N_HTTP_RESPONSE *, void *), void *user_data)
 start a mock HTTP server on localhost:port (returns immediately)
 
void n_mock_server_stop (N_MOCK_SERVER *server)
 signal the mock server to stop accepting connections
 
void n_netw_clear_connect_errors (void)
 Clear pre-connection errors on this thread.
 
void n_netw_clear_errors (NETWORK *netw)
 Clear captured errors on a NETWORK handle.
 
const char * n_netw_get_connect_error (int index)
 Get pre-connection error message by index.
 
int n_netw_get_connect_error_count (void)
 Get number of pre-connection errors captured on this thread.
 
const char * n_netw_get_error (const NETWORK *netw, int index)
 Get captured error message by index (0 = oldest).
 
int n_netw_get_error_count (const NETWORK *netw)
 Get number of captured errors on a NETWORK handle.
 
void n_proxy_cfg_free (N_PROXY_CFG **cfg)
 Free an N_PROXY_CFG created by n_proxy_cfg_parse().
 
N_PROXY_CFGn_proxy_cfg_parse (const char *url)
 Parse a proxy URL string into an N_PROXY_CFG struct.
 
int n_proxy_connect_socks5 (const N_PROXY_CFG *proxy, const char *target_host, int target_port)
 Open a TCP connection through a SOCKS5 proxy.
 
int n_proxy_connect_tunnel (const N_PROXY_CFG *proxy, const char *target_host, int target_port)
 Open a TCP connection through an HTTP proxy using CONNECT tunneling.
 
int n_proxy_connect_tunnel_ssl (const N_PROXY_CFG *proxy, const char *target_host, int target_port)
 Open a TCP connection through an HTTPS proxy using CONNECT tunneling.
 
void n_sse_conn_free (N_SSE_CONN **conn)
 free an SSE connection
 
N_SSE_CONNn_sse_connect (const char *host, const char *port, const char *path, int use_ssl, const char *user_agent, void(*on_event)(N_SSE_EVENT *, N_SSE_CONN *, void *), void *user_data)
 connect to an SSE endpoint and start reading events (blocks until stopped).
 
void n_sse_event_clean (N_SSE_EVENT *event)
 free an SSE event's contents (does not free the event struct itself)
 
void n_sse_stop (N_SSE_CONN *conn)
 signal the SSE connection to stop reading
 
N_STRn_url_build (const N_URL *u)
 build a URL string from parsed components
 
N_STRn_url_canonicalize (const N_URL *u)
 produce a canonical URL string for dedup (lowercase scheme/host, drop default port, remove .
 
N_STRn_url_canonicalize_string (const char *url)
 parse and canonicalize a URL string in one call
 
N_STRn_url_decode (const char *str)
 decode a percent-encoded string (returns N_STR)
 
N_STRn_url_encode (const char *str)
 percent-encode a string for use in URLs (delegates to n_str_url_encode())
 
void n_url_free (N_URL **u)
 free a N_URL and all its members
 
N_URLn_url_parse (const char *url)
 parse a URL string into components
 
N_STRn_url_resolve (const char *base, const char *ref)
 resolve a (possibly relative) reference against an absolute base URL (RFC 3986 section 5)
 
void n_ws_close (N_WS_CONN *conn)
 send close frame and close the connection
 
void n_ws_conn_free (N_WS_CONN **conn)
 free a WebSocket connection structure
 
N_WS_CONNn_ws_connect (const char *host, const char *port, const char *path, int use_ssl)
 connect to a WebSocket server (ws:// or wss://) and perform the HTTP/1.1 upgrade handshake
 
size_t n_ws_frame_build (int fin, int opcode, int do_mask, const unsigned char *payload, size_t len, const unsigned char mask_key[4], unsigned char *out, size_t out_cap)
 build a WebSocket frame into out (optionally masking the payload).
 
int n_ws_frame_parse (const unsigned char *buf, size_t len, N_WS_FRAME *frame, size_t *consumed)
 parse one WebSocket frame from a byte buffer (stateless).
 
int n_ws_recv (N_WS_CONN *conn, N_WS_MESSAGE *msg_out)
 receive one WebSocket frame
 
int n_ws_send (N_WS_CONN *conn, const char *payload, size_t len, int opcode)
 send a WebSocket frame (client always masks)
 
void n_ws_unmask (unsigned char *dst, const unsigned char *src, size_t len, const unsigned char mask[4])
 XOR-unmask len bytes of src into dst using a 4-byte WebSocket mask key.
 
NETWORKnetw_accept_from (NETWORK *from)
 Accepting routine.
 
NETWORKnetw_accept_from_ex (NETWORK *from, size_t send_list_limit, size_t recv_list_limit, int blocking, int *retval)
 Accepting routine extended.
 
NETWORKnetw_accept_nonblock_from (NETWORK *from, int blocking)
 Accepting routine.
 
NETWORKnetw_accept_ssl_with_sni_cb (NETWORK *listen, netw_sni_pick_cb pick, void *user_data)
 accept a TLS connection, selecting the server certificate per client SNI via pick() during the handshake
 
int netw_add_msg (NETWORK *netw, N_STR *msg)
 Add a message to send in aimed NETWORK.
 
int netw_add_msg_ex (NETWORK *netw, char *str, unsigned int length)
 Add a char message to send in the aimed NETWORK.
 
int netw_adopt_client_fd (NETWORK **netw, SOCKET fd, const char *host, const char *port)
 adopt an already-connected socket fd into a fresh client NETWORK (plain send/recv)
 
int netw_bind_udp (NETWORK **netw, char *addr, char *port, int ip_version)
 Create a UDP bound socket.
 
int netw_build_http_response (N_STR **http_response, int status_code, const char *server_name, const char *content_type, char *additional_headers, N_STR *body)
 build HTTP response
 
size_t netw_calculate_urlencoded_size (const char *str, size_t len)
 calculate URL-encoded size
 
int netw_close (NETWORK **netw)
 Closing.
 
int netw_connect (NETWORK **netw, char *host, char *port, int ip_version)
 Connecting.
 
int netw_connect_ex (NETWORK **netw, char *host, char *port, size_t send_list_limit, size_t recv_list_limit, int ip_version, char *ssl_key_file, char *ssl_cert_file)
 Connecting, extended.
 
int netw_connect_ex_to (NETWORK **netw, char *host, char *port, size_t send_list_limit, size_t recv_list_limit, int ip_version, char *ssl_key_file, char *ssl_cert_file, int connect_timeout_ms)
 Connecting, extended, with a bounded connection-establishment time (connect_timeout_ms, 0 = OS default)
 
int netw_connect_to (NETWORK **netw, char *host, char *port, int ip_version, int connect_timeout_ms)
 Connecting, with a bounded connection-establishment time (connect_timeout_ms, 0 = OS default)
 
int netw_connect_udp (NETWORK **netw, char *host, char *port, int ip_version)
 Connect a UDP socket to a remote host.
 
int netw_destroy_pool (NETWORK_POOL **netw_pool)
 destroy pool
 
NETWORK_HTTP_INFO netw_extract_http_info (char *request)
 extract HTTP info from request
 
char * netw_extract_http_request_type (const char *request)
 extract HTTP request type
 
int netw_get_http_date (char *buffer, size_t buffer_size)
 get current HTTP date string
 
const char * netw_get_http_status_message (int status_code)
 get HTTP status message string
 
N_STRnetw_get_msg (NETWORK *netw)
 Get a message from aimed NETWORK.
 
int netw_get_queue_status (NETWORK *netw, size_t *nb_to_send, size_t *nb_to_read)
 get queue status
 
int netw_get_state (NETWORK *netw, uint32_t *state, int *thr_engine_status)
 Get flags from network.
 
int netw_get_url_from_http_request (const char *request, char *url, size_t size)
 get URL from HTTP request
 
const char * netw_guess_http_content_type (const char *url)
 guess HTTP content type from URL
 
int netw_info_destroy (NETWORK_HTTP_INFO http_request)
 destroy HTTP info structure
 
int netw_init_openssl (void)
 init ssl helper
 
int netw_init_wsa (int mode, int v1, int v2)
 Used by Init & Close network.
 
int netw_make_listening (NETWORK **netw, char *addr, char *port, int nbpending, int ip_version)
 Listening network.
 
NETWORK_POOLnetw_new_pool (size_t nb_min_element)
 init pools
 
HASH_TABLEnetw_parse_post_data (const char *post_data)
 parse POST data into hash table
 
int netw_pool_add (NETWORK_POOL *netw_pool, NETWORK *netw)
 add network to pool
 
int netw_pool_broadcast (NETWORK_POOL *netw_pool, const NETWORK *from, N_STR *net_msg)
 broadcast message to pool
 
size_t netw_pool_nbclients (NETWORK_POOL *netw_pool)
 get nb clients
 
void netw_pool_netw_close (void *netw_ptr)
 close pool
 
int netw_pool_remove (NETWORK_POOL *netw_pool, NETWORK *netw)
 remove network from pool
 
void * netw_recv_func (void *NET)
 Thread Receiving management function.
 
void * netw_send_func (void *NET)
 Thread Sending management function.
 
int netw_send_ident (NETWORK *netw, int type, int id, N_STR *name, N_STR *passwd)
 send ident message
 
int netw_send_ping (NETWORK *netw, int type, int id_from, int id_to, int time)
 send ping message
 
int netw_send_position (NETWORK *netw, int id, double X, double Y, double vx, double vy, double acc_x, double acc_y, int time_stamp)
 send position message
 
int netw_send_quit (NETWORK *netw)
 send quit message
 
int netw_send_string_to (NETWORK *netw, int id_to, N_STR *name, N_STR *chan, N_STR *txt, int color)
 send string to a specific target
 
int netw_send_string_to_all (NETWORK *netw, N_STR *name, N_STR *chan, N_STR *txt, int color)
 send string to all targets
 
int netw_set (NETWORK *netw, int flag)
 Set flags on network.
 
int netw_set_blocking (NETWORK *netw, unsigned long int is_blocking)
 set blocking mode
 
int netw_set_compression_mode (NETWORK *netw, int mode)
 Pick send-side compression algorithm for this NETWORK: NETW_COMPRESS_NONE, _ZLIB, _LZ4.
 
void netw_set_connect_abort_cb (int(*cb)(void *ctx), void *ctx)
 register a process-wide callback polled during connect; non-zero aborts the in-progress connect (NULL removes)
 
int netw_set_crypto (NETWORK *netw, char *key, char *certificate)
 set SSL
 
int netw_set_crypto_chain (NETWORK *netw, char *key, char *certificate, char *ca_file)
 set SSL certificate chain from PEM file
 
int netw_set_crypto_chain_pem (NETWORK *netw, const char *key_pem, const char *cert_pem, const char *ca_pem)
 set SSL certificate chain from PEM strings in memory
 
int netw_set_crypto_pem (NETWORK *netw, const char *key_pem, const char *cert_pem)
 set SSL from PEM strings in memory
 
int netw_set_crypto_pem_ctx (NETWORK *netw, const N_STR *key_pem, const N_STR *cert_pem)
 install an in-memory cert/key on THIS connection's SSL only (per-connection, unlike the context-wide netw_set_crypto_pem)
 
int netw_set_user_id (NETWORK *netw, int id)
 set user id on a netw
 
int netw_setsockopt (NETWORK *netw, int optname, int value)
 Set common socket options (disable naggle, send/recv buf, reuse addr)
 
int netw_ssl_connect (NETWORK **netw, char *host, char *port, int ip_version, char *ssl_key_file, char *ssl_cert_file)
 connect ssl helper
 
int netw_ssl_connect_client (NETWORK **netw, char *host, char *port, int ip_version)
 connect as SSL client without client certificate (TCP + SSL_CTX, no handshake yet)
 
int netw_ssl_connect_client_to (NETWORK **netw, char *host, char *port, int ip_version, int connect_timeout_ms)
 like netw_ssl_connect_client but bounds the TCP connect by connect_timeout_ms (0 = OS default)
 
int netw_ssl_do_handshake (NETWORK *netw, const char *sni_hostname)
 complete the SSL handshake on a NETWORK whose ctx was already created
 
const char * netw_ssl_get_sni (NETWORK *netw)
 get the SNI server_name the peer requested in its ClientHello, or NULL
 
int netw_ssl_get_verify_result (NETWORK *netw, const char *expected_host, char *errbuf, size_t errsz)
 evaluate the peer certificate (chain trust + host match) against the system trust store, independently of the connection verify mode
 
int netw_ssl_server_handshake (NETWORK *netw, netw_sni_pick_cb pick, void *user_data)
 upgrade an already-accepted plaintext connection to a TLS server, selecting the cert per client SNI via pick() during the handshake (for proxy CONNECT)
 
int netw_ssl_set_ca (NETWORK *netw, const char *ca_file, const char *ca_path)
 set custom CA verify path or file
 
int netw_ssl_set_client_cert (NETWORK *netw, const char *cert_file, const char *key_file)
 load client certificate and private key for mTLS
 
int netw_ssl_set_verify (NETWORK *netw, int enable)
 enable or disable peer certificate verification
 
int netw_ssl_start_client (NETWORK *netw)
 set up a client SSL_CTX on an already-connected NETWORK (no handshake yet)
 
int netw_start_thr_engine (NETWORK *netw)
 Create the sending and receiving thread of a NETWORK.
 
int netw_stop_thr_engine (NETWORK *netw)
 Stop a NETWORK connection sending and receiving thread.
 
ssize_t netw_udp_recvfrom (NETWORK *netw, char *buf, uint32_t n, struct sockaddr *src_addr, socklen_t *src_len)
 UDP recvfrom with source address capture.
 
ssize_t netw_udp_sendto (NETWORK *netw, char *buf, uint32_t n, struct sockaddr *dest_addr, socklen_t dest_len)
 UDP sendto with explicit destination.
 
int netw_unload_openssl (void)
 unload ssl helper
 
char * netw_urldecode (const char *str)
 URL-decode a string.
 
char * netw_urlencode (const char *str, size_t len)
 URL-encode a string.
 
int netw_wait_close (NETWORK **netw)
 Closing for peer.
 
int netw_wait_close_timed (NETWORK **netw, size_t timeout)
 Closing for peer with timeout.
 
N_STRnetw_wait_msg (NETWORK *netw, unsigned int refresh, size_t timeout)
 Wait a message from aimed NETWORK.
 
size_t ntohst (size_t value)
 network to host size_t
 
ssize_t recv_data (void *netw, char *buf, uint32_t n)
 Reading from a socket.
 
ssize_t recv_data_once (void *netw, char *buf, uint32_t n)
 Single-attempt read (see NETWORK.recv_data_once contract)
 
ssize_t recv_php (SOCKET s, int *_code, char **buf)
 receive from php
 
ssize_t recv_ssl_data (void *netw, char *buf, uint32_t n)
 SSL Reading from a socket.
 
ssize_t recv_ssl_data_once (void *netw, char *buf, uint32_t n)
 SSL single-attempt read (see recv_data_once contract)
 
ssize_t recv_udp_data (void *netw, char *buf, uint32_t n)
 UDP recv data from socket.
 
ssize_t send_data (void *netw, char *buf, uint32_t n)
 Writing to a socket.
 
ssize_t send_data_once (void *netw, char *buf, uint32_t n)
 Single-attempt write (see NETWORK.send_data_once contract)
 
ssize_t send_php (SOCKET s, int _code, char *buf, int n)
 sending to php
 
ssize_t send_ssl_data (void *netw, char *buf, uint32_t n)
 SSL Writing to a socket.
 
ssize_t send_ssl_data_once (void *netw, char *buf, uint32_t n)
 SSL single-attempt write (see send_data_once contract)
 
ssize_t send_udp_data (void *netw, char *buf, uint32_t n)
 UDP send data to connected peer or specified addr.
 

Detailed Description


Data Structure Documentation

◆ N_HTTP_MULTIPART_PART

struct N_HTTP_MULTIPART_PART

a single part of a parsed multipart/form-data body

Examples
ex_url.c.

Definition at line 790 of file n_network.h.

+ Collaboration diagram for N_HTTP_MULTIPART_PART:
Data Fields
N_STR * body the part's raw body bytes (binary-safe), or NULL
char * content_type the part's Content-Type, or ""
char * filename Content-Disposition filename, or "".
char * name Content-Disposition form-field name, or "".

◆ N_HTTP_REQUEST

struct N_HTTP_REQUEST

parsed HTTP request for mock server callback

Examples
ex_network_mock.c.

Definition at line 1037 of file n_network.h.

+ Collaboration diagram for N_HTTP_REQUEST:
Data Fields
N_STR * body request body (or NULL)
LIST * headers list of char* "Name: Value" strings
char method[16] HTTP method.
char path[2048] request path
char query[2048] query string (or empty)

◆ N_HTTP_RESPONSE

struct N_HTTP_RESPONSE

HTTP response to send from mock server callback.

Examples
ex_network_mock.c.

Definition at line 1046 of file n_network.h.

+ Collaboration diagram for N_HTTP_RESPONSE:
Data Fields
N_STR * body response body
char content_type[128] Content-Type header value.
int status_code HTTP status code.

◆ N_MOCK_SERVER

struct N_MOCK_SERVER

mock HTTP server handle

Examples
ex_network_mock.c.

Definition at line 1053 of file n_network.h.

+ Collaboration diagram for N_MOCK_SERVER:

Data Fields

NETWORKlistener
 listening network
 
void(* on_request )(N_HTTP_REQUEST *req, N_HTTP_RESPONSE *resp, void *user_data)
 request handler
 
int port
 listening port
 
volatile int stop_flag
 atomic stop flag
 
void * user_data
 user data for handler
 

Field Documentation

◆ listener

NETWORK* N_MOCK_SERVER::listener

listening network

Definition at line 1054 of file n_network.h.

◆ on_request

void(* N_MOCK_SERVER::on_request) (N_HTTP_REQUEST *req, N_HTTP_RESPONSE *resp, void *user_data)

request handler

Definition at line 1056 of file n_network.h.

◆ port

int N_MOCK_SERVER::port

listening port

Definition at line 1058 of file n_network.h.

◆ stop_flag

volatile int N_MOCK_SERVER::stop_flag

atomic stop flag

Definition at line 1055 of file n_network.h.

◆ user_data

void* N_MOCK_SERVER::user_data

user data for handler

Definition at line 1057 of file n_network.h.

◆ N_PROXY_CFG

struct N_PROXY_CFG

Parsed proxy URL components.

Examples
ex_network_proxy.c.

Definition at line 813 of file n_network.h.

+ Collaboration diagram for N_PROXY_CFG:
Data Fields
char * host proxy hostname
char * password NULL if no auth.
int port proxy port
char * scheme "http", "https", or "socks5"
char * username NULL if no auth.

◆ N_SOCKET

struct N_SOCKET

Structure of a N_SOCKET.

Definition at line 289 of file n_network.h.

+ Collaboration diagram for N_SOCKET:
Data Fields
struct addrinfo hints address of local machine
char * ip ip of the connected socket
unsigned long int is_blocking flag to quickly check socket mode
char * port port of socket
struct sockaddr_storage raddr connected remote addr
struct addrinfo * rhost getaddrinfo results
SOCKET sock a normal socket

◆ N_SSE_CONN

struct N_SSE_CONN

SSE connection handle.

Examples
ex_network_sse.c.

Definition at line 1012 of file n_network.h.

+ Collaboration diagram for N_SSE_CONN:

Data Fields

NETWORKnetw
 underlying network connection
 
void(* on_event )(N_SSE_EVENT *event, struct N_SSE_CONN *conn, void *user_data)
 callback
 
volatile int stop_flag
 atomic stop flag
 
void * user_data
 user data for callback
 

Field Documentation

◆ netw

NETWORK* N_SSE_CONN::netw

underlying network connection

Definition at line 1013 of file n_network.h.

Referenced by n_sse_conn_free(), and n_sse_connect().

◆ on_event

void(* N_SSE_CONN::on_event) (N_SSE_EVENT *event, struct N_SSE_CONN *conn, void *user_data)

callback

Definition at line 1015 of file n_network.h.

Referenced by n_sse_connect().

◆ stop_flag

volatile int N_SSE_CONN::stop_flag

atomic stop flag

Definition at line 1014 of file n_network.h.

Referenced by n_sse_connect(), and n_sse_stop().

◆ user_data

void* N_SSE_CONN::user_data

user data for callback

Definition at line 1016 of file n_network.h.

Referenced by n_sse_connect().

◆ N_SSE_EVENT

struct N_SSE_EVENT

SSE event received from server.

Examples
ex_network_sse.c.

Definition at line 1002 of file n_network.h.

+ Collaboration diagram for N_SSE_EVENT:
Data Fields
N_STR * data event data
N_STR * event event type (or NULL for default)
N_STR * id last event ID (or NULL)
int retry retry interval in ms (0 if not set)

◆ N_URL

struct N_URL

parsed URL components

Definition at line 911 of file n_network.h.

+ Collaboration diagram for N_URL:
Data Fields
char * host hostname
int nb_params number of parsed parameters
N_URL_PARAM params[64] parsed key=value pairs
char * path path starting with "/", or "/" if empty
int port port number (0 if not specified)
char * query raw query string without leading '?', or NULL
char * scheme "http" or "https"

◆ N_URL_PARAM

struct N_URL_PARAM

a single query parameter key=value pair

Definition at line 905 of file n_network.h.

+ Collaboration diagram for N_URL_PARAM:
Data Fields
char * key parameter name
char * value parameter value

◆ N_WS_CONN

struct N_WS_CONN

WebSocket connection.

Examples
ex_network_ws.c.

Definition at line 953 of file n_network.h.

+ Collaboration diagram for N_WS_CONN:
Data Fields
int connected 1 if handshake completed
char * host remote hostname
NETWORK * netw underlying network connection
char * path resource path

◆ N_WS_FRAME

struct N_WS_FRAME

A single parsed WebSocket frame (RFC 6455).

payload points into the parsed buffer and is still masked when masked is set; use n_ws_unmask to decode it.

Examples
ex_network_ws.c.

Definition at line 962 of file n_network.h.

+ Collaboration diagram for N_WS_FRAME:
Data Fields
int fin FIN bit (1 = final fragment)
unsigned char mask[4] masking key when masked, else zeroed
int masked MASK bit (client-to-server frames are masked)
int opcode opcode (N_WS_OP_*)
const unsigned char * payload pointer into the input buffer (still masked)
uint64_t payload_len payload length in bytes
int rsv the three reserved bits, rsv1<<2 | rsv2<<1 | rsv3

◆ N_WS_MESSAGE

struct N_WS_MESSAGE

WebSocket message.

Examples
ex_network_ws.c.

Definition at line 946 of file n_network.h.

+ Collaboration diagram for N_WS_MESSAGE:
Data Fields
int masked 1 if masked
int opcode frame opcode
N_STR * payload message payload

◆ NETWORK

struct NETWORK
+ Collaboration diagram for NETWORK:
Data Fields
int addr_infos_loaded Internal flag to know if we have to free addr infos.
char * certificate openssl certificate file
int compress_mode Per-packet compression mode, see NETW_COMPRESS_MODE.

Set via netw_set_compression_mode(); default is NETW_COMPRESS_ZLIB to preserve the behaviour from when a single unconditional compression path was the only option. Any NETW_COMPRESSED_* flag on the wire is honoured on recv regardless of this field, so two peers with different send-side picks still interop.

long long connect_dns_usec Measured DNS resolution time of the most recent connect, in microseconds (0 if not measured).

Populated by netw_connect_ex_to so callers can report a connect-phase timing breakdown.

long long connect_tcp_usec Measured TCP connect time of the most recent connect, in microseconds (0 if not measured).

Populated by netw_connect_ex_to.

int crypto_algo if encryption is on, which one (flags NETW_ENCRYPT_*)
int crypto_mode tell if the socket have to be encrypted (flags NETW_CRYPTO_*)
SSL_CTX * ctx SSL context holder.
int deplete_queues_timeout deplete network queues timeout ( 0 disabled, > 0 wait for timeout and check unset/unack datas)
int deplete_socket_timeout deplete socket send buffer timeout ( 0 disabled, > 0 wait for timeout and check unset/unack datas)
pthread_mutex_t eventbolt mutex for threaded access of state event
int in_dirty_list Dirty-list membership flag.

CAS-guards a NETWORK's membership in the reactor's dirty_pending list. Producer side (n_reactor_notify_send) attempts a 0-to-1 CAS; on success it pushes the NETWORK onto the dirty list and writes the wake-eventfd. Consumer side (n_reactor_run wake handler) clears the flag BEFORE draining so a concurrent producer can immediately re-add the NETWORK for the next pass: no message can be lost.

char * key openssl key file
N_SOCKET link networking socket
const SSL_METHOD * method SSL method container.
int mode NETWORK mode , 1 listening, 0 connecting.
int nb_pending Nb pending connection,if listening.
int nb_running_threads nb running threads, if > 0 thread engine is still running
int netw_err_count number of captured errors
int netw_err_next next write slot in ring buffer
char netw_errors[8][512] per-connection error capture ring buffer (max 8 entries, 512 chars each)
LIST * pools pointers to network pools if members of any
int reactor_close_acked Close handshake.

Game thread sets NETW_EXIT_ASKED, notifies the reactor, and waits on this flag. n_reactor_unregister publishes it with a release store as its final action, so EVERY unregister path (the EXIT_ASKED sweep, a peer EOF / EPOLLRDHUP, or a hard I/O error) releases the waiter, not just the sweep. The acquire-load on the game side observes, and is ordered after, every side effect of unregister (epoll DEL, cleared reactor_mode, freed accumulators, list removal) before it closes the socket / frees the NETWORK. Reset to 0 in n_reactor_register. Always accessed via __atomic builtins (release on the reactor side, acquire on the game side); plain volatile would give no happens-before and is a data race.

void * reactor_handle Back-pointer to the registered reactor.

Opaque void * so n_network.h doesn't need to include n_reactor.h (avoids a header-ordering dependency since n_reactor.h includes n_network.h itself). NULL when reactor_mode == 0. Same atomicity contract as reactor_mode: use netw_atomic_read_reactor_handle / netw_atomic_write_reactor_handle.

int reactor_mode Opt-in epoll-reactor mode flag.

0 (default) = classic per-connection thread engine; 1 = registered with an n_reactor. Atomically set by n_reactor_register, cleared by n_reactor_unregister. Read concurrently from the game thread (e.g. netw_close, netw_add_msg), always access via netw_atomic_read_reactor_mode / netw_atomic_write_reactor_mode so the read/clear race during peer-driven unregister is well-defined under TSan. Always 0 on platforms where N_REACTOR_AVAILABLE == 0.

unsigned char reactor_read_hdr_buf[4] accumulator for header words
int reactor_read_hdr_have bytes accumulated in reactor_read_hdr_buf
char * reactor_read_payload malloc'd accumulator for payload bytes
size_t reactor_read_payload_have bytes accumulated into reactor_read_payload
int reactor_read_phase 0=STATE, 1=LENGTH, 2=PAYLOAD
uint32_t reactor_read_pkt_length payload length for the in-flight frame
uint32_t reactor_read_pkt_state state word for the in-flight frame
int reactor_recv_wants_write TLS-over-reactor: recv returned NETW_IO_WANT_WRITE, the reactor re-runs the readable drain after the next writable event.

Always 0 on cleartext sockets.

int reactor_registered Reactor close-handshake latch.

Set to 1 by n_reactor_register and never cleared by the reactor (unlike reactor_mode, which the reactor clears mid-unregister). netw_close keys its decision to run n_reactor_close_netw_sync on THIS flag rather than on the live reactor_mode: otherwise, if the reactor clears reactor_mode during a peer-EOF unregister in the instant before netw_close reads it, the game thread would skip the ack-wait and free the NETWORK while the reactor is still inside n_reactor_unregister (a use-after-free / data race). With the latch the game thread always waits for reactor_close_acked, which the reactor publishes as the last thing it ever does with the NETWORK. Acquire/release __atomic access, same contract as the other reactor flags.

char * reactor_send_buf malloc'd framed bytes, NULL when idle
size_t reactor_send_len total bytes in reactor_send_buf
size_t reactor_send_off bytes already sent to socket
int reactor_send_wants_read TLS-over-reactor: the in-flight send returned NETW_IO_WANT_READ (renegotiation), the reactor retries the write drain after the next readable event instead of waiting on EPOLLOUT.

Always 0 on cleartext sockets.

int reactor_write_armed 1 = EPOLLOUT currently registered
LIST * recv_buf reveicing buffer (for incomming usage)
netw_func recv_data receive func ptr
netw_func recv_data_once single-attempt recv, same contract as send_data_once.
pthread_t recv_thr receiving thread
pthread_mutex_t recvbolt mutex for threaded access of recv buf
sem_t send_blocker block sending func
LIST * send_buf sending buffer (for outgoing queuing )
netw_func send_data send func ptr
netw_func send_data_once single-attempt send (non-blocking / reactor use).

Contract: one transport attempt; > 0 bytes written, NETW_IO_WANT_READ / NETW_IO_WANT_WRITE when the transport needs that readiness to progress, NETW_SOCKET_DISCONNECTED, or NETW_SOCKET_ERROR. Dispatches to the TLS variant when crypto is set, this is what lets the epoll reactor carry TLS connections.

int send_queue_consecutive_wait send queue consecutive pool interval, used when there are still items to send, in usec
pthread_t send_thr sending thread
pthread_mutex_t sendbolt mutex for threaded access of send_buf
int so_keepalive so keepalive state
int so_linger close lingering value (-1 disabled, 0 force close, >0 linger )
int so_rcvbuf size of the socket recv buffer, 0 untouched, else size in bytes
int so_rcvtimeo send timeout value
int so_reuseaddr so reuseaddr state
int so_sndbuf size of the socket send buffer, 0 untouched, else size in bytes
int so_sndtimeo send timeout value
SSL * ssl SSL handle.
uint32_t state state of the connection , NETW_RUN, NETW_QUIT, NETW_STOP , NETW_ERR
int tcpnodelay state of naggle algorythm, 0 untouched, 1 forcibly disabled
int threaded_engine_status Threaded network engine state for this network.

NETW_THR_ENGINE_STARTED or NETW_THR_ENGINE_STOPPED

int transport_type transport type: NETWORK_TCP (0) or NETWORK_UDP (1)
int user_id if part of a user property, id of the user
int wait_close_timeout network wait close timeout value ( < 1 disabled, >= 1 timeout sec )

◆ NETWORK_HTTP_INFO

struct NETWORK_HTTP_INFO

structure for splitting HTTP requests

Examples
ex_network_ssl.c, and ex_network_ssl_hardened.c.

Definition at line 569 of file n_network.h.

+ Collaboration diagram for NETWORK_HTTP_INFO:
Data Fields
char * body Pointer to the body data.
size_t content_length Store content length.
char content_type[256] Store content type.
char * type Type of request.

◆ NETWORK_POOL

struct NETWORK_POOL

structure of a network pool

Examples
ex_gui_network.c.

Definition at line 559 of file n_network.h.

+ Collaboration diagram for NETWORK_POOL:
Data Fields
HASH_TABLE * pool table of clients
pthread_rwlock_t rwlock thread safety

Macro Definition Documentation

◆ _OPEN_SYS_SOCK_IPV6

#define _OPEN_SYS_SOCK_IPV6   1

Definition at line 226 of file n_network.h.

◆ HEAD_CODE

#define HEAD_CODE   3

Code of a HEAD message.

Definition at line 68 of file n_network.h.

◆ HEAD_SIZE

#define HEAD_SIZE   10

Size of a HEAD message.

Definition at line 66 of file n_network.h.

◆ N_ENUM_netw_code_type

#define N_ENUM_netw_code_type (   _)
Value:
_(NETW_CLIENT, 2) \
_(NETW_SERVER, 4) \
_(NETW_RUN, 64) \
_(NETW_EXIT_ASKED, 128) \
_(NETW_EXITED, 256) \
_(NETW_ERROR, 512) \
_(NETW_ENCRYPT_NONE, 1024) \
@ NETW_COMPRESSED_LZ4
Definition n_network.h:283
@ NETW_DESTROY_RECVBUF
Definition n_network.h:283
@ NETW_ENCRYPT_OPENSSL
Definition n_network.h:283
@ NETW_THR_ENGINE_STARTED
Definition n_network.h:283
@ NETW_COMPRESSED_ZLIB
Definition n_network.h:283
@ NETW_SERVER
Definition n_network.h:283
@ NETW_EMPTY_SENDBUF
Definition n_network.h:283
@ NETW_DESTROY_SENDBUF
Definition n_network.h:283
@ NETW_THR_ENGINE_STOPPED
Definition n_network.h:283
@ NETW_RUN
Definition n_network.h:283
@ NETW_CLIENT
Definition n_network.h:283
@ NETW_EMPTY_RECVBUF
Definition n_network.h:283
@ NETW_RESTART_TIMER
Definition n_network.h:283
@ NETW_EXITED
Definition n_network.h:283
@ NETW_ERROR
Definition n_network.h:283
@ NETW_EXIT_ASKED
Definition n_network.h:283
@ NETW_ENCRYPT_NONE
Definition n_network.h:283

Network codes definition.

Definition at line 233 of file n_network.h.

◆ N_URL_MAX_PARAMS

#define N_URL_MAX_PARAMS   64

maximum number of parsed query parameters

Definition at line 902 of file n_network.h.

◆ N_WS_OP_BINARY

#define N_WS_OP_BINARY   0x02
Examples
ex_network_ws.c.

Definition at line 940 of file n_network.h.

◆ N_WS_OP_CLOSE

#define N_WS_OP_CLOSE   0x08

Definition at line 941 of file n_network.h.

◆ N_WS_OP_PING

#define N_WS_OP_PING   0x09
Examples
ex_network_ws.c.

Definition at line 942 of file n_network.h.

◆ N_WS_OP_PONG

#define N_WS_OP_PONG   0x0A

Definition at line 943 of file n_network.h.

◆ N_WS_OP_TEXT

#define N_WS_OP_TEXT   0x01

WebSocket opcodes per RFC 6455.

Examples
ex_network_ws.c.

Definition at line 939 of file n_network.h.

◆ netw_atomic_read_reactor_handle

#define netw_atomic_read_reactor_handle (   netw)    __atomic_load_n(&(netw)->reactor_handle, __ATOMIC_ACQUIRE)

Same contract for the back-pointer to the reactor.

NULL after unregister. Reads in netw_add_msg / n_reactor_close_netw_sync pair with the write inside n_reactor_unregister.

Definition at line 555 of file n_network.h.

◆ netw_atomic_read_reactor_mode

#define netw_atomic_read_reactor_mode (   netw)    __atomic_load_n(&(netw)->reactor_mode, __ATOMIC_ACQUIRE)

Lock-free atomic read of the reactor_mode flag.

The reactor thread clears this flag inside n_reactor_unregister (peer EOF, EXIT_ASKED sweep, or game-thread close handshake), while the game thread reads it from netw_close and netw_add_msg to decide which dispatch path to take. Both outcomes are correct (the close handshake is designed to be idempotent), but TSan still requires synchronised access to the read/write pair.

Definition at line 550 of file n_network.h.

◆ netw_atomic_read_state

#define netw_atomic_read_state (   netw)    __atomic_load_n(&(netw)->state, __ATOMIC_ACQUIRE)

Lock-free atomic read of the network state field.

Uses GCC __atomic builtins (supported on Linux gcc, Solaris gcc, Windows mingw gcc). Provides acquire semantics so subsequent reads see up-to-date values. For use in send/recv thread hot loops to avoid mutex overhead.

Definition at line 536 of file n_network.h.

◆ netw_atomic_write_reactor_handle

#define netw_atomic_write_reactor_handle (   netw,
  val 
)    __atomic_store_n(&(netw)->reactor_handle, (val), __ATOMIC_RELEASE)

Definition at line 556 of file n_network.h.

◆ netw_atomic_write_reactor_mode

#define netw_atomic_write_reactor_mode (   netw,
  val 
)    __atomic_store_n(&(netw)->reactor_mode, (val), __ATOMIC_RELEASE)

Definition at line 551 of file n_network.h.

◆ netw_atomic_write_state

#define netw_atomic_write_state (   netw,
  val 
)    __atomic_store_n(&(netw)->state, (val), __ATOMIC_RELEASE)

Lock-free atomic write of the network state field.

Uses GCC __atomic builtins with release semantics so prior writes are visible to threads performing an acquire load.

Definition at line 541 of file n_network.h.

◆ NETW_COMPRESS_MIN_RATIO

#define NETW_COMPRESS_MIN_RATIO   10u

Definition at line 280 of file n_network.h.

◆ NETW_COMPRESS_THRESHOLD

#define NETW_COMPRESS_THRESHOLD   256u

Opportunistic compression policy.

Outbound payloads shorter than NETW_COMPRESS_THRESHOLD bytes skip the codec entirely; longer payloads are compressed only if the result is at least NETW_COMPRESS_MIN_RATIO percent smaller than the original (otherwise the original is shipped uncompressed). The reactor's send path (n_reactor_drain_writes) shares these knobs with the thread engine's netw_send_func.

Definition at line 279 of file n_network.h.

◆ NETW_COMPRESSED

#define NETW_COMPRESSED   NETW_COMPRESSED_ZLIB

Legacy alias, the first compression commit shipped a single NETW_COMPRESSED flag before LZ4 was added.

Keep the name for any downstream consumer that referenced it before this split.

Definition at line 255 of file n_network.h.

◆ NETW_IO_WANT_READ

#define NETW_IO_WANT_READ   -10

single-attempt I/O (send_data_once / recv_data_once): the operation cannot progress until the socket is READABLE.

Raw recv maps EAGAIN here; TLS maps SSL_ERROR_WANT_READ, note a TLS send can also return this mid-renegotiation.

Definition at line 77 of file n_network.h.

◆ NETW_IO_WANT_WRITE

#define NETW_IO_WANT_WRITE   -11

single-attempt I/O: the operation cannot progress until the socket is WRITABLE.

Raw send maps EAGAIN here; TLS maps SSL_ERROR_WANT_WRITE, a TLS recv can also return this.

Definition at line 81 of file n_network.h.

◆ NETW_MAX_RETRIES

#define NETW_MAX_RETRIES   8

Send or recv max number of retries.

Definition at line 83 of file n_network.h.

◆ NETW_RETRY_DELAY

#define NETW_RETRY_DELAY   1000

Send or recv delay between retries in usec.

Definition at line 85 of file n_network.h.

◆ NETW_SOCKET_DISCONNECTED

#define NETW_SOCKET_DISCONNECTED   -2

Code for a disconnected recv.

Definition at line 72 of file n_network.h.

◆ NETW_SOCKET_ERROR

#define NETW_SOCKET_ERROR   -1

code for a socket error

Definition at line 70 of file n_network.h.

◆ NETW_THR_EXIT_ERROR

#define NETW_THR_EXIT_ERROR   666

Internal DONE value indicating a send/recv thread observed NETW_ERROR without an in-flight local shutdown.

Definition at line 89 of file n_network.h.

◆ NETW_THR_EXIT_OK

#define NETW_THR_EXIT_OK   100

Internal DONE value indicating a send/recv thread reached end-of-life cleanly (peer QUIT or local NETW_EXIT_ASKED ack'd).

Definition at line 87 of file n_network.h.

◆ NETWORK_CONSECUTIVE_SEND_WAIT

#define NETWORK_CONSECUTIVE_SEND_WAIT   2048

Flag to set consecutive send waiting timeout

Definition at line 62 of file n_network.h.

◆ NETWORK_DEPLETE_QUEUES_TIMEOUT

#define NETWORK_DEPLETE_QUEUES_TIMEOUT   1024

Flag to set network queues depletion timeout

Definition at line 60 of file n_network.h.

◆ NETWORK_DEPLETE_SOCKET_TIMEOUT

#define NETWORK_DEPLETE_SOCKET_TIMEOUT   512

Flag to set send buffer depletion timeout

Definition at line 58 of file n_network.h.

◆ NETWORK_DISABLE_ZERO_LENGTH_RECV

#define NETWORK_DISABLE_ZERO_LENGTH_RECV   FALSE

Enable/disable recv of length 0.

Warning: only enable if you know what you are doing ! (TRUE or FALSE)

Definition at line 46 of file n_network.h.

◆ NETWORK_IPALL

#define NETWORK_IPALL   0

◆ NETWORK_IPV4

#define NETWORK_IPV4   1

Flag to force IPV4

Examples
ex_network.c, ex_network_connect_abort.c, ex_network_ssl.c, and ex_network_ssl_hardened.c.

Definition at line 50 of file n_network.h.

◆ NETWORK_IPV6

#define NETWORK_IPV6   2

Flag to force IPV6

Examples
ex_network.c, ex_network_ssl.c, and ex_network_ssl_hardened.c.

Definition at line 52 of file n_network.h.

◆ NETWORK_TCP

#define NETWORK_TCP   0

Flag for TCP transport (default)

Definition at line 54 of file n_network.h.

◆ NETWORK_UDP

#define NETWORK_UDP   1

Flag for UDP transport.

Definition at line 56 of file n_network.h.

◆ NETWORK_WAIT_CLOSE_TIMEOUT

#define NETWORK_WAIT_CLOSE_TIMEOUT   4096

Flag to set network closing wait timeout.

Examples
ex_network.c.

Definition at line 64 of file n_network.h.

◆ SOCKET_SIZE_FORMAT

#define SOCKET_SIZE_FORMAT   "%d"

socket associated printf style

Examples
ex_network_ssl.c, and ex_network_ssl_hardened.c.

Definition at line 104 of file n_network.h.

Typedef Documentation

◆ netw_func

typedef ssize_t(* netw_func) (void *, char *, uint32_t)

send/recv func ptr type

Definition at line 286 of file n_network.h.

◆ netw_sni_pick_cb

typedef int(* netw_sni_pick_cb) (const char *sni, N_STR **cert_pem, N_STR **key_pem, void *user_data)

SNI cert-pick callback for netw_accept_ssl_with_sni_cb: given the client SNI host (may be NULL), fill *cert_pem and *key_pem with a server certificate and key (newly allocated; n_network frees them).

Return 0 to proceed with the handshake, non-zero to fail it.

Definition at line 607 of file n_network.h.

◆ SOCKET

typedef int SOCKET

default socket declaration

socket type for POSIX systems

Definition at line 102 of file n_network.h.

Enumeration Type Documentation

◆ __netw_code_type

Network codes declaration.

Enumerator
NETW_CLIENT 
NETW_SERVER 
NETW_RESTART_TIMER 
NETW_EMPTY_SENDBUF 
NETW_EMPTY_RECVBUF 
NETW_RUN 
NETW_EXIT_ASKED 
NETW_EXITED 
NETW_ERROR 
NETW_ENCRYPT_NONE 
NETW_ENCRYPT_OPENSSL 
NETW_THR_ENGINE_STARTED 
NETW_THR_ENGINE_STOPPED 
NETW_DESTROY_RECVBUF 
NETW_DESTROY_SENDBUF 
NETW_COMPRESSED_ZLIB 
NETW_COMPRESSED_LZ4 
____netw_code_type_UNKNOWN_VALUE__ 

Definition at line 283 of file n_network.h.

◆ NETW_COMPRESS_MODE

Compression mode selector for NETWORK.compress_mode.

The per-packet state word on the wire carries NETW_COMPRESSED_ZLIB or NETW_COMPRESSED_LZ4 so a receiver in NETW_COMPRESS_AUTO (the default) can decode whichever algorithm the sender chose, while a receiver pinned to a specific algorithm will decode only that flag and pass anything else through uncompressed.

Enumerator
NETW_COMPRESS_NONE 

no automatic compression on send, still decompresses inbound

NETW_COMPRESS_ZLIB 

compress on send with zlib, decompress either on recv

NETW_COMPRESS_LZ4 

compress on send with LZ4, decompress either on recv

Definition at line 263 of file n_network.h.

Function Documentation

◆ deplete_send_buffer()

int deplete_send_buffer ( int  fd,
int  timeout 
)

wait for send buffer to be empty

wait for send buffer to be empty

Not as reliable as expected.

Parameters
fdsocket descriptor
timeouttimeout value in msec , value <= 0 : disabled
Returns
0 if timeout or unsupported, -1 on error or the amount of remaining datas in bytes

Definition at line 2631 of file n_network.c.

References LOG_ERR, and n_log.

Referenced by netw_close().

+ Here is the caller graph for this function:

◆ htonst()

size_t htonst ( size_t  value)

host to network size_t

Parameters
valuethe size_t value to convert to network order
Returns
network ordered value

Definition at line 143 of file n_network.c.

◆ n_http_build_multipart()

N_STR * n_http_build_multipart ( LIST parts,
const char *  boundary 
)

build a multipart/form-data body from a LIST of N_HTTP_MULTIPART_PART* using boundary (without "--"); returns a new N_STR (free with free_nstr) or NULL.

Definition at line 6049 of file n_network.c.

References char_to_nstr_ex(), Malloc, and mp_emit().

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_decompress_body()

int n_http_decompress_body ( const N_STR body,
const char *  encoding,
N_STR **  out 
)

decompress an HTTP body per its Content-Encoding ("gzip"/"deflate"; identity/NULL/unknown copies through).

Sets *out to a new N_STR (free with free_nstr). Returns 0 on success, -1 on error.

Definition at line 5751 of file n_network.c.

References N_STR::data, n_http_inflate(), nstrdup(), and N_STR::written.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_multipart_boundary()

int n_http_multipart_boundary ( const char *  content_type,
char *  out,
size_t  outsz 
)

copy the boundary token from a Content-Type value into out (without the leading "--").

Returns 0 on success, -1 when absent.

Definition at line 5811 of file n_network.c.

Referenced by main().

+ Here is the caller graph for this function:

◆ n_http_multipart_free()

void n_http_multipart_free ( LIST **  parts)

free a LIST returned by n_http_parse_multipart and NULL the pointer

Definition at line 5850 of file n_network.c.

References list_destroy().

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_parse_multipart()

LIST * n_http_parse_multipart ( const N_STR body,
const char *  boundary 
)

parse a multipart body (boundary given without "--") into a LIST of N_HTTP_MULTIPART_PART*; free with n_http_multipart_free.

Returns NULL on a bad argument.

Definition at line 5910 of file n_network.c.

References N_HTTP_MULTIPART_PART::body, N_HTTP_MULTIPART_PART::content_type, N_STR::data, N_HTTP_MULTIPART_PART::filename, list_push(), Malloc, mp_disp_param(), mp_find(), mp_header_value(), mp_part_free(), mp_strndup(), N_HTTP_MULTIPART_PART::name, new_generic_list(), new_nstr(), and N_STR::written.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_status_class()

int n_http_status_class ( int  status_code)

leading digit of an HTTP status code (1..5), or 0 when outside 100..599

Definition at line 5668 of file n_network.c.

Referenced by main(), n_http_status_is_client_error(), n_http_status_is_informational(), n_http_status_is_redirect(), n_http_status_is_server_error(), and n_http_status_is_success().

+ Here is the caller graph for this function:

◆ n_http_status_is_client_error()

int n_http_status_is_client_error ( int  status_code)

1 when status_code is a client error (4xx), else 0

Definition at line 5686 of file n_network.c.

References n_http_status_class().

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_status_is_informational()

int n_http_status_is_informational ( int  status_code)

1 when status_code is informational (1xx), else 0

Definition at line 5674 of file n_network.c.

References n_http_status_class().

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_status_is_redirect()

int n_http_status_is_redirect ( int  status_code)

1 when status_code is a redirect (3xx), else 0

Definition at line 5682 of file n_network.c.

References n_http_status_class().

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_status_is_server_error()

int n_http_status_is_server_error ( int  status_code)

1 when status_code is a server error (5xx), else 0

Definition at line 5690 of file n_network.c.

References n_http_status_class().

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_http_status_is_success()

int n_http_status_is_success ( int  status_code)

1 when status_code is success (2xx), else 0

Definition at line 5678 of file n_network.c.

References n_http_status_class().

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_mock_server_free()

void n_mock_server_free ( N_MOCK_SERVER **  server)

free a mock server and close the listening socket

free a mock server and close the listening socket

Parameters
serverpointer to pointer, set to NULL

Definition at line 7224 of file n_network.c.

References __n_assert, FreeNoLog, netw_close(), and server.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_mock_server_run()

void n_mock_server_run ( N_MOCK_SERVER server)

run the mock server accept loop (blocks until stop_flag is set)

run the mock server accept loop (blocks until stop_flag is set)

Blocks until stop_flag is set.

Parameters
servermock server handle

Definition at line 7130 of file n_network.c.

References __n_assert, _n_mock_parse_request(), _n_mock_request_clean(), N_HTTP_RESPONSE::body, N_HTTP_RESPONSE::content_type, N_STR::data, free_nstr, NETWORK::link, LOG_INFO, n_log, netw_accept_from_ex(), netw_close(), netw_get_http_status_message(), server, N_SOCKET::sock, N_HTTP_RESPONSE::status_code, and N_STR::written.

Referenced by server_thread().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_mock_server_start()

N_MOCK_SERVER * n_mock_server_start ( int  port,
void(*)(N_HTTP_REQUEST *, N_HTTP_RESPONSE *, void *)  on_request,
void *  user_data 
)

start a mock HTTP server on localhost:port (returns immediately)

start a mock HTTP server on localhost:port (returns immediately)

Parameters
portport number to listen on
on_requestcallback for each received HTTP request
user_dataarbitrary pointer passed to callback
Returns
new N_MOCK_SERVER handle, or NULL on failure

Definition at line 7096 of file n_network.c.

References __n_assert, FreeNoLog, LOG_ERR, LOG_INFO, Malloc, n_log, netw_make_listening(), NETWORK_IPALL, on_request(), port, port_str, and server.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_mock_server_stop()

void n_mock_server_stop ( N_MOCK_SERVER server)

signal the mock server to stop accepting connections

signal the mock server to stop accepting connections

Parameters
servermock server handle

Definition at line 7215 of file n_network.c.

References __n_assert, and server.

Referenced by main().

+ Here is the caller graph for this function:

◆ n_netw_clear_connect_errors()

void n_netw_clear_connect_errors ( void  )

Clear pre-connection errors on this thread.

Definition at line 130 of file n_network.c.

References s_connect_err_count, and s_connect_err_next.

◆ n_netw_clear_errors()

void n_netw_clear_errors ( NETWORK netw)

Clear captured errors on a NETWORK handle.

Definition at line 114 of file n_network.c.

References netw, NETWORK::netw_err_count, and NETWORK::netw_err_next.

◆ n_netw_get_connect_error()

const char * n_netw_get_connect_error ( int  index)

Get pre-connection error message by index.

Returns NULL if out of range

Definition at line 124 of file n_network.c.

References s_connect_err_count, s_connect_err_next, and s_connect_errors.

◆ n_netw_get_connect_error_count()

int n_netw_get_connect_error_count ( void  )

Get number of pre-connection errors captured on this thread.

Definition at line 120 of file n_network.c.

References s_connect_err_count.

◆ n_netw_get_error()

const char * n_netw_get_error ( const NETWORK netw,
int  index 
)

Get captured error message by index (0 = oldest).

Returns NULL if out of range

Definition at line 108 of file n_network.c.

References netw, NETWORK::netw_err_count, NETWORK::netw_err_next, and NETWORK::netw_errors.

◆ n_netw_get_error_count()

int n_netw_get_error_count ( const NETWORK netw)

Get number of captured errors on a NETWORK handle.

Definition at line 104 of file n_network.c.

References netw, and NETWORK::netw_err_count.

◆ n_proxy_cfg_free()

void n_proxy_cfg_free ( N_PROXY_CFG **  cfg)

Free an N_PROXY_CFG created by n_proxy_cfg_parse().

Parameters
cfgPointer to pointer; set to NULL on return.

Definition at line 7692 of file n_network.c.

References FreeNoLog, N_PROXY_CFG::host, N_PROXY_CFG::password, N_PROXY_CFG::scheme, and N_PROXY_CFG::username.

Referenced by main().

+ Here is the caller graph for this function:

◆ n_proxy_cfg_parse()

N_PROXY_CFG * n_proxy_cfg_parse ( const char *  url)

Parse a proxy URL string into an N_PROXY_CFG struct.

Accepted formats: http://host:port http://user:pass@host:port https://host:port https://user:pass@host:port socks5://host:port socks5://user:pass@host:port

Parameters
urlProxy URL string. Must not be NULL.
Returns
Newly allocated N_PROXY_CFG, or NULL on parse failure. Caller must free with n_proxy_cfg_free().

Definition at line 7597 of file n_network.c.

References FreeNoLog, N_PROXY_CFG::host, LOG_ERR, Malloc, n_log, N_PROXY_CFG::password, port, N_PROXY_CFG::port, N_PROXY_CFG::scheme, and N_PROXY_CFG::username.

Referenced by main().

+ Here is the caller graph for this function:

◆ n_proxy_connect_socks5()

int n_proxy_connect_socks5 ( const N_PROXY_CFG proxy,
const char *  target_host,
int  target_port 
)

Open a TCP connection through a SOCKS5 proxy.

Performs the SOCKS5 handshake (no-auth or user/pass auth), requests connection to target_host:target_port. Returns the raw socket fd ready for use.

Parameters
proxyParsed proxy configuration. Must not be NULL.
target_hostDestination hostname.
target_portDestination port.
Returns
Connected socket fd on success, -1 on failure.

Definition at line 7902 of file n_network.c.

References _proxy_tcp_connect(), N_PROXY_CFG::host, LOG_DEBUG, LOG_ERR, n_log, N_PROXY_CFG::password, N_PROXY_CFG::port, and N_PROXY_CFG::username.

+ Here is the call graph for this function:

◆ n_proxy_connect_tunnel()

int n_proxy_connect_tunnel ( const N_PROXY_CFG proxy,
const char *  target_host,
int  target_port 
)

Open a TCP connection through an HTTP proxy using CONNECT tunneling.

Connects to the proxy, issues: CONNECT target_host:target_port HTTP/1.1 Host: target_host:target_port Proxy-Authorization: Basic base64(user:pass) (if credentials present)

Verifies the proxy responds with 200 Connection established. Returns the raw socket file descriptor ready for a TLS handshake or plain HTTP use over the tunnel.

Parameters
proxyParsed proxy configuration. Must not be NULL.
target_hostDestination hostname.
target_portDestination port.
Returns
Connected socket fd on success, -1 on failure.

Definition at line 7703 of file n_network.c.

References _proxy_tcp_connect(), char_to_nstr(), N_STR::data, free_nstr, N_PROXY_CFG::host, LOG_DEBUG, LOG_ERR, n_base64_encode(), n_log, N_PROXY_CFG::password, N_PROXY_CFG::port, and N_PROXY_CFG::username.

+ Here is the call graph for this function:

◆ n_proxy_connect_tunnel_ssl()

int n_proxy_connect_tunnel_ssl ( const N_PROXY_CFG proxy,
const char *  target_host,
int  target_port 
)

Open a TCP connection through an HTTPS proxy using CONNECT tunneling.

Like n_proxy_connect_tunnel(), but connects to the proxy over TLS first. The CONNECT request and response are exchanged over the encrypted channel. After the tunnel is established, the proxy TLS session is torn down and the raw socket fd is returned, ready for a second TLS handshake to the target or plain HTTP use.

Parameters
proxyParsed proxy configuration (scheme must be "https").
target_hostDestination hostname.
target_portDestination port.
Returns
Connected socket fd on success, -1 on failure.

Definition at line 7776 of file n_network.c.

References _proxy_tcp_connect(), char_to_nstr(), N_STR::data, free_nstr, N_PROXY_CFG::host, LOG_DEBUG, LOG_ERR, n_base64_encode(), n_log, netw_init_openssl(), N_PROXY_CFG::password, N_PROXY_CFG::port, and N_PROXY_CFG::username.

+ Here is the call graph for this function:

◆ n_sse_conn_free()

void n_sse_conn_free ( N_SSE_CONN **  conn)

free an SSE connection

free an SSE connection

Parameters
connpointer to pointer, set to NULL

Definition at line 6626 of file n_network.c.

References __n_assert, FreeNoLog, N_SSE_CONN::netw, and netw_close().

Referenced by main(), and n_sse_connect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_sse_connect()

N_SSE_CONN * n_sse_connect ( const char *  host,
const char *  port,
const char *  path,
int  use_ssl,
const char *  user_agent,
void(*)(N_SSE_EVENT *, N_SSE_CONN *, void *)  on_event,
void *  user_data 
)

connect to an SSE endpoint and start reading events (blocks until stopped).

Parameters
user_agentoptional User-Agent header value. NULL emits no User-Agent header; some servers (e.g. Wikimedia) reject anonymous clients with 403.

connect to an SSE endpoint and start reading events (blocks until stopped).

Blocks until stopped or connection closes. Calls on_event for each complete SSE event received.

Parameters
hosthostname
portport string
pathresource path
use_ssl1 for https, 0 for http
on_eventcallback for each received event
user_datapassed to callback
Returns
new N_SSE_CONN, or NULL on failure

Definition at line 6711 of file n_network.c.

References __n_assert, _netw_capture_error(), _sse_read_byte(), _sse_write(), char_to_nstr(), N_SSE_EVENT::data, N_SSE_EVENT::event, free_nstr, N_SSE_EVENT::id, LOG_DEBUG, LOG_ERR, LOG_INFO, Malloc, n_log, n_sse_conn_free(), n_sse_event_clean(), N_SSE_CONN::netw, netw_connect(), netw_ssl_connect_client(), netw_ssl_do_handshake(), NETWORK_IPALL, nstrprintf_cat, N_SSE_CONN::on_event, port, N_SSE_EVENT::retry, N_SSE_CONN::stop_flag, and N_SSE_CONN::user_data.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_sse_event_clean()

void n_sse_event_clean ( N_SSE_EVENT event)

free an SSE event's contents (does not free the event struct itself)

free an SSE event's contents (does not free the event struct itself)

Parameters
eventthe event to clean

Definition at line 6605 of file n_network.c.

References N_SSE_EVENT::data, N_SSE_EVENT::event, free_nstr, and N_SSE_EVENT::id.

Referenced by n_sse_connect().

+ Here is the caller graph for this function:

◆ n_sse_stop()

void n_sse_stop ( N_SSE_CONN conn)

signal the SSE connection to stop reading

signal the SSE connection to stop reading

Parameters
connSSE connection

Definition at line 6617 of file n_network.c.

References __n_assert, and N_SSE_CONN::stop_flag.

Referenced by on_sse_event().

+ Here is the caller graph for this function:

◆ n_url_build()

N_STR * n_url_build ( const N_URL u)

build a URL string from parsed components

Definition at line 7294 of file n_network.c.

References N_URL::host, new_nstr(), nstrprintf, nstrprintf_cat, N_URL::path, N_URL::port, N_URL::query, and N_URL::scheme.

+ Here is the call graph for this function:

◆ n_url_canonicalize()

N_STR * n_url_canonicalize ( const N_URL u)

produce a canonical URL string for dedup (lowercase scheme/host, drop default port, remove .

/ and ../ segments, keep query)

produce a canonical URL string for dedup (lowercase scheme/host, drop default port, remove .

Lowercases the scheme and host, drops the default port (80 for http, 443 for https), removes "." and ".." path segments, and keeps the query verbatim.

Parameters
ua parsed URL
Returns
a newly allocated N_STR canonical form, or NULL on error

Definition at line 7366 of file n_network.c.

References _n_url_normalize_path(), N_URL::host, new_nstr(), nstrprintf, nstrprintf_cat, N_URL::path, N_URL::port, N_URL::query, and N_URL::scheme.

Referenced by n_url_canonicalize_string().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_url_canonicalize_string()

N_STR * n_url_canonicalize_string ( const char *  url)

parse and canonicalize a URL string in one call

Parameters
urlthe URL string
Returns
a newly allocated N_STR canonical form, or NULL on error

Definition at line 7395 of file n_network.c.

References n_url_canonicalize(), n_url_free(), and n_url_parse().

Referenced by expect_canon(), and main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_url_decode()

N_STR * n_url_decode ( const char *  str)

decode a percent-encoded string (returns N_STR)

Definition at line 7521 of file n_network.c.

References new_nstr(), and nstrprintf_cat.

+ Here is the call graph for this function:

◆ n_url_encode()

N_STR * n_url_encode ( const char *  str)

percent-encode a string for use in URLs (delegates to n_str_url_encode())

Definition at line 7517 of file n_network.c.

References n_str_url_encode().

+ Here is the call graph for this function:

◆ n_url_free()

void n_url_free ( N_URL **  u)

free a N_URL and all its members

Definition at line 7542 of file n_network.c.

References FreeNoLog, N_URL::host, N_URL_PARAM::key, N_URL::nb_params, N_URL::params, N_URL::path, N_URL::query, N_URL::scheme, and N_URL_PARAM::value.

Referenced by n_url_canonicalize_string(), and n_url_resolve().

+ Here is the caller graph for this function:

◆ n_url_parse()

N_URL * n_url_parse ( const char *  url)

parse a URL string into components

Definition at line 7255 of file n_network.c.

References _n_parse_query_params(), N_URL::host, Malloc, N_URL::path, N_URL::port, N_URL::query, and N_URL::scheme.

Referenced by n_url_canonicalize_string(), and n_url_resolve().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_url_resolve()

N_STR * n_url_resolve ( const char *  base,
const char *  ref 
)

resolve a (possibly relative) reference against an absolute base URL (RFC 3986 section 5)

resolve a (possibly relative) reference against an absolute base URL (RFC 3986 section 5)

Implements RFC 3986 section 5 reference resolution: a base URL plus a reference found in a document (an href, src, or action) produce an absolute URL. Handles absolute references (returned verbatim), scheme-relative ("//host/path"), absolute-path ("/path"), query-only ("?q"), fragment-only (resolves to the base resource), and relative-path references (merged against the base path). The fragment is dropped (it is not part of the resource identity for crawling) and "." / ".." path segments are removed. The result is not lowercased or otherwise canonicalized; pass it through n_url_canonicalize_string for a dedup key.

Parameters
basean absolute base URL (scheme://host/...). NULL returns NULL.
refthe reference to resolve. NULL is treated as the empty string.
Returns
a newly allocated absolute N_STR URL, or NULL on error.

Definition at line 7433 of file n_network.c.

References _n_url_has_scheme(), _n_url_normalize_path(), N_URL::host, n_url_free(), n_url_parse(), new_nstr(), nstrprintf, nstrprintf_cat, N_URL::path, N_URL::port, N_URL::query, and N_URL::scheme.

Referenced by expect_resolve().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_ws_close()

void n_ws_close ( N_WS_CONN conn)

send close frame and close the connection

send close frame and close the connection

Sends a close frame (opcode 0x08), attempts to read a close response, then closes the underlying NETWORK.

Parameters
connWebSocket connection

Definition at line 6551 of file n_network.c.

References __n_assert, N_WS_CONN::connected, free_nstr, N_WS_OP_CLOSE, n_ws_recv(), n_ws_send(), N_WS_CONN::netw, netw_close(), and N_WS_MESSAGE::payload.

Referenced by n_ws_conn_free().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_ws_conn_free()

void n_ws_conn_free ( N_WS_CONN **  conn)

free a WebSocket connection structure

free a WebSocket connection structure

Closes the connection if still open, then frees all members.

Parameters
connpointer to pointer, set to NULL

Definition at line 6581 of file n_network.c.

References __n_assert, N_WS_CONN::connected, FreeNoLog, N_WS_CONN::host, n_ws_close(), N_WS_CONN::netw, netw_close(), and N_WS_CONN::path.

Referenced by main(), and n_ws_connect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_ws_connect()

N_WS_CONN * n_ws_connect ( const char *  host,
const char *  port,
const char *  path,
int  use_ssl 
)

connect to a WebSocket server (ws:// or wss://) and perform the HTTP/1.1 upgrade handshake

connect to a WebSocket server (ws:// or wss://) and perform the HTTP/1.1 upgrade handshake

Performs the HTTP/1.1 upgrade handshake per RFC 6455.

Parameters
hosthostname to connect to
portport string (e.g. "443")
pathresource path (e.g. "/")
use_ssl1 for wss://, 0 for ws://
Returns
new N_WS_CONN, or NULL on failure

Definition at line 6208 of file n_network.c.

References __n_assert, _netw_capture_error(), _ws_write(), N_WS_CONN::connected, NETWORK::crypto_algo, N_STR::data, free_nstr, N_WS_CONN::host, NETWORK::link, LOG_DEBUG, LOG_ERR, LOG_INFO, Malloc, n_base64_encode(), n_log, n_ws_conn_free(), N_WS_CONN::netw, netw_connect(), NETW_ENCRYPT_OPENSSL, netw_ssl_connect_client(), netw_ssl_do_handshake(), NETWORK_IPALL, new_nstr(), N_WS_CONN::path, port, N_SOCKET::sock, NETWORK::ssl, and N_STR::written.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_ws_frame_build()

size_t n_ws_frame_build ( int  fin,
int  opcode,
int  do_mask,
const unsigned char *  payload,
size_t  len,
const unsigned char  mask_key[4],
unsigned char *  out,
size_t  out_cap 
)

build a WebSocket frame into out (optionally masking the payload).

Returns the number of bytes written, or 0 when out_cap is too small.

Definition at line 6960 of file n_network.c.

Referenced by test_frame_codec().

+ Here is the caller graph for this function:

◆ n_ws_frame_parse()

int n_ws_frame_parse ( const unsigned char *  buf,
size_t  len,
N_WS_FRAME frame,
size_t *  consumed 
)

parse one WebSocket frame from a byte buffer (stateless).

Returns 1 and fills frame + *consumed (total frame bytes) on a complete frame, 0 when more bytes are needed, -1 on a malformed or over-large frame. payload aliases buf.

parse one WebSocket frame from a byte buffer (stateless).

Parameters
bufThe input bytes (one or more frames, possibly partial).
lenNumber of readable bytes in buf.
frameReceives the parsed header and a payload pointer aliasing buf.
consumedReceives the total frame size in bytes on a complete frame.
Returns
1 on a complete frame, 0 when more bytes are needed, -1 when malformed or the payload exceeds N_WS_FRAME_MAX_PAYLOAD.

Definition at line 6905 of file n_network.c.

References N_WS_FRAME::fin, N_WS_FRAME::mask, N_WS_FRAME::masked, N_WS_FRAME_MAX_PAYLOAD, N_WS_FRAME::opcode, N_WS_FRAME::payload, N_WS_FRAME::payload_len, and N_WS_FRAME::rsv.

Referenced by test_frame_codec().

+ Here is the caller graph for this function:

◆ n_ws_recv()

int n_ws_recv ( N_WS_CONN conn,
N_WS_MESSAGE msg_out 
)

receive one WebSocket frame

receive one WebSocket frame

Reads the frame header, extended length, optional mask, and payload.

Parameters
connWebSocket connection
msg_outoutput: populated message. Caller must free payload with free_nstr.
Returns
0 on success, -1 on error or connection closed

Definition at line 6479 of file n_network.c.

References __n_assert, _ws_read(), N_STR::data, free_nstr, N_WS_MESSAGE::masked, N_WS_CONN::netw, new_nstr(), N_WS_MESSAGE::opcode, N_WS_MESSAGE::payload, and N_STR::written.

Referenced by main(), and n_ws_close().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_ws_send()

int n_ws_send ( N_WS_CONN conn,
const char *  payload,
size_t  len,
int  opcode 
)

send a WebSocket frame (client always masks)

send a WebSocket frame (client always masks)

Builds a masked WebSocket frame per RFC 6455 and sends it.

Parameters
connWebSocket connection
payloaddata to send
lenpayload length
opcodeframe opcode (N_WS_OP_TEXT, etc.)
Returns
0 on success, -1 on error

Definition at line 6412 of file n_network.c.

References __n_assert, _netw_capture_error(), _ws_write(), FreeNoLog, LOG_ERR, Malloc, n_log, and N_WS_CONN::netw.

Referenced by main(), and n_ws_close().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ n_ws_unmask()

void n_ws_unmask ( unsigned char *  dst,
const unsigned char *  src,
size_t  len,
const unsigned char  mask[4] 
)

XOR-unmask len bytes of src into dst using a 4-byte WebSocket mask key.

Definition at line 6952 of file n_network.c.

Referenced by test_frame_codec().

+ Here is the caller graph for this function:

◆ netw_accept_from()

NETWORK * netw_accept_from ( NETWORK from)

Accepting routine.

Accepting routine.

Network 'from' must be allocated with netw_make_listening.

Parameters
fromThe network from which to obtaion the connection
Returns
NULL

Definition at line 3544 of file n_network.c.

References MAX_LIST_ITEMS, and netw_accept_from_ex().

Referenced by main(), and netw_accept_ssl_with_sni_cb().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_accept_from_ex()

NETWORK * netw_accept_from_ex ( NETWORK from,
size_t  send_list_limit,
size_t  recv_list_limit,
int  blocking,
int *  retval 
)

Accepting routine extended.

Accepting routine extended.

Network 'from' must be allocated with netw_make_listening.

Parameters
fromthe network from where we accept
send_list_limitInternal sending list maximum number of item. 0 for unrestricted
recv_list_limitInternal receiving list maximum number of item. 0 for unrestricted
blockingset to -1 to make it non blocking, to 0 for blocking, else it's the select timeout value in msecs.
retvalEAGAIN ou EWOULDBLOCK or neterrno (use netstrerr( retval) to obtain a string describing the code )
Returns
NULL on failure, if not a pointer to the connected network

Definition at line 3358 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, NETWORK::crypto_algo, NETWORK::ctx, endif, FreeNoLog, get_in_addr(), N_SOCKET::ip, N_SOCKET::is_blocking, NETWORK::link, LOG_DEBUG, LOG_ERR, Malloc, n_log, neterrno, netstrerror(), netw, netw_close(), NETW_ENCRYPT_OPENSSL, netw_init_wsa(), netw_new(), NETW_RUN, NETW_SERVER, netw_set(), netw_set_blocking(), netw_setsockopt(), netw_ssl_print_errors(), NETW_THR_ENGINE_STOPPED, N_SOCKET::port, N_SOCKET::raddr, NETWORK::recv_data, NETWORK::recv_data_once, recv_ssl_data(), recv_ssl_data_once(), NETWORK::send_data, NETWORK::send_data_once, send_ssl_data(), send_ssl_data_once(), N_SOCKET::sock, SOCKET_SIZE_FORMAT, and NETWORK::ssl.

Referenced by main(), main(), n_mock_server_run(), netw_accept_from(), netw_accept_nonblock_from(), and netw_accept_pool_thread_func().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_accept_nonblock_from()

NETWORK * netw_accept_nonblock_from ( NETWORK from,
int  blocking 
)

Accepting routine.

Accepting routine.

Network 'from' must be allocated with netw_make_listening.

Parameters
fromThe network from which to obtaion the connection
blockingset to -1 to make it non blocking, to 0 for blocking, else it's the select timeout value in mseconds.
Returns
NULL

Definition at line 3554 of file n_network.c.

References MAX_LIST_ITEMS, and netw_accept_from_ex().

+ Here is the call graph for this function:

◆ netw_accept_ssl_with_sni_cb()

NETWORK * netw_accept_ssl_with_sni_cb ( NETWORK listen,
netw_sni_pick_cb  pick,
void *  user_data 
)

accept a TLS connection, selecting the server certificate per client SNI via pick() during the handshake

accept a TLS connection, selecting the server certificate per client SNI via pick() during the handshake

Accepts a plaintext connection from listen, then upgrades it to a TLS server via netw_ssl_server_handshake(), so the pick callback supplies a leaf matching the client's requested host during the handshake.

Parameters
listenthe listening NETWORK from netw_make_listening
pickcallback that supplies a cert/key for a given SNI host
user_dataopaque pointer passed to pick
Returns
the accepted NETWORK, or NULL on error

Definition at line 1846 of file n_network.c.

References __n_assert, netw_accept_from(), netw_close(), and netw_ssl_server_handshake().

Referenced by server_fn().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_add_msg()

◆ netw_add_msg_ex()

int netw_add_msg_ex ( NETWORK netw,
char *  str,
unsigned int  length 
)

Add a char message to send in the aimed NETWORK.

Add a char message to send in the aimed NETWORK.

Parameters
netwNETWORK where add the message
strthe message to add
lengththe size of the message to add
Returns
TRUE if success FALSE on error

Definition at line 3635 of file n_network.c.

References __n_assert, N_STR::data, free_nstr_ptr(), N_STR::length, list_push(), Malloc, netw, NETWORK::send_blocker, NETWORK::send_buf, NETWORK::sendbolt, and N_STR::written.

+ Here is the call graph for this function:

◆ netw_adopt_client_fd()

int netw_adopt_client_fd ( NETWORK **  netw,
SOCKET  fd,
const char *  host,
const char *  port 
)

adopt an already-connected socket fd into a fresh client NETWORK (plain send/recv)

adopt an already-connected socket fd into a fresh client NETWORK (plain send/recv)

Wraps a connected socket file descriptor (for example one returned by n_proxy_connect_tunnel / n_proxy_connect_socks5) in a newly allocated client NETWORK so the blocking send/recv helpers (send_data / netw_read_all / ...) can run over it. The NETWORK is created with the plain (non-SSL) send/recv vtable; promote it with netw_ssl_start_client + netw_ssl_do_handshake to speak TLS over the adopted socket. On success the NETWORK owns fd and closes it in netw_close; on failure fd is left open for the caller to close.

Parameters
netwoutput: receives the new NETWORK. Must point to NULL on entry.
fda connected socket descriptor (must not be INVALID_SOCKET).
hosthostname recorded for logging, or NULL.
portport string recorded for logging, or NULL.
Returns
TRUE on success, FALSE on error.

Definition at line 8040 of file n_network.c.

References __n_assert, LOG_DEBUG, LOG_ERR, MAX_LIST_ITEMS, n_log, netw, NETW_CLIENT, netw_close(), netw_init_wsa(), netw_new(), NETW_RUN, netw_set(), NETW_THR_ENGINE_STOPPED, and port.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_bind_udp()

int netw_bind_udp ( NETWORK **  netw,
char *  addr,
char *  port,
int  ip_version 
)

Create a UDP bound socket.

Create a UDP bound socket.

Parameters
netwA NETWORK **network to bind
addrAddress to bind, NULL for wildcard
portPort to bind to
ip_versionNETWORK_IPALL for both ipv4 and ipv6 , NETWORK_IPV4 or NETWORK_IPV6
Returns
TRUE on success, FALSE on error

Definition at line 3005 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, addr, FreeNoLog, get_in_addr(), ip_version, LOG_DEBUG, LOG_ERR, Malloc, MAX_LIST_ITEMS, n_log, neterrno, netstrerror(), netw, netw_close(), netw_init_wsa(), netw_new(), NETW_RUN, NETW_SERVER, netw_set(), netw_setsockopt(), NETW_THR_ENGINE_STOPPED, NETWORK_IPV4, NETWORK_IPV6, NETWORK_UDP, port, recv_udp_data(), and send_udp_data().

Referenced by main(), and run_server().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_build_http_response()

int netw_build_http_response ( N_STR **  http_response,
int  status_code,
const char *  server_name,
const char *  content_type,
char *  additional_headers,
N_STR body 
)

build HTTP response

build HTTP response

Parameters
http_responsepointer to a N_STR *response. Will be set to the response, or NULL
status_coderesponse http status code
server_nameresponse 'Server' in headers
content_typeresponse 'Content-Type' in headers
additional_headersadditional response headers, can be "" if no additional headers, else 'backslash r backslash n' separated key: values
bodyresponse 'Server' in headers
Returns
TRUE if the http_response was built, FALSE if not

Definition at line 6110 of file n_network.c.

References __n_assert, LOG_DEBUG, n_log, netw_get_http_date(), netw_get_http_status_message(), nstrcat, nstrprintf, and N_STR::written.

Referenced by build_secure_response(), and handle_request().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_calculate_urlencoded_size()

size_t netw_calculate_urlencoded_size ( const char *  str,
size_t  len 
)

calculate URL-encoded size

calculate URL-encoded size

Parameters
strclear string from which we want to know the urlencoded size
lenlength of the input string
Returns
the urlencoded size if the string was urlencoded

Definition at line 5291 of file n_network.c.

References __n_assert.

Referenced by netw_urlencode().

+ Here is the caller graph for this function:

◆ netw_close()

◆ netw_connect()

int netw_connect ( NETWORK **  netw,
char *  host,
char *  port,
int  ip_version 
)

Connecting.

Connecting.

Parameters
netwa NETWORK *object
hostHost or IP to connect to
portPort to use to connect
ip_versionNETWORK_IPALL for both ipv4 and ipv6 , NETWORK_IPV4 or NETWORK_IPV6
Returns
TRUE or FALSE

Definition at line 2359 of file n_network.c.

References _str, ip_version, LOG_INFO, MAX_LIST_ITEMS, n_log, netw, netw_connect_ex(), and port.

Referenced by client_worker_echo(), client_worker_fast(), main(), n_sse_connect(), n_ws_connect(), and run_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_connect_ex()

int netw_connect_ex ( NETWORK **  netw,
char *  host,
char *  port,
size_t  send_list_limit,
size_t  recv_list_limit,
int  ip_version,
char *  ssl_key_file,
char *  ssl_cert_file 
)

Connecting, extended.

Connecting, extended.

Parameters
netwa NETWORK *object
hostHost or IP to connect to
portPort to use to connect
send_list_limitInternal sending list maximum number of item. From UNLIMITED_LIST_ITEMS (0) to MAX_LIST_ITEMS (SIZE_MAX).
recv_list_limitInternal receiving list maximum number of item. From UNLIMITED_LIST_ITEMS (0) to MAX_LIST_ITEMS (SIZE_MAX).
ip_versionNETWORK_IPALL for both ipv4 and ipv6 , NETWORK_IPV4 or NETWORK_IPV6
ssl_key_fileNULL or the path to the SSL key file to use. If set, a ssl_cert_file must also be provided
ssl_cert_fileNULL or the path to the SSL certificate file to use. If set, a ssl_key_file must also be provided
Returns
TRUE or FALSE

Definition at line 2347 of file n_network.c.

References ip_version, netw, netw_connect_ex_to(), and port.

Referenced by netw_connect(), and netw_ssl_connect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_connect_ex_to()

int netw_connect_ex_to ( NETWORK **  netw,
char *  host,
char *  port,
size_t  send_list_limit,
size_t  recv_list_limit,
int  ip_version,
char *  ssl_key_file,
char *  ssl_cert_file,
int  connect_timeout_ms 
)

Connecting, extended, with a bounded connection-establishment time (connect_timeout_ms, 0 = OS default)

Connecting, extended, with a bounded connection-establishment time (connect_timeout_ms, 0 = OS default)

Parameters
netwa NETWORK *object
hostHost or IP to connect to
portPort to use to connect
send_list_limitInternal sending list maximum number of item. From UNLIMITED_LIST_ITEMS (0) to MAX_LIST_ITEMS (SIZE_MAX).
recv_list_limitInternal receiving list maximum number of item. From UNLIMITED_LIST_ITEMS (0) to MAX_LIST_ITEMS (SIZE_MAX).
ip_versionNETWORK_IPALL for both ipv4 and ipv6 , NETWORK_IPV4 or NETWORK_IPV6
ssl_key_fileNULL or the path to the SSL key file to use. If set, a ssl_cert_file must also be provided
ssl_cert_fileNULL or the path to the SSL certificate file to use. If set, a ssl_key_file must also be provided
connect_timeout_msconnect timeout in milliseconds, 0 = OS default
Returns
TRUE or FALSE

Definition at line 2190 of file n_network.c.

References __n_assert, _netw_capture_connect_error(), _netw_capture_error(), _netw_timed_connect(), _str, FreeNoLog, get_in_addr(), get_usec(), N_SOCKET::ip, ip_version, NETWORK::link, LOG_DEBUG, LOG_ERR, LOG_INFO, Malloc, n_log, neterrno, netstrerror(), netw, NETW_CLIENT, netw_close(), netw_init_wsa(), netw_new(), NETW_RUN, netw_set(), netw_set_crypto(), NETW_THR_ENGINE_STOPPED, NETWORK_IPV4, NETWORK_IPV6, port, and start_HiTimer().

Referenced by netw_connect_ex(), netw_connect_to(), and netw_ssl_connect_client_to().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_connect_to()

int netw_connect_to ( NETWORK **  netw,
char *  host,
char *  port,
int  ip_version,
int  connect_timeout_ms 
)

Connecting, with a bounded connection-establishment time (connect_timeout_ms, 0 = OS default)

Connecting, with a bounded connection-establishment time (connect_timeout_ms, 0 = OS default)

Parameters
netwa NETWORK *object
hostHost or IP to connect to
portPort to use to connect
ip_versionNETWORK_IPALL for both ipv4 and ipv6 , NETWORK_IPV4 or NETWORK_IPV6
connect_timeout_msconnect timeout in milliseconds, 0 = OS default
Returns
TRUE or FALSE

Definition at line 2373 of file n_network.c.

References _str, ip_version, LOG_INFO, MAX_LIST_ITEMS, n_log, netw, netw_connect_ex_to(), and port.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_connect_udp()

int netw_connect_udp ( NETWORK **  netw,
char *  host,
char *  port,
int  ip_version 
)

Connect a UDP socket to a remote host.

Parameters
netwA NETWORK **network to connect
hostHost or IP to connect to
portPort to connect to
ip_versionNETWORK_IPALL, NETWORK_IPV4 or NETWORK_IPV6
Returns
TRUE on success, FALSE on error

Definition at line 3113 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, FreeNoLog, get_in_addr(), ip_version, LOG_DEBUG, LOG_ERR, LOG_INFO, Malloc, MAX_LIST_ITEMS, n_log, neterrno, netstrerror(), netw, NETW_CLIENT, netw_close(), netw_init_wsa(), netw_new(), NETW_RUN, netw_set(), NETW_THR_ENGINE_STOPPED, NETWORK_IPV4, NETWORK_IPV6, NETWORK_UDP, port, recv_udp_data(), and send_udp_data().

Referenced by main(), and run_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_destroy_pool()

int netw_destroy_pool ( NETWORK_POOL **  netw_pool)

destroy pool

destroy pool

Parameters
netw_poolthe address of a NETWORK_POOL *pointer to free
Returns
TRUE or FALSE

Definition at line 5002 of file n_network.c.

References __n_assert, destroy_ht(), Free, rw_lock_destroy, unlock, and write_lock.

+ Here is the call graph for this function:

◆ netw_extract_http_info()

NETWORK_HTTP_INFO netw_extract_http_info ( char *  request)

extract HTTP info from request

extract HTTP info from request

Parameters
requestthe raw http request string
Returns
a NETWORK_HTTP_INFO structure, filled with zeros in case of errors

Definition at line 5380 of file n_network.c.

References __n_assert, NETWORK_HTTP_INFO::body, NETWORK_HTTP_INFO::content_length, NETWORK_HTTP_INFO::content_type, LOG_ERR, n_log, netw_extract_http_request_type(), and NETWORK_HTTP_INFO::type.

Referenced by handle_request().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_extract_http_request_type()

char * netw_extract_http_request_type ( const char *  request)

extract HTTP request type

extract HTTP request type

Parameters
requestthe raw http request
Returns
a char *copy of the request type, or NULL

Definition at line 5347 of file n_network.c.

References __n_assert.

Referenced by netw_extract_http_info().

+ Here is the caller graph for this function:

◆ netw_get_http_date()

int netw_get_http_date ( char *  buffer,
size_t  buffer_size 
)

get current HTTP date string

get current HTTP date string

Parameters
bufferthe target buffer, must be big enough to hold the date
buffer_sizethe size of the target buffer
Returns
TRUE or FALSE

Definition at line 6078 of file n_network.c.

References __n_assert, LOG_ERR, and n_log.

Referenced by netw_build_http_response().

+ Here is the caller graph for this function:

◆ netw_get_http_status_message()

const char * netw_get_http_status_message ( int  status_code)

get HTTP status message string

get HTTP status message string

Parameters
status_codethe code to convert into a human-readable message
Returns
a pointer to the human readable message. 'Unknown' is returned if the status code is not supported

Definition at line 5650 of file n_network.c.

Referenced by n_mock_server_run(), and netw_build_http_response().

+ Here is the caller graph for this function:

◆ netw_get_msg()

N_STR * netw_get_msg ( NETWORK netw)

Get a message from aimed NETWORK.

Instant return to NULL if no MSG

Parameters
netwNETWORK where get the msg
Returns
NULL or a filled N_STR

Definition at line 3666 of file n_network.c.

References __n_assert, g_netw_bytes_recv, list_shift, netw, NETWORK::recv_buf, NETWORK::recvbolt, and N_STR::written.

Referenced by manage_client(), netw_wait_msg(), poll_network_msgs(), and run_server().

+ Here is the caller graph for this function:

◆ netw_get_queue_status()

int netw_get_queue_status ( NETWORK netw,
size_t *  nb_to_send,
size_t *  nb_to_read 
)

get queue status

get queue status

Parameters
netwNETWORK object
nb_to_sendNumber of messages still in send buffer (not yet submitted to kernel)
nb_to_readNumber of message already read by the kernel, waiting in the local message list
Returns
TRUE or FALSE

Definition at line 4964 of file n_network.c.

References __n_assert, LIST::nb_items, netw, NETWORK::recv_buf, NETWORK::recvbolt, NETWORK::send_buf, and NETWORK::sendbolt.

◆ netw_get_state()

int netw_get_state ( NETWORK netw,
uint32_t *  state,
int *  thr_engine_status 
)

Get flags from network.

Get flags from network.

Parameters
netwThe NETWORK *connection to query
statepointer to network status storage , NETW_RUN , NETW_EXIT_ASKED , NETW_EXITED
thr_engine_statuspointer to network thread engine status storage ,NETW_THR_ENGINE_STARTED , NETW_THR_ENGINE_STOPPED
Returns
TRUE or FALSE

Definition at line 2532 of file n_network.c.

References NETWORK::eventbolt, LOG_ERR, n_log, netw, netw_atomic_read_state, and NETWORK::threaded_engine_status.

Referenced by main(), manage_client(), netw_close(), netw_stop_thr_engine(), and netw_wait_msg().

+ Here is the caller graph for this function:

◆ netw_get_url_from_http_request()

int netw_get_url_from_http_request ( const char *  request,
char *  url,
size_t  size 
)

get URL from HTTP request

get URL from HTTP request

Parameters
requestraw http request to decode
urlpointer to an allocated char *holder
sizethe size of the url holder
Returns
TRUE or FALSE

Definition at line 5466 of file n_network.c.

References __n_assert.

Referenced by handle_request().

+ Here is the caller graph for this function:

◆ netw_guess_http_content_type()

const char * netw_guess_http_content_type ( const char *  url)

guess HTTP content type from URL

guess HTTP content type from URL

Parameters
urlthe url from which we want to guess the content type
Returns
a pointer to the detected content type. It will be 'unknown' if no detection worked

Definition at line 5586 of file n_network.c.

References __n_assert.

Referenced by handle_request().

+ Here is the caller graph for this function:

◆ netw_info_destroy()

int netw_info_destroy ( NETWORK_HTTP_INFO  http_request)

destroy HTTP info structure

destroy HTTP info structure

Parameters
http_requestthe parsed NETWORK_HTTP_INFO request
Returns
TRUE ;

Definition at line 5453 of file n_network.c.

References NETWORK_HTTP_INFO::body, FreeNoLog, and NETWORK_HTTP_INFO::type.

Referenced by handle_request().

+ Here is the caller graph for this function:

◆ netw_init_openssl()

int netw_init_openssl ( void  )

init ssl helper

init ssl helper

Initialize openssl

Returns
TRUE

Definition at line 1333 of file n_network.c.

References netw_init_locks(), and OPENSSL_IS_INITIALIZED.

Referenced by main(), n_proxy_connect_tunnel_ssl(), netw_set_crypto(), netw_set_crypto_pem(), netw_ssl_server_handshake(), and netw_ssl_start_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_init_wsa()

int netw_init_wsa ( int  mode,
int  v1,
int  v2 
)

Used by Init & Close network.

Used by Init & Close network.

Initialize winsock dll loading on windows if needed.

Parameters
mode1 for opening 0 for close 2 for status
v1First digit of version requested
v2Second digit of version requested
Returns
TRUE on success FALSE on error

Definition at line 839 of file n_network.c.

References mode.

Referenced by netw_accept_from_ex(), netw_adopt_client_fd(), netw_bind_udp(), netw_connect_ex_to(), netw_connect_udp(), and netw_make_listening().

+ Here is the caller graph for this function:

◆ netw_make_listening()

int netw_make_listening ( NETWORK **  netw,
char *  addr,
char *  port,
int  nbpending,
int  ip_version 
)

Listening network.

Listening network.

Parameters
netwA NETWORK **network to make listening
addrAddress to bind, NULL for automatic address filling
portFor choosing a PORT to listen to
nbpendingNumber of pending connection when listening
ip_versionNETWORK_IPALL for both ipv4 and ipv6 , NETWORK_IPV4 or NETWORK_IPV6
Returns
TRUE on success, FALSE on error

Definition at line 2885 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, addr, FreeNoLog, get_in_addr(), ip_version, LOG_ERR, Malloc, MAX_LIST_ITEMS, n_log, neterrno, netstrerror(), netw, netw_close(), netw_init_wsa(), netw_new(), NETW_RUN, NETW_SERVER, netw_set(), netw_setsockopt(), NETW_THR_ENGINE_STOPPED, NETWORK_IPV4, NETWORK_IPV6, and port.

Referenced by bind_free(), main(), main(), n_mock_server_start(), and run_server().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_new_pool()

NETWORK_POOL * netw_new_pool ( size_t  nb_min_element)

init pools

init pools

Parameters
nb_min_elementsize of internal hash table for network pool
Returns
a new NETWORK_POOL or NULL

Definition at line 4983 of file n_network.c.

References __n_assert, Free, init_lock, Malloc, new_ht(), NETWORK_POOL::pool, and NETWORK_POOL::rwlock.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_parse_post_data()

HASH_TABLE * netw_parse_post_data ( const char *  post_data)

parse POST data into hash table

parse POST data into hash table

Parameters
post_datathe post data to parse
Returns
An allocated HASH_TABLE with post data as keys/values, or NULL

Definition at line 5540 of file n_network.c.

References __n_assert, ht_put_string(), key, netw_urldecode(), and new_ht().

Referenced by handle_request().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_pool_add()

int netw_pool_add ( NETWORK_POOL netw_pool,
NETWORK netw 
)

add network to pool

add network to pool

Parameters
netw_pooltargeted network pool
netwnetwork to add
Returns
TRUE or FALSE

Definition at line 5034 of file n_network.c.

References __n_assert, _netw_capture_error(), _nstr, free_nstr, ht_get_ptr(), ht_put_ptr(), key, NETWORK::link, list_push(), LOG_DEBUG, LOG_ERR, n_log, netw, netw_pool_netw_close(), nstrprintf, NETWORK_POOL::pool, NETWORK::pools, NETWORK_POOL::rwlock, N_SOCKET::sock, unlock, and write_lock.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_pool_broadcast()

int netw_pool_broadcast ( NETWORK_POOL netw_pool,
const NETWORK from,
N_STR net_msg 
)

broadcast message to pool

broadcast message to pool

Parameters
netw_pooltargeted network pool
fromsource network
net_msgmesage to broadcast
Returns
TRUE or FALSE

Definition at line 5117 of file n_network.c.

References __n_assert, hash_val, ht_foreach, NETWORK::link, netw, netw_add_msg(), nstrdup(), NETWORK_POOL::pool, read_lock, NETWORK_POOL::rwlock, N_SOCKET::sock, and unlock.

Referenced by on_send_click(), and poll_network_msgs().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_pool_nbclients()

size_t netw_pool_nbclients ( NETWORK_POOL netw_pool)

get nb clients

get nb clients

Parameters
netw_pooltargeted network pool
Returns
0 or the number of networks in netw_pool

Definition at line 5141 of file n_network.c.

References __n_assert, HASH_TABLE::nb_keys, NETWORK_POOL::pool, read_lock, NETWORK_POOL::rwlock, and unlock.

Referenced by main().

+ Here is the caller graph for this function:

◆ netw_pool_netw_close()

void netw_pool_netw_close ( void *  netw_ptr)

close pool

close pool

Parameters
netw_ptrNETWORK *network pointer

Definition at line 5021 of file n_network.c.

References __n_assert, NETWORK::link, LOG_DEBUG, n_log, netw, and N_SOCKET::sock.

Referenced by netw_pool_add().

+ Here is the caller graph for this function:

◆ netw_pool_remove()

int netw_pool_remove ( NETWORK_POOL netw_pool,
NETWORK netw 
)

remove network from pool

remove network from pool

Parameters
netw_pooltargeted network pool
netwnetwork to remove
Returns
TRUE or FALSE

Definition at line 5080 of file n_network.c.

References __n_assert, _netw_capture_error(), _nstr, free_nstr, ht_remove(), key, NETWORK::link, list_search(), LOG_DEBUG, LOG_ERR, n_log, netw, nstrprintf, NETWORK_POOL::pool, NETWORK::pools, remove_list_node, NETWORK_POOL::rwlock, N_SOCKET::sock, unlock, and write_lock.

Referenced by main(), and netw_close().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_recv_func()

void * netw_recv_func ( void *  NET)

Thread Receiving management function.

Thread Receiving management function.

Parameters
NETthe NETWORK connection to use
Returns
NULL ;

Definition at line 3964 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, N_STR::data, DONE, NETWORK::eventbolt, free_nstr, free_nstr_ptr(), N_SOCKET::ip, N_STR::length, NETWORK::link, list_push(), LOG_DEBUG, LOG_ERR, Malloc, n_log, NETWORK::nb_running_threads, netw, netw_atomic_read_state, NETW_COMPRESSED_LZ4, NETW_COMPRESSED_ZLIB, NETW_ERROR, NETW_EXIT_ASKED, NETW_EXITED, netw_set(), NETW_SOCKET_DISCONNECTED, NETW_THR_EXIT_ERROR, NETW_THR_EXIT_OK, NETWORK::recv_buf, NETWORK::recv_data, NETWORK::recvbolt, N_SOCKET::sock, unzip4_nstr(), unzip_nstr(), and N_STR::written.

Referenced by netw_start_thr_engine().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_send_func()

◆ netw_send_ident()

int netw_send_ident ( NETWORK netw,
int  type,
int  id,
N_STR name,
N_STR passwd 
)

send ident message

send ident message

Parameters
netwThe aimed NETWORK where we want to add something to send
typetype of identification ( NETW_IDENT_REQUEST , NETW_IDENT_NEW )
idThe ID of the sending client
nameUsername
passwdPassword
Returns
TRUE or FALSE

Definition at line 5192 of file n_network.c.

References __n_assert, netmsg_make_ident(), netw, and netw_add_msg().

+ Here is the call graph for this function:

◆ netw_send_ping()

int netw_send_ping ( NETWORK netw,
int  type,
int  id_from,
int  id_to,
int  time 
)

send ping message

send ping message

Parameters
netwThe aimed NETWORK where we want to add something to send
id_fromIdentifiant of the sender
id_toIdentifiant of the destination, -1 if the serveur itslef is targetted
timeThe time it was when the ping was sended
typeNETW_PING_REQUEST or NETW_PING_REPLY
Returns
TRUE or FALSE

Definition at line 5173 of file n_network.c.

References __n_assert, netmsg_make_ping(), netw, and netw_add_msg().

+ Here is the call graph for this function:

◆ netw_send_position()

int netw_send_position ( NETWORK netw,
int  id,
double  X,
double  Y,
double  vx,
double  vy,
double  acc_x,
double  acc_y,
int  time_stamp 
)

send position message

send position message

Parameters
netwThe aimed NETWORK where we want to add something to send
idThe ID of the sending client
XX position inside a big grid
YY position inside a big grid
vxX speed
vyY speed
acc_xY acceleration
acc_yX acceleration
time_stampCurrent Time when sending (for some delta we would want to compute )
Returns
TRUE or FALSE

Definition at line 5216 of file n_network.c.

References __n_assert, netmsg_make_position_msg(), netw, and netw_add_msg().

+ Here is the call graph for this function:

◆ netw_send_quit()

int netw_send_quit ( NETWORK netw)

send quit message

send quit message

Parameters
netwThe aimed NETWORK
Returns
TRUE or FALSE

Definition at line 5274 of file n_network.c.

References __n_assert, netmsg_make_quit_msg(), netw, and netw_add_msg().

+ Here is the call graph for this function:

◆ netw_send_string_to()

int netw_send_string_to ( NETWORK netw,
int  id_to,
N_STR name,
N_STR chan,
N_STR txt,
int  color 
)

send string to a specific target

send string to a specific target

Parameters
netwThe aimed NETWORK where we want to add something to send
id_toThe ID of the targetted client
nameSender Name
chanchannel to use
txtSender text
colorSender text color
Returns
TRUE or FALSE

Definition at line 5238 of file n_network.c.

References __n_assert, netmsg_make_string_msg(), netw, netw_add_msg(), and NETWORK::user_id.

+ Here is the call graph for this function:

◆ netw_send_string_to_all()

int netw_send_string_to_all ( NETWORK netw,
N_STR name,
N_STR chan,
N_STR txt,
int  color 
)

send string to all targets

send string to all targets

Parameters
netwThe aimed NETWORK where we want to add something to send
nameName of user
chanTarget Channel, if any. Pass "ALL" to target the default channel
txtThe text to send
colorThe color of the text
Returns
TRUE or FALSE;

Definition at line 5258 of file n_network.c.

References __n_assert, netmsg_make_string_msg(), netw, netw_add_msg(), and NETWORK::user_id.

+ Here is the call graph for this function:

◆ netw_set()

int netw_set ( NETWORK netw,
int  flag 
)

Set flags on network.

Set flags on network.

Parameters
netwThe NETWORK *connection to modify
flagNETW_EMPTY_SENDBUF, NETW_EMPTY_RECVBUF, NETW_RUN , NETW_EXIT_ASKED , NETW_EXITED
Returns
TRUE or FALSE

Definition at line 2554 of file n_network.c.

References __n_assert, NETWORK::eventbolt, list_destroy(), list_empty(), NETWORK::mode, netw, netw_atomic_write_state, NETW_CLIENT, NETW_DESTROY_RECVBUF, NETW_DESTROY_SENDBUF, NETW_EMPTY_RECVBUF, NETW_EMPTY_SENDBUF, NETW_ERROR, NETW_EXIT_ASKED, NETW_EXITED, NETW_RUN, NETW_SERVER, NETW_THR_ENGINE_STARTED, NETW_THR_ENGINE_STOPPED, NETWORK::recv_buf, NETWORK::recvbolt, NETWORK::send_blocker, NETWORK::send_buf, NETWORK::sendbolt, and NETWORK::threaded_engine_status.

Referenced by netw_accept_from_ex(), netw_adopt_client_fd(), netw_bind_udp(), netw_close(), netw_connect_ex_to(), netw_connect_udp(), netw_make_listening(), netw_recv_func(), netw_send_func(), and netw_stop_thr_engine().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_set_blocking()

int netw_set_blocking ( NETWORK netw,
unsigned long int  is_blocking 
)

set blocking mode

set blocking mode

Parameters
netwThe network to configure
is_blocking0 NON BLOCk , 1 BLOCK
Returns
TRUE or FALSE

Definition at line 909 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, FreeNoLog, N_SOCKET::is_blocking, NETWORK::link, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, netw_close(), and N_SOCKET::sock.

Referenced by _netw_timed_connect(), main(), and netw_accept_from_ex().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_set_compression_mode()

int netw_set_compression_mode ( NETWORK netw,
int  mode 
)

Pick send-side compression algorithm for this NETWORK: NETW_COMPRESS_NONE, _ZLIB, _LZ4.

Independent of the inbound decode path, which always honours whichever flag the sender set.

Pick send-side compression algorithm for this NETWORK: NETW_COMPRESS_NONE, _ZLIB, _LZ4.

Parameters
netwThe network to configure (must be non-NULL).
modeOne of NETW_COMPRESS_NONE / NETW_COMPRESS_ZLIB / NETW_COMPRESS_LZ4. Invalid values are rejected.
Returns
TRUE on success, FALSE on a NULL netw or unknown mode.

Affects outbound packets only. The recv path honours whichever NETW_COMPRESSED_* flag the sender set, so two peers running different modes still interoperate.

Definition at line 891 of file n_network.c.

References __n_assert, NETWORK::compress_mode, LOG_ERR, mode, n_log, netw, NETW_COMPRESS_LZ4, NETW_COMPRESS_NONE, and NETW_COMPRESS_ZLIB.

◆ netw_set_connect_abort_cb()

void netw_set_connect_abort_cb ( int(*)(void *ctx)  cb,
void *  ctx 
)

register a process-wide callback polled during connect; non-zero aborts the in-progress connect (NULL removes)

register a process-wide callback polled during connect; non-zero aborts the in-progress connect (NULL removes)

When set, netw_connect_ex_to (and every _to / SSL connect variant built on it) wakes every NETW_CONNECT_ABORT_POLL_MS during the connect wait and calls cb; if it returns non-zero the connect is abandoned at once (the connect call returns FALSE) instead of blocking until connect_timeout_ms. This lets an application interrupt a connect to an unresponsive host (a dropped SYN) the way shutdown() already interrupts a blocking read on a connected socket. The callback must be quick and non-blocking. Pass cb = NULL to remove it. The pointer is a single process-global; set it once at startup before concurrent connects (it is read without a lock).

Parameters
cbCallback returning non-zero to abort the in-progress connect, or NULL.
ctxOpaque pointer handed back to cb on each poll.

Definition at line 2172 of file n_network.c.

References _netw_connect_abort_cb, and _netw_connect_abort_ctx.

Referenced by main().

+ Here is the caller graph for this function:

◆ netw_set_crypto()

int netw_set_crypto ( NETWORK netw,
char *  key,
char *  certificate 
)

set SSL

set SSL

Parameters
netwthe NETWORK instance to configure
keypath to the key file
certificatepath to the certificate file
Returns
TRUE of FALSE

Definition at line 1385 of file n_network.c.

References __n_assert, NETWORK::certificate, NETWORK::crypto_algo, NETWORK::ctx, FreeNoLog, key, NETWORK::key, NETWORK::link, LOG_ERR, NETWORK::method, n_log, netw, NETW_ENCRYPT_OPENSSL, netw_init_openssl(), netw_ssl_print_errors(), NETWORK::recv_data, NETWORK::recv_data_once, recv_ssl_data(), recv_ssl_data_once(), NETWORK::send_data, NETWORK::send_data_once, send_ssl_data(), send_ssl_data_once(), and N_SOCKET::sock.

Referenced by main(), netw_connect_ex_to(), and netw_set_crypto_chain().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_set_crypto_chain()

int netw_set_crypto_chain ( NETWORK netw,
char *  key,
char *  certificate,
char *  ca_file 
)

set SSL certificate chain from PEM file

set SSL certificate chain from PEM file

Parameters
netwthe NETWORK to configure
keypath to the key file
certificatepath to the certificate file
ca_filepath to the CA certificate file for chain verification
Returns
TRUE or FALSE

Definition at line 1580 of file n_network.c.

References __n_assert, ca_file, NETWORK::ctx, key, NETWORK::link, LOG_ERR, n_log, netw, netw_set_crypto(), netw_ssl_print_errors(), and N_SOCKET::sock.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_set_crypto_chain_pem()

int netw_set_crypto_chain_pem ( NETWORK netw,
const char *  key_pem,
const char *  cert_pem,
const char *  ca_pem 
)

set SSL certificate chain from PEM strings in memory

set SSL certificate chain from PEM strings in memory

Parameters
netwthe NETWORK to configure
key_pemPEM-formatted private key string
cert_pemPEM-formatted certificate string
ca_pemPEM-formatted CA certificate string for verification
Returns
TRUE or FALSE

Definition at line 1615 of file n_network.c.

References __n_assert, NETWORK::ctx, LOG_ERR, n_log, netw, and netw_set_crypto_pem().

+ Here is the call graph for this function:

◆ netw_set_crypto_pem()

int netw_set_crypto_pem ( NETWORK netw,
const char *  key_pem,
const char *  cert_pem 
)

set SSL from PEM strings in memory

set SSL from PEM strings in memory

Parameters
netwthe NETWORK to configure
key_pemPEM-formatted private key string
cert_pemPEM-formatted certificate string
Returns
TRUE or FALSE

Definition at line 1485 of file n_network.c.

References __n_assert, cert, NETWORK::crypto_algo, NETWORK::ctx, NETWORK::link, LOG_ERR, NETWORK::method, n_log, netw, NETW_ENCRYPT_OPENSSL, netw_init_openssl(), netw_ssl_print_errors(), NETWORK::recv_data, NETWORK::recv_data_once, recv_ssl_data(), recv_ssl_data_once(), NETWORK::send_data, NETWORK::send_data_once, send_ssl_data(), send_ssl_data_once(), and N_SOCKET::sock.

Referenced by netw_set_crypto_chain_pem().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_set_crypto_pem_ctx()

int netw_set_crypto_pem_ctx ( NETWORK netw,
const N_STR key_pem,
const N_STR cert_pem 
)

install an in-memory cert/key on THIS connection's SSL only (per-connection, unlike the context-wide netw_set_crypto_pem)

install an in-memory cert/key on THIS connection's SSL only (per-connection, unlike the context-wide netw_set_crypto_pem)

Parameters
netwthe accepted NETWORK (must already hold an SSL handle)
key_pemthe private key PEM
cert_pemthe certificate PEM
Returns
TRUE or FALSE

Definition at line 1729 of file n_network.c.

References __n_assert, _ssl_use_pem(), N_STR::data, NETWORK::link, netw, netw_ssl_print_errors(), N_SOCKET::sock, and NETWORK::ssl.

+ Here is the call graph for this function:

◆ netw_set_user_id()

int netw_set_user_id ( NETWORK netw,
int  id 
)

set user id on a netw

set user id on a netw

Parameters
netwtargeted network
idid we want to associated with
Returns
TRUE or FALSE

Definition at line 5158 of file n_network.c.

References __n_assert, netw, and NETWORK::user_id.

◆ netw_setsockopt()

int netw_setsockopt ( NETWORK netw,
int  optname,
int  value 
)

Set common socket options (disable naggle, send/recv buf, reuse addr)

Set common socket options (disable naggle, send/recv buf, reuse addr)

Parameters
netwThe socket to configure
optnameNETWORK_DEPLETE_SOCKET_TIMEOUT,NETWORK_DEPLETE_QUEUES_TIMEOUT,NETWORK_WAIT_CLOSE_TIMEOUT,NETWORK_CONSECUTIVE_SEND_WAIT ,SO_REUSEADDR,SO_REUSEPORT,SO_KEEPALIVE,TCP_NODELAY,SO_SNDBUF,SO_RCVBUF,SO_LINGER,SO_RCVTIMEO,SO_SNDTIMEO,TCP_USER_TIMEOUT. Please refer to man setsockopt for details
valueThe value of the socket parameter
Warning
Beware of TCP_USER_TIMEOUT, it's causing hangs on some systems. It should not be used lightly and tested. It looks like it's messing up with TCP_KEEPALIVE
Returns
TRUE or FALSE

Definition at line 967 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, NETWORK::deplete_queues_timeout, NETWORK::deplete_socket_timeout, FreeNoLog, NETWORK::link, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETWORK_CONSECUTIVE_SEND_WAIT, NETWORK_DEPLETE_QUEUES_TIMEOUT, NETWORK_DEPLETE_SOCKET_TIMEOUT, NETWORK_WAIT_CLOSE_TIMEOUT, NETWORK::send_queue_consecutive_wait, NETWORK::so_keepalive, NETWORK::so_linger, NETWORK::so_rcvbuf, NETWORK::so_rcvtimeo, NETWORK::so_reuseaddr, NETWORK::so_sndbuf, NETWORK::so_sndtimeo, N_SOCKET::sock, NETWORK::tcpnodelay, and NETWORK::wait_close_timeout.

Referenced by main(), netw_accept_from_ex(), netw_bind_udp(), and netw_make_listening().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_ssl_connect()

int netw_ssl_connect ( NETWORK **  netw,
char *  host,
char *  port,
int  ip_version,
char *  ssl_key_file,
char *  ssl_cert_file 
)

connect ssl helper

connect ssl helper

Parameters
netwa NETWORK *object
hostHost or IP to connect to
portPort to use to connect
ip_versionNETWORK_IPALL for both ipv4 and ipv6 , NETWORK_IPV4 or NETWORK_IPV6
ssl_key_fileNULL or the path to the SSL key file to use. If set, a ssl_cert_file must also be provided
ssl_cert_fileNULL or the path to the SSL certificate file to use. If set, a ssl_key_file must also be provided
Returns
TRUE or FALSE

Definition at line 2389 of file n_network.c.

References _str, ip_version, LOG_INFO, MAX_LIST_ITEMS, n_log, netw, netw_connect_ex(), and port.

+ Here is the call graph for this function:

◆ netw_ssl_connect_client()

int netw_ssl_connect_client ( NETWORK **  netw,
char *  host,
char *  port,
int  ip_version 
)

connect as SSL client without client certificate (TCP + SSL_CTX, no handshake yet)

connect as SSL client without client certificate (TCP + SSL_CTX, no handshake yet)

Equivalent to netw_ssl_connect_client_to with no connect timeout (the OS decides when the TCP connect gives up). See netw_ssl_connect_client_to.

Parameters
netwoutput: new NETWORK (must be NULL on entry)
hosthostname to connect to
portport string
ip_versionNETWORK_IPALL, NETWORK_IPV4, or NETWORK_IPV6
Returns
TRUE or FALSE

Definition at line 2481 of file n_network.c.

References ip_version, netw, netw_ssl_connect_client_to(), and port.

Referenced by n_sse_connect(), and n_ws_connect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_ssl_connect_client_to()

int netw_ssl_connect_client_to ( NETWORK **  netw,
char *  host,
char *  port,
int  ip_version,
int  connect_timeout_ms 
)

like netw_ssl_connect_client but bounds the TCP connect by connect_timeout_ms (0 = OS default)

like netw_ssl_connect_client but bounds the TCP connect by connect_timeout_ms (0 = OS default)

Performs TCP connect, creates an SSL_CTX with TLS_client_method and loads default system verify paths. Does NOT perform the SSL handshake. Call netw_ssl_set_ca / netw_ssl_set_verify to configure verification, then netw_ssl_do_handshake to complete the connection.

Parameters
netwoutput: new NETWORK (must be NULL on entry)
hosthostname to connect to
portport string
ip_versionNETWORK_IPALL, NETWORK_IPV4, or NETWORK_IPV6
connect_timeout_msconnect timeout in milliseconds, 0 = OS default
Returns
TRUE or FALSE

Definition at line 2409 of file n_network.c.

References __n_assert, ip_version, MAX_LIST_ITEMS, netw, netw_close(), netw_connect_ex_to(), netw_ssl_start_client(), and port.

Referenced by main(), and netw_ssl_connect_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_ssl_do_handshake()

int netw_ssl_do_handshake ( NETWORK netw,
const char *  sni_hostname 
)

complete the SSL handshake on a NETWORK whose ctx was already created

complete the SSL handshake on a NETWORK whose ctx was already created

The NETWORK must have a valid SSL_CTX (from netw_ssl_connect_client or netw_set_crypto). Optionally sets the SNI hostname for virtual hosting support.

Parameters
netwconnected NETWORK with ctx set
sni_hostnamehostname for SNI extension, or NULL to skip
Returns
TRUE or FALSE

Definition at line 2496 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, NETWORK::ctx, N_SOCKET::ip, NETWORK::link, LOG_DEBUG, LOG_ERR, n_log, netw, netw_ssl_print_errors(), N_SOCKET::port, N_SOCKET::sock, and NETWORK::ssl.

Referenced by main(), n_sse_connect(), and n_ws_connect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_ssl_get_sni()

const char * netw_ssl_get_sni ( NETWORK netw)

get the SNI server_name the peer requested in its ClientHello, or NULL

get the SNI server_name the peer requested in its ClientHello, or NULL

Parameters
netwthe accepted NETWORK
Returns
the requested host name, or NULL if none / not a TLS connection

Definition at line 1715 of file n_network.c.

References __n_assert, netw, and NETWORK::ssl.

◆ netw_ssl_get_verify_result()

int netw_ssl_get_verify_result ( NETWORK netw,
const char *  expected_host,
char *  errbuf,
size_t  errsz 
)

evaluate the peer certificate (chain trust + host match) against the system trust store, independently of the connection verify mode

evaluate the peer certificate (chain trust + host match) against the system trust store, independently of the connection verify mode

Verifies the peer certificate chain against the system default trust store and checks that expected_host matches the certificate, independently of the verify mode the handshake ran with. This lets a connection complete with verification disabled (for example an intercepting proxy that must see the traffic regardless) while still reporting whether the real peer certificate would have been trusted.

Parameters
netwa NETWORK with a completed client handshake (netw->ssl set)
expected_hosthostname to match against the certificate, or NULL to skip
errbufoptional buffer that receives a short reason on failure
errszsize of errbuf
Returns
TRUE when the chain is trusted and the host matches, FALSE otherwise

Definition at line 1921 of file n_network.c.

References __n_assert, cert, netw, and NETWORK::ssl.

Referenced by main().

+ Here is the caller graph for this function:

◆ netw_ssl_server_handshake()

int netw_ssl_server_handshake ( NETWORK netw,
netw_sni_pick_cb  pick,
void *  user_data 
)

upgrade an already-accepted plaintext connection to a TLS server, selecting the cert per client SNI via pick() during the handshake (for proxy CONNECT)

upgrade an already-accepted plaintext connection to a TLS server, selecting the cert per client SNI via pick() during the handshake (for proxy CONNECT)

Sets up a per-connection SSL server context with no default certificate plus an OpenSSL servername callback, then performs SSL_accept on the socket. The callback runs synchronously inside SSL_accept and asks pick() for a certificate matching the requested host, so the handshake completes with a host-specific leaf. Use this when the socket was accepted in the clear first (for example after a proxy CONNECT) and must then become a TLS server.

Parameters
netwan already-accepted plaintext NETWORK
pickcallback that supplies a cert/key for a given SNI host
user_dataopaque pointer passed to pick
Returns
TRUE or FALSE

Definition at line 1790 of file n_network.c.

References __n_assert, _netw_sni_servername_cb(), NETWORK::crypto_algo, NETWORK::ctx, NETWORK::link, NETWORK::method, netw, NETW_ENCRYPT_OPENSSL, netw_init_openssl(), netw_ssl_print_errors(), NETW_SNI_ARG::pick, NETWORK::recv_data, NETWORK::recv_data_once, recv_ssl_data(), recv_ssl_data_once(), NETWORK::send_data, NETWORK::send_data_once, send_ssl_data(), send_ssl_data_once(), N_SOCKET::sock, NETWORK::ssl, and NETW_SNI_ARG::user_data.

Referenced by netw_accept_ssl_with_sni_cb().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_ssl_set_ca()

int netw_ssl_set_ca ( NETWORK netw,
const char *  ca_file,
const char *  ca_path 
)

set custom CA verify path or file

set custom CA verify path or file

Parameters
netwthe NETWORK to configure
ca_filepath to a CA certificate file, or NULL
ca_pathpath to a directory of CA certificates, or NULL
Returns
TRUE or FALSE

Definition at line 1867 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, ca_file, NETWORK::ctx, NETWORK::link, LOG_ERR, n_log, netw, netw_ssl_print_errors(), and N_SOCKET::sock.

+ Here is the call graph for this function:

◆ netw_ssl_set_client_cert()

int netw_ssl_set_client_cert ( NETWORK netw,
const char *  cert_file,
const char *  key_file 
)

load client certificate and private key for mTLS

load client certificate and private key for mTLS

Parameters
netwthe NETWORK to configure
cert_filepath to the client certificate file (PEM)
key_filepath to the client private key file (PEM), or NULL to use cert_file
Returns
TRUE or FALSE

Definition at line 1988 of file n_network.c.

References __n_assert, _netw_capture_error(), NETWORK::ctx, NETWORK::link, LOG_ERR, n_log, netw, netw_ssl_print_errors(), and N_SOCKET::sock.

+ Here is the call graph for this function:

◆ netw_ssl_set_verify()

int netw_ssl_set_verify ( NETWORK netw,
int  enable 
)

enable or disable peer certificate verification

enable or disable peer certificate verification

Parameters
netwthe NETWORK to configure
enable1 to enable verification, 0 to disable
Returns
TRUE or FALSE

Definition at line 1892 of file n_network.c.

References __n_assert, NETWORK::ctx, LOG_ERR, n_log, and netw.

Referenced by main(), and main().

+ Here is the caller graph for this function:

◆ netw_ssl_start_client()

int netw_ssl_start_client ( NETWORK netw)

set up a client SSL_CTX on an already-connected NETWORK (no handshake yet)

set up a client SSL_CTX on an already-connected NETWORK (no handshake yet)

Performs the SSL-context half of netw_ssl_connect_client_to on a NETWORK whose TCP connection is already established (for example one returned by netw_adopt_client_fd after an HTTP CONNECT proxy tunnel): it creates an SSL_CTX with TLS_client_method, loads the default system verify paths, and switches the NETWORK send/recv vtable to the SSL variants. It does NOT perform the handshake. Call netw_ssl_set_ca / netw_ssl_set_verify to configure verification, then netw_ssl_do_handshake to complete the connection. On failure the NETWORK is left untouched (the caller owns it and is responsible for netw_close).

Parameters
netwconnected NETWORK to promote to SSL. Must not be NULL.
Returns
TRUE or FALSE

Definition at line 2438 of file n_network.c.

References __n_assert, NETWORK::crypto_algo, NETWORK::ctx, NETWORK::link, NETWORK::method, netw, NETW_ENCRYPT_OPENSSL, netw_init_openssl(), netw_ssl_print_errors(), NETWORK::recv_data, NETWORK::recv_data_once, recv_ssl_data(), recv_ssl_data_once(), NETWORK::send_data, NETWORK::send_data_once, send_ssl_data(), send_ssl_data_once(), and N_SOCKET::sock.

Referenced by netw_ssl_connect_client_to().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_start_thr_engine()

int netw_start_thr_engine ( NETWORK netw)

Create the sending and receiving thread of a NETWORK.

Create the sending and receiving thread of a NETWORK.

Create a sending & receiving thread.

Parameters
netwThe aimed NETWORK connection to start receiving data
Returns
TRUE on success FALSE on failure

Definition at line 3740 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, NETWORK::eventbolt, N_SOCKET::ip, NETWORK::link, LOG_ERR, n_log, NETWORK::nb_running_threads, netw, netw_recv_func(), netw_send_func(), NETW_THR_ENGINE_STARTED, NETWORK::recv_thr, NETWORK::send_thr, and NETWORK::threaded_engine_status.

Referenced by client_worker_echo(), handle_client(), main(), manage_client(), and run_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_stop_thr_engine()

int netw_stop_thr_engine ( NETWORK netw)

Stop a NETWORK connection sending and receiving thread.

Stop a NETWORK connection sending and receiving thread.

Parameters
netwThe aimed NETWORK conection to stop
Returns
TRUE on success FALSE on failure

Definition at line 4130 of file n_network.c.

References __n_assert, _netw_capture_error(), NETWORK::link, LOG_DEBUG, LOG_ERR, n_log, netw, NETW_EXIT_ASKED, NETW_EXITED, netw_get_state(), netw_set(), NETW_THR_ENGINE_STARTED, NETW_THR_ENGINE_STOPPED, NETWORK::recv_thr, NETWORK::send_blocker, NETWORK::send_thr, and N_SOCKET::sock.

Referenced by netw_close().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_udp_recvfrom()

ssize_t netw_udp_recvfrom ( NETWORK netw,
char *  buf,
uint32_t  n,
struct sockaddr *  src_addr,
socklen_t *  src_len 
)

UDP recvfrom with source address capture.

UDP recvfrom with source address capture.

Parameters
netwNETWORK to use for receiving
bufpointer to buffer
nmax number of bytes to receive
src_addrpointer to store source address (can be NULL)
src_lenpointer to length of src_addr (can be NULL)
Returns
NETW_SOCKET_ERROR on error, bytes received on success

Definition at line 3327 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, FreeNoLog, NETWORK::link, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_SOCKET_ERROR, and N_SOCKET::sock.

Referenced by main(), and run_server().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_udp_sendto()

ssize_t netw_udp_sendto ( NETWORK netw,
char *  buf,
uint32_t  n,
struct sockaddr *  dest_addr,
socklen_t  dest_len 
)

UDP sendto with explicit destination.

UDP sendto with explicit destination.

Parameters
netwNETWORK to use for sending
bufpointer to buffer
nnumber of bytes to send
dest_addrdestination sockaddr
dest_lenlength of dest_addr
Returns
NETW_SOCKET_ERROR on error, bytes sent on success

Definition at line 3295 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, FreeNoLog, NETWORK::link, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_SOCKET_ERROR, and N_SOCKET::sock.

Referenced by main(), and run_server().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_unload_openssl()

int netw_unload_openssl ( void  )

unload ssl helper

unload ssl helper

Initialize openssl

Returns
TRUE

Definition at line 1366 of file n_network.c.

References netw_kill_locks(), and OPENSSL_IS_INITIALIZED.

Referenced by main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ netw_urldecode()

char * netw_urldecode ( const char *  str)

URL-decode a string.

URL-decode a string.

Parameters
strinput string to decode
Returns
url decoded string

Definition at line 5503 of file n_network.c.

References __n_assert, Free, LOG_ERR, and n_log.

Referenced by netw_parse_post_data().

+ Here is the caller graph for this function:

◆ netw_urlencode()

char * netw_urlencode ( const char *  str,
size_t  len 
)

URL-encode a string.

URL-encode a string.

Parameters
strinput string
leninput string length
Returns
urlencoded char *string or NULL

Definition at line 5314 of file n_network.c.

References __n_assert, and netw_calculate_urlencoded_size().

+ Here is the call graph for this function:

◆ netw_wait_close()

int netw_wait_close ( NETWORK **  netw)

Closing for peer.

◆ netw_wait_close_timed()

int netw_wait_close_timed ( NETWORK **  netw,
size_t  timeout 
)

Closing for peer with timeout.

◆ netw_wait_msg()

N_STR * netw_wait_msg ( NETWORK netw,
unsigned int  refresh,
size_t  timeout 
)

Wait a message from aimed NETWORK.

Recheck each 'refresh' usec until 'timeout' usec

Recheck each usec until a valid

Parameters
netwThe link on which we wait a message
refreshThe time in usec between each check until there is a message
timeoutin usecs , maximum amount of time to wait before return. 0 to disable.
Returns
NULL or a filled N_STR

Definition at line 3688 of file n_network.c.

References __n_assert, _netw_capture_error(), NETWORK::link, LOG_DEBUG, LOG_ERR, N_ENUM_ENTRY, n_log, netw, NETW_ERROR, NETW_EXITED, netw_get_msg(), netw_get_state(), NETW_RUN, N_SOCKET::sock, and u_sleep().

Referenced by client_worker_echo(), handle_client(), main(), and run_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ntohst()

size_t ntohst ( size_t  value)

network to host size_t

Parameters
valuethe size_t value to convert to host order
Returns
host ordered value

Definition at line 160 of file n_network.c.

◆ recv_data()

ssize_t recv_data ( void *  netw,
char *  buf,
uint32_t  n 
)

Reading from a socket.

Reading from a socket.

Parameters
netwconnected NETWORK
bufpointer to buffer
nnumber of characters we want
Returns
NETW_SOCKET_ERROR on error, NETW_RECV_DISCONNECTED on disconnection, 'n' value on success

Definition at line 4231 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_CALL_RETRY, NETW_MAX_RETRIES, NETW_SOCKET_DISCONNECTED, and NETW_SOCKET_ERROR.

Referenced by netw_new().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ recv_data_once()

ssize_t recv_data_once ( void *  netw,
char *  buf,
uint32_t  n 
)

Single-attempt read (see NETWORK.recv_data_once contract)

Single-attempt read (see NETWORK.recv_data_once contract)

Parameters
netwthe NETWORK to use
bufpointer to buffer
nmax number of bytes to read (> 0)
Returns
> 0 bytes read, NETW_IO_WANT_READ when no data is available, NETW_SOCKET_DISCONNECTED on orderly EOF / reset, or NETW_SOCKET_ERROR

Definition at line 4354 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_IO_WANT_READ, NETW_SOCKET_DISCONNECTED, and NETW_SOCKET_ERROR.

Referenced by netw_new().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ recv_php()

ssize_t recv_php ( SOCKET  s,
int *  _code,
char **  buf 
)

receive from php

receive from php

Parameters
sconnected socket
_codepointer to store the code
bufpointer to buffer
Returns
-1 on error, size on success

Definition at line 4859 of file n_network.c.

References _str, Free, FreeNoLog, HEAD_CODE, HEAD_SIZE, LOG_ERR, Malloc, n_log, neterrno, and netstrerror().

+ Here is the call graph for this function:

◆ recv_ssl_data()

ssize_t recv_ssl_data ( void *  netw,
char *  buf,
uint32_t  n 
)

SSL Reading from a socket.

SSL Reading from a socket.

Parameters
netwconnected NETWORK
bufpointer to buffer
nnumber of characters we want
Returns
-1 on error, NETW_SOCKET_DISCONNECTED on disconnection n on success

Definition at line 4504 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_SOCKET_DISCONNECTED, NETW_SOCKET_ERROR, and u_sleep().

Referenced by main(), netw_accept_from_ex(), netw_set_crypto(), netw_set_crypto_pem(), netw_ssl_server_handshake(), netw_ssl_start_client(), and server_fn().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ recv_ssl_data_once()

ssize_t recv_ssl_data_once ( void *  netw,
char *  buf,
uint32_t  n 
)

SSL single-attempt read (see recv_data_once contract)

SSL single-attempt read (see recv_data_once contract)

The caller must loop until NETW_IO_WANT_READ, SSL_read drains its internal plaintext buffer before reporting WANT_READ, so loop-until-WANT_READ also covers the SSL_pending() case that otherwise stalls TLS over edge-triggered epoll.

Parameters
netwthe NETWORK to use (crypto must be active)
bufpointer to buffer
nmax number of bytes to read (> 0)
Returns
> 0 bytes read, NETW_IO_WANT_READ / NETW_IO_WANT_WRITE, NETW_SOCKET_DISCONNECTED, or NETW_SOCKET_ERROR

Definition at line 4694 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_IO_WANT_READ, NETW_IO_WANT_WRITE, NETW_SOCKET_DISCONNECTED, and NETW_SOCKET_ERROR.

Referenced by netw_accept_from_ex(), netw_set_crypto(), netw_set_crypto_pem(), netw_ssl_server_handshake(), and netw_ssl_start_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ recv_udp_data()

ssize_t recv_udp_data ( void *  netw,
char *  buf,
uint32_t  n 
)

UDP recv data from socket.

UDP recv data from socket.

Parameters
netwconnected NETWORK
bufpointer to buffer
nmax number of bytes to receive
Returns
NETW_SOCKET_ERROR on error, number of bytes received on success

Definition at line 3259 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, and NETW_SOCKET_ERROR.

Referenced by main(), netw_bind_udp(), netw_connect_udp(), and run_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ send_data()

ssize_t send_data ( void *  netw,
char *  buf,
uint32_t  n 
)

Writing to a socket.

Writing to a socket.

Parameters
netwconnected NETWORK
bufpointer to buffer
nnumber of characters we want to send
Returns
NETW_SOCKET_ERROR on error, NETW_SOCKET_DISCONNECTED on disconnection, 'n' value on success

Definition at line 4170 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_CALL_RETRY, NETW_MAX_RETRIES, NETW_SOCKET_DISCONNECTED, and NETW_SOCKET_ERROR.

Referenced by netw_new().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ send_data_once()

ssize_t send_data_once ( void *  netw,
char *  buf,
uint32_t  n 
)

Single-attempt write (see NETWORK.send_data_once contract)

Single-attempt write (see NETWORK.send_data_once contract)

One transport attempt, no loop-until-complete, no retry storm: partial writes are the caller's state machine to handle.

Parameters
netwthe NETWORK to use
bufpointer to buffer
nnumber of bytes to try to send (> 0)
Returns
> 0 bytes written, NETW_IO_WANT_WRITE when the socket is not writable, NETW_SOCKET_DISCONNECTED, or NETW_SOCKET_ERROR

Definition at line 4298 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_IO_WANT_WRITE, NETW_SOCKET_DISCONNECTED, and NETW_SOCKET_ERROR.

Referenced by netw_new().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ send_php()

ssize_t send_php ( SOCKET  s,
int  _code,
char *  buf,
int  n 
)

sending to php

sending to php

Parameters
sconnected socket
bufpointer to buffer
nnumber of characters we want to send
_codeCode for php decoding rule
Returns
-1 on error, n on success

Definition at line 4777 of file n_network.c.

References _str, FreeNoLog, HEAD_CODE, HEAD_SIZE, LOG_ERR, n_log, neterrno, and netstrerror().

+ Here is the call graph for this function:

◆ send_ssl_data()

ssize_t send_ssl_data ( void *  netw,
char *  buf,
uint32_t  n 
)

SSL Writing to a socket.

SSL Writing to a socket.

Parameters
netwconnected NETWORK in SSL mode
bufpointer to buffer
nnumber of characters we want to send
Returns
-1 on error, NETW_SOCKET_DISCONNECTED on disconnection, n on success

Definition at line 4409 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_SOCKET_DISCONNECTED, NETW_SOCKET_ERROR, and u_sleep().

Referenced by handle_request(), main(), netw_accept_from_ex(), netw_set_crypto(), netw_set_crypto_pem(), netw_ssl_server_handshake(), netw_ssl_start_client(), and server_fn().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ send_ssl_data_once()

ssize_t send_ssl_data_once ( void *  netw,
char *  buf,
uint32_t  n 
)

SSL single-attempt write (see send_data_once contract)

SSL single-attempt write (see send_data_once contract)

One SSL_write attempt; WANT_READ/WANT_WRITE are surfaced to the caller's event loop instead of being spun on. Requires SSL_MODE_ENABLE_PARTIAL_WRITE (set at SSL_CTX creation) so a short write can be resumed from the caller's buffer + offset. Note: a TLS send can return NETW_IO_WANT_READ mid-renegotiation, the caller must retry after the next READABLE event.

Parameters
netwthe NETWORK to use (crypto must be active)
bufpointer to buffer
nnumber of bytes to try to send (> 0)
Returns
> 0 bytes written, NETW_IO_WANT_READ / NETW_IO_WANT_WRITE, NETW_SOCKET_DISCONNECTED, or NETW_SOCKET_ERROR

Definition at line 4620 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_IO_WANT_READ, NETW_IO_WANT_WRITE, NETW_SOCKET_DISCONNECTED, and NETW_SOCKET_ERROR.

Referenced by netw_accept_from_ex(), netw_set_crypto(), netw_set_crypto_pem(), netw_ssl_server_handshake(), and netw_ssl_start_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ send_udp_data()

ssize_t send_udp_data ( void *  netw,
char *  buf,
uint32_t  n 
)

UDP send data to connected peer or specified addr.

UDP send data to connected peer or specified addr.

Parameters
netwconnected NETWORK
bufpointer to buffer
nnumber of bytes to send
Returns
NETW_SOCKET_ERROR on error, n on success

Definition at line 3218 of file n_network.c.

References __n_assert, _netw_capture_error(), _str, endif, FreeNoLog, LOG_DEBUG, LOG_ERR, n_log, neterrno, netstrerror(), netw, NETW_SOCKET_DISCONNECTED, and NETW_SOCKET_ERROR.

Referenced by main(), netw_bind_udp(), netw_connect_udp(), and run_client().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: