diff options
Diffstat (limited to 'src/net/inc/net.h')
| -rw-r--r-- | src/net/inc/net.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/net/inc/net.h b/src/net/inc/net.h new file mode 100644 index 0000000..cdfeb0e --- /dev/null +++ b/src/net/inc/net.h @@ -0,0 +1,78 @@ +#ifndef NET_H +#define NET_H + +#include <stddef.h> +#include <stdint.h> + +enum net_domain +{ + NET_DOMAIN_IPV4, + NET_DOMAIN_SERIAL +}; + +union net_connect +{ + struct net_connect_common + { + enum net_domain domain; + void (*on_connected)(void *arg); + void (*on_disconnected)(void *arg); + void *arg; + } common; + + struct net_connect_ipv4 + { + struct net_connect_common common; + const char *addr; + uint16_t port; + } ipv4; + + struct net_connect_serial + { + struct net_connect_common common; + const char *dev; + unsigned long baud; + + enum + { + NET_PARITY_NONE, + NET_PARITY_ODD, + NET_PARITY_EVEN + } parity; + } serial; +}; + +union net_server +{ + struct net_server_common + { + enum net_domain domain; + unsigned max_players; + } common; + + struct net_server_ipv4 + { + struct net_server_common common; + uint16_t port; + } ipv4; + + struct net_server_serial + { + struct net_server_common common; + } serial; +}; + +struct net_socket; + +int net_init(void); +void net_deinit(void); +int net_update(struct net_socket *s); + +struct net_socket *net_server(const union net_server *srv); +struct net_socket *net_connect(const union net_connect *c); +int net_read(struct net_socket *s, void *buf, size_t n); +int net_write(struct net_socket *s, const void *buf, size_t n); +int net_close(struct net_socket *s); +const char *net_domain_str(enum net_domain d); + +#endif /* NET_H */ |
