| /* |
| 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 |