email/imap4mtm/imaputils/src/cimaputils.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imap4mtm/imaputils/src/cimaputils.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,141 @@
+// Copyright (c) 2006-2009 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:
+//
+
+#include "cimaputils.h"
+#include "cimaplogger.h"
+#include "cimapcharconv.h"
+
+/**
+Create the IMAP utilities class.
+There is only one instance of this class at any one time. If more than one
+server MTM instance exists at any time, then they share this class.
+This is a static function.
+*/
+EXPORT_C void CImapUtils::CreateL()
+	{
+	CImapUtils* self = NULL;
+
+	TAny* tls = Dll::Tls();
+	if (tls)
+		{
+		self = static_cast<CImapUtils*>(tls);
+		++self->iRefCount;
+		}
+	else
+		{
+		self = new (ELeave) CImapUtils();
+		CleanupStack::PushL(self);
+		self->ConstructL();
+		CleanupStack::Pop();
+		Dll::SetTls(self);
+		self->iRefCount = 1;
+		}
+	}
+
+/**
+Delete the IMAP utilities class.
+The class uses a reference count to ensure that there is only ever one instance
+of the class at any time. Once the reference count hits 0, the class is destroyed.
+This is a static function.
+*/
+EXPORT_C void CImapUtils::Delete()
+	{
+	TAny* tls = Dll::Tls();
+
+	if (tls)
+		{
+		CImapUtils* self = static_cast<CImapUtils*>(tls);
+		--self->iRefCount;
+		if (self->iRefCount == 0)
+			{
+			delete self;
+			Dll::SetTls(NULL);
+			}
+		}
+	}
+
+/**
+Get a reference to the IMAP utilities class.
+This is a static function.
+
+@return Reference to IMAP utilities class.
+*/
+EXPORT_C CImapUtils& CImapUtils::GetRef()
+	{
+	TAny* tls = Dll::Tls();	
+
+	__ASSERT_DEBUG(tls != NULL, User::Invariant());
+
+	CImapUtils* utils = static_cast<CImapUtils*>(tls);
+	return *utils;
+	}
+
+CImapUtils::CImapUtils()
+	{
+	}
+
+void CImapUtils::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	iLogger = CImapLogger::NewL();
+	iCharconv = CImapCharconv::NewL(iFs);
+	}
+
+CImapUtils::~CImapUtils()
+	{
+	delete iLogger;
+	delete iCharconv;
+	iFs.Close();
+	}
+
+/**
+Gets a connected file system object.
+
+@return a connected file system object.
+*/
+EXPORT_C RFs& CImapUtils::Fs()
+	{
+	return iFs;
+	}
+
+/**
+Gets a reference to the logger utility class.
+
+@return Reference to the logger utility class.
+*/
+EXPORT_C CImapLogger& CImapUtils::Logger()
+	{
+	return *iLogger;
+	}
+
+/**
+Gets a reference to the character converter utility class.
+
+@return reference to the character converter utility class.
+*/
+EXPORT_C CImapCharconv& CImapUtils::Charconv()
+	{
+	return *iCharconv;
+	}
+
+/**
+The panic function for the imapserver.
+@param aPanic The panic code.
+*/
+EXPORT_C void TImapServerPanic::ImapPanic(TImpsPanic aPanic)
+	{
+	_LIT(KImapServerPanic, "IMAPServer");
+	User::Panic(KImapServerPanic(), aPanic);
+	}