abyss_xmlrpc_server.c File Reference

#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>

Include dependency graph for abyss_xmlrpc_server.c:

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


Function Documentation

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]

Definition at line 919 of file abyss_xmlrpc_server.c.

Referenced by normalLevelAbyssRun().

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]

static void createServerBoundSocket ( xmlrpc_env *const   envP,
TOsSocket const   socketFd,
const char *const   logFileName,
TServer *const   serverP,
TSocket **const   socketPP 
) [static]

static void die_if_fault_occurred ( xmlrpc_env *  env  )  [static]

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]

Definition at line 801 of file abyss_xmlrpc_server.c.

References FALSE, and NULL.

Referenced by createServer().

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]

static void normalLevelAbyssRun ( xmlrpc_env *const   envP,
const xmlrpc_server_abyss_parms *const   parmsP,
unsigned int const   parmSize 
) [static]

static void oldHighLevelAbyssRun ( xmlrpc_env *const envP  ATTR_UNUSED,
const xmlrpc_server_abyss_parms *const   parmsP,
unsigned int const   parmSize 
) [static]

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]

static void sendError ( TSession *const   abyssSessionP,
unsigned int const   status 
) [static]

static void sendXmlData ( xmlrpc_env *const   envP,
TSession *const   abyssSessionP,
const char *const   body,
size_t const   len,
bool const   chunked 
) [static]

static void setAdditionalServerParms ( const xmlrpc_server_abyss_parms *const   parmsP,
unsigned int const   parmSize,
TServer *const   serverP 
) [static]

static void setHandler ( xmlrpc_env *const   envP,
TServer *const   srvP,
const char *const   uriPath,
xmlrpc_registry *const   registryP,
bool const   chunkResponse 
) [static]

static void setHandlers ( TServer *const   srvP,
const char *const   uriPath,
xmlrpc_registry *const   registryP,
bool const   chunkResponse 
) [static]

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]

Definition at line 948 of file abyss_xmlrpc_server.c.

References ServerTerminate().

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 
)

void xmlrpc_server_abyss_init_registry ( void   ) 

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   ) 

Definition at line 1166 of file abyss_xmlrpc_server.c.

References NULL, and runServerDaemon().

void xmlrpc_server_abyss_run_first ( runfirstFn const   runfirst,
void *const   runfirstArg 
)

Definition at line 1157 of file abyss_xmlrpc_server.c.

References runServerDaemon().

void xmlrpc_server_abyss_set_handler ( xmlrpc_env *const   envP,
TServer *const   srvP,
const char *const   uriPath,
xmlrpc_registry *const   registryP 
)

Definition at line 679 of file abyss_xmlrpc_server.c.

References setHandler().

void xmlrpc_server_abyss_set_handlers ( TServer *const   srvP,
xmlrpc_registry *const   registryP 
)

Definition at line 724 of file abyss_xmlrpc_server.c.

References setHandlers().

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().


Variable Documentation

xmlrpc_registry* builtin_registryP [static]

TServer globalSrv [static]

Definition at line 1055 of file abyss_xmlrpc_server.c.

xmlrpc_server_shutdown_fn shutdownAbyss [static]

Definition at line 945 of file abyss_xmlrpc_server.c.

Referenced by normalLevelAbyssRun().

const char* trace_abyss [static]


Generated on Thu May 17 12:00:34 2012 for Kamailio - The Open Source SIP Server by  doxygen 1.5.6