28#include "util/rats_export.h"
125 const char* channel,
const void* data,
size_t len);
127 const void* data,
size_t len);
132typedef void (*
rats_message_cb)(
void* user,
const char* peer_id_hex,
const void* data,
size_t len);
159 const char* topic,
const void* data,
size_t len);
171typedef void (*
rats_json_cb)(
void* user,
const char* peer_id_hex,
const char* json);
189 const char* name, uint64_t size,
int is_directory);
191 uint64_t bytes_transferred, uint64_t total_bytes,
int status);
257RATS_API
void rats_version(
int* major,
int* minor,
int* patch,
int* build);
void(* rats_json_cb)(void *user, const char *peer_id_hex, const char *json)
void rats_string_free(char *str)
rats_error_t rats_on_peer_disconnected(rats_t node, rats_peer_cb cb, void *user)
rats_t rats_create_config(const rats_config_t *config)
Create a node from a full config (NULL → all defaults).
rats_error_t rats_subscribe(rats_t node, const char *topic, rats_topic_cb cb, void *user)
Subscribe to topic; matching messages invoke cb on a reactor thread.
rats_error_t rats_start(rats_t node)
@ RATS_SECURITY_PLAINTEXT
rats_error_t rats_off_json(rats_t node, const char *type)
rats_t rats_create_ex(uint16_t listen_port, int enable_listen, const char *bind_address, rats_security_t security)
Create with basic control.
char * rats_protocol_name(rats_t node)
Application protocol identity bound into the handshake (see rats_config_t).
void rats_version(int *major, int *minor, int *patch, int *build)
Library version components.
void rats_set_log_file(const char *path)
Mirror logs to path (NULL/empty disables file logging).
rats_error_t rats_resume_file(rats_t node, const char *peer_id_hex, uint64_t transfer_id)
void(* rats_peer_cb)(void *user, const char *peer_id_hex)
rats_error_t rats_broadcast_json(rats_t node, const char *type, const char *json)
rats_error_t rats_accept_file(rats_t node, const char *peer_id_hex, uint64_t transfer_id, const char *dest_path)
Respond to an offer.
rats_error_t rats_enable_json(rats_t node)
Enable the JSON-messaging subsystem (the C view of MessageJson).
rats_error_t rats_unsubscribe(rats_t node, const char *topic)
rats_error_t rats_broadcast(rats_t node, const char *channel, const void *data, size_t len)
int64_t rats_peer_rtt_ms(rats_t node, const char *peer_id_hex)
Last measured round-trip time to a peer in milliseconds, or -1 if unknown (ping not enabled,...
rats_error_t rats_pause_file(rats_t node, const char *peer_id_hex, uint64_t transfer_id)
uint16_t rats_listen_port(rats_t node)
size_t rats_max_peers(rats_t node)
void(* rats_topic_cb)(void *user, const char *peer_id_hex, const char *topic, const void *data, size_t len)
rats_error_t rats_on_file_progress(rats_t node, rats_file_progress_cb cb, void *user)
rats_error_t rats_remove_reconnect(rats_t node, const char *host, uint16_t port)
Stop reconnecting to an address and drop it from the store.
rats_error_t rats_on_json(rats_t node, const char *type, rats_json_cb cb, void *user)
Register a handler for JSON messages of type.
rats_error_t rats_send_json(rats_t node, const char *peer_id_hex, const char *type, const char *json)
Send/broadcast a JSON message.
rats_error_t rats_enable_port_mapping(rats_t node, int enable_upnp, int enable_natpmp)
Automatic NAT port forwarding for the listen port (UPnP IGD + NAT-PMP).
rats_error_t rats_on_peer_connected(rats_t node, rats_peer_cb cb, void *user)
void(* rats_file_progress_cb)(void *user, uint64_t transfer_id, const char *peer_id_hex, uint64_t bytes_transferred, uint64_t total_bytes, int status)
rats_error_t rats_add_reconnect(rats_t node, const char *host, uint16_t port)
Add an address to keep connected (re-dialed on drop).
rats_error_t rats_enable_dht(rats_t node, uint16_t dht_port, const char *discovery_key)
DHT discovery.
rats_error_t rats_on(rats_t node, const char *channel, rats_message_cb cb, void *user)
rats_error_t rats_send(rats_t node, const char *peer_id_hex, const char *channel, const void *data, size_t len)
char ** rats_peer_ids(rats_t node, size_t *count)
Hex ids of currently-connected peers.
rats_error_t rats_once_json(rats_t node, const char *type, rats_json_cb cb, void *user)
Like rats_on_json, but the handler is removed right after it fires once.
rats_t rats_create(uint16_t listen_port)
Create a listening node (Noise, dual-stack, ephemeral identity, port 0 = ephemeral).
rats_config_t rats_config_default(void)
A config pre-filled with the library defaults (listening, Noise, ephemeral identity,...
@ RATS_ERR_ALREADY_STARTED
rats_error_t rats_publish(rats_t node, const char *topic, const void *data, size_t len)
Publish data on topic to every subscribed peer (and local subscribers).
void(* rats_file_offer_cb)(void *user, const char *peer_id_hex, uint64_t transfer_id, const char *name, uint64_t size, int is_directory)
void(* rats_message_cb)(void *user, const char *peer_id_hex, const void *data, size_t len)
rats_error_t rats_on_file_offer(rats_t node, rats_file_offer_cb cb, void *user)
const char * rats_version_string(void)
Library version as a static string, e.g.
rats_error_t rats_enable_ping(rats_t node)
Enable periodic ping/pong RTT probing of every peer.
rats_error_t rats_enable_mdns(rats_t node)
Local-network mDNS discovery.
char * rats_local_id(rats_t node)
Our self-certifying peer id as hex.
rats_error_t rats_cancel_file(rats_t node, const char *peer_id_hex, uint64_t transfer_id)
Control a live transfer (either side).
uint32_t rats_abi(void)
Packed ABI id as (major<<16)|(minor<<8)|patch — MAJOR bumps on breaking changes, MINOR on additive on...
rats_error_t rats_enable_pubsub(rats_t node)
Enable the pub/sub (GossipSub) subsystem.
rats_error_t rats_reject_file(rats_t node, const char *peer_id_hex, uint64_t transfer_id)
char * rats_protocol_version(rats_t node)
rats_error_t rats_on_file_complete(rats_t node, rats_file_complete_cb cb, void *user)
const char * rats_error_str(rats_error_t err)
Static human-readable name of an error code (do not free).
rats_error_t rats_enable_file_transfer(rats_t node, const char *temp_dir)
Enable the file-transfer subsystem.
void(* rats_file_complete_cb)(void *user, uint64_t transfer_id, int success, const char *path)
void rats_stop(rats_t node)
uint64_t rats_send_file(rats_t node, const char *peer_id_hex, const char *path)
Offer a file / directory tree to a peer.
void rats_set_log_level(rats_log_level_t level)
uint64_t rats_send_directory(rats_t node, const char *peer_id_hex, const char *dir_path)
rats_error_t rats_connect(rats_t node, const char *host, uint16_t port)
size_t rats_peer_count(rats_t node)
rats_error_t rats_enable_reconnect(rats_t node)
Enable the reconnection subsystem: re-dials dropped peers with exponential backoff.
const char * rats_git_describe(void)
Git describe of the build, e.g.
void rats_set_max_peers(rats_t node, size_t max_peers)
Cap on established peers (0 = unlimited).
void rats_free_peer_ids(char **ids, size_t count)
void rats_destroy(rats_t node)
const char * protocol_version
const char * protocol_name
const char * bind_address