OpenVPN
Data Structures | Macros | Typedefs | Enumerations | Functions
socket.h File Reference
#include "buffer.h"
#include "common.h"
#include "error.h"
#include "proto.h"
#include "mtu.h"
#include "win32.h"
#include "event.h"
#include "proxy.h"
#include "socks.h"
#include "misc.h"
#include "tun.h"
Include dependency graph for socket.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  openvpn_sockaddr
 
struct  cached_dns_entry
 
struct  link_socket_actual
 
struct  link_socket_addr
 
struct  link_socket_info
 
struct  stream_buf
 
struct  socket_buffer_size
 
struct  link_socket
 
struct  sockethandle_t
 

Macros

#define OPENVPN_PORT   "1194"
 
#define RESOLV_RETRY_INFINITE   1000000000
 
#define htonps(x)   htons(x)
 
#define ntohps(x)   ntohs(x)
 
#define LS_MODE_DEFAULT   0
 
#define LS_MODE_TCP_LISTEN   1
 
#define LS_MODE_TCP_ACCEPT_FROM   2
 
#define SF_USE_IP_PKTINFO   (1<<0)
 
#define SF_TCP_NODELAY   (1<<1)
 
#define SF_PORT_SHARE   (1<<2)
 
#define SF_HOST_RANDOMIZE   (1<<3)
 
#define SF_GETADDRINFO_DGRAM   (1<<4)
 
#define SF_DCO_WIN   (1<<5)
 
#define SF_PREPEND_SA   (1<<6)
 
#define MSG_NOSIGNAL   0
 
#define openvpn_close_socket(s)   closesocket(s)
 
#define PS_SHOW_PORT_IF_DEFINED   (1<<0)
 
#define PS_SHOW_PORT   (1<<1)
 
#define PS_SHOW_PKTINFO   (1<<2)
 
#define PS_DONT_SHOW_ADDR   (1<<3)
 
#define PS_DONT_SHOW_FAMILY   (1<<4)
 
#define IA_EMPTY_IF_UNDEF   (1<<0)
 
#define IA_NET_ORDER   (1<<1)
 
#define SA_IP_PORT   (1<<0)
 
#define SA_SET_IF_NONZERO   (1<<1)
 
#define IPV4_INVALID_ADDR   0xffffffff
 
#define OIA_HOSTNAME   0
 
#define OIA_IP   1
 
#define OIA_ERROR   -1
 
#define GETADDR_RESOLVE   (1<<0)
 
#define GETADDR_FATAL   (1<<1)
 
#define GETADDR_HOST_ORDER   (1<<2)
 
#define GETADDR_MENTION_RESOLVE_RETRY   (1<<3)
 
#define GETADDR_FATAL_ON_SIGNAL   (1<<4)
 
#define GETADDR_WARN_ON_SIGNAL   (1<<5)
 
#define GETADDR_MSG_VIRT_OUT   (1<<6)
 
#define GETADDR_TRY_ONCE   (1<<7)
 
#define GETADDR_UPDATE_MANAGEMENT_STATE   (1<<8)
 
#define GETADDR_RANDOMIZE   (1<<9)
 
#define GETADDR_PASSIVE   (1<<10)
 
#define GETADDR_DATAGRAM   (1<<11)
 
#define GETADDR_CACHE_MASK   (GETADDR_DATAGRAM|GETADDR_PASSIVE)
 

Typedefs

typedef uint16_t packet_size_type
 

Enumerations

enum  proto_num {
  PROTO_NONE , PROTO_UDP , PROTO_TCP , PROTO_TCP_SERVER ,
  PROTO_TCP_CLIENT , PROTO_N
}
 

Functions

void socket_set_buffers (socket_descriptor_t fd, const struct socket_buffer_size *sbs, bool reduce_size)
 Sets the receive and send buffer sizes of a socket descriptor.
 
int socket_recv_queue (struct link_socket *sock, int maxsize)
 
int socket_send_queue (struct link_socket *sock, struct buffer *buf, const struct link_socket_actual *to)
 
int sockethandle_finalize (sockethandle_t sh, struct overlapped_io *io, struct buffer *buf, struct link_socket_actual *from)
 
static BOOL SocketHandleGetOverlappedResult (sockethandle_t sh, struct overlapped_io *io)
 
static int SocketHandleGetLastError (sockethandle_t sh)
 
static void SocketHandleSetLastError (sockethandle_t sh, DWORD err)
 
static void SocketHandleSetInvalError (sockethandle_t sh)
 
struct link_socketlink_socket_new (void)
 
void socket_bind (socket_descriptor_t sd, struct addrinfo *local, int af_family, const char *prefix, bool ipv6only)
 
int openvpn_connect (socket_descriptor_t sd, const struct sockaddr *remote, int connect_timeout, volatile int *signal_received)
 
void link_socket_init_phase1 (struct context *c, int sock_index, int mode)
 
void link_socket_init_phase2 (struct context *c, struct link_socket *sock)
 
void do_preresolve (struct context *c)
 
void link_socket_close (struct link_socket *sock)
 
void sd_close (socket_descriptor_t *sd)
 
const char * print_sockaddr_ex (const struct sockaddr *addr, const char *separator, const unsigned int flags, struct gc_arena *gc)
 
