//deep copy of credentials void SipLine::copyCredentials(const SipLine &rSipLine) { UtlString Realm; UtlString UserID; UtlString Type; UtlString Password; if(!mCredentials.isEmpty()) { mCredentials.destroyAll(); } UtlHashBagIterator observerIterator(const_cast<UtlHashBag&> (rSipLine.mCredentials)); SipLineCredentials* credential = NULL; do { credential = (SipLineCredentials*) observerIterator(); if ( credential) { credential->getRealm(&Realm); credential->getUserId(&UserID); credential->getType(&Type); credential->getPasswordToken(&Password); addCredentials(Realm , UserID , Password , Type); } } while(credential != NULL) ; }
void QNetworkAccessManagerPrivate::proxyAuthenticationRequired(QNetworkAccessBackend *backend, const QNetworkProxy &proxy, QAuthenticator *authenticator) { Q_Q(QNetworkAccessManager); // ### FIXME Tracking of successful authentications // This code is a bit broken right now for SOCKS authentication // first request: proxyAuthenticationRequired gets emitted, credentials gets saved // second request: (proxy != backend->reply->lastProxyAuthentication) does not evaluate to true, // proxyAuthenticationRequired gets emitted again // possible solution: some tracking inside the authenticator // or a new function proxyAuthenticationSucceeded(true|false) if (proxy != backend->reply->lastProxyAuthentication) { QNetworkAuthenticationCredential *cred = fetchCachedCredentials(proxy); if (cred) { authenticator->setUser(cred->user); authenticator->setPassword(cred->password); return; } } backend->reply->lastProxyAuthentication = proxy; emit q->proxyAuthenticationRequired(proxy, authenticator); addCredentials(proxy, authenticator); }
void QNetworkAccessManagerPrivate::proxyAuthenticationRequired(QNetworkAccessBackend *backend, const QNetworkProxy &proxy, QAuthenticator *authenticator) { Q_Q(QNetworkAccessManager); if (proxy != backend->reply->lastProxyAuthentication) { QNetworkAuthenticationCredential *cred = fetchCachedCredentials(proxy); if (cred) { authenticator->setUser(cred->user); authenticator->setPassword(cred->password); return; } } backend->reply->lastProxyAuthentication = proxy; emit q->proxyAuthenticationRequired(proxy, authenticator); addCredentials(proxy, authenticator); }
void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend *backend, QAuthenticator *authenticator) { Q_Q(QNetworkAccessManager); // FIXME: Add support for domains (i.e., the leading path) QUrl url = backend->reply->url; // don't try the cache for the same URL twice in a row // being called twice for the same URL means the authentication failed if (url != backend->reply->urlForLastAuthentication) { QNetworkAuthenticationCredential *cred = fetchCachedCredentials(url, authenticator); if (cred) { authenticator->setUser(cred->user); authenticator->setPassword(cred->password); backend->reply->urlForLastAuthentication = url; return; } } backend->reply->urlForLastAuthentication = url; emit q->authenticationRequired(backend->reply->q_func(), authenticator); addCredentials(url, authenticator); }
// Initializer OsStatus SipRedirectorJoin::initialize(OsConfigDb& configDb, int redirectorNo, const UtlString& localDomainHost) { // If the join redirection is active, set up the machinery // to execute it. if (mRedirectorActive == OS_SUCCESS) { // Get and save our domain name. mDomain = localDomainHost; UtlString bindIp; if (configDb.get(CONFIG_SETTING_BIND_IP, bindIp) != OS_SUCCESS || !OsSocket::isIp4Address(bindIp)) { bindIp = "0.0.0.0"; } // Authentication Realm Name UtlString realm; configDb.get("SIP_REGISTRAR_AUTHENTICATE_REALM", realm); // Get SipLineMgr containing the credentials for REGISTRAR_ID_TOKEN. SipLineMgr* lineMgr = addCredentials(mDomain, realm); // Create a SIP user agent to generate SUBSCRIBEs and receive NOTIFYs, // and save a pointer to it. // Having a separate user agent ensures that the NOTIFYs are not // processed for redirection, but rather we can act as a UAS to // process them. mpSipUserAgent = new SipUserAgent( // Let the system choose the port numbers. PORT_DEFAULT, // sipTcpPort PORT_DEFAULT, // sipUdpPort PORT_DEFAULT, // sipTlsPort NULL, // publicAddress NULL, // defaultUser bindIp, // defaultSipAddress NULL, // sipProxyServers NULL, // sipDirectoryServers NULL, // sipRegistryServers NULL, // authenicateRealm NULL, // authenticateDb NULL, // authorizeUserIds NULL, // authorizePasswords lineMgr, // lineMgr SIP_DEFAULT_RTT, // sipFirstResendTimeout TRUE, // defaultToUaTransactions -1, // readBufferSize OsServerTask::DEF_MAX_MSGS, // queueSize FALSE // bUseNextAvailablePort ); mpSipUserAgent->setUserAgentHeaderProperty("sipXecs/redirectorJoin"); mpSipUserAgent->start(); // Initialize the CSeq counter to an arbitrary acceptable value. mCSeq = 14711; // Create and start the task to receive NOTIFYs. mTask = new SipRedirectorJoinTask(mpSipUserAgent, redirectorNo); mTask->start(); } return mRedirectorActive; }
// // The main entry point to sipXrls. // int main(int argc, char* argv[]) { // Configuration Database (used for OsSysLog) OsConfigDb configDb; UtlString argString; for (int argIndex = 1; argIndex < argc; argIndex++) { osPrintf("arg[%d]: %s\n", argIndex, argv[argIndex]); argString = argv[argIndex]; NameValueTokenizer::frontBackTrim(&argString, "\t "); if (argString.compareTo("-v") == 0) { osPrintf("Version: %s (%s)\n", VERSION, PACKAGE_REVISION); return 1; } else { osPrintf("usage: %s [-v]\nwhere:\n -v provides the software version\n", argv[0]); return 1; } } // Load configuration file. OsPath workingDirectory; if (OsFileSystem::exists(CONFIG_ETC_DIR)) { workingDirectory = CONFIG_ETC_DIR; OsPath path(workingDirectory); path.getNativePath(workingDirectory); } else { OsPath path; OsFileSystem::getWorkingDirectory(path); path.getNativePath(workingDirectory); } UtlString fileName = workingDirectory + OsPathBase::separator + CONFIG_SETTINGS_FILE; if (configDb.loadFromFile(fileName) != OS_SUCCESS) { fprintf(stderr, "Failed to load config DB from file '%s'", fileName.data()); exit(1); } // Initialize log file initSysLog(&configDb); // Read the user agent parameters from the config file. int udpPort; if (configDb.get(CONFIG_SETTING_UDP_PORT, udpPort) != OS_SUCCESS) { udpPort = RLS_DEFAULT_UDP_PORT; } int tcpPort; if (configDb.get(CONFIG_SETTING_TCP_PORT, tcpPort) != OS_SUCCESS) { tcpPort = RLS_DEFAULT_TCP_PORT; } UtlString bindIp; if (configDb.get(CONFIG_SETTING_BIND_IP, bindIp) != OS_SUCCESS || !OsSocket::isIp4Address(bindIp)) bindIp = RLS_DEFAULT_BIND_IP; UtlString resourceListFile; if ((configDb.get(CONFIG_SETTING_RLS_FILE, resourceListFile) != OS_SUCCESS) || resourceListFile.isNull()) { Os::Logger::instance().log(LOG_FACILITY, PRI_CRIT, "Resource list file name is not configured"); return 1; } UtlString domainName; if ((configDb.get(CONFIG_SETTING_DOMAIN_NAME, domainName) != OS_SUCCESS) || domainName.isNull()) { Os::Logger::instance().log(LOG_FACILITY, PRI_CRIT, "Resource domain name is not configured"); return 1; } UtlString realm; if ((configDb.get(CONFIG_SETTING_AUTHENTICATE_REALM, realm) != OS_SUCCESS) || realm.isNull()) { Os::Logger::instance().log(LOG_FACILITY, PRI_CRIT, "Resource realm is not configured"); return 1; } int resubscribeInterval; if (configDb.get(CONFIG_SETTING_RESUBSCRIBE_INTERVAL, resubscribeInterval) != OS_SUCCESS) { resubscribeInterval = RLS_DEFAULT_RESUBSCRIBE_INTERVAL; } int minResubscribeInterval; if (configDb.get(CONFIG_SETTING_MIN_RESUBSCRIBE_INTERVAL, minResubscribeInterval) != OS_SUCCESS) { minResubscribeInterval = RLS_DEFAULT_MIN_RESUBSCRIBE_INTERVAL; } int serverMinExpiration; if (configDb.get(CONFIG_SETTING_SERVER_MIN_EXPIRATION, serverMinExpiration) != OS_SUCCESS) { serverMinExpiration = RLS_DEFAULT_SERVER_MIN_EXPIRATION; } int serverDefaultExpiration; if (configDb.get(CONFIG_SETTING_SERVER_DEFAULT_EXPIRATION, serverDefaultExpiration) != OS_SUCCESS) { serverDefaultExpiration = RLS_DEFAULT_SERVER_DEFAULT_EXPIRATION; } int serverMaxExpiration; if (configDb.get(CONFIG_SETTING_SERVER_MAX_EXPIRATION, serverMaxExpiration) != OS_SUCCESS) { serverMaxExpiration = RLS_DEFAULT_SERVER_MAX_EXPIRATION; } // add the ~~sipXrls credentials so that sipXrls can respond to challenges SipLineMgr* lineMgr = addCredentials(domainName, realm); if(NULL == lineMgr) { return 1; } if (!gShutdownFlag) { // Initialize the ResourceListServer. ResourceListServer rls(domainName, realm, lineMgr, DIALOG_EVENT_TYPE, DIALOG_EVENT_CONTENT_TYPE, tcpPort, udpPort, PORT_NONE, bindIp, &resourceListFile, resubscribeInterval, minResubscribeInterval, RLS_PUBLISH_DELAY, 20, 20, 20, 20, serverMinExpiration, serverDefaultExpiration, serverMaxExpiration); rls.start(); // Loop forever until signaled to shut down while (!Os::UnixSignals::instance().isTerminateSignalReceived() && !gShutdownFlag) { OsTask::delay(2000); // See if the list configuration file has changed. rls.getResourceListFileReader().refresh(); } // Shut down the server. rls.shutdown(); } lineMgr->requestShutdown(); while (!lineMgr->isShutDown()) { OsTask::delay(100); } // Delete the LineMgr Object delete lineMgr; // Flush the log file Os::Logger::instance().flush(); // Say goodnight Gracie... return 0; }
// // The main entry point to sipXsaa. // int main(int argc, char* argv[]) { // Block all signals in this the main thread. // Any threads created from now on will have all signals masked. OsTask::blockSignals(); // Create a new task to wait for signals. Only that task // will ever see a signal from the outside. SignalTask* signalTask = new SignalTask(); signalTask->start(); // Configuration Database (used for OsSysLog) OsConfigDb configDb; UtlString argString; for (int argIndex = 1; argIndex < argc; argIndex++) { osPrintf("arg[%d]: %s\n", argIndex, argv[argIndex]); argString = argv[argIndex]; NameValueTokenizer::frontBackTrim(&argString, "\t "); if (argString.compareTo("-v") == 0) { osPrintf("Version: %s (%s)\n", SIPXCHANGE_VERSION, SIPXCHANGE_VERSION_COMMENT); return 1; } else { osPrintf("usage: %s [-v]\nwhere:\n -v provides the software version\n", argv[0]); return 1; } } // Load configuration file. OsPath workingDirectory; if (OsFileSystem::exists(CONFIG_ETC_DIR)) { workingDirectory = CONFIG_ETC_DIR; OsPath path(workingDirectory); path.getNativePath(workingDirectory); } else { OsPath path; OsFileSystem::getWorkingDirectory(path); path.getNativePath(workingDirectory); } UtlString fileName = workingDirectory + OsPathBase::separator + CONFIG_SETTINGS_FILE; if (configDb.loadFromFile(fileName) != OS_SUCCESS) { exit(1); } // Initialize log file initSysLog(&configDb); // Read the user agent parameters from the config file. int udpPort; if (configDb.get(CONFIG_SETTING_UDP_PORT, udpPort) != OS_SUCCESS) { udpPort = SAA_DEFAULT_UDP_PORT; } int tcpPort; if (configDb.get(CONFIG_SETTING_TCP_PORT, tcpPort) != OS_SUCCESS) { tcpPort = SAA_DEFAULT_TCP_PORT; } UtlString bindIp; if (configDb.get(CONFIG_SETTING_BIND_IP, bindIp) != OS_SUCCESS || !OsSocket::isIp4Address(bindIp)) bindIp = SAA_DEFAULT_BIND_IP; UtlString appearanceGroupFile; if ((configDb.get(CONFIG_SETTING_SAA_FILE, appearanceGroupFile) != OS_SUCCESS) || appearanceGroupFile.isNull()) { OsSysLog::add(LOG_FACILITY, PRI_CRIT, "Appearance group file name is not configured"); return 1; } UtlString domainName; if ((configDb.get(CONFIG_SETTING_DOMAIN_NAME, domainName) != OS_SUCCESS) || domainName.isNull()) { OsSysLog::add(LOG_FACILITY, PRI_CRIT, "Resource domain name is not configured"); return 1; } UtlString realm; if ((configDb.get(CONFIG_SETTING_AUTHENTICATE_REALM, realm) != OS_SUCCESS) || realm.isNull()) { OsSysLog::add(LOG_FACILITY, PRI_CRIT, "Resource realm is not configured"); return 1; } int refreshInterval; if (configDb.get(CONFIG_SETTING_REFRESH_INTERVAL, refreshInterval) != OS_SUCCESS) { refreshInterval = SAA_DEFAULT_REFRESH_INTERVAL; } int resubscribeInterval; if (configDb.get(CONFIG_SETTING_RESUBSCRIBE_INTERVAL, resubscribeInterval) != OS_SUCCESS) { resubscribeInterval = SAA_DEFAULT_RESUBSCRIBE_INTERVAL; } int minResubscribeInterval; if (configDb.get(CONFIG_SETTING_MIN_RESUBSCRIBE_INTERVAL, minResubscribeInterval) != OS_SUCCESS) { minResubscribeInterval = SAA_DEFAULT_MIN_RESUBSCRIBE_INTERVAL; } // shorter expiration while the shared line is "seized" by a set int seizedResubscribeInterval; if (configDb.get(CONFIG_SETTING_SEIZED_RESUBSCRIBE_INTERVAL, seizedResubscribeInterval) != OS_SUCCESS) { seizedResubscribeInterval = SAA_DEFAULT_SEIZED_RESUBSCRIBE_INTERVAL; } int serverMinExpiration; if (configDb.get(CONFIG_SETTING_SERVER_MIN_EXPIRATION, serverMinExpiration) != OS_SUCCESS) { serverMinExpiration = SAA_DEFAULT_SERVER_MIN_EXPIRATION; } int serverDefaultExpiration; if (configDb.get(CONFIG_SETTING_SERVER_DEFAULT_EXPIRATION, serverDefaultExpiration) != OS_SUCCESS) { serverDefaultExpiration = SAA_DEFAULT_SERVER_DEFAULT_EXPIRATION; } int serverMaxExpiration; if (configDb.get(CONFIG_SETTING_SERVER_MAX_EXPIRATION, serverMaxExpiration) != OS_SUCCESS) { serverMaxExpiration = SAA_DEFAULT_SERVER_MAX_EXPIRATION; } // add the ~~sipXsaa credentials so that sipXsaa can respond to challenges SipLineMgr* lineMgr = addCredentials(domainName, realm); if(NULL == lineMgr) { return 1; } if (!gShutdownFlag) { // Initialize the AppearanceAgent. // (Use tcpPort as the TLS port, too.) AppearanceAgent saa(domainName, realm, lineMgr, tcpPort, udpPort, tcpPort, bindIp, &appearanceGroupFile, refreshInterval, resubscribeInterval, minResubscribeInterval, seizedResubscribeInterval, SAA_PUBLISH_DELAY, 20, serverMinExpiration, serverDefaultExpiration, serverMaxExpiration); saa.start(); // Loop forever until signaled to shut down while (!gShutdownFlag) { OsTask::delay(2 * OsTime::MSECS_PER_SEC); // See if the list configuration file has changed. saa.getAppearanceGroupFileReader().refresh(); } // Shut down the server. saa.shutdown(); } // Flush the log file OsSysLog::flush(); // Delete the LineMgr Object delete lineMgr; // Say goodnight Gracie... return 0; }
// // Create the real Appearance Agent, passing in the configured parameters // void AppearanceAgentService::run() { int udpPort; int tcpPort; UtlString bindIp; UtlString appearanceGroupFile; UtlString domainName; UtlString realm; int refreshInterval; int resubscribeInterval; int minResubscribeInterval; int seizedResubscribeInterval; int serverMinExpiration; int serverDefaultExpiration; int serverMaxExpiration; loadConfig(udpPort, tcpPort, bindIp, appearanceGroupFile, domainName, realm, refreshInterval, resubscribeInterval, minResubscribeInterval, seizedResubscribeInterval, serverMinExpiration, serverDefaultExpiration, serverMaxExpiration); // add the ~~sipXsaa credentials so that sipXsaa can respond to challenges SipLineMgr* lineMgr = addCredentials(domainName, realm); if (NULL == lineMgr) { OsSysLog::add(FAC_SAA, PRI_CRIT, "failed to add SAA credentials - exiting"); setShutdownFlag(true); } if (!getShutdownFlag()) { // Initialize the AppearanceAgent. // (Use tcpPort as the TLS port, too.) mAppearanceAgent = new AppearanceAgent(this, domainName, realm, lineMgr, tcpPort, udpPort, tcpPort, bindIp, &appearanceGroupFile, refreshInterval, resubscribeInterval, minResubscribeInterval, seizedResubscribeInterval, SAA_PUBLISH_DELAY, 20, serverMinExpiration, serverDefaultExpiration, serverMaxExpiration); mAppearanceAgent->start(); // Loop forever until signaled to shut down while (!getShutdownFlag()) { OsTask::delay(2 * OsTime::MSECS_PER_SEC); } // Shut down the server. mAppearanceAgent->shutdown(); } // Delete the LineMgr Object delete lineMgr; }