static void xmlrpc_process(int rank) { /* install handler to catch termination of child processes */ if (signal(SIGCHLD, xmlrpc_sigchld)==SIG_ERR) { LM_ERR("failed to install signal handler for SIGCHLD\n"); goto error; } /* Server Abyss init */ xmlrpc_env_init(&env); #ifdef XMLRPC_OLD_VERSION xmlrpc_server_abyss_init_registry(); registryP= xmlrpc_server_abyss_registry(); #else registryP = xmlrpc_registry_new(&env); #endif DateInit(); MIMETypeInit(); if (!ServerCreate(&srv, "XmlRpcServer", port, "", log_file)) { LM_ERR("failed to create XMLRPC server\n"); goto error; } #ifdef XMLRPC_OLD_VERSION if (!ServerAddHandler(&srv, xmlrpc_server_abyss_rpc2_handler)) { LM_ERR("failed to add handler to server\n"); goto error; } ServerDefaultHandler(&srv, xmlrpc_server_abyss_default_handler); #else xmlrpc_server_abyss_set_handlers2(&srv, "/RPC2", registryP); #endif ServerInit(&srv); if( init_mi_child() != 0 ) { LM_CRIT("failed to init the mi process\n"); goto error; } if ( xr_writer_init(read_buf_size) != 0 ) { LM_ERR("failed to init the reply writer\n"); goto error; } #ifdef XMLRPC_OLD_VERSION xmlrpc_env_init(&env); #endif if ( rpl_opt == 1 ) { xr_response = xmlrpc_build_value(&env, "()"); if ( env.fault_occurred ){ LM_ERR("failed to create an empty array: %s\n", env.fault_string); goto cleanup; } } if ( set_default_method(&env,registryP) != 0 ) { LM_ERR("failed to set up the default method!\n"); goto cleanup; } /* Run server abyss */ LM_INFO("starting xmlrpc server\n"); ServerRun(&srv); LM_CRIT("Server terminated!!!\n"); cleanup: xmlrpc_env_clean(&env); if ( xr_response ) xmlrpc_DECREF(xr_response); error: exit(-1); }
int main(int argc,char **argv) { const char * const name = argv[0]; TServer srv; char * p; const char * conffile; bool err; conffile = DEFAULT_CONF_FILE; /* initial value */ err = FALSE; /* initial value */ while (p=*(++argv)) { if ((*p=='-') && (*(p+1))) if (*(p+2)=='\0') switch (*(p+1)) { case 'c': argv++; if (*argv) conffile=*argv; else err=TRUE; break; default: err=TRUE; } else err=TRUE; else err=TRUE; }; if (err) { help(name); exit(1); }; DateInit(); MIMETypeInit(); ServerCreate(&srv,"HTTPServer",80,DEFAULT_DOCS,NULL); ConfReadServerFile(conffile,&srv); ServerAddHandler(&srv,HandleTime); ServerAddHandler(&srv,HandleDump); ServerAddHandler(&srv,HandleStatus); ServerAddHandler(&srv,HandleMIMEType); ServerInit(&srv); #ifdef _UNIX /* Catch various termination signals. */ signal(SIGTERM,sigterm); signal(SIGINT,sigterm); signal(SIGHUP,sigterm); signal(SIGUSR1,sigterm); /* Catch defunct children. */ signal(SIGCHLD,sigchld); #endif ServerDaemonize(srv); ServerRun(&srv); return 0; }