diff options
author | Shane Kearns <ext-shane.2.kearns@nokia.com> | 2012-04-04 18:11:42 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-11 22:19:21 +0200 |
commit | 6957b8d1ede105c88c22045685e3b9ce845c3c0c (patch) | |
tree | fb8f97b036d76c211b47a0d4cf4b9670752be2a0 | |
parent | ad73c3505a088260541143e1549d94d35e4bd8f6 (diff) |
Define usagePolicies API in QNetworkSession
This allows the system to publish usage restrictions to applications
related to the network in use.
Currently there is only one restriction defined:
NoBackgroundTrafficPolicy, which means that non user initiated traffic
should be avoided (e.g. background downloads).
For example this policy could be applied to save battery or data transfer
charges.
Change-Id: I49e26c0f3650d2b92f4ec51981aae9435b717b49
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
-rw-r--r-- | src/network/bearer/qnetworksession.cpp | 40 | ||||
-rw-r--r-- | src/network/bearer/qnetworksession.h | 13 | ||||
-rw-r--r-- | src/network/bearer/qnetworksession_p.h | 5 | ||||
-rw-r--r-- | src/plugins/bearer/qnetworksession_impl.cpp | 13 | ||||
-rw-r--r-- | src/plugins/bearer/qnetworksession_impl.h | 6 |
5 files changed, 75 insertions, 2 deletions
diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp index ccf794633d..1a3c25a97f 100644 --- a/src/network/bearer/qnetworksession.cpp +++ b/src/network/bearer/qnetworksession.cpp @@ -149,6 +149,17 @@ QT_BEGIN_NAMESPACE */ /*! + \enum QNetworkSession::UsagePolicies + + These flags allow the system to inform the application of network usage restrictions that + may be in place. + + \value NoPolicy No policy in force, usage is unrestricted. + \value NoBackgroundTrafficPolicy Background network traffic (not user initiated) should be avoided + for example to save battery or data charges +*/ + +/*! \fn void QNetworkSession::stateChanged(QNetworkSession::State state) This signal is emitted whenever the state of the network session changes. @@ -222,6 +233,12 @@ QT_BEGIN_NAMESPACE */ /*! + \fn void QNetworkSession::usagePoliciesChanged(UsagePolicies) + + This signal is emitted when the usage policies in force are changed by the system. +*/ + +/*! Constructs a session based on \a connectionConfig with the given \a parent. \sa QNetworkConfiguration @@ -247,6 +264,8 @@ QNetworkSession::QNetworkSession(const QNetworkConfiguration &connectionConfig, this, SIGNAL(preferredConfigurationChanged(QNetworkConfiguration,bool))); connect(d, SIGNAL(newConfigurationActivated()), this, SIGNAL(newConfigurationActivated())); + connect(d, SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies)), + this, SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies))); break; } } @@ -254,6 +273,7 @@ QNetworkSession::QNetworkSession(const QNetworkConfiguration &connectionConfig, qRegisterMetaType<QNetworkSession::State>(); qRegisterMetaType<QNetworkSession::SessionError>(); + qRegisterMetaType<QNetworkSession::UsagePolicies>(); } /*! @@ -654,6 +674,26 @@ quint64 QNetworkSession::activeTime() const } /*! + Returns the network usage policies currently in force by the system. +*/ +QNetworkSession::UsagePolicies QNetworkSession::usagePolicies() const +{ + return d ? d->usagePolicies() : QNetworkSession::NoPolicy; +} + +/*! + \internal + Change usage policies for unit testing. + In normal use, the policies are published by the bearer plugin +*/ +void QNetworkSessionPrivate::setUsagePolicies(QNetworkSession &session, QNetworkSession::UsagePolicies policies) +{ + if (!session.d) + return; + session.d->setUsagePolicies(policies); +} + +/*! \internal This function is required to detect whether the client wants to control diff --git a/src/network/bearer/qnetworksession.h b/src/network/bearer/qnetworksession.h index 21d568ca13..d72fe0e759 100644 --- a/src/network/bearer/qnetworksession.h +++ b/src/network/bearer/qnetworksession.h @@ -83,6 +83,13 @@ public: InvalidConfigurationError }; + enum UsagePolicy { + NoPolicy = 0, + NoBackgroundTrafficPolicy = 1 + }; + + Q_DECLARE_FLAGS(UsagePolicies, UsagePolicy) + explicit QNetworkSession(const QNetworkConfiguration &connConfig, QObject *parent = 0); virtual ~QNetworkSession(); @@ -101,7 +108,9 @@ public: quint64 bytesWritten() const; quint64 bytesReceived() const; quint64 activeTime() const; - + + QNetworkSession::UsagePolicies usagePolicies() const; + bool waitForOpened(int msecs = 30000); public Q_SLOTS: @@ -122,6 +131,7 @@ Q_SIGNALS: void error(QNetworkSession::SessionError); void preferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless); void newConfigurationActivated(); + void usagePoliciesChanged(QNetworkSession::UsagePolicies); protected: virtual void connectNotify(const char *signal); @@ -136,6 +146,7 @@ private: QT_END_NAMESPACE Q_DECLARE_METATYPE(QNetworkSession::State) Q_DECLARE_METATYPE(QNetworkSession::SessionError) +Q_DECLARE_METATYPE(QNetworkSession::UsagePolicies) QT_END_HEADER diff --git a/src/network/bearer/qnetworksession_p.h b/src/network/bearer/qnetworksession_p.h index 0eea06b085..4d036d601d 100644 --- a/src/network/bearer/qnetworksession_p.h +++ b/src/network/bearer/qnetworksession_p.h @@ -103,6 +103,10 @@ public: virtual quint64 bytesReceived() const = 0; virtual quint64 activeTime() const = 0; + virtual QNetworkSession::UsagePolicies usagePolicies() const = 0; + virtual void setUsagePolicies(QNetworkSession::UsagePolicies) = 0; + + static void setUsagePolicies(QNetworkSession&, QNetworkSession::UsagePolicies); //for unit testing protected: inline QNetworkConfigurationPrivatePointer privateConfiguration(const QNetworkConfiguration &config) const { @@ -124,6 +128,7 @@ Q_SIGNALS: void closed(); void newConfigurationActivated(); void preferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless); + void usagePoliciesChanged(QNetworkSession::UsagePolicies); protected: QNetworkSession *q; diff --git a/src/plugins/bearer/qnetworksession_impl.cpp b/src/plugins/bearer/qnetworksession_impl.cpp index 68d6007bdc..31cea0bfc3 100644 --- a/src/plugins/bearer/qnetworksession_impl.cpp +++ b/src/plugins/bearer/qnetworksession_impl.cpp @@ -293,6 +293,19 @@ quint64 QNetworkSessionPrivateImpl::activeTime() const return Q_UINT64_C(0); } +QNetworkSession::UsagePolicies QNetworkSessionPrivateImpl::usagePolicies() const +{ + return currentPolicies; +} + +void QNetworkSessionPrivateImpl::setUsagePolicies(QNetworkSession::UsagePolicies newPolicies) +{ + if (newPolicies != currentPolicies) { + currentPolicies = newPolicies; + emit usagePoliciesChanged(currentPolicies); + } +} + void QNetworkSessionPrivateImpl::updateStateFromServiceNetwork() { QNetworkSession::State oldState = state; diff --git a/src/plugins/bearer/qnetworksession_impl.h b/src/plugins/bearer/qnetworksession_impl.h index 7e48ec3a9f..babc59b420 100644 --- a/src/plugins/bearer/qnetworksession_impl.h +++ b/src/plugins/bearer/qnetworksession_impl.h @@ -70,7 +70,7 @@ class QNetworkSessionPrivateImpl : public QNetworkSessionPrivate public: QNetworkSessionPrivateImpl() - : startTime(0), sessionTimeout(-1) + : engine(0), startTime(0), lastError(QNetworkSession::UnknownSessionError), sessionTimeout(-1), currentPolicies(QNetworkSession::NoPolicy), opened(false) {} ~QNetworkSessionPrivateImpl() {} @@ -102,6 +102,9 @@ public: quint64 bytesReceived() const; quint64 activeTime() const; + QNetworkSession::UsagePolicies usagePolicies() const; + void setUsagePolicies(QNetworkSession::UsagePolicies); + private Q_SLOTS: void networkConfigurationsChanged(); void configurationChanged(QNetworkConfigurationPrivatePointer config); @@ -121,6 +124,7 @@ private: QNetworkSession::SessionError lastError; int sessionTimeout; + QNetworkSession::UsagePolicies currentPolicies; bool opened; }; |