2 * This file is part of ofono-qt
4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
6 * Contact: Alexander Kanavin <alexander.kanavin@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * version 2.1 as published by the Free Software Foundation.
12 * This library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 #include <QtCore/QObject>
25 #include <QtDBus/QtDBus>
26 #include "ofonocallbarring.h"
27 #include "ofonointerface.h"
29 #define SET_PROPERTY_TIMEOUT 300000
31 OfonoCallBarring::OfonoCallBarring(OfonoModem::SelectionSetting modemSetting, const QString &modemPath, QObject *parent)
32 : OfonoModemInterface(modemSetting, modemPath, "org.ofono.CallBarring", OfonoGetAllOnFirstRequest, parent)
34 connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
35 this, SLOT(propertyChanged(const QString&, const QVariant&)));
36 connect(m_if, SIGNAL(setPropertyFailed(const QString&)),
37 this, SLOT(setPropertyFailed(const QString&)));
38 connect(m_if, SIGNAL(requestPropertyComplete(bool, const QString&, const QVariant&)),
39 this, SLOT(requestPropertyComplete(bool, const QString&, const QVariant&)));
40 QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
41 "IncomingBarringInEffect",
43 SIGNAL(incomingBarringInEffect()));
44 QDBusConnection::systemBus().connect("org.ofono", path(), m_if->ifname(),
45 "OutgoingBarringInEffect",
47 SIGNAL(outgoingBarringInEffect()));
48 m_pendingProperty = QString();
51 OfonoCallBarring::~OfonoCallBarring()
55 void OfonoCallBarring::setProperty(const QString& name,
56 const QVariant& property,
57 const QString& password)
59 if (m_pendingProperty.length() > 0) {
60 // FIXME: should indicate that a setProperty is already in progress
61 m_if->setError(QString(), QString("Operation already in progress"));
62 emit setPropertyFailed(name);
69 request = QDBusMessage::createMethodCall("org.ofono",
70 path(), m_if->ifname(),
72 request.setArguments(QList<QVariant>()
74 << QVariant::fromValue(QDBusVariant(property))
75 << QVariant(password));
77 bool result = QDBusConnection::systemBus().callWithCallback(request, this,
78 SLOT(setPropertyResp()),
79 SLOT(setPropertyErr(const QDBusError&)),
80 SET_PROPERTY_TIMEOUT);
82 // FIXME: should indicate that sending a message failed
83 m_if->setError(QString(), QString("DBUS sending failed"));
84 emit setPropertyFailed(name);
87 m_pendingProperty = name;
92 void OfonoCallBarring::setPropertyResp()
94 m_pendingProperty = QString();
95 // emit nothing; we will get a PropertyChanged signal
98 void OfonoCallBarring::setPropertyErr(const QDBusError& error)
100 QString prop = m_pendingProperty;
101 m_if->setError(error.name(), error.message());
102 m_pendingProperty = QString();
103 emit setPropertyFailed(prop);
107 void OfonoCallBarring::changePassword(const QString &old_password,
108 const QString &new_password)
110 QDBusMessage request;
112 request = QDBusMessage::createMethodCall("org.ofono",
113 path(), m_if->ifname(),
115 request << old_password << new_password;
117 QDBusConnection::systemBus().callWithCallback(request, this,
118 SLOT(changePasswordResp()),
119 SLOT(changePasswordErr(const QDBusError&)));
122 void OfonoCallBarring::disableAll(const QString &password)
124 QDBusMessage request;
126 request = QDBusMessage::createMethodCall("org.ofono",
127 path(), m_if->ifname(),
131 QDBusConnection::systemBus().callWithCallback(request, this,
132 SLOT(disableAllResp()),
133 SLOT(disableAllErr(const QDBusError&)));
136 void OfonoCallBarring::disableAllIncoming(const QString &password)
138 QDBusMessage request;
140 request = QDBusMessage::createMethodCall("org.ofono",
141 path(), m_if->ifname(),
142 "DisableAllIncoming");
145 QDBusConnection::systemBus().callWithCallback(request, this,
146 SLOT(disableAllIncomingResp()),
147 SLOT(disableAllIncomingErr(const QDBusError&)));
150 void OfonoCallBarring::disableAllOutgoing(const QString &password)
152 QDBusMessage request;
154 request = QDBusMessage::createMethodCall("org.ofono",
155 path(), m_if->ifname(),
156 "DisableAllOutgoing");
159 QDBusConnection::systemBus().callWithCallback(request, this,
160 SLOT(disableAllOutgoingResp()),
161 SLOT(disableAllOutgoingErr(const QDBusError&)));
165 void OfonoCallBarring::requestVoiceIncoming()
167 m_if->requestProperty("VoiceIncoming");
170 void OfonoCallBarring::setVoiceIncoming(const QString &barrings, const QString &password)
172 setProperty("VoiceIncoming", qVariantFromValue(barrings), password);
175 void OfonoCallBarring::requestVoiceOutgoing()
177 m_if->requestProperty("VoiceOutgoing");
180 void OfonoCallBarring::setVoiceOutgoing(const QString &barrings, const QString &password)
182 setProperty("VoiceOutgoing", qVariantFromValue(barrings), password);
185 void OfonoCallBarring::propertyChanged(const QString& property, const QVariant& value)
187 if (property == "VoiceIncoming") {
188 emit voiceIncomingChanged(value.value<QString>());
189 } else if (property == "VoiceOutgoing") {
190 emit voiceOutgoingChanged(value.value<QString>());
194 void OfonoCallBarring::setPropertyFailed(const QString& property)
196 if (property == "VoiceIncoming") {
197 emit setVoiceIncomingFailed();
198 } else if (property == "VoiceOutgoing") {
199 emit setVoiceOutgoingFailed();
203 void OfonoCallBarring::requestPropertyComplete(bool success, const QString& property, const QVariant& value)
205 if (property == "VoiceIncoming") {
206 success ? emit voiceIncomingComplete(true, value.value<QString>()) : emit voiceIncomingComplete(false, QString());
207 } else if (property == "VoiceOutgoing") {
208 success ? emit voiceOutgoingComplete(true, value.value<QString>()) : emit voiceOutgoingComplete(false, QString());
212 void OfonoCallBarring::changePasswordResp()
214 emit changePasswordComplete(TRUE);
217 void OfonoCallBarring::changePasswordErr(QDBusError error)
219 qDebug() << "ChangePassword failed" << error;
220 m_if->setError(error.name(), error.message());
221 emit changePasswordComplete(FALSE);
224 void OfonoCallBarring::disableAllResp()
226 emit disableAllComplete(TRUE);
229 void OfonoCallBarring::disableAllErr(QDBusError error)
231 qDebug() << "DisableAll failed" << error;
232 m_if->setError(error.name(), error.message());
233 emit disableAllComplete(FALSE);
236 void OfonoCallBarring::disableAllIncomingResp()
238 emit disableAllIncomingComplete(TRUE);
241 void OfonoCallBarring::disableAllIncomingErr(QDBusError error)
243 qDebug() << "DisableAllIncoming failed" << error;
244 m_if->setError(error.name(), error.message());
245 emit disableAllIncomingComplete(FALSE);
248 void OfonoCallBarring::disableAllOutgoingResp()
250 emit disableAllOutgoingComplete(TRUE);
253 void OfonoCallBarring::disableAllOutgoingErr(QDBusError error)
255 qDebug() << "DisableAllOutgoing failed" << error;
256 m_if->setError(error.name(), error.message());
257 emit disableAllOutgoingComplete(FALSE);