X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=common%2Fserver.h;h=718bca42d6f48bf1abafe2d460a36f7a5288471b;hb=6b977cdc115af3cebdf488f27d106788e8bd9461;hp=2757eae2e931c7728024cb51af21444181e07f9d;hpb=785558696ffa16453be0b5b565c46b6426126d1e;p=apps%2Fpfixtools.git diff --git a/common/server.h b/common/server.h index 2757eae..718bca4 100644 --- a/common/server.h +++ b/common/server.h @@ -16,17 +16,20 @@ /* products derived from this software without specific prior written */ /* permission. */ /* */ -/* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND */ -/* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE */ -/* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ -/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS */ -/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ -/* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ -/* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ -/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ -/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ -/* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF */ -/* THE POSSIBILITY OF SUCH DAMAGE. */ +/* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS */ +/* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */ +/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY */ +/* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL */ +/* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS */ +/* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, */ +/* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN */ +/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ +/* POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* Copyright (c) 2006-2008 the Authors */ +/* see AUTHORS and source files for details */ /******************************************************************************/ /* @@ -36,56 +39,34 @@ #ifndef PFIXTOOLS_SERVER_H #define PFIXTOOLS_SERVER_H -#include #include "buffer.h" -typedef struct server_t server_t; +typedef struct client_t client_t; +typedef struct listener_t listener_t; +PARRAY(client_t) +PARRAY(listener_t) typedef void *(*start_listener_t)(void); typedef void (*delete_client_t)(void*); -typedef void *(*start_client_t)(server_t*); -typedef int (*run_client_t)(server_t*, void*); +typedef void *(*start_client_t)(listener_t*); +typedef int (*run_client_t)(client_t*, void*); typedef bool (*refresh_t)(void*); -extern struct ev_loop *global_loop; - -struct server_t { - struct ev_io io; - int fd; - - buffer_t ibuf; - buffer_t obuf; - - run_client_t run; - delete_client_t clear_data; - void* data; -}; -ARRAY(server_t); - -int start_server(int port, start_listener_t starter, delete_client_t deleter); -server_t *server_register(int fd, run_client_t runner, void *data); -void server_delete(server_t **server); -void server_release(server_t *server); +listener_t *start_listener(int port); -static inline void server_none(server_t *server) -{ - ev_io_stop(global_loop, &server->io); -} +client_t *client_register(int fd, run_client_t runner, void *data); +void client_delete(client_t **client); +void client_release(client_t *client); -static inline void server_rw(server_t *server) -{ - ev_io_stop(global_loop, &server->io); - ev_io_set(&server->io, server->fd, EV_READ | EV_WRITE); - ev_io_start(global_loop, &server->io); -} +void client_io_none(client_t *client); +void client_io_rw(client_t *client); +void client_io_ro(client_t *client); -static inline void server_ro(server_t *server) -{ - ev_io_stop(global_loop, &server->io); - ev_io_set(&server->io, server->fd, EV_READ); - ev_io_start(global_loop, &server->io); -} +ssize_t client_read(client_t *client); +buffer_t *client_input_buffer(client_t *client); +buffer_t *client_output_buffer(client_t *client); +void *client_data(client_t *client); int server_loop(start_client_t starter, delete_client_t deleter, run_client_t runner, refresh_t refresh, void *config);