patty/include/patty/client.h
2024-03-01 00:20:47 -05:00

189 lines
4 KiB
C

#ifndef _PATTY_CLIENT_H
#define _PATTY_CLIENT_H
enum patty_client_call {
PATTY_CLIENT_NONE,
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);
/*
* socket()
*/
typedef struct _patty_client_socket_request {
int proto;
int type;
} patty_client_socket_request;
typedef struct _patty_ax25_response_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 */