/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "bearerex.h" #include Q_DECLARE_METATYPE(QNetworkConfiguration) BearerEx::BearerEx(QWidget* parent) : QMainWindow(parent) { setupUi(this); createMenus(); connect(&m_NetworkConfigurationManager, SIGNAL(updateCompleted()), this, SLOT(configurationsUpdateCompleted())); connect(&m_NetworkConfigurationManager, SIGNAL(configurationAdded(const QNetworkConfiguration&)), this, SLOT(configurationAdded(const QNetworkConfiguration&))); connect(&m_NetworkConfigurationManager, SIGNAL(configurationRemoved(const QNetworkConfiguration&)), this, SLOT(configurationRemoved(const QNetworkConfiguration&))); connect(&m_NetworkConfigurationManager, SIGNAL(onlineStateChanged(bool)), this, SLOT(onlineStateChanged(bool))); connect(&m_NetworkConfigurationManager, SIGNAL(configurationChanged(const QNetworkConfiguration&)), this, SLOT(configurationChanged(const QNetworkConfiguration&))); showConfigurations(); } void BearerEx::createMenus() { QAction* act1 = new QAction(tr("Show Details"), this); menuBar()->addAction(act1); connect(act1, SIGNAL(triggered()), this, SLOT(on_showDetailsButton_clicked())); QAction* exitAct = new QAction(tr("Exit"), this); menuBar()->addAction(exitAct); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); } void BearerEx::showConfigurations() { listWidget->clear(); QListWidgetItem* listItem; QNetworkConfiguration defaultConfig = m_NetworkConfigurationManager.defaultConfiguration(); if (defaultConfig.type() == QNetworkConfiguration::UserChoice) { listItem = new QListWidgetItem(); QFont font = listItem->font(); font.setBold(true); font.setUnderline(true); listItem->setFont(font); listItem->setText(" UserChoice"); listItem->setData(Qt::UserRole, qVariantFromValue(defaultConfig)); listWidget->addItem(listItem); } QList configurations = m_NetworkConfigurationManager.allConfigurations(); for (int i=0; ifont(); font.setBold(true); font.setUnderline(true); listItem->setFont(font); } listItem->setText(text); listItem->setData(Qt::UserRole, qVariantFromValue(configurations[i])); listWidget->addItem(listItem); } } void BearerEx::on_updateConfigurationsButton_clicked() { m_NetworkConfigurationManager.updateConfigurations(); } void BearerEx::on_updateListButton_clicked() { showConfigurations(); } void BearerEx::on_showDetailsButton_clicked() { QListWidgetItem* item = listWidget->currentItem(); if (!item) { return; } QNetworkConfiguration networkConfiguration = qVariantValue(item->data(Qt::UserRole)); DetailedInfoDialog infoDialog(&networkConfiguration,this); infoDialog.exec(); } void BearerEx::on_createSessionButton_clicked() { QListWidgetItem* item = listWidget->currentItem(); if (!item) { return; } QNetworkConfiguration networkConfiguration = qVariantValue(item->data(Qt::UserRole)); int newTabIndex = mainTabWidget->count(); SessionTab* newTab = new SessionTab(&networkConfiguration,&m_NetworkConfigurationManager,eventListWidget,newTabIndex-1); QString label = QString("S")+QString::number(newTabIndex-1); mainTabWidget->insertTab(newTabIndex,newTab,label); mainTabWidget->setCurrentIndex(newTabIndex); } void BearerEx::on_clearEventListButton_clicked() { eventListWidget->clear(); } void BearerEx::configurationAdded(const QNetworkConfiguration& config) { QListWidgetItem* listItem = new QListWidgetItem(); listItem->setText(QString("Added: ")+config.name()); eventListWidget->addItem(listItem); } void BearerEx::configurationRemoved(const QNetworkConfiguration& config) { QListWidgetItem* listItem = new QListWidgetItem(); listItem->setText(QString("Removed: ")+config.name()); eventListWidget->addItem(listItem); } void BearerEx::onlineStateChanged(bool isOnline) { QListWidgetItem* listItem = new QListWidgetItem(); QFont font = listItem->font(); font.setBold(true); listItem->setFont(font); if (isOnline) { listItem->setText(QString("> Online")); } else { listItem->setText(QString("< Offline")); } eventListWidget->addItem(listItem); } void BearerEx::configurationChanged(const QNetworkConfiguration & config) { QListWidgetItem* listItem = new QListWidgetItem(); QString state; switch (config.state()) { case QNetworkConfiguration::Undefined: state = "Undef : "; break; case QNetworkConfiguration::Defined: state = "Def : "; break; case QNetworkConfiguration::Discovered: state = "Disc : "; break; case QNetworkConfiguration::Active: state = "Act : "; break; } listItem->setText(state+config.name()); eventListWidget->addItem(listItem); } void BearerEx::configurationsUpdateCompleted() { QMessageBox msgBox; msgBox.setStandardButtons(QMessageBox::Close); msgBox.setText("Configurations update completed."); msgBox.exec(); } DetailedInfoDialog::DetailedInfoDialog(QNetworkConfiguration* apNetworkConfiguration, QWidget * parent) : QDialog(parent) { setupUi(this); tableWidget->setColumnCount(2); int rowCount = 2; if (apNetworkConfiguration->type() == QNetworkConfiguration::ServiceNetwork) { rowCount = rowCount + apNetworkConfiguration->children().count(); } tableWidget->setRowCount(rowCount); tableWidget->setColumnWidth(1,250); tableWidget->setItem(0, 0, new QTableWidgetItem(tr("Name"))); tableWidget->setItem(0, 1, new QTableWidgetItem(apNetworkConfiguration->name())); tableWidget->setItem(1, 0, new QTableWidgetItem(tr("Id"))); tableWidget->setItem(1, 1, new QTableWidgetItem(apNetworkConfiguration->identifier())); if (apNetworkConfiguration->type() == QNetworkConfiguration::ServiceNetwork) { for (int i=0; ichildren().count(); i++) { tableWidget->setItem(i+2, 0, new QTableWidgetItem(QString("IAP")+QString::number(i+1))); tableWidget->setItem(i+2, 1, new QTableWidgetItem(apNetworkConfiguration->children()[i].name())); } } tableWidget->setFocusPolicy(Qt::NoFocus); #ifdef Q_OS_SYMBIAN this->showMaximized(); #endif } SessionTab::SessionTab(QNetworkConfiguration* apNetworkConfiguration, QNetworkConfigurationManager* configManager, QListWidget* eventListWidget, int index, BearerEx * parent) : QWidget(parent), m_http(0), m_eventListWidget(eventListWidget), m_index(index), m_httpRequestOngoing(false), m_alrEnabled (false) { setupUi(this); m_ConfigManager = configManager; m_NetworkSession = new QNetworkSession(*apNetworkConfiguration); // Update initial Session state to UI newState(m_NetworkSession->state()); connect(m_NetworkSession, SIGNAL(newConfigurationActivated()), this, SLOT(newConfigurationActivated())); connect(m_NetworkSession, SIGNAL(stateChanged(QNetworkSession::State)), this, SLOT(stateChanged(QNetworkSession::State))); connect(m_NetworkSession, SIGNAL(opened()), this, SLOT(opened())); connect(m_NetworkSession, SIGNAL(closed()), this, SLOT(closed())); connect(m_NetworkSession, SIGNAL(error(QNetworkSession::SessionError)), this, SLOT(error(QNetworkSession::SessionError))); if (apNetworkConfiguration->type() == QNetworkConfiguration::InternetAccessPoint) { snapLabel->hide(); snapLineEdit->hide(); alrButton->hide(); iapLineEdit->setText(apNetworkConfiguration->name()+" ("+apNetworkConfiguration->identifier()+")"); } else if (apNetworkConfiguration->type() == QNetworkConfiguration::ServiceNetwork) { snapLineEdit->setText(apNetworkConfiguration->name()+" ("+apNetworkConfiguration->identifier()+")"); } bearerLineEdit->setText(apNetworkConfiguration->bearerName()); sentRecDataLineEdit->setText(QString::number(m_NetworkSession->bytesWritten())+ QString(" / ")+ QString::number(m_NetworkSession->bytesReceived())); snapLineEdit->setFocusPolicy(Qt::NoFocus); iapLineEdit->setFocusPolicy(Qt::NoFocus); bearerLineEdit->setFocusPolicy(Qt::NoFocus); sentRecDataLineEdit->setFocusPolicy(Qt::NoFocus); stateLineEdit->setFocusPolicy(Qt::NoFocus); } SessionTab::~SessionTab() { // Need to be nulled, because modal dialogs may return after destruction of this object and // use already released resources. delete m_NetworkSession; m_NetworkSession = NULL; delete m_http; m_http = NULL; } void SessionTab::on_createQHttpButton_clicked() { if (m_httpRequestOngoing) { return; } if (m_http) { disconnect(m_http, 0, 0, 0); delete m_http; } m_http = new QHttp(this); createQHttpButton->setText("Recreate QHttp"); connect(m_http, SIGNAL(done(bool)), this, SLOT(done(bool))); } void SessionTab::on_sendRequestButton_clicked() { if (m_http) { QString urlstring("http://www.google.com"); QUrl url(urlstring); m_http->setHost(url.host(), QHttp::ConnectionModeHttp, url.port() == -1 ? 0 : url.port()); m_http->get(urlstring); m_httpRequestOngoing = true; } else { QMessageBox msgBox; msgBox.setStandardButtons(QMessageBox::Close); msgBox.setText("QHttp not created.\nCreate QHttp First."); msgBox.exec(); } } void SessionTab::on_openSessionButton_clicked() { m_NetworkSession->open(); if (m_NetworkSession->isOpen()) { newState(m_NetworkSession->state()); } } void SessionTab::on_closeSessionButton_clicked() { m_NetworkSession->close(); if (!m_NetworkSession->isOpen()) { newState(m_NetworkSession->state()); } } void SessionTab::on_stopConnectionButton_clicked() { m_NetworkSession->stop(); } void SessionTab::on_alrButton_clicked() { if (!m_alrEnabled) { connect(m_NetworkSession, SIGNAL(preferredConfigurationChanged(const QNetworkConfiguration&, bool)), this, SLOT(preferredConfigurationChanged(const QNetworkConfiguration&, bool))); alrButton->setText("Disable ALR"); m_alrEnabled = true; } else { disconnect(m_NetworkSession, SIGNAL(preferredConfigurationChanged(const QNetworkConfiguration&, bool)), 0, 0); alrButton->setText("Enable ALR"); m_alrEnabled = false; } } void SessionTab::on_deleteSessionButton_clicked() { setWindowTitle("Bearer Example"); delete this; } void SessionTab::newConfigurationActivated() { QMessageBox msgBox; msgBox.setText("New configuration activated."); msgBox.setInformativeText("Do you want to accept new configuration?"); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); if (msgBox.exec() == QMessageBox::Yes) { m_NetworkSession->accept(); iapLineEdit->setText(m_config.name()+" ("+m_config.identifier()+")"); } else { m_NetworkSession->reject(); } } void SessionTab::preferredConfigurationChanged(const QNetworkConfiguration& config, bool /*isSeamless*/) { m_config = config; QMessageBox msgBox; msgBox.setText("Roaming to new configuration."); msgBox.setInformativeText("Do you want to migrate to "+config.name()+"?"); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); if (msgBox.exec() == QMessageBox::Yes) { m_NetworkSession->migrate(); } else { m_NetworkSession->ignore(); } } void SessionTab::opened() { QListWidgetItem* listItem = new QListWidgetItem(); QFont font = listItem->font(); font.setBold(true); listItem->setFont(font); listItem->setText(QString("S")+QString::number(m_index)+QString(" - ")+QString("Opened")); m_eventListWidget->addItem(listItem); QVariant identifier = m_NetworkSession->property("ActiveConfiguration"); if (!identifier.isNull()) { QString configId = identifier.toString(); QNetworkConfiguration config = m_ConfigManager->configurationFromIdentifier(configId); if (config.isValid()) { iapLineEdit->setText(config.name()+" ("+config.identifier()+")"); } } if (m_NetworkSession->configuration().type() == QNetworkConfiguration::UserChoice) { QVariant identifier = m_NetworkSession->property("UserChoiceConfiguration"); if (!identifier.isNull()) { QString configId = identifier.toString(); QNetworkConfiguration config = m_ConfigManager->configurationFromIdentifier(configId); if (config.isValid() && (config.type() == QNetworkConfiguration::ServiceNetwork)) { snapLineEdit->setText(config.name()); } } } } void SessionTab::closed() { QListWidgetItem* listItem = new QListWidgetItem(); QFont font = listItem->font(); font.setBold(true); listItem->setFont(font); listItem->setText(QString("S")+QString::number(m_index)+QString(" - ")+QString("Closed")); m_eventListWidget->addItem(listItem); } QString SessionTab::stateString(QNetworkSession::State state) { QString stateString; switch (state) { case QNetworkSession::Invalid: stateString = "Invalid"; break; case QNetworkSession::NotAvailable: stateString = "NotAvailable"; break; case QNetworkSession::Connecting: stateString = "Connecting"; break; case QNetworkSession::Connected: stateString = "Connected"; break; case QNetworkSession::Closing: stateString = "Closing"; break; case QNetworkSession::Disconnected: stateString = "Disconnected"; break; case QNetworkSession::Roaming: stateString = "Roaming"; break; } return stateString; } void SessionTab::stateChanged(QNetworkSession::State state) { newState(state); QListWidgetItem* listItem = new QListWidgetItem(); listItem->setText(QString("S")+QString::number(m_index)+QString(" - ")+stateString(state)); m_eventListWidget->addItem(listItem); } void SessionTab::newState(QNetworkSession::State state) { QVariant identifier = m_NetworkSession->property("ActiveConfiguration"); if (state == QNetworkSession::Connected && !identifier.isNull()) { QString configId = identifier.toString(); QNetworkConfiguration config = m_ConfigManager->configurationFromIdentifier(configId); if (config.isValid()) { iapLineEdit->setText(config.name()+" ("+config.identifier()+")"); bearerLineEdit->setText(config.bearerName()); } } else { bearerLineEdit->setText(m_NetworkSession->configuration().bearerName()); } QString active; if (m_NetworkSession->isOpen()) { active = " (O)"; } stateLineEdit->setText(stateString(state)+active); } void SessionTab::error(QNetworkSession::SessionError error) { QListWidgetItem* listItem = new QListWidgetItem(); QMessageBox msgBox; msgBox.setStandardButtons(QMessageBox::Close); QString errorString; switch (error) { case QNetworkSession::UnknownSessionError: errorString = "UnknownSessionError"; break; case QNetworkSession::SessionAbortedError: errorString = "SessionAbortedError"; break; case QNetworkSession::RoamingError: errorString = "RoamingError"; break; case QNetworkSession::OperationNotSupportedError: errorString = "OperationNotSupportedError"; break; case QNetworkSession::InvalidConfigurationError: errorString = "InvalidConfigurationError"; break; } listItem->setText(QString("S")+QString::number(m_index)+QString(" - ")+errorString); m_eventListWidget->addItem(listItem); msgBox.setText(errorString); msgBox.exec(); } void SessionTab::done(bool error) { m_httpRequestOngoing = false; QMessageBox msgBox; msgBox.setStandardButtons(QMessageBox::Close); if (error) { msgBox.setText("HTTP request failed."); } else { QString result(m_http->readAll()); msgBox.setText(QString("HTTP request finished successfully.\nReceived ")+QString::number(result.length())+QString(" bytes.")); } msgBox.exec(); // Check if the networksession still exists - it may have gone after returning from // the modal dialog (in the case that app has been closed, and deleting QHttp will // trigger the done() invokation). if (m_NetworkSession) { sentRecDataLineEdit->setText(QString::number(m_NetworkSession->bytesWritten())+ QString(" / ")+ QString::number(m_NetworkSession->bytesReceived())); } else { sentRecDataLineEdit->setText("Data amounts not available."); } } // End of file