--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarengines/caldav/src/caldavclient.cpp Wed Oct 27 15:48:34 2010 +0100
@@ -0,0 +1,329 @@
+/*
+* 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: provides a client API for Caldav server
+*
+*/
+
+#include "caldavclient.h"
+#include "caldavserver.h"
+#include "caldavutils.h"
+
+const TUint KDefaultMessageSlots = 4;
+
+// testing ************
+#include <e32base.h>
+#include <e32cons.h>
+#include <e32cmn.h>
+
+/**
+ * RCalDavServer::RCalDavServer
+ * default constructor
+ */
+EXPORT_C RCalDavServer::RCalDavServer()
+ {
+ }
+
+/**
+ * RCalDavServer::Connect
+ * connect to server
+ */
+EXPORT_C TInt RCalDavServer::Connect()
+ {
+ TInt retry = 2;
+ for (;;)
+ {
+ TInt r = CreateSession(KCalDavServerName, Version(),
+ KDefaultMessageSlots);
+
+ if ((KErrNotFound != r) && (KErrServerTerminated != r))
+ return (r);
+
+ if (--retry == 0)
+ return (r);
+
+ r = StartServer();
+ if ((KErrNone != r) && (KErrAlreadyExists != r))
+ return (r);
+ }
+ }
+
+/**
+ * RCalDavServer::Enable
+ * enable Caldav sync
+ */
+EXPORT_C TInt RCalDavServer::Enable(const TDesC &aCalendar)
+ {
+ TIpcArgs args(&aCalendar);
+ return SendReceive(ECalDavEnable, args);
+ }
+
+/**
+ * RCalDavServer::Disable
+ * disable Caldav sync
+ */
+EXPORT_C TInt RCalDavServer::Disable(const TDesC &aCalendar)
+ {
+ TIpcArgs args(&aCalendar);
+ return SendReceive(ECalDavDisable, args);
+ }
+
+/**
+ * RCalDavServer::EnabledSync
+ * check for enabled sync
+ */
+EXPORT_C TInt RCalDavServer::EnabledSync(const TDesC &aCalendar,
+ TBool &aEnabled)
+ {
+ TPckg<TBool> enabled(aEnabled);
+ TIpcArgs args(&aCalendar, &enabled);
+ return (SendReceive(ECalDavEnabled, args));
+ }
+
+/**
+ * RCalDavServer::Sync
+ * sync now a specific calendar
+ */
+EXPORT_C TInt RCalDavServer::Sync(const TDesC &aCalendar)
+ {
+ TIpcArgs args(&aCalendar);
+ return SendReceive(ECalDavSync, args);
+ }
+
+/**
+ * RCalDavServer::SyncAll
+ * sync now all calendars
+ */
+EXPORT_C TInt RCalDavServer::SyncAll()
+ {
+ return SendReceive(ECalDavSyncAll);
+ }
+
+/**
+ * RCalDavServer::Url
+ * get caldav sync url
+ */
+EXPORT_C TInt RCalDavServer::Url(const TDesC &aCalendar, TDes8 &aUrl)
+ {
+ TIpcArgs args(&aCalendar, &aUrl);
+ return SendReceive(ECalDavUrl, args);
+ }
+
+/**
+ * RCalDavServer::SetUrl
+ * set url
+ */
+EXPORT_C TInt RCalDavServer::SetUrl(const TDesC &aCalendar, const TDesC8 &aUrl)
+ {
+ TIpcArgs args(&aCalendar, &aUrl);
+ return SendReceive(ECalDavSetUrl, args);
+ }
+
+/**
+ * RCalDavServer::Username
+ * get username
+ */
+EXPORT_C TInt RCalDavServer::Username(const TDesC &aCalendar, TDes8 &aUsername)
+ {
+ TIpcArgs args(&aCalendar, &aUsername);
+ return SendReceive(ECalDavUsername, args);
+ }
+
+/**
+ * RCalDavServer::SetUsername
+ * set username
+ */
+EXPORT_C TInt RCalDavServer::SetUsername(const TDesC &aCalendar,
+ const TDesC8 &aUsername)
+ {
+ TIpcArgs args(&aCalendar, &aUsername);
+ return SendReceive(ECalDavSetUsername, args);
+ }
+
+/**
+ * RCalDavServer::Password
+ * get password
+ */
+EXPORT_C TInt RCalDavServer::Password(const TDesC &aCalendar, TDes8 &aPassword)
+ {
+ TIpcArgs args(&aCalendar, &aPassword);
+ return SendReceive(ECalDavPassword, args);
+ }
+
+/**
+ * RCalDavServer::SetPassword
+ * set password
+ */
+EXPORT_C TInt RCalDavServer::SetPassword(const TDesC &aCalendar,
+ const TDesC8 &aPassword)
+ {
+ TIpcArgs args(&aCalendar, &aPassword);
+ return SendReceive(ECalDavSetPassword, args);
+ }
+
+/**
+ * RCalDavServer::SyncInterval
+ * get SyncInterval
+ */
+EXPORT_C TInt RCalDavServer::SyncInterval(const TDesC &aCalendar,
+ TTimeIntervalMinutes& aSyncInterval)
+ {
+ TPckg<TTimeIntervalMinutes> syncinterval(aSyncInterval);
+ TIpcArgs args(&aCalendar, &syncinterval);
+ return (SendReceive(ECalDavSyncInterval, args));
+ }
+
+/**
+ * RCalDavServer::SetSyncInterval
+ * set SyncInterval
+ */
+EXPORT_C TInt RCalDavServer::SetSyncInterval(const TDesC &aCalendar,
+ TTimeIntervalMinutes aSyncInterval)
+ {
+ TPckg<TTimeIntervalMinutes> syncinterval(aSyncInterval);
+ TIpcArgs args(&aCalendar, &syncinterval);
+ return (SendReceive(ECalDavSetSyncInterval, args));
+ }
+
+/**
+ * RCalDavServer::PastDays
+ * get past days
+ */
+EXPORT_C TInt RCalDavServer::PastDays(const TDesC &aCalendar,
+ TTimeIntervalDays &aDays)
+ {
+ TPckg<TTimeIntervalDays> pastdays(aDays);
+ TIpcArgs args(&aCalendar, &pastdays);
+ return (SendReceive(ECalDavPastDays, args));
+ }
+
+/**
+ * RCalDavServer::SetPastDays
+ * set past days
+ */
+EXPORT_C TInt RCalDavServer::SetPastDays(const TDesC &aCalendar,
+ TTimeIntervalDays aDays)
+ {
+ TPckg<TTimeIntervalDays> pastdays(aDays);
+ TIpcArgs args(&aCalendar, &pastdays);
+ return (SendReceive(ECalDavSetPastDays, args));
+ }
+
+/**
+ * RCalDavServer::ImmediateSync
+ * get Immediate Sync
+ */
+EXPORT_C TInt RCalDavServer::ImmediateSync(const TDesC &aCalendar,
+ TBool &aImmediateSyc)
+ {
+ TPckg<TBool> syncimmediate(aImmediateSyc);
+ TIpcArgs args(&aCalendar, &syncimmediate);
+ return (SendReceive(ECalDavImmediateSync, args));
+ }
+
+/**
+ * RCalDavServer::SetImmediateSync
+ * set immediate Sync
+ */
+EXPORT_C TInt RCalDavServer::SetImmediateSync(const TDesC &aCalendar,
+ TBool aImmediateSyc)
+ {
+ TPckg<TBool> syncimmediate(aImmediateSyc);
+ TIpcArgs args(&aCalendar, &syncimmediate);
+ return SendReceive(ECalDavSetImmediateSync, args);
+ }
+
+/**
+ * RCalDavServer::KeepServerEntry
+ * get KeepServerEntry
+ */
+EXPORT_C TInt RCalDavServer::KeepServerEntry(const TDesC &aCalendar,
+ TBool &aKeepServerEntry)
+ {
+ TPckg<TBool> keepserverentry(aKeepServerEntry);
+ TIpcArgs args(&aCalendar, &keepserverentry);
+ return SendReceive(ECalDavKeepServer, args);
+ }
+
+/**
+ * RCalDavServer::SetKeepServerEntry
+ * set KeepServerEntry
+ */
+EXPORT_C TInt RCalDavServer::SetKeepServerEntry(const TDesC &aCalendar,
+ TBool aKeepServerEntry)
+ {
+ TPckg<TBool> keepserverentry(aKeepServerEntry);
+ TIpcArgs args(&aCalendar, &keepserverentry);
+ return SendReceive(ECalDavSetKeepServer, args);
+ }
+
+/**
+ * RCalDavServer::Version
+ * get version
+ */
+TVersion RCalDavServer::Version(void) const
+ {
+ return (TVersion(KCalDavServerMajorVersionNumber,
+ KCalDavServerMinorVersionNumber, KCalDavServerBuildVersionNumber));
+ }
+
+/**
+ * RCalDavServer::UnsupportedRequest()
+ * A server request to stop the server.
+ * This is a request that is NOT implemented by the server; it is here to show
+ * the handling of non-implemented requests.
+ */
+TInt RCalDavServer::UnsupportedRequest()
+ {
+ return SendReceive(ECalDavUnsupportedRequest);
+ }
+
+/**
+ * RCalDavServer::BadRequest()
+ * A request that the server knows nothing about.
+ */
+void RCalDavServer::BadRequest()
+ {
+ SendReceive(9999);
+ }
+
+static TInt StartServer()
+ {
+ RProcess server;
+ TInt r = server.Create(KCalDavServerFilename, KNullDesC);
+ if (r != KErrNone)
+ return r;
+
+ TRequestStatus stat;
+ server.Rendezvous(stat);
+
+ if (stat != KRequestPending)
+ server.Kill(0); // abort startup
+ else
+ server.Resume(); // logon OK - start the server
+
+ User::WaitForRequest(stat); // wait for start or death
+
+ // Check the exit type.
+ // We can't use the 'exit reason' because if the server panicked this
+ // is set to the panic 'reason' (which may be '0' and cannot thus be distinguished
+ // from KErrNone)
+ r = server.ExitType();
+ if (EExitPanic == r)
+ r = KErrGeneral;
+ else
+ r = stat.Int();
+
+ server.Close(); // This is no longer needed
+ return r;
+ }