Files | |
| file | nussl_session.c |
| nussl session handling | |
| file | nussl_socket.c |
| Socket and I/O handling functions. | |
Data Structures | |
| struct | iofns |
| struct | nussl_socket_s |
| struct | nussl_sock_addr_s |
Defines | |
| #define | NUSSL_INET_ADDR_DEFINED |
| #define | nussl_close(s) close(s) |
| #define | nussl_errno errno |
| #define | ECONNABORTED ECONNRESET |
| #define | ENOTCONN ECONNRESET |
| #define | NUSSL_ISRESET(e) ((e) == ECONNRESET || (e) == ECONNABORTED || (e) == ENOTCONN) |
| #define | NUSSL_ISCLOSED(e) ((e) == EPIPE) |
| #define | NUSSL_ISINTR(e) ((e) == EINTR) |
| #define | NUSSL_ISINPROGRESS(e) ((e) == EINPROGRESS) |
| #define | set_error(s, str) nussl_strnzcpy((s)->error, (str), sizeof (s)->error) |
| #define | set_strerror(s, e) nussl_strerror((e), (s)->error, sizeof (s)->error) |
| #define | ipv6_disabled (0) |
| #define | SACAST(ty, ad) ((struct sockaddr_##ty *)(ad)) |
| #define | MAP_ERR(e) |
| #define | INADDR_NONE ((in_addr_t) -1) |
| #define | ia_family(a) AF_INET |
| #define | ia_proto(a) 0 |
Typedefs | |
| typedef in_addr | nussl_inet_addr |
Functions | |
| void | nussl_session_destroy (nussl_session *sess) |
| void | nussl_set_hostinfo (nussl_session *sess, const char *hostname, unsigned int port) |
| nussl_session * | nussl_session_create () |
| nussl_session * | nussl_session_create_with_fd (int server_fd, int verify) |
| nussl_session * | nussl_session_accept (nussl_session *srv_sess) |
| int | nussl_session_handshake (nussl_session *client_sess, nussl_session *srv_sess) |
| int | nussl_session_get_fd (nussl_session *sess) |
| int | nussl_session_set_dh_bits (nussl_session *sess, unsigned int dh_bits) |
| void | nussl_set_addrlist (nussl_session *sess, const nussl_inet_addr **addrs, size_t n) |
| void | nussl_set_error (nussl_session *sess, const char *format,...) |
| void | nussl_set_session_flag (nussl_session *sess, nussl_session_flag flag, int value) |
| int | nussl_get_session_flag (nussl_session *sess, nussl_session_flag flag) |
| void | nussl_set_read_timeout (nussl_session *sess, int timeout) |
| void | nussl_set_connect_timeout (nussl_session *sess, int timeout) |
| const char * | nussl_get_error (nussl_session *sess) |
| void | nussl_close_connection (nussl_session *sess) |
| void | nussl_ssl_disable_certificate_check (nussl_session *sess, int is_disabled) |
| int | nussl_ssl_trust_cert_file (nussl_session *sess, const char *cert_file) |
| void | nussl_ssl_cert_validity (const nussl_ssl_certificate *cert, char *from, char *until) |
| void | nussl__ssl_set_verify_err (nussl_session *sess, int failures) |
| int | nussl_write (nussl_session *session, char *buffer, size_t count) |
| ssize_t | nussl_read (nussl_session *session, char *buffer, size_t count) |
| int | nussl_ssl_set_keypair (nussl_session *session, const char *cert_file, const char *key_file) |
| int | nussl_ssl_set_pkcs12_keypair (nussl_session *session, const char *pkcs12_file, const char *password) |
| int | nussl_session_getpeer (nussl_session *sess, struct sockaddr *addr, socklen_t *addrlen) |
| int | nussl_init () |
| int | nussl_sock_init (void) |
| void | nussl_sock_exit (void) |
| static int | raw_poll (int fdno, int rdwr, int secs) |
| int | nussl_sock_block (nussl_socket *sock, int n) |
| ssize_t | nussl_sock_read (nussl_socket *sock, char *buffer, size_t buflen) |
| ssize_t | nussl_sock_peek (nussl_socket *sock, char *buffer, size_t buflen) |
| static int | readable_raw (nussl_socket *sock, int secs) |
| static ssize_t | read_raw (nussl_socket *sock, char *buffer, size_t len) |
| static ssize_t | write_raw (nussl_socket *sock, const char *data, size_t length) |
| int | nussl_sock_fullwrite (nussl_socket *sock, const char *data, size_t len) |
| ssize_t | nussl_sock_readline (nussl_socket *sock, char *buf, size_t buflen) |
| ssize_t | nussl_sock_fullread (nussl_socket *sock, char *buffer, size_t buflen) |
| nussl_sock_addr * | nussl_addr_resolve (const char *hostname, int flags) |
| int | nussl_addr_result (const nussl_sock_addr *addr) |
| const nussl_inet_addr * | nussl_addr_first (nussl_sock_addr *addr) |
| const nussl_inet_addr * | nussl_addr_next (nussl_sock_addr *addr) |
| char * | nussl_addr_error (const nussl_sock_addr *addr, char *buf, size_t bufsiz) |
| char * | nussl_iaddr_print (const nussl_inet_addr *ia, char *buf, size_t bufsiz) |
| int | nussl_iaddr_reverse (const nussl_inet_addr *ia, char *buf, size_t bufsiz) |
| void | nussl_addr_destroy (nussl_sock_addr *addr) |
| static int | timed_connect (nussl_socket *sock, int fd, const struct sockaddr *sa, size_t salen) |
| static int | connect_socket (nussl_socket *sock, int fd, const nussl_inet_addr *addr, unsigned int port) |
| nussl_socket * | nussl_sock_create (void) |
| nussl_socket * | nussl_sock_create_with_fd (int fd) |
| void | nussl_sock_prebind (nussl_socket *sock, const nussl_inet_addr *addr, unsigned int port) |
| static int | do_bind (int fd, int peer_family, const nussl_inet_addr *addr, unsigned int port) |
| int | nussl_sock_connect (nussl_socket *sock, const nussl_inet_addr *addr, unsigned int port) |
| nussl_inet_addr * | nussl_sock_peer (nussl_socket *sock, unsigned int *port) |
| nussl_inet_addr * | nussl_iaddr_make (nussl_iaddr_type type, const unsigned char *raw) |
| nussl_iaddr_type | nussl_iaddr_typeof (const nussl_inet_addr *ia) |
| int | nussl_iaddr_cmp (const nussl_inet_addr *i1, const nussl_inet_addr *i2) |
| void | nussl_iaddr_free (nussl_inet_addr *addr) |
| int | nussl_sock_accept (nussl_socket *sock, int listener) |
| int | nussl_sock_accept_full (nussl_socket *sock, int listener, struct sockaddr *addr, socklen_t *addrlen) |
| int | nussl_sock_fd (const nussl_socket *sock) |
| void | nussl_sock_read_timeout (nussl_socket *sock, int timeout) |
| void | nussl_sock_connect_timeout (nussl_socket *sock, int timeout) |
| int | nussl_sock_accept_ssl (nussl_socket *sock, nussl_ssl_context *ctx) |
| int | nussl_sock_connect_ssl (nussl_socket *sock, nussl_ssl_context *ctx, void *userdata) |
| nussl_ssl_socket | nussl__sock_sslsock (nussl_socket *sock) |
| char * | nussl_sock_cipher (nussl_socket *sock) |
| const char * | nussl_sock_error (const nussl_socket *sock) |
| int | nussl_sock_close (nussl_socket *sock) |
Variables | |
| static const nussl_inet_addr | dummy_laddr |
| static int | init_state = 0 |
| static struct iofns | iofns_raw = { read_raw, write_raw, readable_raw } |
| int | h_errno |
| #define ECONNABORTED ECONNRESET |
Definition at line 193 of file nussl_socket.c.
| #define ENOTCONN ECONNRESET |
Definition at line 196 of file nussl_socket.c.
| #define ia_family | ( | a | ) | AF_INET |
| #define ia_proto | ( | a | ) | 0 |
| #define INADDR_NONE ((in_addr_t) -1) |
| #define ipv6_disabled (0) |
| #define MAP_ERR | ( | e | ) |
Value:
(NUSSL_ISCLOSED(e) ? NUSSL_SOCK_CLOSED : \ (NUSSL_ISRESET(e) ? NUSSL_SOCK_RESET : NUSSL_SOCK_ERROR))
Definition at line 551 of file nussl_socket.c.
Referenced by write_raw().
| #define nussl_close | ( | s | ) | close(s) |
Definition at line 179 of file nussl_socket.c.
Referenced by nussl_sock_close(), and nussl_sock_connect().
| #define nussl_errno errno |
Definition at line 180 of file nussl_socket.c.
Referenced by nussl_sock_connect(), raw_poll(), read_raw(), readable_raw(), timed_connect(), and write_raw().
| #define NUSSL_INET_ADDR_DEFINED |
Definition at line 133 of file nussl_socket.c.
| #define NUSSL_ISCLOSED | ( | e | ) | ((e) == EPIPE) |
Definition at line 199 of file nussl_socket.c.
| #define NUSSL_ISINPROGRESS | ( | e | ) | ((e) == EINPROGRESS) |
| #define NUSSL_ISINTR | ( | e | ) | ((e) == EINTR) |
Definition at line 200 of file nussl_socket.c.
Referenced by raw_poll(), read_raw(), and write_raw().
| #define NUSSL_ISRESET | ( | e | ) | ((e) == ECONNRESET || (e) == ECONNABORTED || (e) == ENOTCONN) |
| #define SACAST | ( | ty, | |||
| ad | ) | ((struct sockaddr_##ty *)(ad)) |
Definition at line 444 of file nussl_socket.c.
Referenced by nussl_iaddr_cmp(), and nussl_iaddr_print().
| #define set_error | ( | s, | |||
| str | ) | nussl_strnzcpy((s)->error, (str), sizeof (s)->error) |
Definition at line 256 of file nussl_socket.c.
Referenced by nussl_sock_accept_ssl(), nussl_sock_connect(), nussl_sock_connect_ssl(), nussl_sock_readline(), read_raw(), readable_raw(), and timed_connect().
| #define set_strerror | ( | s, | |||
| e | ) | nussl_strerror((e), (s)->error, sizeof (s)->error) |
Definition at line 272 of file nussl_socket.c.
Referenced by connect_socket(), nussl_sock_connect(), nussl_sock_peer(), read_raw(), readable_raw(), timed_connect(), and write_raw().
| typedef struct in_addr nussl_inet_addr |
Definition at line 142 of file nussl_socket.c.
| static int connect_socket | ( | nussl_socket * | sock, | |
| int | fd, | |||
| const nussl_inet_addr * | addr, | |||
| unsigned int | port | |||
| ) | [static] |
Definition at line 1138 of file nussl_socket.c.
References NUSSL_SOCK_ERROR, set_strerror, and timed_connect().
Referenced by nussl_sock_connect().
Here is the call graph for this function:

