--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/senduiservices/src/SendUiCapabilityCheck.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002-2004 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Utility class for SendUI.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <s32mem.h>
+#include <e32base.h>
+#include <mtclbase.h>
+#include <tmsvpackednotifierrequest.h>
+
+#include "SendUiCapabilityCheck.h"
+
+// CONSTANTS
+const TUid KSendUiNotifierPluginUid = {0x10282895};
+const TInt32 KSendUiServiceMaxNameLength = 40; // original defined in SendUIPrivateCRKeys.h
+const TInt32 KSendUiNotifierBufferSize = KSendUiServiceMaxNameLength + sizeof(TUint32);
+
+typedef TBuf8<KSendUiNotifierBufferSize> TTransferBuf;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSendUiCapabilityCheck:CSendUiCapabilityCheck
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSendUiCapabilityCheck::CSendUiCapabilityCheck()
+ : CActive( EPriorityStandard )
+ {
+ CActiveScheduler::Add( this );
+ iNotifierUid = KSendUiNotifierPluginUid;
+ }
+
+// -----------------------------------------------------------------------------
+// CSendUiCapabilityCheck::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSendUiCapabilityCheck* CSendUiCapabilityCheck::NewLC()
+ {
+ CSendUiCapabilityCheck* self = new (ELeave) CSendUiCapabilityCheck();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSendUiCapabilityCheck::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSendUiCapabilityCheck::ConstructL()
+ {
+ User::LeaveIfError( iNotifier.Connect() );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSendUiCapabilityCheck::CheckCapabilitiesL
+// -----------------------------------------------------------------------------
+//
+TBool CSendUiCapabilityCheck::CheckCapabilitiesL(
+ const TSecurityInfo& aSecurityInfo,
+ CMsvSession& aSession,
+ const TUid aMtmType,
+ const TDesC& aServiceName )
+ {
+ TBool capabilitiesOK = EFalse;
+ // get required capabilities
+ TCapabilitySet caps;
+ aSession.GetMtmRequiredCapabilitiesL( aMtmType, caps );
+
+ // check client capabilities with required capabilities
+ if( aSecurityInfo.iCaps.HasCapabilities( caps ) )
+ {
+ capabilitiesOK = ETrue;
+ }
+ else
+ {
+ // compile a message buffer containing service name and service ID
+ TInt nameLength = aServiceName.Length();
+ CBufFlat* buffer = CBufFlat::NewL( nameLength + sizeof(TUint32) );
+ CleanupStack::PushL( buffer );
+
+ RBufWriteStream bufStream;
+ bufStream.Open( *buffer );
+ bufStream.WriteUint32L( nameLength );
+
+ if ( nameLength )
+ {
+ bufStream << aServiceName;
+ }
+ bufStream.WriteUint32L( aSecurityInfo.iSecureId );
+ bufStream.CommitL();
+ bufStream.Close();
+
+ TTransferBuf transferBuffer;
+ buffer->Read( 0, transferBuffer, buffer->Size() );
+ CleanupStack::PopAndDestroy( buffer );
+
+ iNotifier.StartNotifierAndGetResponse( iStatus, iNotifierUid, transferBuffer, iNotifierResult );
+ SetActive();
+ iWait.Start();
+
+ if ( iStatus == KErrNone )
+ {
+ capabilitiesOK = ETrue;
+ }
+ }
+
+ return capabilitiesOK;
+ }
+
+// -----------------------------------------------------------------------------
+// CSendUiCapabilityCheck::~CSendUiCapabilityCheck
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSendUiCapabilityCheck::~CSendUiCapabilityCheck()
+ {
+ iNotifier.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CSendUiCapabilityCheck::RunL
+// -----------------------------------------------------------------------------
+//
+void CSendUiCapabilityCheck::RunL()
+ {
+ iWait.AsyncStop();
+ }
+
+// -----------------------------------------------------------------------------
+// CSendUiCapabilityCheck::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CSendUiCapabilityCheck::DoCancel()
+ {
+ iNotifier.NotifyCancel();
+ }
+
+
+// End of File