static const char * print_openvpn_sockaddr (const struct openvpn_sockaddr *addr, struct gc_arena *gc)
 
static const char * print_sockaddr (const struct sockaddr *addr, struct gc_arena *gc)
 
const char * print_link_socket_actual_ex (const struct link_socket_actual *act, const char *separator, const unsigned int flags, struct gc_arena *gc)
 
const char * print_link_socket_actual (const struct link_socket_actual *act, struct gc_arena *gc)
 
const char * print_in_addr_t (in_addr_t addr, unsigned int flags, struct gc_arena *gc)
 
const char * print_in6_addr (struct in6_addr addr6, unsigned int flags, struct gc_arena *gc)
 
const char * print_in_port_t (in_port_t port, struct gc_arena *gc)
 
struct in6_addr add_in6_addr (struct in6_addr base, uint32_t add)
 
void setenv_sockaddr (struct env_set *es, const char *name_prefix, const struct openvpn_sockaddr *addr, const unsigned int flags)
 
void setenv_in_addr_t (struct env_set *es, const char *name_prefix, in_addr_t addr, const unsigned int flags)
 
void setenv_in6_addr (struct env_set *es, const char *name_prefix, const struct in6_addr *addr, const unsigned int flags)
 
void setenv_link_socket_actual (struct env_set *es, const char *name_prefix, const struct link_socket_actual *act, const unsigned int flags)
 
void bad_address_length (int actual, int expected)
 
in_addr_t link_socket_current_remote (const struct link_socket_info *info)
 
const struct in6_addr * link_socket_current_remote_ipv6 (const struct link_socket_info *info)
 
void link_socket_connection_initiated (struct link_socket_info *info, const struct link_socket_actual *addr, const char *common_name, struct env_set *es)
 
void link_socket_bad_incoming_addr (struct buffer *buf, const struct link_socket_info *info, const struct link_socket_actual *from_addr)
 
void set_actual_address (struct link_socket_actual *actual, struct addrinfo *ai)
 
void link_socket_bad_outgoing_addr (void)
 
void setenv_trusted (struct env_set *es, const struct link_socket_info *info)
 
bool link_socket_update_flags (struct link_socket *sock, unsigned int sockflags)
 
void link_socket_update_buffer_sizes (struct link_socket *sock, int rcvbuf, int sndbuf)
 
int openvpn_inet_aton (const char *dotted_quad, struct in_addr *addr)
 
bool ip_addr_dotted_quad_safe (const char *dotted_quad)
 
bool ip_or_dns_addr_safe (const char *addr, const bool allow_fqdn)
 
bool mac_addr_safe (const char *mac_addr)
 
bool ipv6_addr_safe (const char *ipv6_text_addr)
 
socket_descriptor_t create_socket_tcp (struct addrinfo *)
 
socket_descriptor_t socket_do_accept (socket_descriptor_t sd, struct link_socket_actual *act, const bool nowait)
 
in_addr_t getaddr (unsigned int flags, const char *hostname, int resolve_retry_seconds, bool *succeeded, struct signal_info *sig_info)
 Translate an IPv4 addr or hostname from string form to in_addr_t.
 
bool get_ipv6_addr (const char *hostname, struct in6_addr *network, unsigned int *netbits, int msglevel)
 Translate an IPv6 addr or hostname from string form to in6_addr.
 
int openvpn_getaddrinfo (unsigned int flags, const char *hostname, const char *servname, int resolve_retry_seconds, struct signal_info *sig_info, int ai_family, struct addrinfo **res)
 
static bool proto_is_net (int proto)
 
static bool proto_is_udp (int proto)
 Returns if the protocol being used is UDP.
 
static bool proto_is_dgram (int proto)
 Return if the protocol is datagram (UDP)
 
static bool proto_is_tcp (int proto)
 returns if the proto is a TCP variant (tcp-server, tcp-client or tcp)
 
int ascii2proto (const char *proto_name)
 
sa_family_t ascii2af (const char *proto_name)
 
const char * proto2ascii (int proto, sa_family_t af, bool display_form)
 
const char * proto2ascii_all (struct gc_arena *gc)
 
const char * proto_remote (int proto, bool remote)
 
const char * addr_family_name (int af)
 
static int datagram_overhead (sa_family_t af, int proto)
 
static bool link_socket_proto_connection_oriented (int proto)
 
static bool link_socket_connection_oriented (const struct link_socket *sock)
 
static bool addr_defined (const struct openvpn_sockaddr *addr)
 
static bool addr_local (const struct sockaddr *addr)
 
static bool addr_defined_ipi (const struct link_socket_actual *lsa)
 
static bool link_socket_actual_defined (const struct link_socket_actual *act)
 
static bool addr_match (const struct openvpn_sockaddr *a1, const struct openvpn_sockaddr *a2)
 
static bool addrlist_match (const struct openvpn_sockaddr *a1, const struct addrinfo *addrlist)
 
static bool addrlist_port_match (const struct openvpn_sockaddr *a1, const struct addrinfo *a2)
 
static bool addr_port_match (const struct openvpn_sockaddr *a1, const struct openvpn_sockaddr *a2)
 
static bool addr_match_proto (const struct openvpn_sockaddr *a1, const struct openvpn_sockaddr *a2, const int proto)
 
