imservices/ossprotocoladaptation/tsrc/ossadapmt/src/uscontextobserver.cpp
changeset 0 e6b17d312c8b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imservices/ossprotocoladaptation/tsrc/ossadapmt/src/uscontextobserver.cpp	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,753 @@
+/*
+* Copyright (c) 2007-2008 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: uscontextobserver.cpp
+*
+*/
+
+#include "uscontextobserver.h"
+
+#include <ximpidentity.h>
+#include <presenceinfofieldvaluetext.h>
+#include <presenceinfofieldvalueenum.h>
+#include <ximpstatus.h>
+#include <ximpcontextstateevent.h>
+#include <ximprequestcompleteevent.h>
+#include <presentitypresenceevent.h>
+#include <presentitygrouplistevent.h>
+#include <presentitygroupinfo.h>
+#include <presentitygroupcontentevent.h>
+#include <presentitygroupmemberinfo.h>
+#include <presencegrantrequestlistevent.h>
+#include <presenceblocklistevent.h>
+#include <presentitypresenceevent.h>
+#include <presencewatcherlistevent.h>
+#include "ossadapmt.h"
+#include <ximpdatasubscriptionstate.h>
+#include <presencewatcherinfo.h>
+#include "ximpcontextstate.h"
+#include <presenceinfo.h>
+#include <servicepresenceinfo.h>
+#include <devicepresenceinfo.h>
+#include <presencegrantrequestinfo.h>
+#include <presenceblockinfo.h>
+#include <presenceinfofieldcollection.h>
+#include <personpresenceinfo.h>
+#include <presenceinfofield.h>
+
+#include "imconversationevent.h"
+#include <searchevent.h>
+
+#include "imconversationinfo.h"
+#include <searchinfo.h>
+#include <searchkeysevent.h>
+#include <searchkeyinfo.h>
+
+#include <e32math.h>
+#include <f32file.h>
+#include <utf.h>
+// ============================ MEMBER FUNCTIONS ===============================
+
+// CONSTRUCTION
+CUSContextObserver* CUSContextObserver::NewLC()
+	{
+	CUSContextObserver* self = new ( ELeave ) CUSContextObserver();
+	CleanupStack::PushL ( self );
+	return self;
+	}
+
+
+CUSContextObserver::~CUSContextObserver()
+	{
+	}
+
+
+CUSContextObserver::CUSContextObserver()
+	{
+	}
+
+
+
+// ===========================================================================
+// PUBLIC FUNCTIONS
+// ===========================================================================
+//
+void CUSContextObserver::WaitOpToCompleteL ( const TXIMPRequestId& aOpToWait )
+	{
+	iReqToWait = aOpToWait;
+
+	iWait.Start();
+
+	}
+
+/*void CUSContextObserver::WaitCompleteL()
+ {
+ iWait.AsyncStop();
+ }*/
+
+// ===========================================================================
+// FROM MXIMPContextObserver
+// ===========================================================================
+//
+void CUSContextObserver::HandlePresenceContextEvent (
+    const MXIMPContext& /*aContext*/,
+    const MXIMPBase& aEvent )
+	{
+
+	TOssAdapMtLogger::Log ( _L ( "HandlePresenceContextEvent called" ) );
+
+	TInt32 eventId = aEvent.GetInterfaceId();
+
+	switch ( aEvent.GetInterfaceId() )
+		{
+			_LIT ( KDir, "EVENT_LOG" );  // here we hv to write a folder name in wch we want to create log file
+			_LIT ( KFile, "event.txt" );          //here we hv to write a file name in wch we want to log default path is  " c:/Logs/"
+
+		case MXIMPRequestCompleteEvent::KInterfaceId:
+				{
+				TOssAdapMtLogger::Log ( _L ( "CUSContextObserver::MXIMPRequestCompleteEvent() start" ) );
+
+				const MXIMPRequestCompleteEvent* complEvent =
+				    TXIMPGetInterface< const MXIMPRequestCompleteEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************BEGIN******************" ) );
+				_LIT ( KMsg, "Recvd RequestCompleteEvent " );         // here we hv to write message or text wch we want to write in log file
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, KMsg );
+
+				if ( iWait.IsStarted() && ( complEvent->RequestId() == iReqToWait ) )
+					{
+					iReqResult = complEvent->CompletionResult().ResultCode();
+					RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Error code for the request is %d " ), iReqResult );
+					iWait.AsyncStop();
+					}
+
+				TOssAdapMtLogger::Log ( _L ( "CUSContextObserver::MXIMPRequestCompleteEvent() end" ) );
+
+				break;
+				}
+
+		case MXIMPContextStateEvent::KInterfaceId:
+				{
+				const MXIMPContextStateEvent* ctxtStateEvent =
+				    TXIMPGetInterface< const MXIMPContextStateEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************BEGIN******************" ) );
+				_LIT ( KMsg, "Recvd PresenceContextStateEvent " );         // here we hv to write message or text wch we want to write in log file
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, KMsg );
+				const MXIMPStatus* fwStatus = ctxtStateEvent->StateChangeReason();
+				const MXIMPContextState& cState = ctxtStateEvent->ContextState();
+				MXIMPContextState::TState state = cState.ContextState();
+				break;
+				}
+
+		case MPresentityGroupListEvent::KInterfaceId:
+				{
+				const MPresentityGroupListEvent* groupListEvent =
+				    TXIMPGetInterface< const MPresentityGroupListEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+
+				TBuf<100> sdstate;
+				TBuf<100> ssstate;
+				_LIT ( Kna, "   Susbcription state is unavailable" );
+				_LIT ( Kava, "   Susbcription state is available" );
+				_LIT ( KDef, "   Susbcription state is ERROR" );
+
+				const  MXIMPDataSubscriptionState&  dstate = groupListEvent->DataSubscriptionState();
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						ssstate.Copy ( Kna );
+						break;
+
+					case 1:
+						ssstate.Copy ( Kava );
+						break;
+
+					default:
+						ssstate.Copy ( KDef );
+						break;
+					}
+
+				_LIT ( Kdna, "   Data state is unavailable" );
+
+				_LIT ( Kdava, "   Data state is available" );
+				_LIT ( KdDef, "   Data state is ERROR" );
+
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						sdstate.Copy ( Kdna );
+						break;
+
+					case 1:
+						sdstate.Copy ( Kdava );
+						break;
+
+					default:
+						sdstate.Copy ( KdDef );
+						break;
+					}
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************BEGIN******************" ) );
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Recvd PresentityGroupListEvent New:%d, Updt:%d, Disappeared:%d, Current:%d, SubscrState:%d, DataState:%d" ), groupListEvent->NewGroupsCount(), groupListEvent->UpdatedGroupsCount(), groupListEvent->DisappearedGroupsCount(), groupListEvent->CurrentGroupsCount(), dstate.SubscriptionState(), dstate.DataState() );//KMsg);
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, sdstate );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, ssstate );
+				break;
+				}
+
+
+		case MPresentityGroupContentEvent::KInterfaceId:
+				{
+				const MPresentityGroupContentEvent* groupContentEvent =
+				    TXIMPGetInterface< const MPresentityGroupContentEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+				TBuf<100> sdstate;
+				TBuf<100> ssstate;
+				_LIT ( Kna, "   Susbcription state is unavailable" );
+				_LIT ( Kava, "   Susbcription state is available" );
+				_LIT ( KDef, "   Susbcription state is ERROR" );
+
+				const MXIMPDataSubscriptionState&  dstate = groupContentEvent->DataSubscriptionState();
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						ssstate.Copy ( Kna );
+						break;
+
+					case 1:
+						ssstate.Copy ( Kava );
+						break;
+
+					default:
+						ssstate.Copy ( KDef );
+						break;
+					}
+
+				_LIT ( Kdna, "   Data state is unavailable" );
+
+				_LIT ( Kdava, "   Data state is available" );
+				_LIT ( KdDef, "   Data state is ERROR" );
+
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						sdstate.Copy ( Kdna );
+						break;
+
+					case 1:
+						sdstate.Copy ( Kdava );
+						break;
+
+					default:
+						sdstate.Copy ( KdDef );
+						break;
+					}
+
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************BEGIN******************" ) );
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Recvd PresentityGroupContentEvent New:%d, Updt:%d, Disappeared:%d, Current:%d, SubscrState:%d, DataState:%d" ), groupContentEvent->NewMembersCount(), groupContentEvent->UpdatedMembersCount(), groupContentEvent->DisappearedMembersCount(), groupContentEvent->CurrentMembersCount(), dstate.SubscriptionState(), dstate.DataState() );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, sdstate );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, ssstate );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, groupContentEvent->GroupId().Identity() );
+				// print the list contents
+
+				for ( TInt i = 0; i < groupContentEvent->CurrentMembersCount(); i++ )
+					{
+					const MPresentityGroupMemberInfo& gi = groupContentEvent->CurrentMember ( i );
+
+					RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Id and displayname for cur group member %d X" ), i );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.GroupMemberId().Identity() );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.GroupMemberDisplayName() );
+//     EUNIT_ASSERT_EQUALS_DESC( gi.GroupMemberId().Identity(), iContactid[i], "contact id's does'nt match");
+//     EUNIT_ASSERT_EQUALS_DESC( gi.GroupMemberDisplayName(), iNickname[i], "contact nickname  does'nt match");
+
+					}
+
+				// print the list contents
+				for ( TInt i = 0; i < groupContentEvent->NewMembersCount(); i++ )
+					{
+					const MPresentityGroupMemberInfo& gi = groupContentEvent->NewMember ( i );
+
+
+					RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Id and displayname for new group member %d X" ), i );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.GroupMemberId().Identity() );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.GroupMemberDisplayName() );
+//     EUNIT_ASSERT_EQUALS_DESC( gi.GroupMemberId().Identity(), iContactid[i], "contact id's does'nt match");
+//     EUNIT_ASSERT_EQUALS_DESC( gi.GroupMemberDisplayName(), iNickname[i], "contact nickname  does'nt match");
+					}
+
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************END*******************" ) );
+
+				break;
+				}
+
+		case MPresenceGrantRequestListEvent::KInterfaceId:
+				{
+				const MPresenceGrantRequestListEvent* grantreqEvent =
+				    TXIMPGetInterface< const MPresenceGrantRequestListEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+				TBuf<100> sdstate;
+				TBuf<100> ssstate;
+				_LIT ( Kna, "   Susbcription state is unavailable" );
+				_LIT ( Kava, "   Susbcription state is available" );
+				_LIT ( KDef, "   Susbcription state is ERROR" );
+
+				const  MXIMPDataSubscriptionState&  dstate = grantreqEvent->DataSubscriptionState();
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						ssstate.Copy ( Kna );
+						break;
+
+					case 1:
+						ssstate.Copy ( Kava );
+						break;
+
+					default:
+						ssstate.Copy ( KDef );
+						break;
+					}
+
+				_LIT ( Kdna, "   Data state is unavailable" );
+
+				_LIT ( Kdava, "   Data state is available" );
+				_LIT ( KdDef, "   Data state is ERROR" );
+
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						sdstate.Copy ( Kdna );
+						break;
+
+					case 1:
+						sdstate.Copy ( Kdava );
+						break;
+
+					default:
+						sdstate.Copy ( KdDef );
+						break;
+					}
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************BEGIN******************" ) );
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Recvd Presentity Grant event" ) );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, sdstate );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, ssstate );
+
+				TInt index = grantreqEvent->NewRequestsCount();
+
+				for ( TInt i = 0; i < index; i++ )
+					{
+					const MPresenceGrantRequestInfo& grantinfo = grantreqEvent->NewRequest ( i );
+
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, grantinfo.RequestorId().Identity() );
+					const TDesC16 dispname = grantinfo.RequestorDisplayName();
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, dispname );
+					}
+
+				index = grantreqEvent->CurrentRequestsCount();
+
+				for ( TInt i = 0; i < index; i++ )
+					{
+					const MPresenceGrantRequestInfo& grantinfo = grantreqEvent->CurrentRequest ( i );
+
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, grantinfo.RequestorId().Identity() );
+					const TDesC16 dispname = grantinfo.RequestorDisplayName();
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, dispname );
+					}
+
+				break;
+				}
+
+		case MPresenceBlockListEvent::KInterfaceId:
+				{
+				const MPresenceBlockListEvent* blockListEvent =
+				    TXIMPGetInterface< const MPresenceBlockListEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+				TBuf<100> sdstate;
+				TBuf<100> ssstate;
+				_LIT ( Kna, "   Susbcription state is unavailable" );
+				_LIT ( Kava, "   Susbcription state is available" );
+				_LIT ( KDef, "   Susbcription state is ERROR" );
+
+				const  MXIMPDataSubscriptionState&  dstate = blockListEvent->DataSubscriptionState();
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						ssstate.Copy ( Kna );
+						break;
+
+					case 1:
+						ssstate.Copy ( Kava );
+						break;
+
+					default:
+						ssstate.Copy ( KDef );
+						break;
+					}
+
+				_LIT ( Kdna, "   Data state is unavailable" );
+
+				_LIT ( Kdava, "   Data state is available" );
+				_LIT ( KdDef, "   Data state is ERROR" );
+
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						sdstate.Copy ( Kdna );
+						break;
+
+					case 1:
+						sdstate.Copy ( Kdava );
+						break;
+
+					default:
+						sdstate.Copy ( KdDef );
+						break;
+					}
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************BEGIN******************" ) );
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Recvd Presentity Grant event" ) );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, sdstate );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, ssstate );
+
+				TInt index = blockListEvent->NewBlocksCount();
+
+				for ( TInt i = 0; i < index; i++ )
+					{
+					const MPresenceBlockInfo& blockinfo = blockListEvent->NewBlock ( i );
+
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, blockinfo.BlockedEntityId().Identity() );
+					const TDesC16& dispname = blockinfo.BlockedEntityDisplayName();
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, dispname );
+					}
+
+				index = blockListEvent->CurrentBlocksCount();
+
+				for ( TInt i = 0; i < index; i++ )
+					{
+					const MPresenceBlockInfo& blockinfo = blockListEvent->CurrentBlock ( i );
+
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, blockinfo.BlockedEntityId().Identity() );
+					const TDesC16& dispname = blockinfo.BlockedEntityDisplayName();
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, dispname );
+					}
+
+				break;
+				}
+
+		case MPresentityPresenceEvent::KInterfaceId:
+				{
+				const MPresentityPresenceEvent* PresentityPresenceEvent =
+				    TXIMPGetInterface< const MPresentityPresenceEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+				TBuf<100> sdstate;
+				TBuf<100> ssstate;
+				_LIT ( Kna, "   Susbcription state is unavailable" );
+				_LIT ( Kava, "   Susbcription state is available" );
+				_LIT ( KDef, "   Susbcription state is ERROR" );
+
+				const  MXIMPDataSubscriptionState&  dstate = PresentityPresenceEvent->DataSubscriptionState();
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						ssstate.Copy ( Kna );
+						break;
+
+					case 1:
+						ssstate.Copy ( Kava );
+						break;
+
+					default:
+						ssstate.Copy ( KDef );
+						break;
+					}
+
+				_LIT ( Kdna, "   Data state is unavailable" );
+
+				_LIT ( Kdava, "   Data state is available" );
+				_LIT ( KdDef, "   Data state is ERROR" );
+
+
+				switch ( dstate.SubscriptionState() )
+					{
+
+					case 0:
+						sdstate.Copy ( Kdna );
+						break;
+
+					case 1:
+						sdstate.Copy ( Kdava );
+						break;
+
+					default:
+						sdstate.Copy ( KdDef );
+						break;
+					}
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************BEGIN******************" ) );
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Recvd Presentity PresenceEvent" ) );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, sdstate );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, ssstate );
+
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, PresentityPresenceEvent->PresentityId().Identity() );
+
+				const MPresenceInfo& pi = PresentityPresenceEvent->SubscribedPresence();
+				const MPersonPresenceInfo* ppi =  pi.PersonPresence();
+				const MPresenceInfoFieldCollection& presinf = ppi->Fields();
+				TInt index = presinf.FieldCount();
+				// const MXIMPBase base;
+
+				for ( TInt i = 0; i < index; i++ )
+					{
+					const MPresenceInfoField& infofield = presinf.FieldAt ( i );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, infofield.FieldType() );
+					const MPresenceInfoFieldValueText* PresentityPresencestatus =
+					    TXIMPGetInterface< const MPresenceInfoFieldValueText >::From ( infofield.FieldValue(),
+					            MXIMPBase::EPanicIfUnknown );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, PresentityPresencestatus->TextValue() );
+					//          EUNIT_ASSERT_EQUALS_DESC(PresentityPresencestatus->TextValue(), iPersonpresattributes[i], "statustext does'nt match");
+					}
+
+				index = pi.ServicePresenceCount();
+
+				for ( TInt i = 0; i < index; i++ )
+					{
+					const MServicePresenceInfo& servicePresinfo = pi.ServicePresenceAt ( i );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, servicePresinfo.ServiceType() );
+//            EUNIT_ASSERT_EQUALS_DESC(servicePresinfo.ServiceType(), servctype, "service does'nt match");
+					const MPresenceInfoFieldCollection& fields = servicePresinfo.Fields();
+
+					for ( TInt j = 0; j < fields.FieldCount(); j++ )
+						{
+						const MPresenceInfoField& infofield = fields.FieldAt ( j );
+						RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, infofield.FieldType() );
+						const MPresenceInfoFieldValueText* Presenceavailability =
+						    TXIMPGetInterface< const MPresenceInfoFieldValueText >::From ( infofield.FieldValue(),
+						            MXIMPBase::EPanicIfUnknown );
+
+//               EUNIT_ASSERT_EQUALS_DESC(Presenceavailability->TextValue(), _L("OPEN") , "Comm capability  does'nt match");
+						RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, Presenceavailability->TextValue() );
+						}
+					}
+
+				index = pi.DevicePresenceCount();
+
+				for ( TInt i = 0; i < index; i++ )
+					{
+					const MDevicePresenceInfo& DevicePresinfo = pi.DevicePresenceAt ( i );
+					const TPtrC8 devicename = DevicePresinfo.DeviceName();
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, DevicePresinfo.DeviceName() );
+					const MPresenceInfoFieldCollection& fields = DevicePresinfo.Fields();
+					TInt fieldcount = fields.FieldCount();
+
+					for ( TInt j = 0; j < fieldcount; j++ )
+						{
+						const MPresenceInfoField& infofield = fields.FieldAt ( j );
+						const TDesC8* fieldtype = & ( infofield.FieldType() );
+						RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, *fieldtype );
+						const MXIMPBase& base = infofield.FieldValue();
+						const MPresenceInfoFieldValueText* Presentityvalue =
+						    TXIMPGetInterface< const MPresenceInfoFieldValueText >::From ( infofield.FieldValue(),
+						            MXIMPBase::EPanicIfUnknown );
+
+						RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, Presentityvalue->TextValue() );
+//               EUNIT_ASSERT_EQUALS_DESC(Presentityvalue->TextValue(), clienttype, "Clienttype does'nt match");
+						}
+
+
+					}
+
+				_LIT ( KMsg, " presentity presence event  is getting " );         // here we hv to write message or text wch we want to write in log file
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, KMsg );
+				break;
+				}
+
+		case MPresenceWatcherListEvent::KInterfaceId:
+				{
+				const MPresenceWatcherListEvent* watcherListEvent =
+				    TXIMPGetInterface< const MPresenceWatcherListEvent >::From ( aEvent,
+				            MXIMPBase::EPanicIfUnknown );
+				TBuf<100> sdstate;
+				TBuf<100> ssstate;
+			
+				const  MXIMPDataSubscriptionState&  dstate = watcherListEvent->DataSubscriptionState();
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Recvd watcher event" ) );
+				// print the list contents
+
+				for ( TInt i = 0; i < watcherListEvent->CurrentWatchersCount(); i++ )
+					{
+					const MPresenceWatcherInfo& gi = watcherListEvent->CurrentWatcher ( i );
+
+					gid[i].Copy ( gi.WatcherId().Identity() );
+					RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Id and displayname for cur watcher group %d X" ), i );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.WatcherId().Identity() );
+//             EUNIT_ASSERT_EQUALS_DESC(gi.WatcherId().Identity(), KContact1, "watcher does'nt match");
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.WatcherDisplayName() );
+					//  EUNIT_ASSERT_EQUALS_DESC(gi.WatcherDisplayName(), KNickname1, "Devicename does'nt match");
+					}
+
+				gidcount = watcherListEvent->CurrentWatchersCount();
+
+				// print the list contents
+
+				for ( TInt i = 0; i < watcherListEvent->NewWatchersCount(); i++ )
+					{
+					const MPresenceWatcherInfo& gi = watcherListEvent->NewWatcher ( i );
+					gid[i].Copy ( gi.WatcherId().Identity() );
+					RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Id and displayname for new group %d X" ), i );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.WatcherId().Identity() );
+//             EUNIT_ASSERT_EQUALS_DESC(gi.WatcherId().Identity(), KContact1, "watcher does'nt match");
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, gi.WatcherDisplayName() );
+					// EUNIT_ASSERT_EQUALS_DESC(gi.WatcherDisplayName(), KNickname1, "Devicename does'nt match");
+					}
+
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "*************END*******************" ) );
+
+				gidcount = watcherListEvent->NewWatchersCount();
+
+				break;
+				}
+
+		case MImConversationEvent::KInterfaceId:
+				{
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "Recvd conversation event" ) );
+
+				const MImConversationEvent* convEvent =
+				    TXIMPGetInterface< const MImConversationEvent >::From
+				    ( aEvent, MXIMPBase::EPanicIfUnknown );
+				TInt count = convEvent->NewTextMessageCount();
+				const MImConversationInfo& convInfo = convEvent->NewTextMessage ( 0 );
+				const MXIMPIdentity& identity = convInfo.MessageId();
+				const TDesC16& msg = convInfo.TextMessage();
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "message is" ) );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, convInfo.TextMessage() );
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, convInfo.MessageId().Identity() );
+
+				/*  const MDesCArray& array= convInfo.RecipientL();
+				  TPtrC sender=array.MdcaPoint(0);*/
+				break;
+				}
+		case MSearchEvent::KInterfaceId:
+				{
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "search event"));
+				const MSearchEvent* srchEvent = 
+				TXIMPGetInterface< const MSearchEvent >::From
+										(aEvent, MXIMPBase::EPanicIfUnknown);	
+				TInt count=	srchEvent->SearchResultCount();
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend,_L("result count  :%d "),count);
+				RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, srchEvent->SearchId().Identity() );
+				
+				TInt64 radn;
+				TInt random = Math::Rand( radn );
+				
+				for(TInt i=0;i<count;++i)
+					{
+					const MSearchInfo& info=srchEvent->SearchResult(i);
+					RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend,_L("Result No:%d "),i);
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, info.GetFieldInfo(EFirstName) );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, info.GetFieldInfo(ELastName) );
+					RFileLogger::Write ( KDir, KFile, EFileLoggingModeAppend, info.GetFieldInfo(EEmailAddress) );
+					//take a random contact
+					if ( i == random % count ) 
+						{
+						
+						RFs fs;
+						RFile file;
+						TBuf8<100> buf;
+						User::LeaveIfError( fs.Connect() );
+						User::LeaveIfError( file.Replace( fs, 
+									KAddContactFileName, EFileWrite ) );
+									
+						CnvUtfConverter::ConvertFromUnicodeToUtf8( buf, 
+											info.GetFieldInfo(EEmailAddress) ); 
+						file.Write( buf );
+						file.Close();
+						fs.Close();
+							
+						}
+					}
+				RFileLogger::WriteFormat ( KDir, KFile, EFileLoggingModeAppend, _L ( "search event processed"));	
+				break;	
+				}
+				
+		case MSearchKeysEvent::KInterfaceId:
+            {
+            const MSearchKeysEvent* srchEvent = 
+                        TXIMPGetInterface< const MSearchKeysEvent >::From
+                                                (aEvent, MXIMPBase::EPanicIfUnknown);
+            TInt count= srchEvent->InfoCount();
+            
+            for(TInt a=0; a < count; a++)
+                {
+                const MSearchKeyInfo& keyInfo=srchEvent->SearchKeyInfo( a);
+                switch(keyInfo.Type())
+                    {
+                    case EKey:
+                        {
+                        TInt key= keyInfo.Key();
+                        }
+                        break;
+                       
+                    case ELabel:
+                        {
+                        TPtrC label = keyInfo.Label();
+                        break;
+                        }
+                	}
+                 }
+            
+            break;
+            }
+		
+		default:
+				{
+				break;
+				}
+		}
+	}
+
+
+// end of file
+
+
+
+
+
+