#include #include #include "librez.h" #include "myserv.h" #include "myqueue.h" #include "simple_list.h" void librez_myserv_rdnorm(int ifds, void *data) { t_rez *d_rez; t_slist **reflist; t_slist *d_list; d_rez = data; librez_myqueue_rdnorm(data, ifds); reflist = (t_slist **)&d_rez->buffer[ifds][LIBREZ_BUFFER_LINE_RDNORM]; while (*reflist) { d_list = simple_list_shift(reflist); if (d_rez->notify[ifds][LIBREZ_POLLRDNORM]) { d_rez->list_buf = d_list->buf; d_rez->list_nbytes = d_list->nbytes; ((char *)d_rez->list_buf)[d_rez->list_nbytes] = '\0'; (*d_rez->notify[ifds][LIBREZ_POLLRDNORM])(d_rez->tl_ifds_2_rezid[ifds], d_rez->data); } d_rez->buffer_size[ifds][LIBREZ_BUFFER_ISIZE] -= d_list->nbytes; simple_list_delete(&d_list); } } void librez_myserv_wrnorm(int ifds, void *data) { t_rez *d_rez; t_slist **reflist; d_rez = data; librez_myqueue_wrnorm(data, ifds, NULL); reflist = (t_slist **)&d_rez->buffer[ifds][LIBREZ_BUFFER_LINE_WRNORM]; if (!*reflist) { if (d_rez->notify[ifds][LIBREZ_POLLWRNORM]) (*d_rez->notify[ifds][LIBREZ_POLLWRNORM])(d_rez->tl_ifds_2_rezid[ifds], d_rez->data); } } void librez_myserv_accept(int ifds, void *data) { t_rez *d_rez; t_librez_fd rezid; int new_ifds; t_librez_fd new_rezid; d_rez = data; rezid = d_rez->tl_ifds_2_rezid[ifds]; new_rezid = librez_doaccept(data, rezid); if (new_rezid < 0) return ; new_ifds = d_rez->tl_rezid_2_ifds[new_rezid]; if (d_rez->notify[new_ifds][LIBREZ_POLLACCEPT]) (*d_rez->notify[new_ifds][LIBREZ_POLLACCEPT])(new_rezid, d_rez->data); } void librez_myserv_hup(int ifds, void *data) { t_rez *d_rez; d_rez = data; if (d_rez->notify[ifds][LIBREZ_POLLHUP]) (*d_rez->notify[ifds][LIBREZ_POLLHUP])(d_rez->tl_ifds_2_rezid[ifds], d_rez->data); librez_doclose(data, d_rez->tl_ifds_2_rezid[ifds]); }