diff -r 3f7d9dbe57c8 -r 19fb38abab1d syncmlfw/common/sosserver/src/nsmlsosthread.cpp --- a/syncmlfw/common/sosserver/src/nsmlsosthread.cpp Tue Feb 02 00:44:00 2010 +0200 +++ b/syncmlfw/common/sosserver/src/nsmlsosthread.cpp Fri Apr 16 15:52:47 2010 +0300 @@ -19,7 +19,7 @@ #include #include #include - +#include "PnpLogger.h" #include "nsmlsosthread.h" #include @@ -27,6 +27,26 @@ #include #include "PMUtilInternalCRKeys.h" #include +#include +#include + + +enum TSyncmlHbNotifierKeys + { + + EHbSOSNotifierKeyStatus = 11, // status set will complete the client subscribe + EHbSOSNotifierKeyStatusReturn = 12, // Return the content of actual status value accepted from UI + + EHbDMSyncNotifierKeyStatus = 13, + EHbDMSyncNotifierKeyStatusReturn = 14 + }; + + TUid sosserverpsuid = + { + 0x101F99FB + }; + + // -------------------------------------------------------------------------- // EXPORT_C TInt ThreadFunction( TAny* ) // -------------------------------------------------------------------------- @@ -70,7 +90,7 @@ { //if not a silent mode behave as in a normal DM session threadEngine->ForcedCertificateCheckL( EFalse ); - threadEngine->VerifyJobFromNotifierL(); + threadEngine->VerifyJobFromNotifierL(ETrue); } } else @@ -446,19 +466,24 @@ // Launches notifier and waits for // -------------------------------------------------------------------------- // -TInt CNSmlThreadEngine::VerifyJobFromNotifierL() - { - _DBG_FILE("CNSmlThreadEngine::VerifyJobFromNotifierL() : Begin"); - iNotifierObserver = new (ELeave) CNSmlNotifierObserver(iStatus, iThreadParams); - SetActive(); - - TSyncMLAppLaunchNotifParams params; - params.iSessionType = ( iThreadParams.iCurrentJob.UsageType() == ESmlDataSync ) ? ESyncMLSyncSession : ESyncMLMgmtSession; - params.iJobId = iThreadParams.iCurrentJob.JobId(); - params.iProfileId = iThreadParams.iCurrentJob.ProfileId(); - params.iUimode = iThreadParams.iCurrentJob.iUimode; - iNotifierObserver->ConnectToNotifierL( params ); - _DBG_FILE("CNSmlThreadEngine::VerifyJobFromNotifierL() : End"); +TInt CNSmlThreadEngine::VerifyJobFromNotifierL(TBool aServerInitiated) + { + LOGSTRING("CNSmlThreadEngine::VerifyJobFromNotifierL()"); + LOGSTRING("CNSmlThreadEngine::VerifyJobFromNotifierL() : Begin"); + LOGSTRING2("VerifyJobFromNotifierL before iCallerStatus == iStatus in Threadengine %d", iStatus.Int()); + iNotifierObserver = new (ELeave) CNSmlNotifierObserver(iStatus, + iThreadParams); + SetActive(); + LOGSTRING2("VerifyJobFromNotifierL before iCallerStatus == iStatus in Threadengine %d after setactive", iStatus.Int()); + TSyncMLAppLaunchNotifParams params; + params.iSessionType = (iThreadParams.iCurrentJob.UsageType() + == ESmlDataSync) ? ESyncMLSyncSession : ESyncMLMgmtSession; + params.iJobId = iThreadParams.iCurrentJob.JobId(); + params.iProfileId = iThreadParams.iCurrentJob.ProfileId(); + params.iUimode = iThreadParams.iCurrentJob.iUimode; + iNotifierObserver->ConnectToNotifierL(params); + LOGSTRING2("iCallerStatus in iNotifierObserver->ConnectToNotifierL( params ); %d", iStatus.Int()); + LOGSTRING("CNSmlThreadEngine::VerifyJobFromNotifierL() : End"); return KErrNone; } @@ -757,11 +782,20 @@ // Constructor // -------------------------------------------------------------------------- // -CNSmlNotifierObserver::CNSmlNotifierObserver(TRequestStatus& aStatus, CNSmlThreadParams& aParams) -: CActive(0), iCallerStatus(aStatus), iThreadParams(aParams) - { - CActiveScheduler::Add(this); - } +CNSmlNotifierObserver::CNSmlNotifierObserver(TRequestStatus& aStatus, + CNSmlThreadParams& aParams) : + CActive(0), iCallerStatus(aStatus), iThreadParams(aParams) + { + LOGSTRING2("iCallerStatus in RunL %d", iCallerStatus.Int()); + // If the current job is DM job then proceed to use Hb Notifiers + + if(aParams.iCurrentJob.UsageType() == ESmlDevMan) + { + TRAP_IGNORE(iHbSyncmlNotifierEnabled = IsHbSyncmlNotifierEnabledL()); + } + + CActiveScheduler::Add(this); + } // -------------------------------------------------------------------------- // CNSmlNotifierObserver::~CNSmlNotifierObserver() @@ -769,17 +803,26 @@ // -------------------------------------------------------------------------- // CNSmlNotifierObserver::~CNSmlNotifierObserver() - { - - // StartNotifier called to avoid Notifier server panic, if - // notifier does not exist anymore. - TBuf8<1> dummy; - iNotifier.StartNotifier(KNullUid, dummy, dummy); // KNullUid should do also.. - - iNotifier.CancelNotifier( KUidNotifier ); - iNotifier.Close(); - Cancel(); - } + { + LOGSTRING("~CNSmlNotifierObserver"); + // StartNotifier called to avoid Notifier server panic, if + // notifier does not exist anymore. + TBuf8<1> dummy; + + if (!iHbSyncmlNotifierEnabled) + { + iNotifier.StartNotifier(KNullUid, dummy, dummy); // KNullUid should do also.. + + iNotifier.CancelNotifier(KUidNotifier); + iNotifier.Close(); + } + else + { + iProperty.Close(); + } + + Cancel(); + } // -------------------------------------------------------------------------- // CNSmlNotifierObserver::ConnectToNotifierL( const TSyncMLAppLaunchNotifParams& aParam ) @@ -803,14 +846,28 @@ { iNotifierTimeOut.LaunchNotifierTimer( this ); } - - TInt err = iNotifier.Connect(); - if ( err == KErrNone ) + + TInt err = KErrNone; + + if (!iHbSyncmlNotifierEnabled) //Syncml notifier + err = iNotifier.Connect(); + + if (err == KErrNone) { - iNotifier.StartNotifierAndGetResponse( iStatus, KUidNotifier, data, iResBuf ); + if (!iHbSyncmlNotifierEnabled) + { + iNotifier.StartNotifierAndGetResponse(iStatus, KUidNotifier, + data, iResBuf); + LOGSTRING2( "CNSmlNotifierObserver::ConnectToNotifierL %d after connect, StartNotifierAndGetResponse and after setactive" , iStatus.Int()); + } + else + { + HbNotifierObserverL(aParam); + } } else { + LOGSTRING("Stop job error connecting to notifier"); // Stop job. Error connecting to notifier. TRequestStatus* sStatus = &iStatus; User::RequestComplete( sStatus, err ); @@ -819,20 +876,153 @@ } // -------------------------------------------------------------------------- +// CNSmlNotifierObserver::IsHbNotifierEnabled() +// Launch Hb Notifier Process +// -------------------------------------------------------------------------- +// +TBool CNSmlNotifierObserver::IsHbSyncmlNotifierEnabledL() + { + CRepository * rep = + CRepository::NewLC(KCRUidDeviceManagementInternalKeys); + + TInt notifierenabled = KErrNone; + + TInt err = rep->Get(KDevManEnableHbNotifier, notifierenabled); + + CleanupStack::PopAndDestroy(rep); + + if (err == KErrNone && notifierenabled) + { + return ETrue; + } + else + { + return EFalse; + } + + } + +// -------------------------------------------------------------------------- +// CNSmlNotifierObserver::HbNotifierObserverL() +// Launch Hb Notifier Process +// -------------------------------------------------------------------------- +// +void CNSmlNotifierObserver::HbNotifierObserverL(const TSyncMLAppLaunchNotifParams& aParam) + { + + LOGSTRING2("iCallerStatus before HbNotifierObserverL creation %d", iCallerStatus.Int()); + + _LIT(KHbNotifier,"com.nokia.hb.devicemanagementdialog/1.0"); + + _LIT(KNotifierId, "aasyncmlfw"); + _LIT(KProfileId, "profileid"); + _LIT(KUImode, "uimode"); + _LIT(KServerdisplayname, "serverdisplayname"); + + CHbSymbianVariantMap* varMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(varMap); + + HBufC* notifierid = HBufC::NewL(10); + CleanupStack::PushL(notifierid); + *notifierid =KNotifierId; + + + HBufC* profileid = HBufC::NewL(10); + CleanupStack::PushL(profileid); + *profileid = KProfileId; + + HBufC* uimode = HBufC::NewL(10); + CleanupStack::PushL(uimode); + *uimode = KUImode; + + HBufC* serverdisplay = HBufC::NewL(20); + CleanupStack::PushL(serverdisplay); + *serverdisplay = KServerdisplayname; + + TBuf<256> servername; + + CNSmlDMSettings* settings = CNSmlDMSettings::NewLC(); + CNSmlDMProfile* prof = settings->ProfileL( + aParam.iProfileId); + CleanupStack::PushL(prof); + + servername = prof->StrValue(EDMProfileDisplayName); + + CleanupStack::PopAndDestroy(2); + + TInt id =1000000; + + CHbSymbianVariant* notifieridvar = CHbSymbianVariant::NewL(&id, + CHbSymbianVariant::EInt); + + + CHbSymbianVariant* infoprofileid = CHbSymbianVariant::NewL(&aParam.iProfileId, + CHbSymbianVariant::EInt); + + //CleanupStack::PushL(infoprofileid); + + CHbSymbianVariant* infouimode = CHbSymbianVariant::NewL(&aParam.iUimode, + CHbSymbianVariant::EInt); + + CHbSymbianVariant* serverdisplayname = CHbSymbianVariant::NewL(&servername, + CHbSymbianVariant::EDes); + //CleanupStack::PushL(infouimode); + + varMap->Add(*notifierid, notifieridvar); + varMap->Add(*profileid, infoprofileid); // takes ownership + varMap->Add(*uimode, infouimode); + varMap->Add(*serverdisplay, serverdisplayname); + + /*subscribe key value*/ + TInt err = RProperty::Define(sosserverpsuid, EHbSOSNotifierKeyStatus, RProperty::EInt); + + err = RProperty::Define(sosserverpsuid, EHbSOSNotifierKeyStatusReturn, RProperty::EInt); + + err = iProperty.Attach(sosserverpsuid, EHbSOSNotifierKeyStatus); + + iProperty.Subscribe(iStatus); + + + + iDevDialog = CHbDeviceDialogSymbian::NewL(); + iDevDialog->Show(KHbNotifier, *varMap); + + CleanupStack::PopAndDestroy(5); + + + + LOGSTRING2("CNSmlNotifierObserver hb notifier %d before subscribe", iStatus.Int()); + + + + LOGSTRING2("CNSmlNotifierObserver hb notifier %d after subscribe", iStatus.Int()); + + LOGSTRING2("iCallerStatus before HbNotifierObserverL creation %d", iCallerStatus.Int()); + } + +// -------------------------------------------------------------------------- // CNSmlNotifierObserver::NotifierTimeOut() // Starts notifier time out timer // -------------------------------------------------------------------------- // void CNSmlNotifierObserver::NotifierTimeOut() - { - iTimeOut = ETrue; - - // StartNotifier called to avoid Notifier server panic, if - // notifier does not exist anymore. - TBuf8<1> dummy; - iNotifier.StartNotifier(KNullUid, dummy, dummy); // KNullUid should do also.. - iNotifier.CancelNotifier( KUidNotifier ); - } + { + LOGSTRING("CNSmlNotifierObserver NotifierTimeOut "); + iTimeOut = ETrue; + + // StartNotifier called to avoid Notifier server panic, if + // notifier does not exist anymore. + if(!iHbSyncmlNotifierEnabled) + { + TBuf8<1> dummy; + iNotifier.StartNotifier(KNullUid, dummy, dummy); // KNullUid should do also.. + iNotifier.CancelNotifier( KUidNotifier ); + } + else + { + iProperty.Close(); + } + } // -------------------------------------------------------------------------- // CNSmlNotifierObserver::DoCancel() @@ -849,8 +1039,29 @@ // -------------------------------------------------------------------------- // void CNSmlNotifierObserver::RunL() - { - + { + + if (iDevDialog && iHbSyncmlNotifierEnabled) + { + + + TInt status = KErrNone; + + TInt err = RProperty::Get(sosserverpsuid,EHbSOSNotifierKeyStatusReturn , status); + + LOGSTRING2("status is %d", status); + + LOGSTRING2("err of ps key is %d", err); + + if(status == KErrCancel) + iStatus = KErrCancel; + + iDevDialog->Cancel(); + delete iDevDialog; + } + + LOGSTRING("CNSmlNotifierObserver RunL start"); + TInt ret = iStatus.Int(); if ( ret == KErrCancel && iTimeOut ) {