38# if defined(PKG_DLL_EXPORTS) && defined(PKG_DLL_IMPORTS)
39# error "Only PKG_DLL_EXPORTS or PKG_DLL_IMPORTS can be defined, not both."
40# elif defined(PKG_DLL_EXPORTS)
41# define PKG_EXPORT COMPILER_DLLEXPORT
42# elif defined(PKG_DLL_IMPORTS)
43# define PKG_EXPORT COMPILER_DLLIMPORT
73#define PKG_MAGIC 0x41FE
80#define PKG_STREAMLEN (32*1024)
135#define PKC_NULL ((struct pkg_conn *)0)
136#define PKC_ERROR ((struct pkg_conn *)(-1L))
142#define pkg_send_vls(type, vlsp, pkg) \
143 pkg_send( (type), bu_vls_addr((vlsp)), bu_vls_strlen((vlsp))+1, (pkg) )
384#define PKG_ADDR_ENVVAR "PKG_ADDR"
387#define PKG_TRANSPORT_PREFER_ENVVAR "PKG_TRANSPORT_PREFER"
Header file for the BRL-CAD common definitions.
int pkg_mux_is_ready_conn(const pkg_mux_t *m, const struct pkg_conn *pc)
const char * pkg_child_addr(struct pkg_conn *pc)
int pkg_waitfor(int type, char *buf, size_t len, struct pkg_conn *pc)
int pkg_get_read_fd(const struct pkg_conn *pc)
int pkg_send(int type, const char *buf, size_t len, struct pkg_conn *pc)
pkg_mux_t * pkg_mux_create(void)
char * pkg_pshort(char *buf, unsigned short s)
void pkg_mux_remove_fd(pkg_mux_t *m, int fd)
int pkg_addr_is_ipc_listener(const char *addr)
int pkg_flush(struct pkg_conn *pc)
void(* pkg_errlog)(const char *msg)
unsigned long pkg_glong(char *buf)
void pkg_mux_destroy(pkg_mux_t *m)
int pkg_stream(int type, const char *buf, size_t len, struct pkg_conn *pc)
pkg_listener_t * pkg_listen(const char *service, const char *iface_or_null, int backlog, pkg_errlog errlog)
int pkg_mux_add_conn(pkg_mux_t *m, const struct pkg_conn *pc)
int pkg_pair(struct pkg_conn **parent_end, struct pkg_conn **child_end, const struct pkg_switch *switchp, pkg_errlog errlog)
int pkg_mux_add_fd(pkg_mux_t *m, int fd, int is_socket)
struct pkg_conn * pkg_adopt_stdio(const struct pkg_switch *switchp, pkg_errlog errlog)
int pkg_set_recv_buffer(struct pkg_conn *pc, size_t bytes)
int pkg_mux_add_listener(pkg_mux_t *m, const pkg_listener_t *L)
int pkg_block(struct pkg_conn *pc)
int pkg_pair_prefer(struct pkg_conn **parent_end, struct pkg_conn **child_end, const struct pkg_switch *switchp, pkg_errlog errlog, pkg_transport_t preferred)
void(* pkg_callback)(struct pkg_conn *, char *)
int pkg_get_listener_fd(const pkg_listener_t *L)
struct pkg_conn * pkg_open(const char *host, const char *service, const char *protocol, const char *username, const char *passwd, const struct pkg_switch *switchp, pkg_errlog errlog)
int pkg_2send(int type, const char *buf1, size_t len1, const char *buf2, size_t len2, struct pkg_conn *pc)
void pkg_close(struct pkg_conn *pc)
int pkg_get_listener_port(const pkg_listener_t *L)
int pkg_ipc_addr(char *addr, size_t len, const char *name_hint)
struct pkg_conn * pkg_adopt_socket(int fd, const struct pkg_switch *switchp, pkg_errlog errlog)
struct pkg_conn * pkg_connect_env(const struct pkg_switch *switchp, pkg_errlog errlog)
struct pkg_conn * pkg_accept(pkg_listener_t *L, const struct pkg_switch *switchp, pkg_errlog errlog, int nonblocking)
int pkg_set_tls(struct pkg_conn *pc, void *tls_ctx, ptrdiff_t(*tls_read)(void *ctx, void *buf, size_t n), ptrdiff_t(*tls_write)(void *ctx, const void *buf, size_t n), void(*tls_free)(void *ctx))
void pkg_listener_close(pkg_listener_t *L)
const char * pkg_child_addr_env(struct pkg_conn *pc)
int pkg_set_nodelay(struct pkg_conn *pc, int on)
char * pkg_bwaitfor(int type, struct pkg_conn *pc)
int pkg_process(struct pkg_conn *)
int pkg_suckin(struct pkg_conn *)
int pkg_mux_is_ready_fd(const pkg_mux_t *m, int fd)
int pkg_move_high_fd(struct pkg_conn *pc, int min_fd)
struct pkg_conn * pkg_connect_addr(const char *addr, const struct pkg_switch *switchp, pkg_errlog errlog)
int pkg_mux_is_ready_listener(const pkg_mux_t *m, const pkg_listener_t *L)
int pkg_get_write_fd(const struct pkg_conn *pc)
struct pkg_conn * pkg_adopt_fds(int rfd, int wfd, const struct pkg_switch *switchp, pkg_errlog errlog)
int pkg_mux_wait(pkg_mux_t *m, int timeout_ms)
int pkg_set_send_buffer(struct pkg_conn *pc, size_t bytes)
unsigned short pkg_gshort(char *buf)
int pkg_is_stdio_mode(const struct pkg_conn *pc)
char * pkg_plong(char *buf, unsigned long l)
const char * pkg_version(void)
@ PKG_TRANSPORT_TCP
TCP loopback transport.
@ PKG_TRANSPORT_SOCKET
POSIX socketpair transport.
@ PKG_TRANSPORT_AUTO
Use default probe order.
@ PKG_TRANSPORT_PIPE
Anonymous pipe transport.
int pkc_tx_kind
transport kind: 0=socket/TCP, 1=pipe pair
int pkc_fd
TCP connection fd.
void * pkc_tls_ctx
opaque TLS state (e.g. SSL *)
struct pkg_header pkc_hdr
hdr of cur msg
pkg_errlog pkc_errlog
Error message logger.
int pkc_incur
current pos in inbuf
int pkc_strpos
index into stream buffer
int pkc_inend
first unused pos in inbuf
int pkc_left
# bytes pkg_get expects
int pkc_in_fd
input fd for split-fd (pipe) transports
char * pkc_inbuf
input stream buffer
char pkc_addr_env[160]
PKG_ADDR=... env string for child spawn (future phases)
void * pkc_user_data
User defined pointer to data for the current pkg_type.
int pkc_listen_fd
listening socket fd for lazy-accept (TCP, future phases)
ptrdiff_t(* pkc_tls_write)(void *ctx, const void *buf, size_t n)
TLS write callback; NULL = use raw fd.
unsigned int pkc_magic
for validating pointers
int pkc_out_fd
output fd for split-fd (pipe) transports
size_t pkc_len
pkg_len, in host order
void(* pkc_tls_free)(void *ctx)
called by pkg_close() to free TLS state
const struct pkg_switch * pkc_switch
Array of message handlers.
ptrdiff_t(* pkc_tls_read)(void *ctx, void *buf, size_t n)
TLS read callback; NULL = use raw fd.
char * pkc_curpos
current position in pkg_buf
void * pkc_server_data
used to hold server data for callbacks
unsigned short pkc_type
pkg_type, in host order
char pkc_addr[128]
transport address string (populated by future phases)
char pkc_stream[PKG_STREAMLEN]
output stream
int pkc_inlen
length of pkc_inbuf
char * pkc_buf
start of dynamic buf
unsigned short pks_type
Type code.
void * pks_user_data
User defined pointer to data.
const char * pks_title
Description of message type.
pkg_callback pks_handler
Message Handler.