#include "tcp_listener.h"
typedef enum uct_tcp_sockcm_ep_state {
UCT_TCP_SOCKCM_EP_ON_SERVER = UCS_BIT(0),
UCT_TCP_SOCKCM_EP_ON_CLIENT = UCS_BIT(1),
UCT_TCP_SOCKCM_EP_SERVER_CREATED = UCS_BIT(2),
UCT_TCP_SOCKCM_EP_PRIV_DATA_PACKED = UCS_BIT(3),
UCT_TCP_SOCKCM_EP_HDR_RECEIVED = UCS_BIT(4),
UCT_TCP_SOCKCM_EP_DATA_SENT = UCS_BIT(5),
UCT_TCP_SOCKCM_EP_DATA_RECEIVED = UCS_BIT(6),
UCT_TCP_SOCKCM_EP_CLIENT_CONNECTED_CB_INVOKED = UCS_BIT(7),
UCT_TCP_SOCKCM_EP_SERVER_NOTIFY_CB_INVOKED = UCS_BIT(8),
UCT_TCP_SOCKCM_EP_CLIENT_NOTIFY_CALLED = UCS_BIT(9),
UCT_TCP_SOCKCM_EP_CLIENT_NOTIFY_SENT = UCS_BIT(10),
UCT_TCP_SOCKCM_EP_DISCONNECTING = UCS_BIT(11),
UCT_TCP_SOCKCM_EP_DISCONNECTED = UCS_BIT(12),
UCT_TCP_SOCKCM_EP_FAILED = UCS_BIT(13),
UCT_TCP_SOCKCM_EP_CLIENT_GOT_REJECT = UCS_BIT(14),
UCT_TCP_SOCKCM_EP_PACK_CB_FAILED = UCS_BIT(15),
UCT_TCP_SOCKCM_EP_SERVER_REJECT_CALLED = UCS_BIT(16),
UCT_TCP_SOCKCM_EP_SERVER_REJECT_SENT = UCS_BIT(17),
UCT_TCP_SOCKCM_EP_RESOLVE_CB_FAILED = UCS_BIT(18),
UCT_TCP_SOCKCM_EP_RESOLVE_CB_INVOKED = UCS_BIT(19),
UCT_TCP_SOCKCM_EP_SERVER_CONN_REQ_CB_INVOKED = UCS_BIT(20)
} uct_tcp_sockcm_ep_state_t;
struct uct_tcp_sockcm_ep {
uct_cm_base_ep_t super;
int fd;
uint32_t state;
uct_tcp_listener_t *listener;
ucs_list_link_t list;
struct {
void *buf;
size_t length;
size_t offset;
} comm_ctx;
};
UCS_CLASS_DECLARE(uct_tcp_sockcm_ep_t, const uct_ep_params_t *);
UCS_CLASS_DECLARE_NEW_FUNC(uct_tcp_sockcm_ep_t, uct_ep_t, const uct_ep_params_t *);
UCS_CLASS_DECLARE_DELETE_FUNC(uct_tcp_sockcm_ep_t, uct_ep_t);
static UCS_F_ALWAYS_INLINE
uct_tcp_sockcm_t *uct_tcp_sockcm_ep_get_cm(uct_tcp_sockcm_ep_t *cep)
{
return ucs_container_of(cep->super.super.super.iface, uct_tcp_sockcm_t,
super.iface);
}
void uct_tcp_sockcm_ep_close_fd(int *fd);
ucs_status_t uct_tcp_sockcm_ep_create(const uct_ep_params_t *params, uct_ep_h* ep_p);
ucs_status_t uct_tcp_sockcm_ep_connect(uct_ep_h ep,
const uct_ep_connect_params_t *params);
ucs_status_t uct_tcp_sockcm_ep_disconnect(uct_ep_h ep, unsigned flags);
ucs_status_t uct_tcp_sockcm_ep_send(uct_tcp_sockcm_ep_t *cep);
ucs_status_t uct_tcp_sockcm_ep_progress_send(uct_tcp_sockcm_ep_t *cep);
ucs_status_t uct_tcp_sockcm_ep_recv(uct_tcp_sockcm_ep_t *cep);
ucs_status_t uct_tcp_sockcm_ep_set_sockopt(uct_tcp_sockcm_ep_t *ep);
ucs_status_t uct_tcp_sockcm_cm_ep_conn_notify(uct_ep_h ep);
const char *uct_tcp_sockcm_cm_ep_peer_addr_str(uct_tcp_sockcm_ep_t *cep,
char *buf, size_t max);
void uct_tcp_sockcm_close_ep(uct_tcp_sockcm_ep_t *ep);
void uct_tcp_sockcm_ep_handle_event_status(uct_tcp_sockcm_ep_t *ep,
ucs_status_t status,
ucs_event_set_types_t events,
const char *reason);