static bool addrlist_match_proto (const struct openvpn_sockaddr *a1, struct addrinfo *addr_list, const int proto)
 
static void addr_zero_host (struct openvpn_sockaddr *addr)
 
static int af_addr_size (sa_family_t af)
 
static bool link_socket_actual_match (const struct link_socket_actual *a1, const struct link_socket_actual *a2)
 
static bool socket_connection_reset (const struct link_socket *sock, int status)
 
static bool link_socket_verify_incoming_addr (struct buffer *buf, const struct link_socket_info *info, const struct link_socket_actual *from_addr)
 
static void link_socket_get_outgoing_addr (struct buffer *buf, const struct link_socket_info *info, struct link_socket_actual **act)
 
static void link_socket_set_outgoing_addr (struct link_socket_info *info, const struct link_socket_actual *act, const char *common_name, struct env_set *es)
 
bool stream_buf_read_setup_dowork (struct link_socket *sock)
 
static bool stream_buf_read_setup (struct link_socket *sock)
 
static bool socket_is_dco_win (const struct link_socket *s)
 Returns true if we are on Windows and this link is running on DCO-WIN.
 
int link_socket_read_tcp (struct link_socket *sock, struct buffer *buf)
 
static int link_socket_read_udp_win32 (struct link_socket *sock, struct buffer *buf, struct link_socket_actual *from)
 
static int link_socket_read (struct link_socket *sock, struct buffer *buf, struct link_socket_actual *from)
 
ssize_t link_socket_write_tcp (struct link_socket *sock, struct buffer *buf, struct link_socket_actual *to)
 
static int link_socket_write_win32 (struct link_socket *sock, struct buffer *buf, struct link_socket_actual *to)
 
static ssize_t link_socket_write_udp (struct link_socket *sock, struct buffer *buf, struct link_socket_actual *to)
 
static ssize_t link_socket_write (struct link_socket *sock, struct buffer *buf, struct link_socket_actual *to)
 
bool sockets_read_residual (const struct context *c)
 
static event_t socket_event_handle (const struct link_socket *sock)
 
event_t socket_listen_event_handle (struct link_socket *sock)
 
unsigned int socket_set (struct link_socket *sock, struct event_set *es, unsigned int rwflags, void *arg, unsigned int *persistent)
 
static void socket_set_listen_persistent (struct link_socket *sock, struct event_set *es, void *arg)
 
static void socket_reset_listen_persistent (struct link_socket *sock)
 
const char * socket_stat (const struct link_socket *sock, unsigned int rwflags, struct gc_arena *gc)
 

Macro Definition Documentation

◆ GETADDR_CACHE_MASK

#define GETADDR_CACHE_MASK   (GETADDR_DATAGRAM|GETADDR_PASSIVE)

Definition at line 530 of file socket.h.

◆ GETADDR_DATAGRAM

#define GETADDR_DATAGRAM   (1<<11)

Definition at line 528 of file socket.h.

◆ GETADDR_FATAL

#define GETADDR_FATAL   (1<<1)

Definition at line 518 of file socket.h.

◆ GETADDR_FATAL_ON_SIGNAL

#define GETADDR_FATAL_ON_SIGNAL   (1<<4)

Definition at line 521 of file socket.h.

◆ GETADDR_HOST_ORDER

#define GETADDR_HOST_ORDER   (1<<2)

Definition at line 519 of file socket.h.

◆ GETADDR_MENTION_RESOLVE_RETRY

#define GETADDR_MENTION_RESOLVE_RETRY   (1<<3)

Definition at line 520 of file socket.h.

◆ GETADDR_MSG_VIRT_OUT

#define GETADDR_MSG_VIRT_OUT   (1<<6)

Definition at line 523 of file socket.h.

◆ GETADDR_PASSIVE

#define GETADDR_PASSIVE   (1<<10)

Definition at line 527 of file socket.h.

◆ GETADDR_RANDOMIZE

#define GETADDR_RANDOMIZE   (1<<9)

Definition at line 526 of file socket.h.

◆ GETADDR_RESOLVE

#define GETADDR_RESOLVE   (1<<0)

Definition at line 517 of file socket.h.

◆ GETADDR_TRY_ONCE

#define GETADDR_TRY_ONCE   (1<<7)

Definition at line 524 of file socket.h.

◆ GETADDR_UPDATE_MANAGEMENT_STATE

#define GETADDR_UPDATE_MANAGEMENT_STATE   (1<<8)

Definition at line 525 of file socket.h.

◆ GETADDR_WARN_ON_SIGNAL

#define GETADDR_WARN_ON_SIGNAL   (1<<5)

Definition at line 522 of file socket.h.

◆ htonps

#define htonps (   x)    htons(x)

Definition at line 59 of file socket.h.

◆ IA_EMPTY_IF_UNDEF

#define IA_EMPTY_IF_UNDEF   (1<<0)

Definition at line 401 of file socket.h.

◆ IA_NET_ORDER

#define IA_NET_ORDER   (1<<1)

Definition at line 402 of file socket.h.

◆ IPV4_INVALID_ADDR

#define IPV4_INVALID_ADDR   0xffffffff

Definition at line 438 of file socket.h.

◆ LS_MODE_DEFAULT

#define LS_MODE_DEFAULT   0

