#ifndef NET_H #define NET_H #include "fd.h" #include "buffer.h" typedef struct connection_s { struct sockaddr srcaddr, dstaddr; fd_t *fd; list_t fd_list; buffer_t *tonet, *fromnet; } connection_t; typedef struct protoconnection_s { struct sockaddr srcaddr; struct sockaddr *dstaddr; int dstaddrs, thisdst; int dobind; fd_t *fd; list_t fd_list; list_t fd_write; notifier_t connection_ready; void (*notify_connected)(connection_t *conn); } protoconnection_t; typedef struct listener_s { fd_t *fd; list_t fd_list; struct sockaddr boundaddr; notifier_t readok, miscevent; void (*notify_accepted)(struct listener_s *listener, connection_t *connection); } listener_t; extern int getport(const char *s, unsigned short *svalp); extern fd_t *connection(const char *shost, unsigned short sport, const char *dhost, unsigned short dport); extern void connection_create(const char *shost, unsigned short sport, const char *dhost, unsigned short dport, void (*notify_connected)(connection_t *connection)); extern void listener_create(const char *shost, unsigned short sport, void (*notify_accepted)(struct listener_s *listener, connection_t *connection), listener_t ***listenersp, int *listenernump); extern connection_t *connection_alloc(void); extern connection_t *connection_init(connection_t *conn, fd_t *fd, struct sockaddr *src, struct sockaddr *dst); extern listener_t *listener_alloc(void); extern listener_t *listener_init(listener_t *listener, fd_t *fd, struct sockaddr *addr, void (*notify_accepted)(listener_t *listener, connection_t *connection)); #endif