calendarengines/caldav/src/caldavclient.cpp
branchRCL_3
changeset 31 97232defd20e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarengines/caldav/src/caldavclient.cpp	Tue Sep 14 21:17:03 2010 +0300
@@ -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;
+	}