Definition at line 209 of file socket.h.

◆ LS_MODE_TCP_ACCEPT_FROM

#define LS_MODE_TCP_ACCEPT_FROM   2

Definition at line 211 of file socket.h.

◆ LS_MODE_TCP_LISTEN

#define LS_MODE_TCP_LISTEN   1

Definition at line 210 of file socket.h.

◆ MSG_NOSIGNAL

#define MSG_NOSIGNAL   0

Definition at line 272 of file socket.h.

◆ ntohps

#define ntohps (   x)    ntohs(x)

Definition at line 62 of file socket.h.

◆ OIA_ERROR

#define OIA_ERROR   -1

Definition at line 471 of file socket.h.

◆ OIA_HOSTNAME

#define OIA_HOSTNAME   0

Definition at line 469 of file socket.h.

◆ OIA_IP

#define OIA_IP   1

Definition at line 470 of file socket.h.

◆ openvpn_close_socket

#define openvpn_close_socket (   s)    closesocket(s)

Definition at line 277 of file socket.h.

◆ OPENVPN_PORT

#define OPENVPN_PORT   "1194"

Definition at line 42 of file socket.h.

◆ PS_DONT_SHOW_ADDR

#define PS_DONT_SHOW_ADDR   (1<<3)

Definition at line 366 of file socket.h.

◆ PS_DONT_SHOW_FAMILY

#define PS_DONT_SHOW_FAMILY   (1<<4)

Definition at line 367 of file socket.h.

◆ PS_SHOW_PKTINFO

#define PS_SHOW_PKTINFO   (1<<2)

Definition at line 365 of file socket.h.

◆ PS_SHOW_PORT

#define PS_SHOW_PORT   (1<<1)

Definition at line 364 of file socket.h.

◆ PS_SHOW_PORT_IF_DEFINED

#define PS_SHOW_PORT_IF_DEFINED   (1<<0)

Definition at line 363 of file socket.h.

◆ RESOLV_RETRY_INFINITE

#define RESOLV_RETRY_INFINITE   1000000000

Definition at line 48 of file socket.h.

◆ SA_IP_PORT

#define SA_IP_PORT   (1<<0)

Definition at line 411 of file socket.h.

◆ SA_SET_IF_NONZERO

#define SA_SET_IF_NONZERO   (1<<1)

Definition at line 412 of file socket.h.

◆ SF_DCO_WIN

#define SF_DCO_WIN   (1<<5)

Definition at line 226 of file socket.h.

◆ SF_GETADDRINFO_DGRAM

#define SF_GETADDRINFO_DGRAM   (1<<4)

Definition at line 225 of file socket.h.

◆ SF_HOST_RANDOMIZE

#define SF_HOST_RANDOMIZE   (1<<3)

Definition at line 224 of file socket.h.

◆ SF_PORT_SHARE

#define SF_PORT_SHARE   (1<<2)

Definition at line 223 of file socket.h.

◆ SF_PREPEND_SA

#define SF_PREPEND_SA   (1<<6)

Definition at line 227 of file socket.h.

◆ SF_TCP_NODELAY

#define SF_TCP_NODELAY   (1<<1)

Definition at line 222 of file socket.h.

◆ SF_USE_IP_PKTINFO

#define SF_USE_IP_PKTINFO   (1<<0)

Definition at line 221 of file socket.h.

Typedef Documentation

◆ packet_size_type

typedef uint16_t packet_size_type

Definition at line 56 of file socket.h.

Enumeration Type Documentation

◆ proto_num

enum proto_num
Enumerator
PROTO_NONE 
PROTO_UDP 
PROTO_TCP 
PROTO_TCP_SERVER 
PROTO_TCP_CLIENT 
PROTO_N 

Definition at line 566 of file socket.h.

Function Documentation

◆ add_in6_addr()

struct in6_addr add_in6_addr ( struct in6_addr  base,
uint32_t  add 
)

Definition at line 3025 of file socket.c.

References UINT8_MAX.

Referenced by helper_client_server(), ifconfig_pool_acquire(), and ifconfig_pool_handle_to_ipv6_base().

◆ addr_defined()

static bool addr_defined ( const struct openvpn_sockaddr addr)
inlinestatic

◆ addr_defined_ipi()

static bool addr_defined_ipi ( const struct link_socket_actual lsa)
inlinestatic

◆ addr_family_name()

const char * addr_family_name ( int  af)

Definition at line 3233 of file socket.c.

References buffer::len.

Referenced by dco_mp_start_vpn(), dco_p2p_new_peer(), link_socket_init_phase2(), and socket_bind().

◆ addr_local()

static bool addr_local ( const struct sockaddr *  addr)
inlinestatic

Definition at line 678 of file socket.h.

◆ addr_match()

static bool addr_match ( const struct openvpn_sockaddr a1,
const struct openvpn_sockaddr a2 
)
inlinestatic

◆ addr_match_proto()

static bool addr_match_proto ( const struct openvpn_sockaddr a1,
const struct openvpn_sockaddr a2,
const int  proto 
)
inlinestatic

◆ addr_port_match()

static bool addr_port_match ( const struct openvpn_sockaddr a1,
const struct openvpn_sockaddr a2 
)
inlinestatic

◆ addr_zero_host()

