23#ifndef XCOM_TRANSPORT_H
24#define XCOM_TRANSPORT_H
29#include "xdr_gen/xcom_vp.h"
32#define MSG_HDR_SIZE (3 * XDR_INT_SIZE)
53#define SERIALIZED_BUFLEN(x) ((x) + MSG_HDR_SIZE)
55#define VERS_PTR(buf) (buf)
56#define LENGTH_PTR(buf) &((buf)[XDR_INT_SIZE])
57#define X_TYPE (2 * XDR_INT_SIZE)
58#define X_TAG (X_TYPE + 1)
59#define X_TAG_PTR(buf) &((buf)[X_TAG])
61#define CHECK_PTR(buf) &((buf)[3 * XDR_INT_SIZE])
63#define MSG_PTR(buf) &((buf)[MSG_HDR_SIZE])
67extern xcom_proto
const
148int send_msg(
server *s, node_no from, node_no to, uint32_t group_id,
171#ifndef XCOM_WITHOUT_OPENSSL
183 x_msg_type x_type,
unsigned int tag, int64_t *ret);
185 x_msg_type *x_type,
unsigned int *tag, int64_t *ret);
205#define IP_MAX_SIZE 512
238#define INITIAL_CONNECT_WAIT 0.1
239#define MAX_CONNECT_WAIT 10.0
240#define CONNECT_WAIT_INCREASE 1.0
static constexpr int default_connection_timeout()
Definition: network_provider.h:412
const char * p
Definition: ctype-mb.cc:1236
Definition: buf0block_hint.cc:29
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:191
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:32
site_def * new_site_def()
Definition: site_def.cc:295
struct pax_msg pax_msg
Definition: site_struct.h:36
Definition: node_connection.h:46
Definition: xcom_transport.h:78
int crash_on_error
Definition: xcom_transport.h:82
xcom_port port
Definition: xcom_transport.h:80
pax_msg * p
Definition: xcom_transport.h:81
char * srv
Definition: xcom_transport.h:79
Definition: server_struct.h:38
Definition: site_struct.h:42
Definition: server_struct.h:30
Definition: task_arg.h:41
unsigned short xcom_port
Definition: xcom_common.h:45
int send_to_others(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:942
int send_msg(server *s, node_no from, node_no to, uint32_t group_id, pax_msg *p)
Definition: xcom_transport.cc:833
int apply_xdr(void *buff, uint32_t bufflen, xdrproc_t xdrfunc, void *xdrdata, enum xdr_op op)
Definition: xcom_transport.cc:420
int deserialize_msg(pax_msg *p, xcom_proto x_proto, char *buf, uint32_t buflen)
Definition: xcom_transport.cc:542
int incoming_connection_task(task_arg arg)
Definition: xcom_transport.cc:757
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:381
int close_open_connection(connection_descriptor *conn)
Definition: xcom_transport.cc:101
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:243
xcom_proto set_latest_common_proto(xcom_proto x_proto)
Definition: xcom_transport.cc:1861
int serialize_msg(pax_msg *p, xcom_proto x_proto, uint32_t *buflen, char **buf)
Definition: xcom_transport.cc:533
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:1784
void get_header_1_0(unsigned char header_buf[], uint32_t *msgsize, x_msg_type *x_type, unsigned int *tag)
Definition: xcom_transport.cc:1120
xcom_proto minimum_ipv6_version()
Returns the version from which nodes are able to speak IPv6.
Definition: xcom_transport.cc:1881
xcom_proto get_latest_common_proto()
Definition: xcom_transport.cc:1865
int srv_ref(server *s)
Definition: xcom_transport.cc:740
void garbage_collect_servers()
Definition: xcom_transport.cc:706
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:1137
void init_crc32c()
Definition: xcom_transport.cc:559
int send_to_all_except_self(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:908
int flush_srv_buf(server *s, int64_t *ret)
Definition: xcom_transport.cc:200
void server_detected(server *s)
Updates timestamp of server.
Definition: xcom_transport.cc:788
int send_server_msg(site_def const *s, node_no i, pax_msg *p)
Definition: xcom_transport.cc:861
x_msg_type
Definition: xcom_transport.h:71
@ x_normal
Definition: xcom_transport.h:72
@ x_version_reply
Definition: xcom_transport.h:74
@ x_version_req
Definition: xcom_transport.h:73
uint32_t crc32c_hash(char *buf, char *end)
void write_protoversion(unsigned char *buf, xcom_proto proto_vers)
Definition: xcom_transport.cc:364
void reset_srv_buf(srv_buf *sb)
Definition: xcom_transport.cc:153
#define IP_MAX_SIZE
Definition: xcom_transport.h:205
int tcp_reconnection_task(task_arg arg)
int check_protoversion(xcom_proto x_proto, xcom_proto negotiated)
Definition: xcom_transport.cc:370
int sender_task(task_arg arg)
Definition: xcom_transport.cc:1418
xcom_proto const my_xcom_version
Definition: xcom_transport.cc:81
void init_xcom_transport(xcom_port listen_port)
Definition: xcom_transport.cc:146
void put_header_1_0(unsigned char header_buf[], uint32_t msgsize, x_msg_type x_type, unsigned int tag)
Definition: xcom_transport.cc:1128
int send_to_someone(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:949
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:2020
int srv_unref(server *s)
Definition: xcom_transport.cc:746
int send_to_all(pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:916
void update_servers(site_def *s, cargo_type operation)
Definition: xcom_transport.cc:1678
int local_sender_task(task_arg arg)
Definition: xcom_transport.cc:1627
xcom_port xcom_get_port(char *a)
linkage connect_wait
Definition: xcom_transport.cc:1407
xcom_proto const my_min_xcom_version
Definition: xcom_transport.cc:79
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:1251
int send_to_all_site(site_def const *s, pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:900
double server_active(site_def const *s, node_no i)
Definition: xcom_transport.cc:721
int send_to_self_site(site_def const *s, pax_msg *p)
void shutdown_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1828
xcom_proto read_protoversion(unsigned char *p)
Definition: xcom_transport.cc:368
void close_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1823
connection_descriptor * open_new_local_connection(const char *server, xcom_port port)
Definition: xcom_transport.cc:113
xcom_proto negotiate_protocol(xcom_proto proto_vers)
Definition: xcom_transport.cc:1869
connection_descriptor * open_new_connection(const char *server, xcom_port port, int connection_timeout=Network_provider::default_connection_timeout())
Definition: xcom_transport.cc:105
void wakeup_sender()
Definition: xcom_transport.cc:1411
xcom_proto common_xcom_version(site_def const *site)
Definition: xcom_transport.cc:1850
void invalidate_servers(const site_def *old_site_def, const site_def *new_site_def)
Definition: xcom_transport.cc:1757
int send_to_acceptors(pax_msg *p, const char *dbg)
Definition: xcom_transport.cc:989
void reset_connection(connection_descriptor *con)
Definition: xcom_transport.cc:1838
void ssl_free_con(connection_descriptor *con)
Definition: xcom_transport.cc:1816
bool_t(* xdrproc_t)(XDR *, void *,...)
Definition: xdr.h:142
xdr_op
Definition: xdr.h:78