| static int do_bind | ( | int | fd, | |
| int | peer_family, | |||
| const nussl_inet_addr * | addr, | |||
| unsigned int | port | |||
| ) | [static] |
Definition at line 1210 of file nussl_socket.c.
References dummy_laddr.
Referenced by nussl_sock_connect().
| nussl_ssl_socket nussl__sock_sslsock | ( | nussl_socket * | sock | ) |
Definition at line 1699 of file nussl_socket.c.
| void nussl__ssl_set_verify_err | ( | nussl_session * | sess, | |
| int | failures | |||
| ) |
Definition at line 446 of file nussl_session.c.
References _, N_, NUSSL_SSL_EXPIRED, NUSSL_SSL_IDMISMATCH, NUSSL_SSL_INVALID, NUSSL_SSL_NOTYETVALID, NUSSL_SSL_REVOKED, NUSSL_SSL_SIGNER_NOT_CA, NUSSL_SSL_SIGNER_NOT_FOUND, and NUSSL_SSL_UNTRUSTED.
| void nussl_addr_destroy | ( | nussl_sock_addr * | addr | ) |
Definition at line 1043 of file nussl_socket.c.
References nussl_sock_addr_s::addrs, and nussl_free.
Referenced by lookup_host(), and nussl_session_destroy().
| char* nussl_addr_error | ( | const nussl_sock_addr * | addr, | |
| char * | buf, | |||
| size_t | bufsiz | |||
| ) |
Definition at line 973 of file nussl_socket.c.
References _, nussl_sock_addr_s::errnum, and nussl_strnzcpy.
Referenced by lookup_host().
| const nussl_inet_addr* nussl_addr_first | ( | nussl_sock_addr * | addr | ) |
Definition at line 946 of file nussl_socket.c.
References nussl_sock_addr_s::addrs, and nussl_sock_addr_s::cursor.
Referenced by resolve_first().
| const nussl_inet_addr* nussl_addr_next | ( | nussl_sock_addr * | addr | ) |
Definition at line 957 of file nussl_socket.c.
References nussl_sock_addr_s::addrs, nussl_sock_addr_s::count, and nussl_sock_addr_s::cursor.
Referenced by resolve_next().
| nussl_sock_addr* nussl_addr_resolve | ( | const char * | hostname, | |
| int | flags | |||
| ) |
Definition at line 873 of file nussl_socket.c.
References INADDR_NONE, ipv6_disabled, nussl_calloc(), nussl_free, nussl_malloc(), and nussl_strdup().
Referenced by lookup_host().
Here is the call graph for this function:

| int nussl_addr_result | ( | const nussl_sock_addr * | addr | ) |
Definition at line 941 of file nussl_socket.c.
References nussl_sock_addr_s::errnum.
Referenced by lookup_host().
| void nussl_close_connection | ( | nussl_session * | sess | ) |
Definition at line 344 of file nussl_session.c.
References NUSSL_DBG_SOCKET, NUSSL_DEBUG, and nussl_sock_close().
Here is the call graph for this function:

| const char* nussl_get_error | ( | nussl_session * | sess | ) |
Definition at line 332 of file nussl_session.c.
References nussl_strclean().
Here is the call graph for this function:

| int nussl_get_session_flag | ( | nussl_session * | sess, | |
| nussl_session_flag | flag | |||
| ) |
| int nussl_iaddr_cmp | ( | const nussl_inet_addr * | i1, | |
| const nussl_inet_addr * | i2 | |||
| ) |
| void nussl_iaddr_free | ( | nussl_inet_addr * | addr | ) |
| nussl_inet_addr* nussl_iaddr_make | ( | nussl_iaddr_type | type, | |
| const unsigned char * | raw | |||
| ) |
Definition at line 1358 of file nussl_socket.c.
References nussl_calloc(), nussl_iaddr_ipv4, and nussl_iaddr_ipv6.
Here is the call graph for this function:

| char* nussl_iaddr_print | ( | const nussl_inet_addr * | ia, | |
| char * | buf, | |||
| size_t | bufsiz | |||
| ) |
Definition at line 996 of file nussl_socket.c.
References nussl_strnzcpy, and SACAST.
Referenced by do_connect().
| int nussl_iaddr_reverse | ( | const nussl_inet_addr * | ia, | |
| char * | buf, | |||
| size_t | bufsiz | |||
| ) |
| nussl_iaddr_type nussl_iaddr_typeof | ( | const nussl_inet_addr * | ia | ) |
| int nussl_init | ( | ) |
Definition at line 746 of file nussl_session.c.
References nussl_sock_init().
Here is the call graph for this function:

| ssize_t nussl_read | ( | nussl_session * | session, | |
| char * | buffer, | |||
| size_t | count | |||
| ) |
Definition at line 613 of file nussl_session.c.
References NUSSL_ERROR, nussl_set_error(), nussl_sock_error(), and nussl_sock_read().
Here is the call graph for this function:

| nussl_session* nussl_session_accept | ( | nussl_session * | srv_sess | ) |
Definition at line 173 of file nussl_session.c.
References _, nussl_session_create(), nussl_session_destroy(), nussl_set_error(), nussl_sock_accept(), nussl_sock_create(), and nussl_sock_fd().
Referenced by tls_nufw_accept(), and tls_user_accept().
Here is the call graph for this function:

| nussl_session* nussl_session_create | ( | ) |
Definition at line 127 of file nussl_session.c.
References nussl_calloc(), NUSSL_SESSFLAG_PERSIST, NUSSL_SESSFLAG_SSLv2, NUSSL_SESSFLAG_TLS_SNI, nussl_ssl_context_create(), and SOCKET_READ_TIMEOUT.
Here is the call graph for this function:

| nussl_session* nussl_session_create_with_fd | ( | int | server_fd, | |
| int | verify | |||
| ) |
Definition at line 157 of file nussl_session.c.
References nussl_session_create(), and nussl_sock_create_with_fd().
Referenced by tls_nufw_init(), and tls_user_init().
Here is the call graph for this function:

| void nussl_session_destroy | ( | nussl_session * | sess | ) |
Definition at line 82 of file nussl_session.c.
References nussl_addr_destroy(), nussl_close_connection(), NUSSL_DBG_HTTP, NUSSL_DEBUG, nussl_free, nussl_ssl_cert_free(), nussl_ssl_clicert_free(), and nussl_ssl_context_destroy().
Here is the call graph for this function:

| int nussl_session_get_fd | ( | nussl_session * | sess | ) |
Definition at line 222 of file nussl_session.c.
References nussl_sock_fd().
Referenced by encode_nufw(), nu_client_check(), nussl_session_getpeer(), suppress_nufw_session(), tls_nufw_accept(), and tls_user_accept().
Here is the call graph for this function:

| int nussl_session_getpeer | ( | nussl_session * | sess, | |
| struct sockaddr * | addr, | |||
| socklen_t * | addrlen | |||
| ) |
Definition at line 725 of file nussl_session.c.
References NUSSL_ERROR, NUSSL_OK, nussl_session_get_fd(), and nussl_set_error().
Referenced by tls_nufw_accept(), and tls_user_accept().
Here is the call graph for this function:

| int nussl_session_handshake | ( | nussl_session * | client_sess, | |
| nussl_session * | srv_sess | |||
| ) |
Definition at line 203 of file nussl_session.c.
References nussl__ssl_post_handshake(), nussl_get_error(), NUSSL_OK, nussl_set_error(), nussl_sock_accept_ssl(), and nussl_sock_error().
Referenced by tls_nufw_accept(), and tls_user_accept().
Here is the call graph for this function:

| int nussl_session_set_dh_bits | ( | nussl_session * | sess, | |
| unsigned int | dh_bits | |||
| ) |
Definition at line 230 of file nussl_session.c.
References NUSSL_ERROR, and nussl_ssl_context_set_dh_bits().
Referenced by tls_nufw_init(), and tls_user_init().
Here is the call graph for this function:

