diff -r bd7edf625bdd -r 97232defd20e calendarengines/caldav/src/caldavserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarengines/caldav/src/caldavserver.cpp Tue Sep 14 21:17:03 2010 +0300 @@ -0,0 +1,373 @@ +/* +* Copyright (c) 2010 Sun Microsystems, Inc. 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 Contributor: +* Maximilian Odendahl +* +* Contributors: +* +* Description: Caldav server, follows Symbian client/server +* architecture +*/ + +#include +#include +#include + +#include +#include + +#include "caldavserver.h" +#include "caldavenginemgr.h" +#include "caldavserverSession.h" +#include "httpclient.h" + +const TUint KServerPolicyRangeCount = 2; + +const TInt KServerPolicyRanges[KServerPolicyRangeCount] = + { + 0, // range is 0 inclusive + 200 + // range is 1-KMaxTInt inclusive + }; + +const TUint8 KServerPolicyElementsIndex[KServerPolicyRangeCount] = + { + 0, // applies to 0th range + CPolicyServer::ENotSupported + // applies to 1st range + }; + +/** + * CPolicyServer::TPolicyElement() + * + */ +const CPolicyServer::TPolicyElement + KServerPolicyElements[] = + { + { + _INIT_SECURITY_POLICY_C5(ECapabilityWriteDeviceData,ECapabilityWriteUserData, ECapabilityReadDeviceData,ECapabilityReadUserData,ECapabilityNetworkServices), CPolicyServer::EFailClient + } + }; + +const CPolicyServer::TPolicy KServerPolicy = + { + CPolicyServer::EAlwaysPass, // specifies all connect attempts should pass + KServerPolicyRangeCount, + KServerPolicyRanges, + KServerPolicyElementsIndex, + KServerPolicyElements + }; + +/** + * CCalDavServer::CCalDavServer + * default constructor + */ +CCalDavServer::CCalDavServer(CActive::TPriority aActiveObjectPriority) : + CPolicyServer(aActiveObjectPriority, KServerPolicy) + { + } + +/** + * CCalDavServer::NewSessionL + * Creates a new session with the server. + */ +CSession2* CCalDavServer::NewSessionL(const TVersion& aVersion, + const RMessage2& /*aMessage*/) const + { + // Check that the version is OK + TVersion v(KCalDavServerMajorVersionNumber, + KCalDavServerMinorVersionNumber, KCalDavServerBuildVersionNumber); + if (!User::QueryVersionSupported(v, aVersion)) + User::Leave(KErrNotSupported); + + // CAN USE THE aMessage argument to check client's security and identity + // can make use of this later but for now ignore. AH 4/5/05 + // the connect message is delivered via the RMessage2 object passed. + + // do something with this later (and move it to the start of the function?) + + // Create the session. + return new (ELeave) CCalDavServerSession(*const_cast (this)); + } + +/** +* CCalDavServer::PanicServer + A utility function to panic the server. + */ +void CCalDavServer::PanicServer(TCalDavServPanic aPanic) + { + _LIT(KTxtServerPanic,"CalDav server panic"); + User::Panic(KTxtServerPanic, aPanic); + } + +/** + * CCalDavServer::ThreadFunction + * The count server thread function that initialises the server. + */ +TInt CCalDavServer::ThreadFunction(TAny* /**aStarted*/) + { + CTrapCleanup* cleanupStack = CTrapCleanup::New(); + if (!(cleanupStack)) + { + PanicServer(ECreateTrapCleanup); + } + TRAPD( err, ThreadFunctionL() ); + if (err != KErrNone) + { + PanicServer(ESvrCreateServer); + } + + delete cleanupStack; + cleanupStack = NULL; + + return KErrNone; + + } + +/** + * CCalDavServer::NewLC + * first phase construction + */ +CCalDavServer* CCalDavServer::NewLC() + { + CCalDavServer* self = + new (ELeave) CCalDavServer(CActive::EPriorityStandard); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +/** + * CCalDavServer::ConstructL + * second phase construction + */ +void CCalDavServer::ConstructL() + { + StartL(KCalDavServerName); + + iMgr = CCalDavEngineMgr::NewL(); + } + +/** + * CCalDavServer::ThreadFunctionL + * start scheduler and construct function + */ +void CCalDavServer::ThreadFunctionL() + { + // Construct active scheduler + CActiveScheduler* activeScheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(activeScheduler); + + // Install active scheduler + // We don't need to check whether an active scheduler is already installed + // as this is a new thread, so there won't be one + CActiveScheduler::Install(activeScheduler); + + // Construct our server, leave it on clean-up stack + CCalDavServer::NewLC(); + + // Naming the server thread after the server helps to debug panics + User::LeaveIfError(User::RenameThread(KCalDavServerName)); + + RProcess::Rendezvous(KErrNone); + + // Start handling requests + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(2, activeScheduler); //Anonymous CCalDavServer + } + +/** + * CCalDavServer::~CCalDavServer + * default destructor + */ +CCalDavServer::~CCalDavServer() + { + if (iMgr) + delete iMgr; + } + +/** + * CCalDavServer::SyncL + * + */ +TInt CCalDavServer::SyncL(const TDesC &aCalendar) + { + return iMgr->SyncL(aCalendar); + } + +/** + * CCalDavServer::SyncAllL + * + */ +TInt CCalDavServer::SyncAllL() + { + return iMgr->SyncAllL(); + } + +/** + * CCalDavServer::EnableL + * + */ +TInt CCalDavServer::EnableL(const TDesC &aCalendar) + { + return iMgr->EnableL(aCalendar); + } + +/** + * CCalDavServer::DisableL + * + */ +TInt CCalDavServer::DisableL(const TDesC &aCalendar) + { + return iMgr->DisableL(aCalendar); + } + +/** + * CCalDavServer::UrlL + * + */ +TPtrC8 CCalDavServer::UrlL(const TDesC &aCalendar) + { + return iMgr->UrlL(aCalendar); + } + +/** + * CCalDavServer::SetUrlL + * + */ +void CCalDavServer::SetUrlL(const TDesC &aCalendar, const TDesC8 &aUrl) + { + return iMgr->SetUrlL(aCalendar, aUrl); + } + +/** + * CCalDavServer::UsernameL + * + */ +TPtrC8 CCalDavServer::UsernameL(const TDesC &aCalendar) + { + return iMgr->UsernameL(aCalendar); + } + +/** + * CCalDavServer::SetUsernameL + * + */ +void CCalDavServer::SetUsernameL(const TDesC &aCalendar, const TDesC8 &aUsername) + { + return iMgr->SetUsernameL(aCalendar, aUsername); + } + +/** + * CCalDavServer::PasswordL + * + */ +TPtrC8 CCalDavServer::PasswordL(const TDesC &aCalendar) + { + return iMgr->PasswordL(aCalendar); + } + +/** + * CCalDavServer::SetPasswordL + * + */ +void CCalDavServer::SetPasswordL(const TDesC &aCalendar, const TDesC8 &aPassword) + { + return iMgr->SetPasswordL(aCalendar, aPassword); + } + +/** + * CCalDavServer::SyncIntervalL + * + */ +TTimeIntervalMinutes CCalDavServer::SyncIntervalL(const TDesC &aCalendar) const + { + return iMgr->SyncIntervalL(aCalendar); + } + +/** + * CCalDavServer::SetSyncIntervalL + * + */ +void CCalDavServer::SetSyncIntervalL(const TDesC &aCalendar, + TTimeIntervalMinutes aSyncInterval) + { + iMgr->SetSyncIntervalL(aCalendar, aSyncInterval); + } + +/** + * CCalDavServer::EnabledSyncL + * + */ +TBool CCalDavServer::EnabledSyncL(const TDesC &aCalendar) const + { + return iMgr->EnabledSyncL(aCalendar); + } + +/** + * CCalDavServer::PastDaysL + * + */ +TTimeIntervalDays CCalDavServer::PastDaysL(const TDesC &aCalendar) const + { + return iMgr->PastDaysL(aCalendar); + } + +/** + * CCalDavServer::SetPastDaysL + * + */ +void CCalDavServer::SetPastDaysL(const TDesC &aCalendar, TTimeIntervalDays aDays) + { + iMgr->SetPastDaysL(aCalendar, aDays); + } + +/** + * CCalDavServer::ImmediateSyncL + * + */ +TBool CCalDavServer::ImmediateSyncL(const TDesC &aCalendar) const + { + return iMgr->ImmediateSyncL(aCalendar); + } + +/** + * CCalDavServer::SetImmediateSyncL + * + */ +void CCalDavServer::SetImmediateSyncL(const TDesC &aCalendar, + TBool aImmediateSyc) + { + iMgr->SetImmediateSyncL(aCalendar, aImmediateSyc); + } + +/** + * CCalDavServer::KeepServerEntryL + * + */ +TBool CCalDavServer::KeepServerEntryL(const TDesC &aCalendar) const + { + return iMgr->KeepServerEntryL(aCalendar); + } + +/** + * CCalDavServer::SetKeepServerEntryL + * + */ +void CCalDavServer::SetKeepServerEntryL(const TDesC &aCalendar, + TBool aKeepServerEntry) + { + iMgr->SetKeepServerEntryL(aCalendar, aKeepServerEntry); + } + +TInt E32Main() + { + return CCalDavServer::ThreadFunction(NULL); + }