diff -r 000000000000 -r 72b543305e3a messagingappbase/ncnlist/src/Ncn.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/ncnlist/src/Ncn.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 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: Methods for Ncn subsystem base class. +* +*/ + + + +// Include Files +#include "NcnDebug.h" +#include "NcnModelBase.h" +#include "Ncn.h" +#include "CNcnSession.h" +#include "NcnCommsDefs.h" +#include "MNcnNotificationObserver.h" +#include +#include +#include +#include +#include + +// CONSTANTS +/// Unnamed namespace for local definitions +namespace { + + // thread name with secure api + _LIT( KNcnThreadName, "ncnlist" ); + + const TUint myRangeCount = 3; + const TInt myRanges[myRangeCount] = + { + 0, //range is all s60-internal API requests + ENewMessages1, //range is all public API requests + EMarkUnread1 + 1 //range is non-supported requests + }; + const TUint8 myElementsIndex[myRangeCount] = + { + 0, //applies to 0th range + 1, //applies to 1st range + CPolicyServer::ENotSupported //applies to 2nd range + }; + const CPolicyServer::TPolicyElement myElements[] = + { + { + _INIT_SECURITY_POLICY_V1( VID_DEFAULT, ECapabilityWriteUserData ), + CPolicyServer::EFailClient + }, + { + _INIT_SECURITY_POLICY_C1( ECapabilityWriteUserData ), + CPolicyServer::EFailClient + } + }; + const CPolicyServer::TPolicy myPolicy = + { + 1, //connect attempt checks write user data capability + myRangeCount, + myRanges, + myElementsIndex, + myElements + }; + +} // namespace + +// ================= MEMBER FUNCTIONS ======================= + +CNcn::CNcn( TInt aPriority, const TPolicy& aPolicy ) + : CPolicyServer( aPriority, aPolicy ) + { + } + +CNcn::~CNcn() + { + delete iNcnModel; + } + +// Create and start a new server. +void CNcn::NewLC() + { + NCN_RDEBUG(_L("CREATING NCNLIST")); + CNcn* server = new CNcn( CActive::EPriorityHigh, myPolicy ); + CleanupStack::PushL( server ); + server->ConstructL(); + server->StartL( KNcnServerName ); + } + +// Symbian OS default constructor can leave. +void CNcn::ConstructL() + { + // Create an instance of CNcnModel (which initialises the Ncnlist environment) + iNcnModel = CNcnModelBase::NewL(); + } + +// Create a new server session. +CSession2* CNcn::NewSessionL( + const TVersion& aVersion, + const RMessage2& /*aMessage*/ ) const + { + // check we're the right version + TVersion v( KNcnNotificationServerMajor, + KNcnNotificationServerMinor, + KNcnNotificationServerBuild ); + if( !User::QueryVersionSupported( v, aVersion ) ) + User::Leave( KErrNotSupported ); + // make new session + return CNcnSession::NewL( iNcnModel->NotificationObserver() ); + } + +TInt CNcn::RunServer() + { + __UHEAP_MARK; + // + CTrapCleanup* cleanup = CTrapCleanup::New(); + TInt ret = KErrNoMemory; + if( cleanup ) + { + TRAP( ret, CNcn::RunServerL() ); + delete cleanup; + } + // + __UHEAP_MARKEND; + if( ret != KErrNone ) + { + // Signal the client that server creation failed + RProcess::Rendezvous( ret ); + } + return ret; + } + +void CNcn::RunServerL() + { + // rename thread if secure api is defined + TInt err = User::RenameThread( KNcnThreadName ); + + if( err != KErrNone ) + { + User::Leave( err ); + } + + // Create and install the active scheduler we need + CActiveScheduler *as = new ( ELeave ) CActiveScheduler; + CleanupStack::PushL( as ); + CActiveScheduler::Install( as ); + + // Create server + CNcn::NewLC(); + + // Initialisation complete, now signal the client + RProcess::Rendezvous( KErrNone ); + + // Ready to run + CActiveScheduler::Start(); + + // Cleanup the server and scheduler + CleanupStack::PopAndDestroy( 2, as ); + } + +TInt E32Main() + { + TInt error( KErrNone ); + error = CNcn::RunServer(); + return error; + } + +// End of File