diff -r ed599363c2d7 -r 6d3f83773253 calendarengines/caldav/src/caldavserversession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarengines/caldav/src/caldavserversession.cpp Wed Oct 27 15:48:34 2010 +0100 @@ -0,0 +1,400 @@ +/* +* 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 session, follows Symbian +* client/server architecture +*/ + +#include + +#include "caldavserversession.h" +#include "caldavserver.h" +#include "caldavutils.h" + +#define MAXLENGTH 500 + +CCalDavServerSession::CCalDavServerSession(CCalDavServer &aServer) : + rServer(aServer) + { + } + +/** + Services a client request. + */ +void CCalDavServerSession::ServiceL(const RMessage2& aMessage) + { + TRAP_IGNORE(DispatchMessageL(aMessage)); + } + +/** + Called by ServiceL() + + It tests the function code and then delegates to + the appropriate function. + */ +void CCalDavServerSession::DispatchMessageL(const RMessage2& aMessage) + { + switch (aMessage.Function()) + { + case ECalDavEnable: + EnableL(aMessage); + return; + case ECalDavDisable: + DisableL(aMessage); + return; + case ECalDavSyncAll: + SyncAllL(aMessage); + return; + case ECalDavSync: + SyncL(aMessage); + return; + case ECalDavUrl: + UrlL(aMessage); + return; + case ECalDavSetUrl: + SetUrlL(aMessage); + return; + case ECalDavUsername: + UsernameL(aMessage); + return; + case ECalDavSetUsername: + SetUsernameL(aMessage); + return; + case ECalDavPassword: + PasswordL(aMessage); + return; + case ECalDavSetPassword: + SetPasswordL(aMessage); + return; + case ECalDavSyncInterval: + SyncIntervalL(aMessage); + return; + case ECalDavSetSyncInterval: + SetSyncIntervalL(aMessage); + return; + case ECalDavPastDays: + PastDaysL(aMessage); + return; + case ECalDavSetPastDays: + SetPastDaysL(aMessage); + return; + case ECalDavImmediateSync: + ImmediateSyncL(aMessage); + return; + case ECalDavSetImmediateSync: + SetImmediateSyncL(aMessage); + return; + case ECalDavKeepServer: + KeepServerEntryL(aMessage); + return; + case ECalDavSetKeepServer: + SetKeepServerEntryL(aMessage); + return; + case ECalDavEnabled: + EnabledSyncL(aMessage); + return; + case ECalDavUnsupportedRequest: + User::Leave(KErrNotSupported); + // Requests that we don't understand at all are a different matter. + // This is considered a client programming error, so we panic the + // client - this also completes the message. + default: + PanicClient(aMessage, EBadRequest); + return; + } + } + +/** + Panics the client + */ +void CCalDavServerSession::PanicClient(const RMessage2& aMessage, TInt aPanic) const + { + _LIT(KTxtServer,"CalDav server"); + aMessage.Panic(KTxtServer, aPanic); + } + +void CCalDavServerSession::EnableL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TInt result = rServer.EnableL(*calendar); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(result); + } + +void CCalDavServerSession::DisableL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TInt result = rServer.DisableL(*calendar); + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(result); + } + +void CCalDavServerSession::SyncL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TInt result = rServer.SyncL(*calendar); + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(result); + } + +void CCalDavServerSession::SyncAllL(const RMessage2& aMessage) + { + TInt result = rServer.SyncAllL(); + aMessage.Complete(result); + } + +void CCalDavServerSession::UrlL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + aMessage.WriteL(1, rServer.UrlL(*calendar)); + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SetUrlL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + length = aMessage.GetDesLength(1); + HBufC8* url = HBufC8::NewLC(length); + TPtr8 urlPtr(url->Des()); + aMessage.ReadL(1, urlPtr); + + rServer.SetUrlL(*calendar, *url); + CleanupStack::PopAndDestroy(url); + CleanupStack::PopAndDestroy(calendar); + + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::UsernameL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + aMessage.WriteL(1, rServer.UsernameL(*calendar)); + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SetUsernameL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + length = aMessage.GetDesLength(1); + HBufC8* username = HBufC8::NewLC(length); + TPtr8 usernamePtr(username->Des()); + aMessage.ReadL(1, usernamePtr); + + rServer.SetUsernameL(*calendar, *username); + CleanupStack::PopAndDestroy(username); + CleanupStack::PopAndDestroy(calendar); + + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::PasswordL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + aMessage.WriteL(1, rServer.PasswordL(*calendar)); + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SetPasswordL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + length = aMessage.GetDesLength(1); + HBufC8* password = HBufC8::NewLC(length); + TPtr8 passwordPtr(password->Des()); + aMessage.ReadL(1, passwordPtr); + + rServer.SetPasswordL(*calendar, *password); + CleanupStack::PopAndDestroy(password); + CleanupStack::PopAndDestroy(calendar); + + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SyncIntervalL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TTimeIntervalMinutes interval = rServer.SyncIntervalL(*calendar); + TPckg intervalDes(interval); + aMessage.WriteL(1, intervalDes); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SetSyncIntervalL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TTimeIntervalMinutes interval; + ; + TPckg intervalDes(interval); + aMessage.ReadL(1, intervalDes); + + rServer.SetSyncIntervalL(*calendar, interval); + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::PastDaysL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TTimeIntervalDays days = rServer.PastDaysL(*calendar); + TPckg daysDes(days); + aMessage.WriteL(1, daysDes); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SetPastDaysL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TTimeIntervalDays days; + TPckg daysDes(days); + aMessage.ReadL(1, daysDes); + + rServer.SetPastDaysL(*calendar, days); + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::ImmediateSyncL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TBool immediate = rServer.ImmediateSyncL(*calendar); + TPckg immediateDes(immediate); + aMessage.WriteL(1, immediateDes); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SetImmediateSyncL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TBool immediate; + TPckg immediateDes(immediate); + aMessage.ReadL(1, immediateDes); + rServer.SetImmediateSyncL(*calendar, immediate); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::KeepServerEntryL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TBool keepserver = rServer.ImmediateSyncL(*calendar); + TPckg keepserverDes(keepserver); + aMessage.WriteL(1, keepserverDes); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::EnabledSyncL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TBool enabledsync = rServer.EnabledSyncL(*calendar); + TPckg enabledsyncDes(enabledsync); + aMessage.WriteL(1, enabledsyncDes); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + } + +void CCalDavServerSession::SetKeepServerEntryL(const RMessage2& aMessage) + { + TUint length = aMessage.GetDesLength(0); + HBufC* calendar = HBufC::NewLC(length); + TPtr calendarPtr(calendar->Des()); + aMessage.ReadL(0, calendarPtr); + + TBool keepserver; + TPckg keepserverDes(keepserver); + aMessage.ReadL(1, keepserverDes); + rServer.SetImmediateSyncL(*calendar, keepserver); + + CleanupStack::PopAndDestroy(calendar); + aMessage.Complete(KErrNone); + }