Files
@ fc987660fdee
Branch filter:
Location: CSY/reowolf/reowolf.h
fc987660fdee
6.0 KiB
text/x-chdr
WIP on compiler rearchitecting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | /* CBindgen generated */
#ifndef REOWOLF_HEADER_DEFINED
#define REOWOLF_HEADER_DEFINED
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#define RW_BAD_FD -5
#define RW_BAD_SOCKADDR -8
#define RW_CLOSE_FAIL -4
#define RW_CONNECT_FAILED -6
#define RW_LOCK_POISONED -3
#define RW_OK 0
#define RW_TL_ERR -1
#define RW_WOULD_BLOCK -7
#define RW_WRONG_STATE -2
typedef enum {
EndpointPolarity_Active,
EndpointPolarity_Passive,
} EndpointPolarity;
typedef enum {
Polarity_Putter,
Polarity_Getter,
} Polarity;
typedef struct Arc_ProtocolDescription Arc_ProtocolDescription;
typedef struct Connector Connector;
typedef uint32_t ConnectorId;
typedef uint32_t U32Suffix;
typedef struct {
ConnectorId connector_id;
U32Suffix u32_suffix;
} Id;
typedef Id PortId;
typedef struct {
uint8_t ipv4[4];
uint16_t port;
} FfiSocketAddr;
/**
* Given
* - an initialized connector in setup or connecting state,
* - a string slice for the component's identifier in the connector's configured protocol description,
* - a set of ports (represented as a slice; duplicates are ignored) in the native component's interface,
* the connector creates a new (internal) protocol component C, such that the set of native ports are moved to C.
* Usable in {setup, communication} states.
*/
int connector_add_component(Connector *connector,
const uint8_t *ident_ptr,
uintptr_t ident_len,
const PortId *ports_ptr,
uintptr_t ports_len);
/**
* Given
* - an initialized connector in setup or connecting state,
* - a utf-8 encoded socket address,
* - the logical polarity of P,
* - the "physical" polarity in {Active, Passive} of the endpoint through which P's peer will be discovered,
* returns P, a port newly added to the native interface.
*/
int connector_add_net_port(Connector *connector,
PortId *port,
FfiSocketAddr addr,
Polarity port_polarity,
EndpointPolarity endpoint_polarity);
/**
* Given an initialized connector in setup or connecting state,
* - Creates a new directed port pair with logical channel putter->getter,
* - adds the ports to the native component's interface,
* - and returns them using the given out pointers.
* Usable in {setup, communication} states.
*/
void connector_add_port_pair(Connector *connector, PortId *out_putter, PortId *out_getter);
/**
* Given
* - an initialized connector in setup or connecting state,
* - a utf-8 encoded BIND socket addresses (i.e., "local"),
* - a utf-8 encoded CONNECT socket addresses (i.e., "peer"),
* returns [P, G] via out pointers [putter, getter],
* - where P is a Putter port that sends messages into the socket
* - where G is a Getter port that recvs messages from the socket
*/
int connector_add_udp_mediator_component(Connector *connector,
PortId *putter,
PortId *getter,
FfiSocketAddr local_addr,
FfiSocketAddr peer_addr);
/**
* Connects this connector to the distributed system of connectors reachable through endpoints,
* Usable in setup state, and changes the state to communication.
*/
int connector_connect(Connector *connector, int64_t timeout_millis);
/**
* Destroys the given a pointer to the connector on the heap, freeing its resources.
* Usable in {setup, communication} states.
*/
void connector_destroy(Connector *connector);
int connector_get(Connector *connector, PortId port);
const uint8_t *connector_gotten_bytes(Connector *connector, PortId port, uintptr_t *out_len);
/**
* Initializes `out` with a new connector using the given protocol description as its configuration.
* The connector uses the given (internal) connector ID.
*/
Connector *connector_new(const Arc_ProtocolDescription *pd);
Connector *connector_new_with_id(const Arc_ProtocolDescription *pd,
ConnectorId connector_id);
Connector *connector_new_logging(const Arc_ProtocolDescription *pd,
const uint8_t *path_ptr,
uintptr_t path_len);
Connector *connector_new_logging_with_id(const Arc_ProtocolDescription *pd,
const uint8_t *path_ptr,
uintptr_t path_len,
ConnectorId connector_id);
intptr_t connector_next_batch(Connector *connector);
void connector_print_debug(Connector *connector);
/**
* Convenience function combining the functionalities of
* "payload_new" with "connector_put_payload".
*/
int connector_put_bytes(Connector *connector,
PortId port,
const uint8_t *bytes_ptr,
uintptr_t bytes_len);
intptr_t connector_sync(Connector *connector, int64_t timeout_millis);
/**
* Given an initialized protocol description, initializes `out` with a clone which can be independently created or destroyed.
*/
Arc_ProtocolDescription *protocol_description_clone(const Arc_ProtocolDescription *pd);
/**
* Destroys the given initialized protocol description and frees its resources.
*/
void protocol_description_destroy(Arc_ProtocolDescription *pd);
/**
* Parses the utf8-encoded string slice to initialize a new protocol description object.
* - On success, initializes `out` and returns 0
* - On failure, stores an error string (see `reowolf_error_peek`) and returns -1
*/
Arc_ProtocolDescription *protocol_description_parse(const uint8_t *pdl, uintptr_t pdl_len);
/**
* Returns length (via out pointer) and pointer (via return value) of the last Reowolf error.
* - pointer is NULL iff there was no last error
* - data at pointer is null-delimited
* - len does NOT include the length of the null-delimiter
* If len is NULL, it will not written to.
*/
const uint8_t *reowolf_error_peek(uintptr_t *len);
#endif /* REOWOLF_HEADER_DEFINED */
|