/*! Starts the backend. Returns \c true if the backend is started. Returns \c false if the backend could not be started due to an unopened or roaming session. The caller should recall this function once the session has been opened or the roaming process has finished. */ bool QNetworkAccessBackend::start() { #ifndef QT_NO_BEARERMANAGEMENT // For bearer, check if session start is required QSharedPointer<QNetworkSession> networkSession(manager->getNetworkSession()); if (networkSession) { // session required if (networkSession->isOpen() && networkSession->state() == QNetworkSession::Connected) { // Session is already open and ready to use. // copy network session down to the backend setProperty("_q_networksession", QVariant::fromValue(networkSession)); } else { // Session not ready, but can skip for loopback connections // This is not ideal. const QString host = reply->url.host(); if (host == QLatin1String("localhost") || QHostAddress(host).isLoopback() || reply->url.isLocalFile()) { // Don't need an open session for localhost access. } else { // need to wait for session to be opened return false; } } } #endif #ifndef QT_NO_NETWORKPROXY #ifndef QT_NO_BEARERMANAGEMENT // Get the proxy settings from the network session (in the case of service networks, // the proxy settings change depending which AP was activated) QNetworkSession *session = networkSession.data(); QNetworkConfiguration config; if (session) { QNetworkConfigurationManager configManager; // The active configuration tells us what IAP is in use QVariant v = session->sessionProperty(QLatin1String("ActiveConfiguration")); if (v.isValid()) config = configManager.configurationFromIdentifier(qvariant_cast<QString>(v)); // Fallback to using the configuration if no active configuration if (!config.isValid()) config = session->configuration(); // or unspecified configuration if that is no good either if (!config.isValid()) config = QNetworkConfiguration(); } reply->proxyList = manager->queryProxy(QNetworkProxyQuery(config, url())); #else // QT_NO_BEARERMANAGEMENT // Without bearer management, the proxy depends only on the url reply->proxyList = manager->queryProxy(QNetworkProxyQuery(url())); #endif #endif // now start the request open(); return true; }
void QNetworkReplyImplPrivate::_q_networkSessionConnected() { Q_Q(QNetworkReplyImpl); if (manager.isNull()) return; QNetworkSession *session = manager->d_func()->networkSession; if (!session) return; if (session->state() != QNetworkSession::Connected) return; switch (state) { case QNetworkReplyImplPrivate::Buffering: case QNetworkReplyImplPrivate::Working: case QNetworkReplyImplPrivate::Reconnecting: // Migrate existing downloads to new network connection. migrateBackend(); break; case QNetworkReplyImplPrivate::WaitingForSession: // Start waiting requests. QMetaObject::invokeMethod(q, "_q_startOperation", Qt::QueuedConnection); break; default: ; } }
void QNetworkReplyImplPrivate::_q_startOperation() { // ensure this function is only being called once if (state == Working) { qDebug("QNetworkReplyImpl::_q_startOperation was called more than once"); return; } state = Working; // note: if that method is called directly, it cannot happen that the backend is 0, // because we just checked via a qobject_cast that we got a http backend (see // QNetworkReplyImplPrivate::setup()) if (!backend) { error(QNetworkReplyImpl::ProtocolUnknownError, QCoreApplication::translate("QNetworkReply", "Protocol \"%1\" is unknown").arg(url.scheme())); // not really true!; finished(); return; } #ifndef QT_NO_BEARERMANAGEMENT if (!backend->start()) { // backend failed to start because the session state is not Connected. // QNetworkAccessManager will call reply->backend->start() again for us when the session // state changes. state = WaitingForSession; QNetworkSession *session = manager->d_func()->networkSession; if (session) { Q_Q(QNetworkReplyImpl); QObject::connect(session, SIGNAL(error(QNetworkSession::SessionError)), q, SLOT(_q_networkSessionFailed())); if (!session->isOpen()) session->open(); } else { qWarning("Backend is waiting for QNetworkSession to connect, but there is none!"); } return; } #endif if (state != Finished) { if (operation == QNetworkAccessManager::GetOperation) pendingNotifications.append(NotifyDownstreamReadyWrite); handleNotifications(); } }
static PyObject *meth_QNetworkSession_isOpen(PyObject *sipSelf, PyObject *sipArgs) { PyObject *sipParseErr = NULL; { QNetworkSession *sipCpp; if (sipParseArgs(&sipParseErr, sipArgs, "B", &sipSelf, sipType_QNetworkSession, &sipCpp)) { bool sipRes; Py_BEGIN_ALLOW_THREADS sipRes = sipCpp->isOpen(); Py_END_ALLOW_THREADS return PyBool_FromLong(sipRes); } }
int main(int argc, char *argv[]) { QApplication app(argc, argv); QNetworkConfigurationManager manager; if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { // Get saved network configuration QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("QtNetwork")); const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); settings.endGroup(); // If the saved network configuration is not currently discovered use the system default QNetworkConfiguration config = manager.configurationFromIdentifier(id); if ((config.state() & QNetworkConfiguration::Discovered) != QNetworkConfiguration::Discovered) { config = manager.defaultConfiguration(); } QNetworkSession *networkSession = new QNetworkSession(config, &app); networkSession->open(); networkSession->waitForOpened(); if (networkSession->isOpen()) { // Save the used configuration QNetworkConfiguration config = networkSession->configuration(); QString id; if (config.type() == QNetworkConfiguration::UserChoice) { id = networkSession->sessionProperty( QLatin1String("UserChoiceConfiguration")).toString(); } else { id = config.identifier(); } QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("QtNetwork")); settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); settings.endGroup(); } } //ChatDialog dialog; InitialWindow window; #ifdef Q_OS_SYMBIAN // Make application better looking and more usable on small screen // dialog.showMaximized(); #else // dialog.show(); window.show(); #endif return app.exec(); }
int main(int argc, char *argv[]) { QApplication a(argc, argv); QNetworkConfigurationManager manager; if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { // Get saved network configuration QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); settings.beginGroup(QLatin1String("QtNetwork")); const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); settings.endGroup(); // If the saved network configuration is not currently discovered use the system default QNetworkConfiguration config = manager.configurationFromIdentifier(id); if ((config.state() & QNetworkConfiguration::Discovered) != QNetworkConfiguration::Discovered) { config = manager.defaultConfiguration(); } QNetworkSession *networkSession = new QNetworkSession(config, &a); networkSession->open(); networkSession->waitForOpened(); if (networkSession->isOpen()) { // Save the used configuration QNetworkConfiguration config = networkSession->configuration(); QString id; if (config.type() == QNetworkConfiguration::UserChoice) { id = networkSession->sessionProperty( QLatin1String("UserChoiceConfiguration")).toString(); } else { id = config.identifier(); } QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); settings.beginGroup(QLatin1String("QtNetwork")); settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); settings.endGroup(); } } interface w; w.show(); return a.exec(); }
void QNetworkReplyImplPrivate::finished() { Q_Q(QNetworkReplyImpl); if (state == Finished || state == Aborted || state == WaitingForSession) return; pauseNotificationHandling(); QVariant totalSize = cookedHeaders.value(QNetworkRequest::ContentLengthHeader); if (preMigrationDownloaded != Q_INT64_C(-1)) totalSize = totalSize.toLongLong() + preMigrationDownloaded; if (!manager.isNull()) { #ifndef QT_NO_BEARERMANAGEMENT QNetworkSession *session = manager->d_func()->networkSession; if (session && session->state() == QNetworkSession::Roaming && state == Working && errorCode != QNetworkReply::OperationCanceledError) { // only content with a known size will fail with a temporary network failure error if (!totalSize.isNull()) { if (bytesDownloaded != totalSize) { if (migrateBackend()) { // either we are migrating or the request is finished/aborted if (state == Reconnecting || state == WaitingForSession) { resumeNotificationHandling(); return; // exit early if we are migrating. } } else { error(QNetworkReply::TemporaryNetworkFailureError, QNetworkReply::tr("Temporary network failure.")); } } } } #endif } resumeNotificationHandling(); state = Finished; pendingNotifications.clear(); pauseNotificationHandling(); if (totalSize.isNull() || totalSize == -1) { emit q->downloadProgress(bytesDownloaded, bytesDownloaded); } if (bytesUploaded == -1 && (outgoingData || outgoingDataBuffer)) emit q->uploadProgress(0, 0); resumeNotificationHandling(); // if we don't know the total size of or we received everything save the cache if (totalSize.isNull() || totalSize == -1 || bytesDownloaded == totalSize) completeCacheSave(); // note: might not be a good idea, since users could decide to delete us // which would delete the backend too... // maybe we should protect the backend pauseNotificationHandling(); emit q->readChannelFinished(); emit q->finished(); resumeNotificationHandling(); }
int main(int argc, char**argv) { QCoreApplication app(argc, argv); #ifdef Q_OS_SYMBIAN QNetworkConfigurationManager configurationManager; QNetworkConfiguration configuration = configurationManager.defaultConfiguration(); if (!configuration.isValid()) { qDebug() << "Got an invalid session configuration"; exit(1); } qDebug() << "Opening session..."; QNetworkSession *session = new QNetworkSession(configuration); // Does not work: // session->open(); // session->waitForOpened(); // works: QEventLoop loop; QObject::connect(session, SIGNAL(opened()), &loop, SLOT(quit()), Qt::QueuedConnection); QMetaObject::invokeMethod(session, "open", Qt::QueuedConnection); loop.exec(); if (session->isOpen()) { qDebug() << "session opened"; } else { qDebug() << "session could not be opened -" << session->errorString(); exit(1); } #endif // create it QAbstractSocketEngine *socketEngine = QAbstractSocketEngine::createSocketEngine(QAbstractSocket::TcpSocket, QNetworkProxy(QNetworkProxy::NoProxy), 0); if (!socketEngine) { qDebug() << "could not create engine"; exit(1); } // initialize it bool initialized = socketEngine->initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol); if (!initialized) { qDebug() << "not able to initialize engine"; exit(1); } // wait for connected int r = socketEngine->connectToHost(QHostAddress("74.125.77.99"), 80); // google bool readyToRead = false; bool readyToWrite = false; socketEngine->waitForReadOrWrite(&readyToRead, &readyToWrite, true, true, 10*1000); if (r <= 0) //timeout or error exit(1); if (readyToWrite) { // write the request QByteArray request("GET /robots.txt HTTP/1.0\r\n\r\n"); int ret = socketEngine->write(request.constData(), request.length()); if (ret == request.length()) { // read the response in a loop do { bool waitReadResult = socketEngine->waitForRead(10*1000); int available = socketEngine->bytesAvailable(); if (waitReadResult == true && available == 0) { // disconnected exit(0); } bzero(buf, bufsize); ret = socketEngine->read(buf, available); if (ret > 0) { #ifdef Q_OS_SYMBIAN qDebug() << buf; //printf goes only to screen, this goes to remote debug channel #else printf("%s", buf); #endif } else { // some failure when reading exit(1); } } while (1); } else { qDebug() << "failed writing"; } } else { qDebug() << "failed connecting"; } delete socketEngine; }
int main(int argc, char *argv[]) { QApplication a(argc, argv); QNetworkConfigurationManager manager; if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { // Get saved network configuration QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("QtNetwork")); const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); settings.endGroup(); // If the saved network configuration is not currently discovered use the system default QNetworkConfiguration config = manager.configurationFromIdentifier(id); if ((config.state() & QNetworkConfiguration::Discovered) != QNetworkConfiguration::Discovered) { config = manager.defaultConfiguration(); } QNetworkSession *networkSession = new QNetworkSession(config, &a); networkSession->open(); networkSession->waitForOpened(); if (networkSession->isOpen()) { // Save the used configuration QNetworkConfiguration config = networkSession->configuration(); QString id; if (config.type() == QNetworkConfiguration::UserChoice) { id = networkSession->sessionProperty( QLatin1String("UserChoiceConfiguration")).toString(); } else { id = config.identifier(); } QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("QtNetwork")); settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); settings.endGroup(); } } RedDeerNote w; QSplashScreen *splash=new QSplashScreen; splash->setPixmap(QPixmap(":/icons/logord2.png")); splash->show(); splash->showMessage( "Initializing..." ); SleeperThread::msleep(300); splash->showMessage( "Load GUI..." ); SleeperThread::msleep(300); splash->showMessage( "Load Library..." ); SleeperThread::msleep(300); splash->showMessage( "Starting..." ); SleeperThread::msleep(300); w.show(); splash->finish(&w); delete splash; return a.exec(); }