messagingfw/biomsgfw/BioWatchers/Inc/SmsSocketWatcher.h
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BioWatchers/Inc/SmsSocketWatcher.h	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,172 @@
+// Copyright (c) 1999-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:
+//
+
+#ifndef __SMSSOCKETWATCHER_H_
+#define __SMSSOCKETWATCHER_H_
+
+#include <e32base.h>
+#include <msvstd.h>
+#include <mtsr.h>
+#include <msvapi.h>
+#include <es_sock.h>
+#include <bif.h>
+#include <bsp.h>
+#include <csmsgetdetdescinterface.h>
+
+enum TBioWatcherPanic
+	{
+	EMainSchedulerError1 = 0,
+	EMainSchedulerError2 = 1,
+	ECreateTrapCleanup = 2,
+	ESocketWatcherAlreadyActive = 3,
+	EAllSocketWatchersComplete = 4,
+	EHandleBifChangeError = 5,
+	EReportHandlingInvalid = 6,
+	EUnexpectedErrorCode = 7,
+	EBufferNotNull = 8,
+	EObjectNotConstructed = 9,
+	EAddrFamilyNotSupported1 = 10,
+	EAddrFamilyNotSupported2 = 11,
+	EAddrFamilyNotSupported3 = 12
+	};
+
+#ifdef _BIOMSG_NO_LOGGING
+#define BIOWATCHERLOG(a)
+#else
+#define BIOWATCHERLOG(a) a
+#endif
+
+_LIT(KSocketWatcherPanicString, "BioWatcher");
+inline void PanicWatcher(TBioWatcherPanic aPanic)
+	{
+	User::Panic(KSocketWatcherPanicString, aPanic);
+	}
+
+class CSmsMessage;
+class CBaseSmsActiveSocketWatcher;
+class CWatcherLog;
+class CBIODatabase;
+class CSmsSettings;
+
+class MBioWatcherObserver
+	{
+	public:
+		virtual void HandleWatcherComplete(CBaseSmsActiveSocketWatcher& aWatcher, TInt aError) = 0;
+	};
+
+class CBaseSmsActiveSocketWatcher : public CActive, public MMsvSessionObserver
+	{
+public:
+	IMPORT_C virtual ~CBaseSmsActiveSocketWatcher();
+
+	// Setup gets called synchronously to set up sockets and
+	// mail server before we get going asynchy
+	IMPORT_C void SetupL();
+
+	// over-ride setup code here
+	virtual void DoSetupL() = 0;
+	
+	// StartL gets called to kick off the AO putting 
+	IMPORT_C void StartL();
+
+	// Sets up the Sockets to wait
+	virtual void WaitForMessageL() = 0;
+	// Receives the message from the Socket
+
+	virtual void ReceiveL() = 0;
+
+	// Store the message in the mail server
+	IMPORT_C void StoreMsgL(CSmsMessage* aSmsMsg);
+	IMPORT_C void StoreMsgL(CSmsMessage* aSmsMsg, TBool aCheckForSID);
+
+	inline void SetObserver(MBioWatcherObserver* aObserver);
+	inline TUid BioMsgUID() const;
+
+	virtual void DoComplete(TInt&) = 0;
+	virtual void DoRunL() = 0;
+
+private:
+	void ReplaceTypeMessageL(CMsvEntry&, CSmsMessage& aMessage, TBool& aRetainOriginalMessage);
+	void DeleteReplaceTypeMessagesL(CMsvEntry& aEntry, TUint8 aPid, CSmsMessage& aMessage, TBool& aRetainOriginalMessage);
+
+	void CreateMessageL(CMsvEntry& aEntry, CSmsMessage* aMessage, TBool aCheckForSecureId);
+
+	void SetBioServiceId(CMsvSession& aSession);
+	void SetBioServiceId(TMsvId aBioServiceId, TMsvId aSmsServiceId);
+	TBool CheckMessageExistsL(CMsvSession& aSession, TMsvId aId) const;
+
+	TBool CheckForSID(TPtr& aMessage, TSecureId& aSecureId);
+	
+private:	// methods from MMsvSessionObserver
+	virtual void HandleSessionEventL(TMsvSessionEvent, TAny*, TAny*, TAny*) {};
+
+private:	// methods from CActive
+	IMPORT_C virtual void RunL();
+	IMPORT_C virtual TInt RunError(TInt aError);
+	
+private:
+
+#ifndef _BIOMSG_NO_LOGGING
+	void LogMessageL(const CSmsMessage& aMessage); //will only leave with KErrNoMemory
+	void LogEachLine(const TDesC& aInput);
+	void Log(const TDesC& aInput);
+	void Log(const TDesC8& aInput);
+#endif
+
+protected:
+	// Constructor
+	IMPORT_C CBaseSmsActiveSocketWatcher(CWatcherLog& iWatcherLog, TInt aPriority, TUid aBioID, RFs& aFs);
+	IMPORT_C void Complete(TInt aStatus);
+	inline void WatcherComplete(TInt aError);
+
+	inline virtual TBool CanStoreMessage() const;
+	inline virtual TBool Visible() const;
+	IMPORT_C virtual void RestoreSettingsL(CMsvSession&);
+	IMPORT_C virtual void RestoreSettingsL(TMsvId aBioServiceId, TMsvId aSmsServiceId);
+	IMPORT_C virtual void ConstructL(CBIODatabase& aBioDb, TMsvId aBioServiceId, TMsvId aSmsServiceId);
+	IMPORT_C virtual void SetBioMsgText(CBIODatabase& aBioDb);
+	IMPORT_C virtual void PreStoreActionL(CMsvSession& aSession, CSmsMessage& aMessage);
+
+public:
+	enum TSmsWatcherState
+		{
+		ESmsWWaitForMsg,
+		ESmsWReadMsg,
+		ESmsWRetryError,
+		ESmsIsClass0Msg,
+		ESmsSupportClass0Msg
+		} iState;
+
+protected:
+
+	TUid					iBioMsgUID;
+	TMsvId					iBioServiceId;
+	TMsvId					iSmsServiceId;
+	TBioMsgIdText			iBioMsgText;
+	CWatcherLog&			iWatcherLog;
+	RTimer					iTimer;
+	RFs&					iFs;
+	CSmsSettings*			iSettings;
+
+private:
+
+	MBioWatcherObserver*	iObserver;
+	CSmsGetDetDescInterface* iGetDetDesc;
+	
+	};
+
+#include "SmsSocketWatcher.inl"
+
+#endif