BaseProxy::BaseProxy( ServerInfo serverinfo, int32_t maxConn, bool initConsNow, ServiceManager* service_manager, int32_t tryCount, int32_t tryInterval) :_serverinfo(serverinfo.getIP(),serverinfo.getPort()), _service_manager(service_manager) { _name = StringUtil::generate_uuid(); _nMaxConn = maxConn; _tryCount = tryCount; _tryInterval = tryInterval; _seqid=~0; _use_existing_socket=false; #ifndef _WIN32 signal(SIGPIPE, SIG_IGN); #endif if(initConsNow){ init(INIT_ALL); } else{ init(INIT_CALLBACK); } }
/** * Throws NSPRException upon NSPR error */ Connection::Connection(const ServerInfo& server, const std::string &certDBPasswd, const std::string &certNickName, bool alwaysTrustServerCert) : socket(NULL), certdbpasswd(NULL), certnickname(NULL) { char buffer[PR_NETDB_BUF_SIZE]; PRNetAddr address; PRHostEnt hostEntry; PRIntn hostIndex; PRStatus prStatus; SECStatus secStatus; prStatus = PR_GetHostByName(server.getHost().c_str(), buffer, sizeof(buffer), &hostEntry); if (PR_SUCCESS != prStatus) { throw NSPRException("Connection::Connection", "PR_GetHostByName"); } hostIndex = PR_EnumerateHostEnt(0, &hostEntry, server.getPort(), &address); if (hostIndex < 0) { throw NSPRException("Connection::Connection", "PR_EnumerateHostEnt"); } socket = createSocket(address, server.useSSL(), certDBPasswd, certNickName, alwaysTrustServerCert); if (server.useSSL()) { secStatus = SSL_SetURL(socket, server.getHost().c_str()); if (SECSuccess != secStatus) { PRErrorCode error = PR_GetError(); PR_Shutdown(socket, PR_SHUTDOWN_BOTH); PR_Close(socket); Log::log(Log::ALL_MODULES, Log::LOG_ERROR, "SSL_SetURL() returned error: %s", PR_ErrorToString(error, PR_LANGUAGE_I_DEFAULT)); throw NSPRException("Connection::Connection", "SSL_SetURL", error); } } prStatus = PR_Connect(socket, &address, connect_timeout); if (prStatus != PR_SUCCESS) { PRErrorCode error = PR_GetError(); PR_Shutdown(socket, PR_SHUTDOWN_BOTH); PR_Close(socket); throw NSPRException("Connection::Connection PR_Connect", "PR_Connect", error); } }
BaseProxy::BaseProxy( ServerInfo serverinfo, int32_t nprotocols, ServiceManager* service_manager, int32_t tryCount, int32_t tryInterval) :_serverinfo(serverinfo.getIP(),serverinfo.getPort()), _service_manager(service_manager) { _name = StringUtil::generate_uuid(); _nProtocols = nprotocols; _tryCount = tryCount; _tryInterval = tryInterval; init(); }