#include <xmlrpc-c/config.h>#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <time.h>#include <fcntl.h>#include <signal.h>#include <sys/wait.h>#include <grp.h>#include "abyss_mallocvar.h"#include <xmlrpc-c/abyss.h>#include <xmlrpc-c/base.h>#include <xmlrpc-c/server.h>#include "abyss_xmlrpc_int.h"#include <xmlrpc-c/server_abyss.h>

Go to the source code of this file.
Data Structures | |
| struct | signalHandlers |
| struct | uriHandlerXmlrpc |
Functions | |
| static void | addAuthCookie (xmlrpc_env *const envP, TSession *const abyssSessionP, const char *const authCookie) |
| static bool | chunkResponseParm (const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize) |
| static void | createServer (xmlrpc_env *const envP, const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize, TServer *const serverP, TSocket **const socketPP) |
| static void | createServerBoundSocket (xmlrpc_env *const envP, TOsSocket const socketFd, const char *const logFileName, TServer *const serverP, TSocket **const socketPP) |
| static void | die_if_fault_occurred (xmlrpc_env *env) |
| static void | extractServerCreateParms (xmlrpc_env *const envP, const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize, abyss_bool *const socketBoundP, unsigned int *const portNumberP, TOsSocket *const socketFdP, const char **const logFileNameP) |
| static void | getBody (xmlrpc_env *const envP, TSession *const abyssSessionP, size_t const contentSize, const char *const trace, xmlrpc_mem_block **const bodyP) |
| static void | handleXmlrpcReq (URIHandler2 *const this, TSession *const abyssSessionP, abyss_bool *const handledP) |
| static void | normalLevelAbyssRun (xmlrpc_env *const envP, const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize) |
| static void | oldHighLevelAbyssRun (xmlrpc_env *const envP ATTR_UNUSED, const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize) |
| static void | processCall (TSession *const abyssSessionP, size_t const contentSize, xmlrpc_registry *const registryP, bool const wantChunk, const char *const trace) |
| static void | processContentLength (TSession *const httpRequestP, size_t *const inputLenP, unsigned int *const httpErrorP) |
| static void | refillBufferFromConnection (xmlrpc_env *const envP, TSession *const abyssSessionP, const char *const trace) |
| static void | restoreSignalHandlers (struct signalHandlers const oldHandlers) |
| static void | runServerDaemon (TServer *const serverP, runfirstFn const runfirst, void *const runfirstArg) |
| static void | sendError (TSession *const abyssSessionP, unsigned int const status) |
| static void | sendXmlData (xmlrpc_env *const envP, TSession *const abyssSessionP, const char *const body, size_t const len, bool const chunked) |
| static void | setAdditionalServerParms (const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize, TServer *const serverP) |
| static void | setHandler (xmlrpc_env *const envP, TServer *const srvP, const char *const uriPath, xmlrpc_registry *const registryP, bool const chunkResponse) |
| static void | setHandlers (TServer *const srvP, const char *const uriPath, xmlrpc_registry *const registryP, bool const chunkResponse) |
| static void | setupSignalHandlers (struct signalHandlers *const oldHandlersP) |
| static void | shutdownAbyss (xmlrpc_env *const envP, void *const context, const char *const comment ATTR_UNUSED) |
| static void | sigchld (int const signalClass ATTR_UNUSED) |
| static void | storeCookies (TSession *const httpRequestP, unsigned int *const httpErrorP) |
| static void | termUriHandler (void *const arg) |
| static void | traceChunkRead (TSession *const abyssSessionP) |
| static void | traceHandlerCalled (TSession *const abyssSessionP) |
| static const char * | uriPathParm (const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize) |
| static void | validateContentType (TSession *const httpRequestP, unsigned int *const httpErrorP) |
| void | xmlrpc_server_abyss (xmlrpc_env *const envP, const xmlrpc_server_abyss_parms *const parmsP, unsigned int const parmSize) |
| void | xmlrpc_server_abyss_add_method (char *const method_name, xmlrpc_method const method, void *const user_data) |
| void | xmlrpc_server_abyss_add_method_w_doc (char *const method_name, xmlrpc_method const method, void *const user_data, char *const signature, char *const help) |
| static xmlrpc_bool | xmlrpc_server_abyss_default_handler (TSession *const sessionP) |
| void | xmlrpc_server_abyss_init (int const flags ATTR_UNUSED, const char *const config_file) |
| void | xmlrpc_server_abyss_init_registry (void) |
| xmlrpc_registry * | xmlrpc_server_abyss_registry (void) |
| void | xmlrpc_server_abyss_run (void) |
| void | xmlrpc_server_abyss_run_first (runfirstFn const runfirst, void *const runfirstArg) |
| void | xmlrpc_server_abyss_set_handler (xmlrpc_env *const envP, TServer *const srvP, const char *const uriPath, xmlrpc_registry *const registryP) |
| void | xmlrpc_server_abyss_set_handlers (TServer *const srvP, xmlrpc_registry *const registryP) |
| void | xmlrpc_server_abyss_set_handlers2 (TServer *const srvP, const char *const uriPath, xmlrpc_registry *const registryP) |
Variables | |
| static xmlrpc_registry * | builtin_registryP |
| static TServer | globalSrv |
| static xmlrpc_server_shutdown_fn | shutdownAbyss |
| static const char * | trace_abyss |
| static void addAuthCookie | ( | xmlrpc_env *const | envP, | |
| TSession *const | abyssSessionP, | |||
| const char *const | authCookie | |||
| ) | [static] |
Definition at line 47 of file abyss_xmlrpc_server.c.
References ResponseAddField(), xmlrpc_asprintf(), xmlrpc_strfree(), and xmlrpc_strsol.
Referenced by sendXmlData().
| static bool chunkResponseParm | ( | const xmlrpc_server_abyss_parms *const | parmsP, | |
| unsigned int const | parmSize | |||
| ) | [static] |
| static void createServer | ( | xmlrpc_env *const | envP, | |
| const xmlrpc_server_abyss_parms *const | parmsP, | |||
| unsigned int const | parmSize, | |||
| TServer *const | serverP, | |||
| TSocket **const | socketPP | |||
| ) | [static] |
Definition at line 883 of file abyss_xmlrpc_server.c.
References createServerBoundSocket(), DEFAULT_DOCS, extractServerCreateParms(), NULL, ServerCreate(), and xmlrpc_strfree().
| static void createServerBoundSocket | ( | xmlrpc_env *const | envP, | |
| TOsSocket const | socketFd, | |||
| const char *const | logFileName, | |||
| TServer *const | serverP, | |||
| TSocket **const | socketPP | |||
| ) | [static] |
Definition at line 847 of file abyss_xmlrpc_server.c.
References ServerCreateSocket2(), ServerSetLogFileName(), ServerSetName(), SocketDestroy(), SocketUnixCreateFd(), and xmlrpc_strfree().
Referenced by createServer().
| static void die_if_fault_occurred | ( | xmlrpc_env * | env | ) | [static] |
Definition at line 36 of file abyss_xmlrpc_server.c.
Referenced by xmlrpc_server_abyss_add_method(), xmlrpc_server_abyss_add_method_w_doc(), and xmlrpc_server_abyss_init_registry().
| static void extractServerCreateParms | ( | xmlrpc_env *const | envP, | |
| const xmlrpc_server_abyss_parms *const | parmsP, | |||
| unsigned int const | parmSize, | |||
| abyss_bool *const | socketBoundP, | |||
| unsigned int *const | portNumberP, | |||
| TOsSocket *const | socketFdP, | |||
| const char **const | logFileNameP | |||
| ) | [static] |
| static void getBody | ( | xmlrpc_env *const | envP, | |
| TSession *const | abyssSessionP, | |||
| size_t const | contentSize, | |||
| const char *const | trace, | |||
| xmlrpc_mem_block **const | bodyP | |||
| ) | [static] |
Definition at line 168 of file abyss_xmlrpc_server.c.
References refillBufferFromConnection(), and SessionGetReadData().
Referenced by processCall().
| static void handleXmlrpcReq | ( | URIHandler2 *const | this, | |
| TSession *const | abyssSessionP, | |||
| abyss_bool *const | handledP | |||
| ) | [static] |
Definition at line 442 of file abyss_xmlrpc_server.c.
References uriHandlerXmlrpc::chunkResponse, FALSE, m_post, processCall(), processContentLength(), uriHandlerXmlrpc::registryP, sendError(), SessionGetRequestInfo(), storeCookies(), trace_abyss, traceHandlerCalled(), TRUE, uriHandlerXmlrpc::uriPath, and validateContentType().
Referenced by setHandler().
| static void normalLevelAbyssRun | ( | xmlrpc_env *const | envP, | |
| const xmlrpc_server_abyss_parms *const | parmsP, | |||
| unsigned int const | parmSize | |||
| ) | [static] |
Definition at line 975 of file abyss_xmlrpc_server.c.
References chunkResponseParm(), createServer(), DateInit(), restoreSignalHandlers(), ServerFree(), ServerInit(), ServerRun(), ServerUseSigchld(), setAdditionalServerParms(), setHandlers(), setupSignalHandlers(), shutdownAbyss, SocketDestroy(), and uriPathParm().
Referenced by xmlrpc_server_abyss().
| static void oldHighLevelAbyssRun | ( | xmlrpc_env *const envP | ATTR_UNUSED, | |
| const xmlrpc_server_abyss_parms *const | parmsP, | |||
| unsigned int const | parmSize | |||
| ) | [static] |
Definition at line 733 of file abyss_xmlrpc_server.c.
References ConfReadServerFile(), DateInit(), DEFAULT_DOCS, NULL, runServerDaemon(), ServerCreate(), ServerFree(), ServerInit(), and setHandlers().
Referenced by xmlrpc_server_abyss().
| static void processCall | ( | TSession *const | abyssSessionP, | |
| size_t const | contentSize, | |||
| xmlrpc_registry *const | registryP, | |||
| bool const | wantChunk, | |||
| const char *const | trace | |||
| ) | [static] |
Definition at line 351 of file abyss_xmlrpc_server.c.
References getBody(), NULL, sendError(), and sendXmlData().
Referenced by handleXmlrpcReq().
| static void processContentLength | ( | TSession *const | httpRequestP, | |
| size_t *const | inputLenP, | |||
| unsigned int *const | httpErrorP | |||
| ) | [static] |
Definition at line 275 of file abyss_xmlrpc_server.c.
References NULL, and RequestHeaderValue().
Referenced by handleXmlrpcReq().
| static void refillBufferFromConnection | ( | xmlrpc_env *const | envP, | |
| TSession *const | abyssSessionP, | |||
| const char *const | trace | |||
| ) | [static] |
Definition at line 145 of file abyss_xmlrpc_server.c.
References SessionRefillBuffer(), and traceChunkRead().
Referenced by getBody().
| static void restoreSignalHandlers | ( | struct signalHandlers const | oldHandlers | ) | [static] |
Definition at line 604 of file abyss_xmlrpc_server.c.
References signalHandlers::chld, NULL, and signalHandlers::pipe.
Referenced by normalLevelAbyssRun(), and runServerDaemon().
| static void runServerDaemon | ( | TServer *const | serverP, | |
| runfirstFn const | runfirst, | |||
| void *const | runfirstArg | |||
| ) | [static] |
Definition at line 616 of file abyss_xmlrpc_server.c.
References restoreSignalHandlers(), ServerDaemonize(), ServerRun(), ServerUseSigchld(), and setupSignalHandlers().
Referenced by oldHighLevelAbyssRun(), xmlrpc_server_abyss_run(), and xmlrpc_server_abyss_run_first().
| static void sendError | ( | TSession *const | abyssSessionP, | |
| unsigned int const | status | |||
| ) | [static] |
Definition at line 123 of file abyss_xmlrpc_server.c.
References ResponseError(), and ResponseStatus().
Referenced by handleXmlrpcReq(), processCall(), and xmlrpc_server_abyss_default_handler().
| static void sendXmlData | ( | xmlrpc_env *const | envP, | |
| TSession *const | abyssSessionP, | |||
| const char *const | body, | |||
| size_t const | len, | |||
| bool const | chunked | |||
| ) | [static] |
Definition at line 68 of file abyss_xmlrpc_server.c.
References addAuthCookie(), NULL, ResponseChunked(), ResponseContentLength(), ResponseContentType(), ResponseStatus(), ResponseWriteBody(), ResponseWriteEnd(), and ResponseWriteStart().
Referenced by processCall().
| static void setAdditionalServerParms | ( | const xmlrpc_server_abyss_parms *const | parmsP, | |
| unsigned int const | parmSize, | |||
| TServer *const | serverP | |||
| ) | [static] |
Definition at line 776 of file abyss_xmlrpc_server.c.
References ServerSetAdvertise(), ServerSetKeepaliveMaxConn(), ServerSetKeepaliveTimeout(), ServerSetTimeout(), TServer::timeout, and timeout.
Referenced by normalLevelAbyssRun().
| static void setHandler | ( | xmlrpc_env *const | envP, | |
| TServer *const | srvP, | |||
| const char *const | uriPath, | |||
| xmlrpc_registry *const | registryP, | |||
| bool const | chunkResponse | |||
| ) | [static] |
Definition at line 642 of file abyss_xmlrpc_server.c.
References uriHandlerXmlrpc::chunkResponse, handleXmlrpcReq(), MALLOCVAR_NOFAIL, NULL, uriHandlerXmlrpc::registryP, ServerAddHandler2(), termUriHandler(), trace_abyss, and uriHandlerXmlrpc::uriPath.
Referenced by setHandlers(), and xmlrpc_server_abyss_set_handler().
| static void setHandlers | ( | TServer *const | srvP, | |
| const char *const | uriPath, | |||
| xmlrpc_registry *const | registryP, | |||
| bool const | chunkResponse | |||
| ) | [static] |
Definition at line 690 of file abyss_xmlrpc_server.c.
References ServerDefaultHandler(), setHandler(), trace_abyss, and xmlrpc_server_abyss_default_handler().
Referenced by normalLevelAbyssRun(), oldHighLevelAbyssRun(), xmlrpc_server_abyss_init_registry(), xmlrpc_server_abyss_set_handlers(), and xmlrpc_server_abyss_set_handlers2().
| static void setupSignalHandlers | ( | struct signalHandlers *const | oldHandlersP | ) | [static] |
Definition at line 584 of file abyss_xmlrpc_server.c.
References signalHandlers::chld, signalHandlers::pipe, and sigchld().
Referenced by normalLevelAbyssRun(), and runServerDaemon().
| static void shutdownAbyss | ( | xmlrpc_env *const | envP, | |
| void *const | context, | |||
| const char *const comment | ATTR_UNUSED | |||
| ) | [static] |
| static void sigchld | ( | int const signalClass | ATTR_UNUSED | ) | [static] |
Definition at line 537 of file abyss_xmlrpc_server.c.
References pid, and ServerHandleSigchld().
Referenced by setupSignalHandlers().
| static void storeCookies | ( | TSession *const | httpRequestP, | |
| unsigned int *const | httpErrorP | |||
| ) | [static] |
Definition at line 215 of file abyss_xmlrpc_server.c.
References RequestHeaderValue().
Referenced by handleXmlrpcReq().
| static void termUriHandler | ( | void *const | arg | ) | [static] |
Definition at line 431 of file abyss_xmlrpc_server.c.
References uriHandlerXmlrpc::uriPath, and xmlrpc_strfree().
Referenced by setHandler().
| static void traceChunkRead | ( | TSession *const | abyssSessionP | ) | [static] |
Definition at line 136 of file abyss_xmlrpc_server.c.
References SessionReadDataAvail().
Referenced by refillBufferFromConnection().
| static void traceHandlerCalled | ( | TSession *const | abyssSessionP | ) | [static] |
Definition at line 317 of file abyss_xmlrpc_server.c.
References m_delete, m_get, m_head, m_options, m_post, m_put, m_trace, m_unknown, and SessionGetRequestInfo().
Referenced by handleXmlrpcReq().
| static const char* uriPathParm | ( | const xmlrpc_server_abyss_parms *const | parmsP, | |
| unsigned int const | parmSize | |||
| ) | [static] |
Definition at line 930 of file abyss_xmlrpc_server.c.
References uriHandlerXmlrpc::uriPath.
Referenced by normalLevelAbyssRun().
| static void validateContentType | ( | TSession *const | httpRequestP, | |
| unsigned int *const | httpErrorP | |||
| ) | [static] |
Definition at line 240 of file abyss_xmlrpc_server.c.
References NULL, RequestHeaderValue(), and xmlrpc_strneq().
Referenced by handleXmlrpcReq().
| void xmlrpc_server_abyss | ( | xmlrpc_env *const | envP, | |
| const xmlrpc_server_abyss_parms *const | parmsP, | |||
| unsigned int const | parmSize | |||
| ) |
Definition at line 1021 of file abyss_xmlrpc_server.c.
References normalLevelAbyssRun(), oldHighLevelAbyssRun(), and registryP.
| void xmlrpc_server_abyss_add_method | ( | char *const | method_name, | |
| xmlrpc_method const | method, | |||
| void *const | user_data | |||
| ) |
Definition at line 1103 of file abyss_xmlrpc_server.c.
References builtin_registryP, die_if_fault_occurred(), and NULL.
| void xmlrpc_server_abyss_add_method_w_doc | ( | char *const | method_name, | |
| xmlrpc_method const | method, | |||
| void *const | user_data, | |||
| char *const | signature, | |||
| char *const | help | |||
| ) |
Definition at line 1118 of file abyss_xmlrpc_server.c.
References builtin_registryP, die_if_fault_occurred(), and NULL.
| static xmlrpc_bool xmlrpc_server_abyss_default_handler | ( | TSession *const | sessionP | ) | [static] |
Definition at line 524 of file abyss_xmlrpc_server.c.
References sendError(), trace_abyss, and TRUE.
Referenced by setHandlers(), and xmlrpc_process().
| void xmlrpc_server_abyss_init | ( | int const flags | ATTR_UNUSED, | |
| const char *const | config_file | |||
| ) |
Definition at line 1136 of file abyss_xmlrpc_server.c.
References ConfReadServerFile(), DateInit(), DEFAULT_DOCS, MIMETypeInit(), NULL, ServerCreate(), ServerInit(), and xmlrpc_server_abyss_init_registry().
| void xmlrpc_server_abyss_init_registry | ( | void | ) |
Definition at line 1066 of file abyss_xmlrpc_server.c.
References builtin_registryP, die_if_fault_occurred(), and setHandlers().
Referenced by xmlrpc_process(), and xmlrpc_server_abyss_init().
| xmlrpc_registry* xmlrpc_server_abyss_registry | ( | void | ) |
Definition at line 1090 of file abyss_xmlrpc_server.c.
References builtin_registryP.
Referenced by xmlrpc_process().
| void xmlrpc_server_abyss_run | ( | void | ) |
| void xmlrpc_server_abyss_run_first | ( | runfirstFn const | runfirst, | |
| void *const | runfirstArg | |||
| ) |
| void xmlrpc_server_abyss_set_handler | ( | xmlrpc_env *const | envP, | |
| TServer *const | srvP, | |||
| const char *const | uriPath, | |||
| xmlrpc_registry *const | registryP | |||
| ) |
| void xmlrpc_server_abyss_set_handlers | ( | TServer *const | srvP, | |
| xmlrpc_registry *const | registryP | |||
| ) |
| void xmlrpc_server_abyss_set_handlers2 | ( | TServer *const | srvP, | |
| const char *const | uriPath, | |||
| xmlrpc_registry *const | registryP | |||
| ) |
Definition at line 714 of file abyss_xmlrpc_server.c.
References setHandlers().
Referenced by xmlrpc_process().
xmlrpc_registry* builtin_registryP [static] |
Definition at line 1061 of file abyss_xmlrpc_server.c.
Referenced by xmlrpc_server_abyss_add_method(), xmlrpc_server_abyss_add_method_w_doc(), xmlrpc_server_abyss_init_registry(), and xmlrpc_server_abyss_registry().
Definition at line 1055 of file abyss_xmlrpc_server.c.
xmlrpc_server_shutdown_fn shutdownAbyss [static] |
const char* trace_abyss [static] |
Definition at line 413 of file abyss_xmlrpc_server.c.
Referenced by handleXmlrpcReq(), setHandler(), setHandlers(), and xmlrpc_server_abyss_default_handler().
1.5.6