Skip to content

Commit

Permalink
Merge pull request nemomobile#12 from lpotter/master
Browse files Browse the repository at this point in the history
add counter & session API
  • Loading branch information
rojkov committed Dec 28, 2012
2 parents 5185c77 + 3b5ab90 commit 3af5bd3
Show file tree
Hide file tree
Showing 13 changed files with 669 additions and 4 deletions.
70 changes: 70 additions & 0 deletions libconnman-qt/counter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* Copyright © 2012, Jolla.
*
* This program is licensed under the terms and conditions of the
* Apache License, version 2.0. The full text of the Apache License is at
* http://www.apache.org/licenses/LICENSE-2.0
*
*/

#include <QtDBus/QDBusConnection>

#include "counter.h"

static const char COUNTER_PATH[] = "/ConnectivityCounter";

Counter::Counter(QObject *parent) :
QObject(parent),
m_manager(NetworkManagerFactory::createInstance())
{
new CounterAdaptor(this);
QDBusConnection::systemBus().registerObject(COUNTER_PATH, this);

if (m_manager->isAvailable()) {
m_manager->registerCounter(QString(COUNTER_PATH),1024,5);
}
}

Counter::~Counter()
{
}

void Counter::serviceUsage(const QString &servicePath, const QVariantMap &counters, bool roaming)
{
latestCounts.insert(servicePath, counters);
Q_EMIT counterChanged(servicePath, counters, roaming);
}

QVariantMap Counter::latestStats(const QString &servicePath)
{
return latestCounts[servicePath];
}


CounterAdaptor::CounterAdaptor(Counter* parent)
: QDBusAbstractAdaptor(parent),
m_counter(parent)
{
}

CounterAdaptor::~CounterAdaptor()
{
}

void CounterAdaptor::Release()
{
}

void CounterAdaptor::Usage(const QDBusObjectPath &service_path,
const QVariantMap &home,
const QVariantMap &roaming)
{
if (roaming.isEmpty()) {
// home
m_counter->serviceUsage(service_path.path(), home, false);
} else if (home.isEmpty()) {
//roaming
m_counter->serviceUsage(service_path.path(), roaming, true);
}
}

67 changes: 67 additions & 0 deletions libconnman-qt/counter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* Copyright © 2012, Jolla.
*
* This program is licensed under the terms and conditions of the
* Apache License, version 2.0. The full text of the Apache License is at
* http://www.apache.org/licenses/LICENSE-2.0
*
*/

#ifndef COUNTER_H
#define COUNTER_H

#include <QObject>
#include <QVariantMap>
#include <QtDBus/QDBusAbstractAdaptor>
#include <QtDBus/QDBusObjectPath>

#include <networkmanager.h>

class Counter : public QObject
{
Q_OBJECT
Q_DISABLE_COPY(Counter)
public:
explicit Counter(QObject *parent = 0);
virtual ~Counter();

void serviceUsage(const QString &servicePath, const QVariantMap &counters, bool roaming);
void secondsOnline(const QString &servicePath);
QVariantMap latestStats(const QString &servicePath);
QPair <quint32, quint32> latestBytes(const QString &servicePath);

signals:
// "RX.Bytes", "RX.Packets"
// "TX.Bytes", "TX.Packets"
// "Time"
void counterChanged(const QString servicePath, const QVariantMap &counters, bool roaming);

public slots:

private:
NetworkManager* m_manager;
QMap <QString,QVariantMap> latestCounts;

};


