Fix for publish/subscribe error
[vicar] / src / vicar-daemon / src / callrouter.cpp
index 9313b2f..71b1fa7 100755 (executable)
@@ -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<QVariant> 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;
+}