#ifndef OMNISOCKET_PEER_TRANSPORT_H #define OMNISOCKET_PEER_TRANSPORT_H #include "common.h" #include "network.h" #include #include typedef struct PeerTransport PeerTransport; typedef struct PeerTransportSession PeerTransportSession; typedef struct PeerTransportEvent { int kind; PeerTransportSession *session; MsgHeader header; } PeerTransportEvent; enum { PEER_TRANSPORT_EVENT_NONE = 0, PEER_TRANSPORT_EVENT_MESSAGE = 1, PEER_TRANSPORT_EVENT_CLOSED = 2 }; PeerTransport *peer_transport_open(OmniRole role, OmniProtocol proto, const char *bind_ip, uint16_t bind_port, const char *peer_ip, uint16_t peer_port); void peer_transport_close(PeerTransport *transport); PeerTransportSession *peer_transport_default_session(PeerTransport *transport); int peer_transport_send(PeerTransport *transport, PeerTransportSession *session, uint32_t type, const void *payload, uint32_t payload_len); int peer_transport_next_event(PeerTransport *transport, PeerTransportEvent *event, uint8_t *payload_buf, size_t payload_cap, int timeout_ms); void peer_transport_close_session(PeerTransport *transport, PeerTransportSession *session); const char *peer_transport_session_remote(const PeerTransportSession *session, char *buf, size_t buf_sz); uint16_t peer_transport_session_remote_port(const PeerTransportSession *session); const char *peer_transport_proto_name(OmniProtocol proto); #endif