24#ifndef XCOM_TRANSPORT_H
25#define XCOM_TRANSPORT_H
30#include "xdr_gen/xcom_vp.h"
33#define MSG_HDR_SIZE (3 * XDR_INT_SIZE)
54#define SERIALIZED_BUFLEN(x) ((x) + MSG_HDR_SIZE)
56#define VERS_PTR(buf) (buf)
57#define LENGTH_PTR(buf) &((buf)[XDR_INT_SIZE])
58#define X_TYPE (2 * XDR_INT_SIZE)
59#define X_TAG (X_TYPE + 1)
60#define X_TAG_PTR(buf) &((buf)[X_TAG])
62#define CHECK_PTR(buf) &((buf)[3 * XDR_INT_SIZE])
64#define MSG_PTR(buf) &((buf)[MSG_HDR_SIZE])
68extern xcom_proto
const
149int send_msg(
server *s, node_no from, node_no to, uint32_t group_id,
174#ifndef XCOM_WITHOUT_OPENSSL
186 x_msg_type x_type,
unsigned int tag, int64_t *ret);
188 x_msg_type *x_type,
unsigned int *tag, int64_t *ret);
208#define IP_MAX_SIZE 512
241#define INITIAL_CONNECT_WAIT 0.1
242#define MAX_CONNECT_WAIT 10.0
243#define CONNECT_WAIT_INCREASE 1.0
static constexpr int default_connection_timeout()
Definition: network_provider.h:466
const char * p
Definition: ctype-mb.cc:1237
#define SUPPRESS_UBSAN
Definition: my_compiler.h:134
Definition: buf0block_hint.cc:30
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:192
network_provider_dynamic_log_level
Dynamic log level enum values.
Definition: network_provider.h:103
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
site_def * new_site_def()
Definition: site_def.cc:296
struct pax_msg pax_msg
Definition: site_struct.h:37
Definition: node_connection.h:47
Definition: xcom_transport.h:79
int crash_on_error
Definition: xcom_transport.h:83
xcom_port port
Definition: xcom_transport.h:81
pax_msg * p
Definition: xcom_transport.h:82
char * srv
Definition: xcom_transport.h:80
Definition: server_struct.h:39
Definition: site_struct.h:43
Definition: server_struct.h:31
Definition: task_arg.h:42
unsigned short xcom_port
Definition: xcom_common.h:46
int send_to_others(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:946
int send_msg(server *s, node_no from, node_no to, uint32_t group_id, pax_msg *p)
Definition: xcom_transport.cc:837
int deserialize_msg(pax_msg *p, xcom_proto x_proto, char *buf, uint32_t buflen)
Definition: xcom_transport.cc:545
int incoming_connection_task(task_arg arg)
Definition: xcom_transport.cc:760
int send_proto(connection_descriptor *con, xcom_proto x_proto, x_msg_type x_type, unsigned int tag, int64_t *ret)
Definition: xcom_transport.cc:383
int close_open_connection(connection_descriptor *conn)
Definition: xcom_transport.cc:102
int is_new_node_eligible_for_ipv6(xcom_proto incoming_proto, const site_def *current_site_def)
Checks if an incoming node is eligible to enter the group.
Definition: xcom_transport.cc:245
xcom_proto set_latest_common_proto(xcom_proto x_proto)
Definition: xcom_transport.cc:1903
int serialize_msg(pax_msg *p, xcom_proto x_proto, uint32_t *buflen, char **buf)
Definition: xcom_transport.cc:536
char const * xcom_proto_name(xcom_proto proto_vers)
int recv_proto(connection_descriptor const *rfd, xcom_proto *x_proto, x_msg_type *x_type, unsigned int *tag, int64_t *ret)
int connect_tcp(char *server, xcom_port port, int *ret)
int tcp_reaper_task(task_arg arg)
Definition: xcom_transport.cc:1826
void get_header_1_0(unsigned char header_buf[], uint32_t *msgsize, x_msg_type *x_type, unsigned int *tag)
Definition: xcom_transport.cc:1124
xcom_proto minimum_ipv6_version()
Returns the version from which nodes are able to speak IPv6.
Definition: xcom_transport.cc:1923
xcom_proto get_latest_common_proto()
Definition: xcom_transport.cc:1907
int srv_ref(server *s)
Definition: xcom_transport.cc:743
void garbage_collect_servers()
Definition: xcom_transport.cc:709
int read_msg(connection_descriptor *rfd, pax_msg *p, server *s, int64_t *ret)
Reads message from connection rfd without buffering reads.
Definition: xcom_transport.cc:1141
void init_crc32c()
Definition: xcom_transport.cc:562
int send_to_all_except_self(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:912
int flush_srv_buf(server *s, int64_t *ret)
Definition: xcom_transport.cc:202
void server_detected(server *s)
Updates timestamp of server.
Definition: xcom_transport.cc:791
int send_server_msg(site_def const *s, node_no i, pax_msg *p)
Definition: xcom_transport.cc:865
x_msg_type
Definition: xcom_transport.h:72
@ x_normal
Definition: xcom_transport.h:73
@ x_version_reply
Definition: xcom_transport.h:75
@ x_version_req
Definition: xcom_transport.h:74
uint32_t crc32c_hash(char *buf, char *end)
void write_protoversion(unsigned char *buf, xcom_proto proto_vers)
Definition: xcom_transport.cc:366
void reset_srv_buf(srv_buf *sb)
Definition: xcom_transport.cc:155
#define IP_MAX_SIZE
Definition: xcom_transport.h:208
int tcp_reconnection_task(task_arg arg)
int check_protoversion(xcom_proto x_proto, xcom_proto negotiated)
Definition: xcom_transport.cc:372
int sender_task(task_arg arg)
Definition: xcom_transport.cc:1450
xcom_proto const my_xcom_version
Definition: xcom_transport.cc:82
void init_xcom_transport(xcom_port listen_port)
Definition: xcom_transport.cc:148
void put_header_1_0(unsigned char header_buf[], uint32_t msgsize, x_msg_type x_type, unsigned int tag)
Definition: xcom_transport.cc:1132
int send_to_someone(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:953
int get_ip_and_port(char const *address, char ip[IP_MAX_SIZE], xcom_port *port)
Get the ip and port object from a given address in the authorized input format.
Definition: xcom_transport.cc:2062
int srv_unref(server *s)
Definition: xcom_transport.cc:749
int send_to_all(pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:920
void update_servers(site_def *s, cargo_type operation)
Definition: xcom_transport.cc:1720
int local_sender_task(task_arg arg)
Definition: xcom_transport.cc:1680
int apply_xdr(void *buff, uint32_t bufflen, xdrproc_t xdrfunc, void *xdrdata, enum xdr_op op) SUPPRESS_UBSAN
Definition: xcom_transport.cc:423
xcom_port xcom_get_port(char *a)
linkage connect_wait
Definition: xcom_transport.cc:1411
xcom_proto const my_min_xcom_version
Definition: xcom_transport.cc:80
char * xcom_get_name(char *a)
int buffered_read_msg(connection_descriptor *rfd, srv_buf *buf, pax_msg *p, server *s, int64_t *ret)
Reads message from connection rfd with buffering reads.
Definition: xcom_transport.cc:1255
connection_descriptor * open_new_connection(const char *server, xcom_port port, int connection_timeout=Network_provider::default_connection_timeout(), network_provider_dynamic_log_level log_level=network_provider_dynamic_log_level::PROVIDED)
Definition: xcom_transport.cc:106
int send_to_all_site(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:904
double server_active(site_def const *s, node_no i)
Definition: xcom_transport.cc:724
int send_to_self_site(site_def const *s, pax_msg *p)
void shutdown_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1870
xcom_proto read_protoversion(unsigned char *p)
Definition: xcom_transport.cc:370
void close_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1865
connection_descriptor * open_new_local_connection(const char *server, xcom_port port)
Definition: xcom_transport.cc:115
xcom_proto negotiate_protocol(xcom_proto proto_vers)
Definition: xcom_transport.cc:1911
void wakeup_sender()
Definition: xcom_transport.cc:1415
xcom_proto common_xcom_version(site_def const *site)
Definition: xcom_transport.cc:1892
void invalidate_servers(const site_def *old_site_def, const site_def *new_site_def)
Definition: xcom_transport.cc:1799
int send_to_acceptors(pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:993
void reset_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1880
void ssl_free_con(connection_descriptor *con)
Definition: xcom_transport.cc:1858
bool_t(* xdrproc_t)(XDR *, void *,...)
Definition: xdr.h:143
xdr_op
Definition: xdr.h:79