static void addr_zero_host ( struct openvpn_sockaddr addr)
inlinestatic

◆ addrlist_match()

static bool addrlist_match ( const struct openvpn_sockaddr a1,
const struct addrinfo *  addrlist 
)
inlinestatic

◆ addrlist_match_proto()

static bool addrlist_match_proto ( const struct openvpn_sockaddr a1,
struct addrinfo *  addr_list,
const int  proto 
)
inlinestatic

◆ addrlist_port_match()

static bool addrlist_port_match ( const struct openvpn_sockaddr a1,
const struct addrinfo *  a2 
)
inlinestatic

◆ af_addr_size()

static int af_addr_size ( sa_family_t  af)
inlinestatic

Definition at line 864 of file socket.h.

References ASSERT, M_ERR, and msg.

Referenced by openvpn_connect(), read_sockaddr_from_overlapped(), socket_do_accept(), and socket_recv_queue().

◆ ascii2af()

sa_family_t ascii2af ( const char *  proto_name)

Definition at line 3183 of file socket.c.

References proto_names::proto_af, proto_names::short_form, and SIZE.

Referenced by add_option().

◆ ascii2proto()

int ascii2proto ( const char *  proto_name)

Definition at line 3170 of file socket.c.

References proto_names::proto, proto_names::short_form, and SIZE.

Referenced by add_option().

◆ bad_address_length()

void bad_address_length ( int  actual,
int  expected 
)

Definition at line 3285 of file socket.c.

References buffer::len, M_FATAL, and msg.

Referenced by read_sockaddr_from_overlapped(), and socket_recv_queue().

◆ create_socket_tcp()

socket_descriptor_t create_socket_tcp ( struct addrinfo *  addrinfo)

Definition at line 1036 of file socket.c.

References ASSERT, M_ERR, msg, and set_cloexec().

Referenced by create_socket(), man_connect(), man_listen(), and phase2_tcp_client().

◆ datagram_overhead()

static int datagram_overhead ( sa_family_t  af,
int  proto 
)
inlinestatic

◆ do_preresolve()

void do_preresolve ( struct context c)

◆ get_ipv6_addr()

bool get_ipv6_addr ( const char *  hostname,
struct in6_addr *  network,
unsigned int *  netbits,
int  msglevel 
)

Translate an IPv6 addr or hostname from string form to in6_addr.

Definition at line 226 of file socket.c.

References get_addr_generic(), and GETADDR_RESOLVE.

Referenced by add_option(), dhcp_option_dns6_parse(), ifconfig_pool_read(), init_route_ipv6(), ipv6_addr_safe_hexplusbits(), option_iroute_ipv6(), and remove_iroutes_from_push_route_list().

◆ getaddr()

in_addr_t getaddr ( unsigned int  flags,
const char *  hostname,
int  resolve_retry_seconds,
bool *  succeeded,
struct signal_info sig_info 
)

Translate an IPv4 addr or hostname from string form to in_addr_t.

In case of resolve error, it will try again for resolve_retry_seconds seconds.

Definition at line 195 of file socket.c.

References get_addr_generic(), M_WARN, and status.

Referenced by add_client_nat_to_option_list(), add_host_route_array(), add_option(), get_adapter_ip_netmask(), get_ip_addr(), ifconfig_pool_read(), init_route(), init_route_list(), init_tun(), ip_addr_string_to_array(), man_kill(), option_iroute(), and remove_iroutes_from_push_route_list().

◆ ip_addr_dotted_quad_safe()

bool ip_addr_dotted_quad_safe ( const char *  dotted_quad)

Definition at line 720 of file socket.c.

References OIA_IP, and openvpn_inet_aton().

Referenced by add_option(), dhcp_option_address_parse(), and ip_or_dns_addr_safe().

◆ ip_or_dns_addr_safe()

bool ip_or_dns_addr_safe ( const char *  addr,
const bool  allow_fqdn 
)

Definition at line 806 of file socket.c.

References dns_addr_safe(), and ip_addr_dotted_quad_safe().

Referenced by add_option().

◆ ipv6_addr_safe()

bool ipv6_addr_safe ( const char *  ipv6_text_addr)

Definition at line 770 of file socket.c.

Referenced by add_option().

◆ link_socket_actual_defined()

static bool link_socket_actual_defined ( const struct link_socket_actual act)
inlinestatic

◆ link_socket_actual_match()

static bool link_socket_actual_match ( const struct link_socket_actual a1,
const struct link_socket_actual a2 
)
inlinestatic

◆ link_socket_bad_incoming_addr()

void link_socket_bad_incoming_addr ( struct buffer buf,
const struct link_socket_info info,
const struct link_socket_actual from_addr 
)

◆ link_socket_bad_outgoing_addr()

void link_socket_bad_outgoing_addr ( void  )

Definition at line 2521 of file socket.c.

References D_READ_WRITE, and dmsg.

Referenced by link_socket_get_outgoing_addr().

◆ link_socket_close()

void link_socket_close ( struct link_socket sock)

◆ link_socket_connection_initiated()

void link_socket_connection_initiated ( struct link_socket_info info,
const struct link_socket_actual addr,
const char *  common_name,
struct env_set es 
)

◆ link_socket_connection_oriented()

static bool link_socket_connection_oriented ( const struct link_socket sock)
inlinestatic

◆ link_socket_current_remote()

in_addr_t link_socket_current_remote ( const struct link_socket_info info)

◆ link_socket_current_remote_ipv6()

const struct in6_addr * link_socket_current_remote_ipv6 ( const struct link_socket_info info)

◆ link_socket_get_outgoing_addr()

static void link_socket_get_outgoing_addr ( struct buffer buf,
const struct link_socket_info info,
struct link_socket_actual **  act 
)
inlinestatic

◆ link_socket_init_phase1()

void link_socket_init_phase1 ( struct context c,
int  sock_index,
int  mode 
)

Definition at line 1877 of file socket.c.

References context_2::accept_from, connection_entry::af, link_socket_info::af, local_list::array, ASSERT, options::bind_dev, link_socket::bind_dev, connection_entry::bind_ipv6_only, link_socket_info::bind_ipv6_only, connection_entry::bind_local, link_socket::bind_local, context::c1, context::c2, options::ce, CM_CHILD_TCP, CM_CHILD_UDP, context_1::dns_cache, link_socket::dns_cache, context_1::http_proxy, link_socket::http_proxy, link_socket::info, options::ipchange, link_socket_info::ipchange_command, context_1::link_socket_addrs, context_2::link_sockets, local_entry::local, link_socket::local_host, connection_entry::local_list, link_socket::local_port, LS_MODE_TCP_ACCEPT_FROM, link_socket_info::lsa, options::mark, link_socket::mark, context::mode, link_socket::mode, connection_entry::mtu_discover_type, link_socket::mtu_discover_type, context::options, http_proxy_info::options, context::plugins, link_socket_info::plugins, local_entry::port, http_proxy_options::port, socks_proxy_info::port, local_entry::proto, link_socket_info::proto, PROTO_TCP_CLIENT, PROTO_TCP_SERVER, link_socket::proxy_dest_host, link_socket::proxy_dest_port, options::rcvbuf, socket_buffer_size::rcvbuf, connection_entry::remote, connection_entry::remote_float, link_socket_info::remote_float, link_socket::remote_host, connection_entry::remote_port, link_socket::remote_port, resolve_bind_local(), resolve_remote(), options::resolve_retry_seconds, link_socket::resolve_retry_seconds, link_socket::sd, http_proxy_options::server, socks_proxy_info::server, context_2::server_poll_interval, link_socket::server_poll_timeout, SF_PORT_SHARE, options::sndbuf, socket_buffer_size::sndbuf, link_socket::socket_buffer_sizes, options::sockflags, link_socket::sockflags, context_1::socks_proxy, and link_socket::socks_proxy.

Referenced by do_init_socket_phase1().

◆ link_socket_init_phase2()

void link_socket_init_phase2 ( struct context c,
struct link_socket sock 
)

◆ link_socket_new()

struct link_socket * link_socket_new ( void  )

◆ link_socket_proto_connection_oriented()

static bool link_socket_proto_connection_oriented ( int  proto)
inlinestatic

Definition at line 642 of file socket.h.

References proto_is_dgram().

Referenced by addr_match_proto(), addrlist_match_proto(), and link_socket_connection_oriented().

◆ link_socket_read()

static int link_socket_read ( struct link_socket sock,
struct buffer buf,
struct link_socket_actual from 
)
inlinestatic

◆ link_socket_read_tcp()

int link_socket_read_tcp ( struct link_socket sock,
struct buffer buf 
)

◆ link_socket_read_udp_win32()

static int link_socket_read_udp_win32 ( struct link_socket sock,
struct buffer buf,
struct link_socket_actual from 
)
inlinestatic

◆ link_socket_set_outgoing_addr()

static void link_socket_set_outgoing_addr ( struct link_socket_info info,
const struct link_socket_actual act,
const char *  common_name,
struct env_set es 
)
inlinestatic

◆ link_socket_update_buffer_sizes()

void link_socket_update_buffer_sizes ( struct link_socket sock,
int  rcvbuf,
int  sndbuf 
)

◆ link_socket_update_flags()

bool link_socket_update_flags ( struct link_socket sock,
unsigned int  sockflags 
)

Definition at line 1006 of file socket.c.

References link_socket::sd, socket_defined(), socket_set_flags(), and link_socket::sockflags.

Referenced by do_deferred_options().

◆ link_socket_verify_incoming_addr()

static bool link_socket_verify_incoming_addr ( struct buffer buf,
const struct link_socket_info info,
const struct link_socket_actual from_addr 
)
inlinestatic

◆ link_socket_write()

static ssize_t link_socket_write ( struct link_socket sock,
struct buffer buf,
struct link_socket_actual to 
)
inlinestatic

◆ link_socket_write_tcp()

ssize_t link_socket_write_tcp ( struct link_socket sock,
struct buffer buf,
struct link_socket_actual to 
)

◆ link_socket_write_udp()

static ssize_t link_socket_write_udp ( struct link_socket sock,
struct buffer buf,
struct link_socket_actual to 
)
inlinestatic

Definition at line 1183 of file socket.h.

References link_socket_write_win32().

Referenced by link_socket_write().

◆ link_socket_write_win32()

static int link_socket_write_win32 ( struct link_socket sock,
struct buffer buf,
struct link_socket_actual to 
)
inlinestatic

◆ mac_addr_safe()

bool mac_addr_safe ( const char *  mac_addr)

Definition at line 823 of file socket.c.

Referenced by add_option().

◆ openvpn_connect()

int openvpn_connect ( socket_descriptor_t  sd,
const struct sockaddr *  remote,
int  connect_timeout,
volatile int *  signal_received 
)

◆ openvpn_getaddrinfo()

int openvpn_getaddrinfo ( unsigned int  flags,
const char *  hostname,
const char *  servname,
int  resolve_retry_seconds,
struct signal_info sig_info,
int  ai_family,
struct addrinfo **  res 
)

◆ openvpn_inet_aton()

int openvpn_inet_aton ( const char *  dotted_quad,
struct in_addr *  addr 
)

Definition at line 696 of file socket.c.

References CC_DIGIT, CC_DOT, CLEAR, OIA_ERROR, OIA_HOSTNAME, OIA_IP, and string_class().

Referenced by ip_addr_dotted_quad_safe().

◆ print_in6_addr()

const char * print_in6_addr ( struct in6_addr  addr6,
unsigned int  flags,
struct gc_arena gc 
)

◆ print_in_addr_t()

const char * print_in_addr_t ( in_addr_t  addr,
unsigned int  flags,
struct gc_arena gc 
)

◆ print_in_port_t()

const char * print_in_port_t ( in_port_t  port,
struct gc_arena gc 
)

Definition at line 3010 of file socket.c.

References alloc_buf_gc(), BSTR, buf_printf(), and gc.

Referenced by setenv_dns_options(), and show_dns_options().

◆ print_link_socket_actual()

const char * print_link_socket_actual ( const struct link_socket_actual act,
struct gc_arena gc 
)

◆ print_link_socket_actual_ex()

const char * print_link_socket_actual_ex ( const struct link_socket_actual act,
const char *  separator,
const unsigned int  flags,
struct gc_arena gc 
)

◆ print_openvpn_sockaddr()

static const char * print_openvpn_sockaddr ( const struct openvpn_sockaddr addr,
struct gc_arena gc 
)
inlinestatic

Definition at line 376 of file socket.h.

References openvpn_sockaddr::addr, gc, print_sockaddr_ex(), PS_SHOW_PORT, and openvpn_sockaddr::sa.

Referenced by recv_socks_reply().

◆ print_sockaddr()

static const char * print_sockaddr ( const struct sockaddr *  addr,
struct gc_arena gc 
)
inlinestatic

◆ print_sockaddr_ex()

const char * print_sockaddr_ex ( const struct sockaddr *  addr,
const char *  separator,
const unsigned int  flags,
struct gc_arena gc 
)

◆ proto2ascii()

const char * proto2ascii ( int  proto,
sa_family_t  af,
bool  display_form 
)

◆ proto2ascii_all()

const char * proto2ascii_all ( struct gc_arena gc)

Definition at line 3217 of file socket.c.

References alloc_buf_gc(), BSTR, buf_printf(), gc, buffer::len, and SIZE.

Referenced by add_option().

◆ proto_is_dgram()

static bool proto_is_dgram ( int  proto)
inlinestatic

◆ proto_is_net()

static bool proto_is_net ( int  proto)
inlinestatic

Definition at line 576 of file socket.h.

References ASSERT, PROTO_N, and PROTO_NONE.

Referenced by options_postprocess_verify_ce().

◆ proto_is_tcp()

static bool proto_is_tcp ( int  proto)
inlinestatic

returns if the proto is a TCP variant (tcp-server, tcp-client or tcp)

Definition at line 606 of file socket.h.

References ASSERT, PROTO_N, PROTO_TCP_CLIENT, and PROTO_TCP_SERVER.

Referenced by frame_calculate_protocol_header_size(), link_socket_read(), link_socket_write(), socket_recv_queue(), and socket_send_queue().

◆ proto_is_udp()

static bool proto_is_udp ( int  proto)
inlinestatic

◆ proto_remote()

const char * proto_remote ( int  proto,
bool  remote 
)

Definition at line 3257 of file socket.c.

References ASSERT, PROTO_N, PROTO_TCP_CLIENT, PROTO_TCP_SERVER, and PROTO_UDP.

Referenced by options_string().

◆ sd_close()

void sd_close ( socket_descriptor_t sd)

Definition at line 4037 of file socket.c.

References openvpn_close_socket, socket_defined(), and SOCKET_UNDEFINED.

Referenced by man_accept(), and man_connect().

◆ set_actual_address()

void set_actual_address ( struct link_socket_actual actual,
struct addrinfo *  ai 
)

◆ setenv_in6_addr()

void setenv_in6_addr ( struct env_set es,
const char *  name_prefix,
const struct in6_addr *  addr,
const unsigned int  flags 
)

◆ setenv_in_addr_t()

void setenv_in_addr_t ( struct env_set es,
const char *  name_prefix,
in_addr_t  addr,
const unsigned int  flags 
)

◆ setenv_link_socket_actual()

void setenv_link_socket_actual ( struct env_set es,
const char *  name_prefix,
const struct link_socket_actual act,
const unsigned int  flags 
)

Definition at line 3130 of file socket.c.

