patty/include/patty/client.h
XANTRONIX Development 3cf9d4093a Add patty_client_read(), patty_client_write()
Add patty_client_read(), patty_client_write() to allow direct I/O with
a pattyd(8) process from a patty_client object
2024-03-01 00:20:47 -05:00

199 lines
4.2 KiB
C

#ifndef _PATTY_CLIENT_H
#define _PATTY_CLIENT_H
enum patty_client_call {
PATTY_CLIENT_NONE,
PATTY_CLIENT_PING,
PATTY_CLIENT_SOCKET,
PATTY_CLIENT_SETSOCKOPT,
PATTY_CLIENT_BIND,
PATTY_CLIENT_LISTEN,
PATTY_CLIENT_ACCEPT,
PATTY_CLIENT_CONNECT,
PATTY_CLIENT_CLOSE,
PATTY_CLIENT_SENDTO,
PATTY_CLIENT_RECVFROM,
PATTY_CLIENT_CALL_COUNT
};
typedef struct _patty_client_sock {
int fd;
char path[PATTY_AX25_SOCK_PATH_SIZE];
} patty_client_sock;
typedef struct _patty_client {
int fd;
patty_dict *socks;
} patty_client;
patty_client *patty_client_new(const char *path);
void patty_client_destroy(patty_client *client);
ssize_t patty_client_read(patty_client *client, void *buf, size_t len);
ssize_t patty_client_write(patty_client *client, const void *buf, size_t len);
/*
* ping()
*/
int patty_client_ping(patty_client *client);
/*
* socket()
*/
typedef struct _patty_client_socket_request {
int proto;
int type;
} patty_client_socket_request;
typedef struct _patty_client_socket_response {
int fd;
int eno;
char path[PATTY_AX25_SOCK_PATH_SIZE];
} patty_client_socket_response;
int patty_client_socket(patty_client *client,
int proto,
int type);
/*
* setsockopt()
*/
typedef struct _patty_client_setsockopt_request {
int fd;
int opt;
size_t len;
} patty_client_setsockopt_request;
typedef struct _patty_client_setsockopt_params {
uint32_t flags;
size_t mtu,
window,
retry;
time_t ack;
} patty_client_setsockopt_params;
typedef struct _patty_client_setsockopt_if {
char name[8];
int state;
} patty_client_setsockopt_if;
typedef struct _patty_client_setsockopt_response {
int ret;
int eno;
} patty_client_setsockopt_response;
int patty_client_setsockopt(patty_client *client,
int fd,
int opt,
void *data,
size_t len);
/*
* bind()
*/
typedef struct _patty_client_bind_request {
int fd;
patty_ax25_addr addr;
} patty_client_bind_request;
typedef struct _patty_client_bind_response {
int ret;
int eno;
} patty_client_bind_response;
int patty_client_bind(patty_client *client,
int fd,
patty_ax25_addr *addr);
/*
* listen()
*/
typedef struct _patty_client_listen_request {
int fd;
} patty_client_listen_request;
typedef struct _patty_client_listen_response {
int ret;
int eno;
} patty_client_listen_response;
int patty_client_listen(patty_client *client,
int fd);
/*
* accept()
*/
typedef struct _patty_client_accept_request {
int fd;
} patty_client_accept_request;
typedef struct _patty_client_accept_response {
int ret;
int eno;
} patty_client_accept_response;
typedef struct _patty_client_accept_message {
int fd;
patty_ax25_addr peer;
char path[PATTY_AX25_SOCK_PATH_SIZE];
} patty_client_accept_message;
int patty_client_accept(patty_client *client,
int fd,
patty_ax25_addr *peer);
/*
* connect()
*/
typedef struct _patty_client_connect_request {
int fd;
patty_ax25_addr peer;
} patty_client_connect_request;
typedef struct _patty_client_connect_response {
int ret;
int eno;
} patty_client_connect_response;
int patty_client_connect(patty_client *client,
int fd,
patty_ax25_addr *peer);
/*
* close()
*/
typedef struct _patty_client_close_request {
int fd;
} patty_client_close_request;
typedef struct _patty_client_close_response {
int ret;
int eno;
} patty_client_close_response;
int patty_client_close(patty_client *client,
int fd);
/*
* sendto()
*/
ssize_t patty_client_sendto(patty_client *client,
int fd,
const void *buf,
size_t len,
patty_ax25_addr *addr);
/*
* recvfrom()
*/
int patty_client_recvfrom(patty_client *client,
int fd,
void *buf,
size_t len,
patty_ax25_addr *addr);
#endif /* _PATTY_CLIENT_H */