60 lines
1.9 KiB
C
60 lines
1.9 KiB
C
#ifndef OMNISOCKET_PEER_TRANSPORT_H
|
|
#define OMNISOCKET_PEER_TRANSPORT_H
|
|
|
|
#include "common.h"
|
|
#include "network.h"
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
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
|