static void createServerBare(xmlrpc_env * const envP, const xmlrpc_server_abyss_parms * const parmsP, unsigned int const parmSize, TServer * const serverP, TChanSwitch ** const chanSwitchPP) { /*---------------------------------------------------------------------------- Create a bare server. It will need further setup before it is ready to use. -----------------------------------------------------------------------------*/ bool socketBound; const struct sockaddr * sockAddrP; socklen_t sockAddrLen; unsigned int portNumber; TOsSocket socketFd; const char * logFileName; extractServerCreateParms(envP, parmsP, parmSize, &socketBound, &sockAddrP, &sockAddrLen, &portNumber, &socketFd, &logFileName); if (!envP->fault_occurred) { TChanSwitch * chanSwitchP; if (socketBound) createChanSwitchOsSocket(envP, socketFd, &chanSwitchP); else { if (sockAddrP) createChanSwitchSockAddr(envP, sockAddrP, sockAddrLen, &chanSwitchP); else createChanSwitchIpv4Port(envP, portNumber, &chanSwitchP); } if (!envP->fault_occurred) { const char * error; ServerCreateSwitch(serverP, chanSwitchP, &error); if (error) { xmlrpc_faultf(envP, "Abyss failed to create server. %s", error); xmlrpc_strfree(error); } else { *chanSwitchPP = chanSwitchP; ServerSetName(serverP, "XmlRpcServer"); if (logFileName) ServerSetLogFileName(serverP, logFileName); } if (envP->fault_occurred) ChanSwitchDestroy(chanSwitchP); } if (logFileName) xmlrpc_strfree(logFileName); } }
AbyssServer::AbyssServer(AbyssChanSwitch * const chanSwitchP) { const char * error; ServerCreateSwitch(&this->cServer, chanSwitchP->cChanSwitchP(), &error); if (error) throw runtime_error(error); }
void ServerCreateSocket2(TServer * const serverP, TSocket * const socketP, const char ** const errorP) { TChanSwitch * const chanSwitchP = SocketGetChanSwitch(socketP); assert(socketP); if (!chanSwitchP) xmlrpc_asprintf( errorP, "Socket is not a listening socket. " "You should use ServerCreateSwitch() instead, anyway."); else ServerCreateSwitch(serverP, chanSwitchP, errorP); }