mobilemessaging/smsmtm/test/class0smsnotifier/src/class0smsUInotifier.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/smsmtm/test/class0smsnotifier/src/class0smsUInotifier.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,172 @@
+// Copyright (c) 2007-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 <ecom/ecom.h>
+#include <tmsvpackednotifierrequest.h>
+#include <ecom/implementationproxy.h>
+#include <gsmubuf.h>
+#include <s32mem.h>
+#include <e32base.h>
+#include "class0smsUInotifier.h"
+
+/* UID of Class 0 SMS test notifier */
+const TUid KClass0SmsNotifierPluginUid  = {0x2000C382};
+const TUid KClass0SmsNotifierOutput 	= {0x2000C382};
+
+//class 0 SMS data will be writing to file
+_LIT(KTestClas0Sms, "\\logs\\testexecute\\class0sms.txt");
+
+EXPORT_C CArrayPtr<MEikSrvNotifierBase2>* NotifierArray()
+	{
+	CArrayPtrFlat<MEikSrvNotifierBase2>* subjects=NULL;
+	TRAPD( err, subjects=new (ELeave)CArrayPtrFlat<MEikSrvNotifierBase2>(1) );
+	if( err == KErrNone )
+		{
+		TRAP( err, subjects->AppendL( CClass0SmsUINotifier::NewL() ) );
+		return(subjects);
+		}
+	else
+		{
+		return NULL;
+		}
+	}
+
+CClass0SmsUINotifier* CClass0SmsUINotifier::NewL()
+	{
+	CClass0SmsUINotifier* self=new (ELeave) CClass0SmsUINotifier();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+void CClass0SmsUINotifier::ConstructL()
+	{
+	}
+
+CClass0SmsUINotifier::~CClass0SmsUINotifier()
+	{
+	REComSession::FinalClose();
+	}
+
+CClass0SmsUINotifier::CClass0SmsUINotifier()
+	{
+	iInfo.iUid      = KClass0SmsNotifierPluginUid;
+	iInfo.iChannel  = KClass0SmsNotifierOutput;
+	iInfo.iPriority = ENotifierPriorityHigh;
+	}
+
+void CClass0SmsUINotifier::Release()
+	{
+	delete this;
+	}
+
+/**
+Called when a notifier is first loaded to allow any initial construction that is required.
+ */
+CClass0SmsUINotifier::TNotifierInfo CClass0SmsUINotifier::RegisterL()
+	{
+	return iInfo;
+	}
+
+CClass0SmsUINotifier::TNotifierInfo CClass0SmsUINotifier::Info() const
+	{
+	return iInfo;
+	}
+	
+/**
+The notifier has been deactivated so resources can be freed and outstanding messages completed.
+ */
+void CClass0SmsUINotifier::Cancel()
+	{
+	}
+
+/**
+Start the Notifier with data aBuffer. 
+
+Not used for confirm notifiers
+*/
+TPtrC8 CClass0SmsUINotifier::StartL(const TDesC8& aBuffer)
+	{
+	CreateFile(aBuffer);
+	return KNullDesC8();
+	}
+	
+/**
+Start the notifier with data aBuffer. aMessage should be completed when the notifier is deactivated.
+
+May be called multiple times if more than one client starts the notifier. The notifier is immediately 
+responsible for completing aMessage.
+*/
+void CClass0SmsUINotifier::StartL(const TDesC8& aBuffer, TInt /*aReplySlot*/, const RMessagePtr2&  aMessage)
+	{
+	CreateFile(aBuffer);
+	aMessage.Complete(KErrNone);
+	}
+	
+/**
+Update a currently active notifier with data aBuffer.
+
+Not used for confirm notifiers
+*/
+TPtrC8 CClass0SmsUINotifier::UpdateL(const TDesC8& /*aBuffer*/)
+	{
+	User::Leave(KErrNotSupported);
+	return KNullDesC8();
+	}
+
+
+//Adding ECOM SUPPORT
+const TImplementationProxy ImplementationTable[] =
+	{
+	IMPLEMENTATION_PROXY_ENTRY(0x2000C612, NotifierArray)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+//write received class0sms data to file
+void CClass0SmsUINotifier::CreateFile(const TDesC8& aBuff)
+{
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+	
+	TInt startPos, endPos;
+	TBool isLastMessage = EFalse;
+	
+	RDesReadStream readStream(aBuff);
+	CleanupClosePushL (readStream);
+		
+	startPos = readStream.ReadInt32L();
+	endPos = readStream.ReadInt32L();
+	isLastMessage = readStream.ReadInt32L();
+	
+	TBuf<1000> smsMsg1;
+	readStream >> smsMsg1;
+		
+	RFile file;
+
+	TPtrC8 smsMsg(REINTERPRET_CAST(const TUint8*, smsMsg1.Ptr()), smsMsg1.Size()); 
+	User::LeaveIfError(file.Replace(fs, KTestClas0Sms, EFileShareAny | EFileWrite));
+	file.Write(smsMsg);
+	
+	file.Close();
+	CleanupStack::PopAndDestroy(&readStream);
+	CleanupStack::PopAndDestroy(&fs);
+}