X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fvicar-daemon%2Fsrc%2Fcallrouter.cpp;h=71b1fa7493f6a8ea560d4336aea03fce1737fa15;hb=5e3ee6e03bc18e941eb99dc5b7f9cfde7ff86a51;hp=9313b2feb09be927376fcfb37dd3cac9fbf2ea83;hpb=11d5c26f3a622a0fc32f9cb89e1658846201af4d;p=vicar diff --git a/src/vicar-daemon/src/callrouter.cpp b/src/vicar-daemon/src/callrouter.cpp index 9313b2f..71b1fa7 100755 --- a/src/vicar-daemon/src/callrouter.cpp +++ b/src/vicar-daemon/src/callrouter.cpp @@ -60,7 +60,7 @@ CallRouter::CallRouter(QObject *parent) : { Q_ASSERT(0 != d); this->registerDBusService(); - qDebug() << "Registered DBus Service " << APPLICATION_DBUS_SERVICE; + qDebug() << "Vicar-Daemon: Registered DBus Service " << APPLICATION_DBUS_SERVICE; } CallRouter::~CallRouter(){ @@ -73,13 +73,13 @@ void CallRouter::registerDBusService(){ if (!connection.interface()->isServiceRegistered(APPLICATION_DBUS_SERVICE)){ if (!connection.registerService(APPLICATION_DBUS_SERVICE)) { - qDebug() << d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: " << d->dbusUtility->getErrorMessage(); exit(1); } } if (!connection.registerObject(APPLICATION_DBUS_PATH, this, QDBusConnection::ExportAdaptors)) { - qDebug() << d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: " << d->dbusUtility->getErrorMessage(); exit(2); } @@ -94,7 +94,7 @@ void CallRouter::unregisterDBusService(){ connection.unregisterObject(APPLICATION_DBUS_PATH,QDBusConnection::UnregisterTree); if (!connection.unregisterService(APPLICATION_DBUS_SERVICE)) { - qDebug() << d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: " << d->dbusUtility->getErrorMessage(); exit(3); } @@ -110,37 +110,37 @@ QString CallRouter::callViaCallingCard(QString strDestinationNumber){ QString strErrorMessage; if (!result){ - strErrorMessage = QString("Error finding VICaR profile. %1").arg(d->databaseUtility->lastError().text()); + strErrorMessage = QString("Vicar-Daemon: Error finding VICaR profile. %1").arg(d->databaseUtility->lastError().text()); } else if (d->currentProfile->profileID == 0){ bool routeOnDefault = d->gconfUtility->getGconfValueBoolean("route_on_default"); if (routeOnDefault){ - qDebug() << "Routing directly as per configuration"; + qDebug() << "Vicar-Daemon: Routing directly as per configuration"; this->placeCall(strDestinationNumber); } else{ - qDebug() << "No profile found. Stopping.."; - strErrorMessage = "VICaR: No routing profile defined for this number."; + qDebug() << "Vicar-Daemon: No profile found. Stopping.."; + strErrorMessage = "Vicar: No routing profile defined for this number."; d->dbusUtility->displayNotification(strErrorMessage ); } } else{ //Now call the calling card number. This is generally a local and/or tollfree number QString strCallingCardNumber = d->currentProfile->gatewayNumber; - qDebug() << "Initiating call to "<< strCallingCardNumber; + qDebug() << "Vicar-Daemon: Initiating call to "<< strCallingCardNumber; bool status = this->placeCall(strCallingCardNumber); d->strLastDialedNumber = strDestinationNumber; QString strUserMessage; if (status){ - qDebug() << "Call initiated successfully. Connecting DBus slot for audio connection monitor"; + qDebug() << "Vicar-Daemon: Call initiated successfully. Connecting DBus slot for audio connection monitor"; startCallStatusMonitors(); } else { strUserMessage = QString("Unable to initiate new call to ").append(strCallingCardNumber); strErrorMessage = d->dbusUtility->getErrorMessage(); - qDebug() << strErrorMessage; + qDebug() << "Vicar-Daemon: " << strErrorMessage; d->strLastDialedNumber.clear(); delete d->currentProfile; d->currentProfile = 0; @@ -180,11 +180,11 @@ void CallRouter::startCallStatusMonitors(){ SLOT(sendNumberAsDTMFCode(const QDBusMessage&))); if (success){ - qDebug() << "Successfully connected to Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() << "Vicar-Daemon: Successfully connected to Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; } else{ - qDebug() << "Failed to connect to Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; - qDebug() <<"DBus Error: "<< d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: Failed to connect to Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() <<"Vicar-Daemon: DBus Error: "<< d->dbusUtility->getErrorMessage(); } /* Declare the slot to be executed when the call is terminated (due to connection errors etc). @@ -198,11 +198,11 @@ void CallRouter::startCallStatusMonitors(){ SLOT(stopCallStatusMonitors())); if (success){ - qDebug() << "Successfully connected to Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() << "Vicar-Daemon: Successfully connected to Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; } else{ - qDebug() << "Failed to connect to Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; - qDebug() <<"DBus Error: "<< d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: Failed to connect to Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() <<"Vicar-Daemon: DBus Error: "<< d->dbusUtility->getErrorMessage(); } /* Declare the slot to be executed when a call is received @@ -221,11 +221,11 @@ void CallRouter::startCallStatusMonitors(){ SLOT(stopCallStatusMonitors())); if (success){ - qDebug() << "Successfully connected to Dbus signal Coming in interface" << CSD_CALL_INTERFACE; + qDebug() << "Vicar-Daemon: Successfully connected to Dbus signal Coming in interface" << CSD_CALL_INTERFACE; } else{ - qDebug() << "Failed to connect to Dbus signal Coming in interface" << CSD_CALL_INTERFACE; - qDebug() <<"DBus Error: "<< d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: Failed to connect to Dbus signal Coming in interface" << CSD_CALL_INTERFACE; + qDebug() <<"Vicar-Daemon: DBus Error: "<< d->dbusUtility->getErrorMessage(); } } @@ -245,11 +245,11 @@ void CallRouter::stopCallStatusMonitors(){ SLOT(sendNumberAsDTMFCode(const QDBusMessage&))); if (status){ - qDebug() << "Successfully disconnected from Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() << "Vicar-Daemon: Successfully disconnected from Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; } else{ - qDebug() << "Failed to disconnect from Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; - qDebug() <<"DBus Error: "<< d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: Failed to disconnect from Dbus signal AudioConnect in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() <<"Vicar-Daemon: DBus Error: "<< d->dbusUtility->getErrorMessage(); } // Disconnect the slot for monitoring terminated calls @@ -260,11 +260,11 @@ void CallRouter::stopCallStatusMonitors(){ SLOT(stopCallStatusMonitors())); if (status){ - qDebug() << "Successfully disconnected from Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() << "Vicar-Daemon: Successfully disconnected from Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; } else{ - qDebug() << "Failed to disconnect from Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; - qDebug() <<"DBus Error: "<< d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: Failed to disconnect from Dbus signal Terminated in interface "<< CSD_CALL_INSTANCE_INTERFACE; + qDebug() <<"Vicar-Daemon: DBus Error: "<< d->dbusUtility->getErrorMessage(); } // Disconnect the slot for monitoring incoming calls @@ -275,11 +275,11 @@ void CallRouter::stopCallStatusMonitors(){ SLOT(stopCallStatusMonitors())); if (status){ - qDebug() << "Successfully disconnected from Dbus signal Coming in interface" << CSD_CALL_INTERFACE; + qDebug() << "Vicar-Daemon: Successfully disconnected from Dbus signal Coming in interface" << CSD_CALL_INTERFACE; } else{ - qDebug() << "Failed to disconnect from Dbus signal Coming in interface" << CSD_CALL_INTERFACE; - qDebug() <<"DBus Error: "<< d->dbusUtility->getErrorMessage(); + qDebug() << "Vicar-Daemon: Failed to disconnect from Dbus signal Coming in interface" << CSD_CALL_INTERFACE; + qDebug() <<"Vicar-Daemon: DBus Error: "<< d->dbusUtility->getErrorMessage(); } } @@ -295,7 +295,7 @@ void CallRouter::sendNumberAsDTMFCode(const QDBusMessage& dbusMessage){ // Now that the call to Calling card number is successful. We can send the original number as DTMF tones QString strDTMFCode = convertToDTMFCode(d->strLastDialedNumber); - qDebug() << "Audio connection established. Sending DTMF code "<< strDTMFCode; + qDebug() << "Vicar-Daemon: Audio connection established. Sending DTMF code "<< strDTMFCode; QList argsToSend; argsToSend.append(strDTMFCode); @@ -311,7 +311,7 @@ void CallRouter::sendNumberAsDTMFCode(const QDBusMessage& dbusMessage){ d->dbusUtility->displayNotification(strMessage); } else{ - qDebug() << "Unable to send DTMF code."; + qDebug() << "Vicar-Daemon: Unable to send DTMF code."; } @@ -321,7 +321,7 @@ void CallRouter::sendNumberAsDTMFCode(const QDBusMessage& dbusMessage){ that the DTMF codes are sent only for the calls placed by this app (i.e calls to Calling card number). */ - qDebug() << "Now disconnecting from call status monitors.."; + qDebug() << "Vicar-Daemon: Now disconnecting from call status monitors.."; stopCallStatusMonitors(); d->strLastDialedNumber.clear(); @@ -329,12 +329,12 @@ void CallRouter::sendNumberAsDTMFCode(const QDBusMessage& dbusMessage){ d->currentProfile = 0; } else{ - qDebug() << "Audio not yet connected."; + qDebug() << "Vicar-Daemon: Audio not yet connected."; } } else { - qDebug() << "Last dialed number is empty."; + qDebug() << "Vicar-Daemon: Last dialed number is empty."; } } @@ -408,8 +408,18 @@ bool CallRouter::isRunning(){ //DBus Method used by external applications to call via VICaR QString CallRouter::callInternationalNumber(const QString& strDestinationNumber){ - qDebug() << "New call requested by external application. Destination number is " << strDestinationNumber; - QString strErrorMessage = this->callViaCallingCard(strDestinationNumber); + QString strErrorMessage; + + qDebug() << "Vicar-Daemon: New call requested by external application. Destination number is " << strDestinationNumber; + + if (isValidPhoneNumber(strDestinationNumber)){ + + strErrorMessage = this->callViaCallingCard(strDestinationNumber); + } + else{ + strErrorMessage = QString("Vicar-Daemon: %1 is not a valid number").arg(strDestinationNumber); + } + qDebug() << strErrorMessage; if (strErrorMessage.isEmpty()){ @@ -419,3 +429,23 @@ QString CallRouter::callInternationalNumber(const QString& strDestinationNumber) return strErrorMessage; } } + +//Check whether a string is valid phone number +bool CallRouter::isValidPhoneNumber(QString strPhoneNumber){ + + +/* Remove all dialble characters. The resulting string should be a valid number */ + QRegExp regexp = QRegExp("[p+*#]"); + + strPhoneNumber = strPhoneNumber.replace(regexp,""); + + qDebug() << "Vicar Daemon: Cleaned up phone number is " << strPhoneNumber; + +/* Now remove all digits, the resulting string should be empty, then it is a valid number */ + regexp = QRegExp("[0-9]"); + + strPhoneNumber = strPhoneNumber.replace(regexp,""); + + bool isNumber = strPhoneNumber.isEmpty(); + return isNumber; +}