diff options
Diffstat (limited to 'src/microspdy/daemon.h')
-rw-r--r-- | src/microspdy/daemon.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/microspdy/daemon.h b/src/microspdy/daemon.h new file mode 100644 index 00000000..cb3ed5fa --- /dev/null +++ b/src/microspdy/daemon.h @@ -0,0 +1,130 @@ +/* + This file is part of libmicrospdy + Copyright Copyright (C) 2012 Andrey Uzunov + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/** + * @file daemon.h + * @brief daemon functionality + * @author Andrey Uzunov + */ + +#ifndef DAEMON_H +#define DAEMON_H + +#include "platform.h" + + +/** + * Global flags containing the initialized IO subsystems. + */ +enum SPDY_IO_SUBSYSTEM spdyf_io_initialized; + + +/** + * Start a SPDDY webserver on the given port. + * + * @param port port to bind to + * @param certfile path to the certificate that will be used by server + * @param keyfile path to the keyfile for the certificate + * @param nscb callback called when a new SPDY session is + * established by a client + * @param sccb callback called when a client closes the session + * @param nrcb callback called when a client sends request + * @param npdcb callback called when HTTP POST params are received + * after request + * @param fnscb callback called when new stream is opened by a client + * @param fndcb callback called when new data -- within a data frame -- + * is received by the server + * @param cls extra argument to all of the callbacks without those + * specific only for the framing layer + * @param fcls extra argument to all of the callbacks, specific only for + * the framing layer (those vars starting with 'f'). + * @param valist va_list of options (type-value pairs, + * terminated with SPDY_DAEMON_OPTION_END). + * @return NULL on error, handle to daemon on success + */ +struct SPDY_Daemon * +SPDYF_start_daemon_va (uint16_t port, + const char *certfile, + const char *keyfile, + SPDY_NewSessionCallback nscb, + SPDY_SessionClosedCallback sccb, + SPDY_NewRequestCallback nrcb, + SPDY_NewDataCallback npdcb, + SPDYF_NewStreamCallback fnscb, + SPDYF_NewDataCallback fndcb, + void * cls, + void * fcls, + va_list valist); + + +/** + * Run webserver operations (without blocking unless + * in client callbacks). This method must be called in the client event + * loop. + * + * @param daemon daemon to run + */ +void +SPDYF_run (struct SPDY_Daemon *daemon); + + +/** + * Obtain timeout value for select for this daemon. The returned value + * is how long select + * should at most block, not the timeout value set for connections. + * + * @param daemon daemon to query for timeout + * @param timeout set to the timeout (in milliseconds) + * @return SPDY_YES on success, SPDY_NO if no connections exist that + * would necessiate the use of a timeout right now + */ +int +SPDYF_get_timeout (struct SPDY_Daemon *daemon, + unsigned long long *timeout); + + +/** + * Obtain the select sets for this daemon. The idea of SPDYF_get_fdset + * is to return such descriptors that the select in the application can + * return and SPDY_run can be called only when this is really needed. + * That means not all sockets will be added to write_fd_set. + * + * @param daemon daemon to get sets from + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @param all add all session's descriptors to write_fd_set or not + * @return largest FD added + */ +int +SPDYF_get_fdset (struct SPDY_Daemon *daemon, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *except_fd_set, + bool all); + + +/** + * Shutdown the daemon. + * + * @param daemon daemon to stop + */ +void +SPDYF_stop_daemon (struct SPDY_Daemon *daemon); + +#endif |