summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShane Kearns <ext-shane.2.kearns@nokia.com>2012-04-04 18:11:42 +0100
committerQt by Nokia <qt-info@nokia.com>2012-04-11 22:19:21 +0200
commit6957b8d1ede105c88c22045685e3b9ce845c3c0c (patch)
treefb8f97b036d76c211b47a0d4cf4b9670752be2a0 /src
parentad73c3505a088260541143e1549d94d35e4bd8f6 (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>
Diffstat (limited to 'src')
-rw-r--r--src/network/bearer/qnetworksession.cpp40
-rw-r--r--src/network/bearer/qnetworksession.h13
-rw-r--r--src/network/bearer/qnetworksession_p.h5
-rw-r--r--src/plugins/bearer/qnetworksession_impl.cpp13
-rw-r--r--src/plugins/bearer/qnetworksession_impl.h6
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;
};