X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fdaemon%2Fcalllistener.cpp;h=4a2f1c505af930104d9ebc7acde89fac855c5e25;hb=b7a9e838eaf1539637b2bf46a1907d7aa604bcd9;hp=c44e5ce1d11f596b443000dc0d3e1bf05b252c8e;hpb=11dc201fad01443c74fd221774881e1daad94ea3;p=jenirok diff --git a/src/daemon/calllistener.cpp b/src/daemon/calllistener.cpp index c44e5ce..4a2f1c5 100644 --- a/src/daemon/calllistener.cpp +++ b/src/daemon/calllistener.cpp @@ -77,6 +77,7 @@ bool CallListener::begin() this, SLOT(callTerminate())); + findGprsId(); qDebug() << "Starting..."; @@ -208,9 +209,9 @@ void CallListener::requestFinished(QVector const& results, if(closeConnection_) { + closeConnection_ = false; ConnectionManager cm; cm.disconnect(true); - closeConnection_ = false; } } @@ -252,8 +253,6 @@ void CallListener::showResult(QString const& text) void CallListener::incomingCall(QDBusObjectPath path, QString number) { - qDebug() << "Incoming: " << number; - ContactManager cm; if(!cm.numberExists(number)) @@ -284,12 +283,17 @@ void CallListener::callTerminate() if(closeConnection_) { + closeConnection_ = false; ConnectionManager cm; cm.disconnect(true); - closeConnection_ = false; } searchClose(); + + if(gprsId_.isEmpty()) + { + findGprsId(); + } } void CallListener::showDelayedResult(QString const& text, int delay) @@ -408,6 +412,9 @@ bool CallListener::handleConnection() int cretries = 0; + bool tryGprs = (!gprsId_.isEmpty() && + (configType == Settings::ANY || configType == Settings::GPRS)); + while(cretries < CONNECTION_LOOKUP_RETRIES) { if(!initialized_) @@ -420,6 +427,15 @@ bool CallListener::handleConnection() break; } + // ICD doesn't always find gprs connection during call, so + // try to use gprs anyway. + if(tryGprs && is3g()) + { + best.id = gprsId_; + qDebug() << "Trying gprs"; + break; + } + qDebug() << "No connections found, retrying..."; cretries++; @@ -443,8 +459,6 @@ bool CallListener::handleConnection() return false; } - sleep(WAIT_BETWEEN_RETRIES); - if(cm.connect(best.id)) { break; @@ -455,6 +469,8 @@ bool CallListener::handleConnection() return false; } + sleep(WAIT_BETWEEN_RETRIES); + qDebug() << "Unable to connect, retrying..."; retries++; @@ -505,3 +521,46 @@ void CallListener::sleep(int ms) QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents); } } + +void CallListener::findGprsId() +{ + ConnectionManager cm; + + QList connections; + + if(cm.scanConnections(connections, ConnectionManager::GPRS) && + connections.size() > 0) + { + gprsId_ = connections.at(0).id; + } +} + +bool CallListener::is3g() +{ + QDBusMessage msg = QDBusMessage::createMethodCall("com.nokia.phone.net", + "/com/nokia/phone/net", + "Phone.Net", + "get_registration_status"); + + QDBusMessage rep = systemBus_.call(msg); + + if(rep.type() == QDBusMessage::ErrorMessage) + { + qDebug() << "Unable to get network status"; + return false; + } + + uint status = rep.arguments().value(6).toUInt(); + + if(status & 0x10) // 3.5G (HSUPA) + { + return true; + } + else if(status & 0x08) // 3G (HSDPA) + { + return true; + } + + // Something else + return false; +}