class CounterAdaptor : public QDBusAbstractAdaptor
{
Q_OBJECT;
Q_CLASSINFO("D-Bus Interface", "net.connman.Counter");

public:
explicit CounterAdaptor(Counter* parent);
virtual ~CounterAdaptor();

public slots:
void Release();
void Usage(const QDBusObjectPath &service_path,
const QVariantMap &home,
const QVariantMap &roaming);

private:
Counter* m_counter;
friend class CounterAdaptor;
};
#endif // COUNTER_H
14 changes: 12 additions & 2 deletions libconnman-qt/libconnman-qt.pro
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ isEmpty(PREFIX) {
#system(qdbusxml2cpp -c Manager -p manager -N connman-manager.xml)
system(qdbusxml2cpp -c Service -p service -N connman-service.xml)
system(qdbusxml2cpp -c Technology -p technology -N connman-technology.xml)
#system(qdbusxml2cpp -c Session -p session -N connman-session.xml)

HEADERS += manager.h \
service.h \
Expand All @@ -27,7 +28,11 @@ HEADERS += manager.h \
clockproxy.h \
clockmodel.h \
debug.h \
useragent.h
useragent.h \
session.h \
sessionagent.h \
networksession.h \
counter.h

SOURCES += \
networkmanager.cpp \
Expand All @@ -40,7 +45,12 @@ SOURCES += \
clockmodel.cpp \
commondbustypes.cpp \
debug.cpp \
useragent.cpp
useragent.cpp \
session.cpp \
sessionagent.cpp \
networksession.cpp \
counter.cpp


target.path = $$INSTALL_ROOT$$PREFIX/lib

Expand Down
44 changes: 43 additions & 1 deletion libconnman-qt/networkmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ NetworkManager* NetworkManagerFactory::createInstance()

const QString NetworkManager::State("State");
const QString NetworkManager::OfflineMode("OfflineMode");
const QString NetworkManager::SessionMode("SessionMode");

NetworkManager::NetworkManager(QObject* parent)
: QObject(parent),
Expand Down Expand Up @@ -319,7 +320,9 @@ void NetworkManager::propertyChanged(const QString &name,
emit stateChanged(tmp.toString());
} else if (name == OfflineMode) {
emit offlineModeChanged(tmp.toBool());
}
} else if (name == SessionMode) {
emit sessionModeChanged(tmp.toBool());
}
}

void NetworkManager::technologyAdded(const QDBusObjectPath &technology,
Expand Down Expand Up @@ -441,3 +444,42 @@ void NetworkManager::unregisterAgent(const QString &path)
if(m_manager)
m_manager->UnregisterAgent(QDBusObjectPath(path));
}

void NetworkManager::registerCounter(const QString &path, quint32 accuracy,quint32 period)
{
if(m_manager)
m_manager->RegisterCounter(QDBusObjectPath(path),accuracy, period);
}

void NetworkManager::unregisterCounter(const QString &path)
{
if(m_manager)
m_manager->UnregisterCounter(QDBusObjectPath(path));
}

QDBusObjectPath NetworkManager::createSession(const QVariantMap &settings, const QString &sessionNotifierPath)
{
qDebug() << Q_FUNC_INFO << sessionNotifierPath << m_manager;

QDBusPendingReply<QDBusObjectPath> reply;
if(m_manager)
reply = m_manager->CreateSession(settings,QDBusObjectPath(sessionNotifierPath));
return reply;
}

void NetworkManager::destroySession(const QString &sessionAgentPath)
{
if(m_manager)
m_manager->DestroySession(QDBusObjectPath(sessionAgentPath));
}

void NetworkManager::setSessionMode(const bool &sessionMode)
{
if(m_manager)
m_manager->SetProperty(SessionMode, QDBusVariant(QVariant(sessionMode)));
}

bool NetworkManager::sessionMode() const
{
return m_propertiesCache[SessionMode].toBool();
}
12 changes: 12 additions & 0 deletions libconnman-qt/networkmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class NetworkManager : public QObject
Q_PROPERTY(bool offlineMode READ offlineMode WRITE setOfflineMode NOTIFY offlineModeChanged);
Q_PROPERTY(NetworkService* defaultRoute READ defaultRoute NOTIFY defaultRouteChanged);

Q_PROPERTY(bool sessionMode READ sessionMode WRITE setSessionMode NOTIFY sessionModeChanged);