| void nussl_set_addrlist | ( | nussl_session * | sess, | |
| const nussl_inet_addr ** | addrs, | |||
| size_t | n | |||
| ) |
Definition at line 238 of file nussl_session.c.
| void nussl_set_connect_timeout | ( | nussl_session * | sess, | |
| int | timeout | |||
| ) |
Definition at line 323 of file nussl_session.c.
| void nussl_set_error | ( | nussl_session * | sess, | |
| const char * | format, | |||
| ... | ||||
| ) |
Definition at line 249 of file nussl_session.c.
References nussl_vsnprintf().
Referenced by do_connect(), lookup_host(), nussl_get_server_cert_dn(), nussl_read(), nussl_session_accept(), nussl_session_getpeer(), nussl_session_handshake(), nussl_ssl_set_keypair(), nussl_ssl_set_pkcs12_keypair(), nussl_ssl_trust_cert_file(), and nussl_write().
Here is the call graph for this function:

| void nussl_set_hostinfo | ( | nussl_session * | sess, | |
| const char * | hostname, | |||
| unsigned int | port | |||
| ) |
Definition at line 113 of file nussl_session.c.
References nussl_free, and nussl_strdup().
Here is the call graph for this function:

| void nussl_set_read_timeout | ( | nussl_session * | sess, | |
| int | timeout | |||
| ) |
Definition at line 314 of file nussl_session.c.
| void nussl_set_session_flag | ( | nussl_session * | sess, | |
| nussl_session_flag | flag, | |||
| int | value | |||
| ) |
Definition at line 261 of file nussl_session.c.
References NUSSL_SESSFLAG_LAST, NUSSL_SESSFLAG_SSLv2, nussl_ssl_context_set_flag(), and NUSSL_SSL_CTX_SSLv2.
Here is the call graph for this function:

| int nussl_sock_accept | ( | nussl_socket * | sock, | |
| int | listener | |||
| ) |
| int nussl_sock_accept_full | ( | nussl_socket * | sock, | |
| int | listener, | |||
| struct sockaddr * | addr, | |||
| socklen_t * | addrlen | |||
| ) |
Definition at line 1449 of file nussl_socket.c.
| int nussl_sock_accept_ssl | ( | nussl_socket * | sock, | |
| nussl_ssl_context * | ctx | |||
| ) |
Definition at line 1532 of file nussl_socket.c.
References _, NUSSL_SOCK_ERROR, and set_error.
Referenced by nussl_session_handshake().
| int nussl_sock_block | ( | nussl_socket * | sock, | |
| int | n | |||
| ) |
Definition at line 436 of file nussl_socket.c.
| char* nussl_sock_cipher | ( | nussl_socket * | sock | ) |
Definition at line 1739 of file nussl_socket.c.
References nussl_strdup().
Here is the call graph for this function:

| int nussl_sock_close | ( | nussl_socket * | sock | ) |
Definition at line 1761 of file nussl_socket.c.
References nussl_close, and nussl_free.
Referenced by nussl_close_connection().
| int nussl_sock_connect | ( | nussl_socket * | sock, | |
| const nussl_inet_addr * | addr, | |||
| unsigned int | port | |||
| ) |
Definition at line 1261 of file nussl_socket.c.
References _, connect_socket(), do_bind(), dummy_laddr, ia_family, ia_proto, nussl_close, nussl_errno, NUSSL_SOCK_ERROR, set_error, and set_strerror.
Referenced by do_connect().
Here is the call graph for this function:

| int nussl_sock_connect_ssl | ( | nussl_socket * | sock, | |
| nussl_ssl_context * | ctx, | |||
| void * | userdata | |||
| ) |
Definition at line 1580 of file nussl_socket.c.
References _, nussl_malloc(), NUSSL_SOCK_ERROR, and set_error.
Here is the call graph for this function:

| void nussl_sock_connect_timeout | ( | nussl_socket * | sock, | |
| int | timeout | |||
| ) |
| nussl_socket* nussl_sock_create | ( | void | ) |
Definition at line 1173 of file nussl_socket.c.
References iofns_raw, nussl_calloc(), and SOCKET_READ_TIMEOUT.
Referenced by do_connect(), nussl_session_accept(), and nussl_sock_create_with_fd().
Here is the call graph for this function:
