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
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:945
int send_msg(server *s, node_no from, node_no to, uint32_t group_id, pax_msg *p)
Definition: xcom_transport.cc:836
int apply_xdr(void *buff, uint32_t bufflen, xdrproc_t xdrfunc, void *xdrdata, enum xdr_op op)
Definition: xcom_transport.cc:422
int deserialize_msg(pax_msg *p, xcom_proto x_proto, char *buf, uint32_t buflen)
Definition: xcom_transport.cc:544
int incoming_connection_task(task_arg arg)
Definition: xcom_transport.cc:759
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:1902
int serialize_msg(pax_msg *p, xcom_proto x_proto, uint32_t *buflen, char **buf)
Definition: xcom_transport.cc:535
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:1825
void get_header_1_0(unsigned char header_buf[], uint32_t *msgsize, x_msg_type *x_type, unsigned int *tag)
Definition: xcom_transport.cc:1123
xcom_proto minimum_ipv6_version()
Returns the version from which nodes are able to speak IPv6.
Definition: xcom_transport.cc:1922
xcom_proto get_latest_common_proto()
Definition: xcom_transport.cc:1906
int srv_ref(server *s)
Definition: xcom_transport.cc:742
void garbage_collect_servers()
Definition: xcom_transport.cc:708
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:1140
void init_crc32c()
Definition: xcom_transport.cc:561
int send_to_all_except_self(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:911
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:790
int send_server_msg(site_def const *s, node_no i, pax_msg *p)
Definition: xcom_transport.cc:864
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:1449
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:1131
int send_to_someone(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:952
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:2061
int srv_unref(server *s)
Definition: xcom_transport.cc:748
int send_to_all(pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:919
void update_servers(site_def *s, cargo_type operation)
Definition: xcom_transport.cc:1719
int local_sender_task(task_arg arg)
Definition: xcom_transport.cc:1679
xcom_port xcom_get_port(char *a)
linkage connect_wait
Definition: xcom_transport.cc:1410
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:1254
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:903
double server_active(site_def const *s, node_no i)
Definition: xcom_transport.cc:723
int send_to_self_site(site_def const *s, pax_msg *p)
void shutdown_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1869
xcom_proto read_protoversion(unsigned char *p)
Definition: xcom_transport.cc:370
void close_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1864
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:1910
void wakeup_sender()
Definition: xcom_transport.cc:1414
xcom_proto common_xcom_version(site_def const *site)
Definition: xcom_transport.cc:1891
void invalidate_servers(const site_def *old_site_def, const site_def *new_site_def)
Definition: xcom_transport.cc:1798
int send_to_acceptors(pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:992
void reset_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1879
void ssl_free_con(connection_descriptor *con)
Definition: xcom_transport.cc:1857
bool_t(* xdrproc_t)(XDR *, void *,...)
Definition: xdr.h:143
xdr_op
Definition: xdr.h:79