phoneengine/parserrecognizer/src/parserrecognizer.cpp
changeset 30 ebdbd102c78a
parent 22 6bb1b21d2484
--- a/phoneengine/parserrecognizer/src/parserrecognizer.cpp	Mon May 03 12:31:11 2010 +0300
+++ b/phoneengine/parserrecognizer/src/parserrecognizer.cpp	Fri May 14 15:51:57 2010 +0300
@@ -1,5 +1,5 @@
 /*!
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,9 +11,8 @@
 *
 * Contributors:
 *
-* Description:  Recognizes the parser messages that needs to be notified to the world
-*               using QtHighway.
-*
+* Description:  Recognizes the parser messages that needs to be notified to 
+*               the world using QtHighway.
 */
 
 #include <xqservicerequest.h>
@@ -21,12 +20,16 @@
 #include "parserrecognizer.h"
 #include "qtphonelog.h"
 
-ParserRecognizer::ParserRecognizer(QObject* parent) : QObject (parent)
+ParserRecognizer::ParserRecognizer(QObject* parent) 
+    : 
+    QObject(parent),
+    m_currentRequest(0)
 {
 }
 
 ParserRecognizer::~ParserRecognizer()
 {
+    delete m_currentRequest;
 }
 
 void ParserRecognizer::sendMessage(const int message, const int callId)
@@ -42,62 +45,83 @@
         api = "com.nokia.services.telephony";
         method = "activateDeepRestoreFactorySettings()";
         break;
-        
+    
     case MEngineMonitor::EPEMessageActivateRfsNormal:
         api = "com.nokia.services.telephony";
         method = "activateNormalRestoreFactorySettings()";
         break;
-        
-    case MEngineMonitor::EPEMessageActivateWarrantyMode:
-        api = "com.nokia.services.telephony";
-        method = "activateWarrantyMode()";
-        break;
-        
+    
     case MEngineMonitor::EPEMessageShowBTDeviceAddress:
         api = "com.nokia.services.bluetooth";
         method = "showBluetoothDeviceAddress()";
         break;
-        
+    
     case MEngineMonitor::EPEMessageShowBTLoopback:
         api = "com.nokia.services.bluetooth";
         method = "showBluetoothLoopback()";
         break;
-        
+    
     case MEngineMonitor::EPEMessageBTDebugMode:
         api = "com.nokia.services.bluetooth";
         method = "activateBluetoothDebugMode()";
         break;
-
-    case MEngineMonitor::EPEMessageShowIMEI:
-        api = "com.nokia.services.telephony";
-        method = "showIMEICode()";
-        break;
-        
+    
     case MEngineMonitor::EPEMessageShowVersion:
-        api = "com.nokia.services.telephony";
+        api = "com.nokia.services.devicemanager";
         method = "showVersionNumber()";
         break;
-        
-    case MEngineMonitor::EPEMessageShowWlanMacAddress:
-        api = "com.nokia.services.wlan";
-        method = "showWLANMacAddress()";
-        break;
-        
+    
     case MEngineMonitor::EPEMessageSSRequestFailed:
         api = "com.nokia.services.telephony";
         method = "supplementaryServiceRequestFailed()";
         break;
-              
+    
     default:
       recognized = false;
       break;        
     }
     
-    if(recognized) {
+    if (recognized && (!m_currentRequest)) {
         PHONE_DEBUG2("ParserRecognizer::sendMessage api:", api);
         PHONE_DEBUG2("ParserRecognizer::sendMessage method:", method);
-        XQServiceRequest snd(api, method);
-        QVariant err;
-        snd.send(err);
+        m_currentRequest = new XQServiceRequest(api, method, false);
+        // Due to a Qt Highway bug in assignment operator implementation we 
+        // need to set request as asynchronous with a setter function.
+        m_currentRequest->setSynchronous(false);
+        connect(
+            m_currentRequest, SIGNAL(requestCompleted(const QVariant &)), 
+            this, SLOT(requestCompleted(const QVariant &)));
+        connect(
+            m_currentRequest, SIGNAL(requestError(int)), 
+            this, SLOT(requestError(int)));
+        
+        int exceptionAsError = 0;
+        bool requestOk = false;
+        QT_TRYCATCH_ERROR(
+            exceptionAsError, requestOk = m_currentRequest->send());
+        if ((0 != exceptionAsError) || (!requestOk)) {
+            PHONE_DEBUG2("ParserRecognizer::sendMessage exceptionAsError:", 
+                exceptionAsError);
+            PHONE_DEBUG2("ParserRecognizer::sendMessage requestOk:", 
+                requestOk);
+            requestCompleted(QVariant());
+        }
     }
 }
+
+void ParserRecognizer::requestCompleted(const QVariant &returnValue)
+{
+    PHONE_DEBUG("ParserRecognizer::requestCompleted");
+    Q_UNUSED(returnValue);
+    
+    delete m_currentRequest;
+    m_currentRequest = NULL;
+}
+
+void ParserRecognizer::requestError(int error)
+{
+    PHONE_DEBUG2("ParserRecognizer::requestError", error);
+    
+    delete m_currentRequest;
+    m_currentRequest = NULL;
+}