public:
NetworkManager(QObject* parent=0);
virtual ~NetworkManager();
Expand All @@ -51,10 +53,18 @@ class NetworkManager : public QObject
bool offlineMode() const;
NetworkService* defaultRoute() const;

bool sessionMode() const;

public slots:
void setOfflineMode(const bool &offlineMode);
void registerAgent(const QString &path);
void unregisterAgent(const QString &path);
void registerCounter(const QString &path, quint32 accuracy,quint32 period);
void unregisterCounter(const QString &path);
QDBusObjectPath createSession(const QVariantMap &settings, const QString &sessionNotifierPath);
void destroySession(const QString &sessionAgentPath);

void setSessionMode(const bool &sessionMode);

signals:
void availabilityChanged(bool available);
Expand All @@ -64,6 +74,7 @@ public slots:
void technologiesChanged();
void servicesChanged();
void defaultRouteChanged(NetworkService* defaultRoute);
void sessionModeChanged(bool);

private:
Manager *m_manager;
Expand All @@ -89,6 +100,7 @@ public slots:

static const QString State;
static const QString OfflineMode;
static const QString SessionMode;

bool m_available;

Expand Down
118 changes: 118 additions & 0 deletions libconnman-qt/networksession.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/*
* Copyright © 2012, Jolla Ltd
*
* This program is licensed under the terms and conditions of the
* Apache License, version 2.0. The full text of the Apache License is at
* http://www.apache.org/licenses/LICENSE-2.0
*
*/

#include "networksession.h"
#include "sessionagent.h"

NetworkSession::NetworkSession(QObject *parent) :
QObject(parent),
m_sessionAgent(0),
m_path("/ConnmanQmlSessionAgent")
{
}

NetworkSession::~NetworkSession()
{
}

void NetworkSession::registerSession()
{
if (m_path.isEmpty())
return;
m_sessionAgent = new SessionAgent(m_path ,this);
connect(m_sessionAgent,SIGNAL(settingsUpdated(QVariantMap)),
this,SLOT(sessionSettingsUpdated(QVariantMap)));

m_sessionAgent->registerSession();
}

QString NetworkSession::state() const
{
return settingsMap.value("State").toString();
}

QString NetworkSession::name() const
{
return settingsMap.value("Name").toString();
}

QString NetworkSession::bearer() const
{
return settingsMap.value("Bearer").toString();
}

QString NetworkSession::sessionInterface() const
{
return settingsMap.value("Interface").toString();
}

QVariantMap NetworkSession::ipv4() const
{
return settingsMap.value("IPv4").toMap();
}

QVariantMap NetworkSession::ipv6() const
{
return settingsMap.value("IPv6").toMap();
}

QStringList NetworkSession::allowedBearers() const
{
return settingsMap.value("AllowedBearers").toStringList();
}

QString NetworkSession::connectionType() const
{
return settingsMap.value("ConnectionType").toString();
}

void NetworkSession::setAllowedBearers(const QStringList &bearers)
{
settingsMap.insert("AllowedBearers", qVariantFromValue(bearers));
m_sessionAgent->setAllowedBearers(bearers);
}

void NetworkSession::setConnectionType(const QString &type)
{
settingsMap.insert("ConnectionType", qVariantFromValue(type));
m_sessionAgent->setConnectionType(type);
}

void NetworkSession::requestDestroy()
{
m_sessionAgent->requestDestroy();
}

void NetworkSession::requestConnect()
{
m_sessionAgent->requestConnect();
}

void NetworkSession::requestDisconnect()
{
m_sessionAgent->requestDisconnect();
}

void NetworkSession::sessionSettingsUpdated(const QVariantMap &settings)
{
Q_FOREACH(const QString &name, settings.keys()) {
settingsMap.insert(name,settings[name]);
}
Q_EMIT settingsChanged(settings);
}

QString NetworkSession::path() const
{
return m_path;
}

void NetworkSession::setPath(const QString &path)
{
m_path = path;
}
Loading

0 comments on commit 3af5bd3

Please sign in to comment.