References link_socket_actual::dest, es, and setenv_sockaddr().

Referenced by setenv_trusted(), and setenv_untrusted().

◆ setenv_sockaddr()

void setenv_sockaddr ( struct env_set es,
const char *  name_prefix,
const struct openvpn_sockaddr addr,
const unsigned int  flags 
)

◆ setenv_trusted()

void setenv_trusted ( struct env_set es,
const struct link_socket_info info 
)

◆ socket_bind()

void socket_bind ( socket_descriptor_t  sd,
struct addrinfo *  local,
int  af_family,
const char *  prefix,
bool  ipv6only 
)

◆ socket_connection_reset()

static bool socket_connection_reset ( const struct link_socket sock,
int  status 
)
inlinestatic

◆ socket_do_accept()

socket_descriptor_t socket_do_accept ( socket_descriptor_t  sd,
struct link_socket_actual act,
const bool  nowait 
)

◆ socket_event_handle()

static event_t socket_event_handle ( const struct link_socket sock)
inlinestatic

Definition at line 1259 of file socket.h.

References link_socket::rw_handle, and link_socket::sd.

Referenced by multi_tcp_dereference_instance(), and socket_set().

◆ socket_is_dco_win()

static bool socket_is_dco_win ( const struct link_socket s)
inlinestatic

Returns true if we are on Windows and this link is running on DCO-WIN.

This helper is used to enable DCO-WIN specific logic that is not relevant to other platforms.

Definition at line 1027 of file socket.h.

References SF_DCO_WIN, and link_socket::sockflags.

Referenced by link_socket_read(), link_socket_read_udp_win32(), link_socket_write(), link_socket_write_win32(), socket_get_last_error(), socket_recv_queue(), and socket_send_queue().

◆ socket_listen_event_handle()

event_t socket_listen_event_handle ( struct link_socket sock)

◆ socket_recv_queue()

int socket_recv_queue ( struct link_socket sock,
int  maxsize 
)

◆ socket_reset_listen_persistent()

static void socket_reset_listen_persistent ( struct link_socket sock)
inlinestatic

Definition at line 1290 of file socket.h.

References link_socket::listen_handle, reset_net_event_win32(), and link_socket::sd.

Referenced by multi_io_process_io().

◆ socket_send_queue()

int socket_send_queue ( struct link_socket sock,
struct buffer buf,
const struct link_socket_actual to 
)

◆ socket_set()

unsigned int socket_set ( struct link_socket sock,
struct event_set es,
unsigned int  rwflags,
void *  arg,
unsigned int *  persistent 
)

◆ socket_set_buffers()

void socket_set_buffers ( socket_descriptor_t  fd,
const struct socket_buffer_size sbs,
bool  reduce_size 
)

Sets the receive and send buffer sizes of a socket descriptor.

Parameters
fdThe socket to modify
sbsnew sizes.
reduce_sizeapply the new size even if smaller than current one

Definition at line 928 of file socket.c.

References D_OSBUF, msg, socket_buffer_size::rcvbuf, socket_buffer_size::sndbuf, socket_get_rcvbuf(), socket_get_sndbuf(), socket_set_rcvbuf(), and socket_set_sndbuf().

Referenced by create_socket(), link_socket_update_buffer_sizes(), and open_tun_afunix().

◆ socket_set_listen_persistent()

static void socket_set_listen_persistent ( struct link_socket sock,
struct event_set es,
void *  arg 
)
inlinestatic

◆ socket_stat()

const char * socket_stat ( const struct link_socket sock,
unsigned int  rwflags,
struct gc_arena gc 
)

◆ sockethandle_finalize()

int sockethandle_finalize ( sockethandle_t  sh,
struct overlapped_io io,
struct buffer buf,
struct link_socket_actual from 
)

◆ SocketHandleGetLastError()

static int SocketHandleGetLastError ( sockethandle_t  sh)
inlinestatic

Definition at line 308 of file socket.h.

References sockethandle_t::is_handle.

Referenced by link_socket_write_win32(), and sockethandle_finalize().

◆ SocketHandleGetOverlappedResult()

static BOOL SocketHandleGetOverlappedResult ( sockethandle_t  sh,
struct overlapped_io io 
)
inlinestatic

◆ SocketHandleSetInvalError()

static void SocketHandleSetInvalError ( sockethandle_t  sh)
inlinestatic

Definition at line 320 of file socket.h.

References sockethandle_t::is_handle.

Referenced by sockethandle_finalize().

◆ SocketHandleSetLastError()

static void SocketHandleSetLastError ( sockethandle_t  sh,
DWORD  err 
)
inlinestatic

Definition at line 314 of file socket.h.

References sockethandle_t::is_handle.

Referenced by link_socket_write_win32(), and sockethandle_finalize().

◆ sockets_read_residual()

bool sockets_read_residual ( const struct context c)

◆ stream_buf_read_setup()

static bool stream_buf_read_setup ( struct link_socket sock)
inlinestatic

Definition at line 1009 of file socket.h.

References link_socket_connection_oriented(), and stream_buf_read_setup_dowork().

Referenced by multi_io_dispatch(), and socket_set().

◆ stream_buf_read_setup_dowork()

bool stream_buf_read_setup_dowork ( struct link_socket sock)