imservices/ossprotocoladaptation/src/waittimer.cpp
changeset 46 860cd8a5168c
parent 35 085f765766a0
--- a/imservices/ossprotocoladaptation/src/waittimer.cpp	Fri May 28 18:27:27 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1150 +0,0 @@
-/*
-* 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:  oss protocol plugin im features
-*
-*/
-
-
-#include "waittimer.h"
-#include "cosssenddataoperation.h"
-#include "msgliterals.h"
-#include "msg_enums.h"
-#include <stdlib.h>
-#include "ossprotocloliterals.h"
-#include "stringutils.h"
-#include "ossadappanics.h"
-#include <glib/gprintf.h>
-#include <string.h>
-#include <sys/msg.h>
-#include "ossprotocolpluginlogger.h"
-#include <ximpobjectfactory.h>
-#include "mossprotocolconnectionmanager.h"
-#include "cossprotocolconnectionmanager.h"
-#include <ximpprotocolconnectionhost.h>
-#include <ximpstatus.h>
-#include <math.h>
-#include <avabilitytext.h>
-#include "ossprotocoladaptutils.h"
-// CONSTANTS
-const TInt KOpIdInitvalue = 1000;
-
-#define KTimerInterval 50000
-
-#define ONE_K_OPENC_FIX 1020
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CWaitTimer::COSSProtocolImFeatures()
-// ---------------------------------------------------------------------------
-//
-CWaitTimer::CWaitTimer (MOSSProtocolConnectionManager& aConnMan) :
-		CActive ( EPriorityHigh ), // Standard priority
-		iOpidIterator ( KOpIdInitvalue ), iOpId ( 5 ),iConnMan ( aConnMan ),
-		iResponseMsgQCreated(EFalse),iServerDisconnected(EFalse),
-		iFetchingStep(EDataFetchingStep1) // -2 for fetching all three  types of contacts
-	{
-	CActiveScheduler::Add ( this ); // Add to scheduler
-	}
-
-
-// ---------------------------------------------------------------------------
-// CWaitTimer::NewL()
-// ---------------------------------------------------------------------------
-//
-CWaitTimer* CWaitTimer::NewL (MOSSProtocolConnectionManager& aConnMan)
-	{
-	CWaitTimer* self = new ( ELeave ) CWaitTimer (aConnMan);
-	CleanupStack::PushL ( self );
-	self->ConstructL ();
-	CleanupStack::Pop (); // self;
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// CWaitTimer::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CWaitTimer::ConstructL()
-	{
-	User::LeaveIfError( iTimer.CreateLocal() );
-	}
-
-// ---------------------------------------------------------------------------
-// CWaitTimer::~CWaitTimer()
-// ---------------------------------------------------------------------------
-//
-CWaitTimer::~CWaitTimer()
-	{
-	LOGGER ( TXT ( "CWaitTimer::~CWaitTimer  start" ) );
-	TInt error = 0;
-	MsgQDelete ( REQUEST_QUEUE, &error );
-	MsgQDelete ( RESPONSE_QUEUE, &error );
-    iIncomingData.ResetAndDestroy();
-    iIncomingMsg.ResetAndDestroy();
-    iIncomingPres.ResetAndDestroy();
-	iIncomingServerError.ResetAndDestroy();	
-    iAddNotification.ResetAndDestroy();
-	if (iIncReqStatus)
-        {
-        User::RequestComplete( iIncReqStatus, KErrCancel );
-        iIncReqStatus = NULL;
-        }
- 	if (iIncMsgReqStatus)
-        {
-        User::RequestComplete( iIncMsgReqStatus, KErrCancel );
-        iIncMsgReqStatus = NULL;
-        }     
-    if (iIncPresReqStatus)
-        {
-        User::RequestComplete( iIncPresReqStatus, KErrCancel );
-        iIncPresReqStatus = NULL;
-        }        
-    if (iIncAddReqStatus)
-        {
-        User::RequestComplete( iIncAddReqStatus, KErrCancel );
-        iIncAddReqStatus = NULL;
-        }        
-    CancelContactsChangeListening();
-	Cancel (); // Cancel any request, if outstanding
-	iTimer.Close (); // Destroy the RTimer object
-	iOperations.ResetAndDestroy();
-	iSearchElements.ResetAndDestroy(); 
-	iContactChangeList.ResetAndDestroy();
-	LOGGER ( TXT ( "CWaitTimer::~CWaitTimer  end" ) );
-	
-	}
-
-// ---------------------------------------------------------------------------
-// CWaitTimer::DoCancel()
-// ---------------------------------------------------------------------------
-//
-void CWaitTimer::DoCancel()
-	{
-	iTimer.Cancel ();
-	}
-
-// ----------------------------------------------------------------------------
-// CWaitTimer::IncreaseOpId
-// ----------------------------------------------------------------------------
-void CWaitTimer::IncreaseOpId( )
-	{
-
-	iOpId++;
-
-	}
-
-
-// ----------------------------------------------------------------------------
-// CWaitTimer::GetOpId
-// ----------------------------------------------------------------------------
-TInt CWaitTimer::GetOpId( )
-	{
-
-	return iOpId;
-	}
-// ----------------------------------------------------------------------------
-// CWaitTimer::IsFetchingContinue
-// ----------------------------------------------------------------------------
-TInt CWaitTimer::IsFetchingContinue( )
-	{
-
-	return iFetchingContinue;
-
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::SendDataL()
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::SendDataL ( TRequestStatus& aStatus, char* msg, TInt nBytes )
-	{
-	int result;
-	int err = 0;
-	int timeout = NO_WAIT;
-	LOGGER ( TXT ( "CWaitTimer::SendData  start" ) );
-	// allocate slot in array by adding NULL pointer and removing it
-	iOperations.AppendL ( NULL );
-	iOperations.Remove ( iOperations.Count() - 1 );
-	COssSendDataOperation* operation =
-	    COssSendDataOperation::NewLC();
-	operation->SetIds ( iOpId, iOpidIterator++ );
-	iOperations.Append ( operation );
-	CleanupStack::Pop ( operation ); // operation
-	// now it is safe to set request status
-	operation->SetRequestStatus ( aStatus );
-	aStatus = KRequestPending;
-	/* Try to Create queueOne
-	*/
-    message_hdr_req* msgHdr = ( message_hdr_req* ) msg;
-    result = MsgQCreate ( REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err );
-    User::LeaveIfError ( result );
-    /* Send Message to queueOne */
-    if ( msgHdr->message_type == EUpdateOwnAvtar )
-        {
-        TInt header_size = sizeof( message_hdr_req );
-        char* one_pdu = ( char* ) User::AllocLC ( ONE_K_OPENC_FIX );
-        //run a loop for rest of the data and keep track of the case of nBytes being 
-        //multiple of 1020 - sizeof(msghdr) and it being not
-        //Amount of payload that can be sent
-        TInt single_read = ONE_K_OPENC_FIX - header_size;
-        //Data recieved from PublishOwnPresenceL has message header at begining
-        TInt actual_data = nBytes - header_size;
-        //No of packets needed to send the image data
-        TInt total_packets = (TInt)ceil( ( double ) ( actual_data ) / single_read );
-        //This offset moves thru the msg pointer
-        TInt navigate_offset = header_size;
-        message_hdr_req msg_hdr;
-        memset( (void*)&msg_hdr, '\0', header_size );
-        msg_hdr.message_type = EUpdateOwnAvtar;
-        for ( TInt i = 0; i < total_packets; i++ )
-            {
-            //till the last packet size_tobe_sent will be ONE_K_OPENC_FIX
-            //last packet data is actual_data % single_read if less than single_read else ONE_K_OPENC_FIX
-            TInt size_tobe_sent = ( i < total_packets - 1 ) ? ONE_K_OPENC_FIX : 
-            ( actual_data % single_read ? 
-                actual_data % single_read  + header_size : ONE_K_OPENC_FIX );
-
-            if ( i < total_packets - 1 )
-                {
-                msg_hdr.continue_flag = 1;
-                }
-            else 
-                {
-                msg_hdr.continue_flag = 0;
-                }
-
-            //memcpy ( msg + header_size , msg + navigate_offset, size_tobe_sent - header_size );
-            memcpy( one_pdu , &msg_hdr, header_size );
-            memcpy( one_pdu + header_size, msg + navigate_offset, size_tobe_sent - header_size );
-            result = MsgQSend ( REQUEST_QUEUE, one_pdu, size_tobe_sent, 
-                    MSG_PRI_NORMAL, timeout, &err );
-            User::LeaveIfError ( result );
-            navigate_offset += single_read;
-            }
-        CleanupStack::PopAndDestroy( one_pdu );
-        one_pdu = NULL;
-        }
-    else
-        {
-        result = MsgQSend ( REQUEST_QUEUE, msg, nBytes, MSG_PRI_NORMAL, timeout, &err );
-
-        User::LeaveIfError ( result );
-        }
-	LOGGER ( TXT ( "CWaitTimer::SendData  end" ) );
-
-	return iOpId;
-
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::ListenConatcsChange()  //contacts
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::ListenContactsChange ( TRequestStatus& aStatus )
-	{
-	LOGGER ( TXT ( "CWaitTimer::ListenContactsChange Start" ) );
-
-	if ( !iContactsChangeStatus )
-		{
-		iContactsChangeStatus = &aStatus;
-		aStatus = KRequestPending;
-		}
-	LOGGER ( TXT ( "CWaitTimer::ListenContactsChange End" ) );	
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::CancelListening()
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::CancelContactsChangeListening()
-	{
-	LOGGER ( TXT ( "CWaitTimer::CancelContactsChangeListening Start" ) );
-
-	if ( iContactsChangeStatus )
-		{
-		User::RequestComplete ( iContactsChangeStatus, KErrCancel );
-		iContactsChangeStatus = NULL;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::CancelContactsChangeListening End" ) );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::ListenIncomingData()  //contacts
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::ListenIncomingData ( TRequestStatus& aStatus )
-	{
-	LOGGER ( TXT ( "CWaitTimer::ListenIncomingData Start" ) );
-
-	if ( !iIncReqStatus )
-		{
-		iIncReqStatus = &aStatus;
-		aStatus = KRequestPending;
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::IncomingDataCount()  //contacts
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::IncomingDataCount()
-	{
-	LOGGER ( TXT ( "CWaitTimer::IncomingDataCount Start" ) );
-
-	return iIncomingData.Count();
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::SearchDataCount()  //Searched data
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::SearchDataCount()
-	{
-	return iSearchElements.Count();
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::ContactsChangeResponseCount()  //Searched data
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::ContactsChangeResponseCount()
-	{
-	return iContactChangeList.Count();
-	}	
-// -----------------------------------------------------------------------------
-// CWaitTimer::CancelListening()
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::CancelListening()
-	{
-	LOGGER ( TXT ( "CWaitTimer::CancelListening Start" ) );
-
-	if ( iIncReqStatus )
-		{
-		User::RequestComplete ( iIncReqStatus, KErrCancel );
-		iIncReqStatus = NULL;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::CancelListening End" ) );
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::ListenIncomingMsg()  // messages
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::ListenIncomingMsg ( TRequestStatus& aStatus )
-	{
-	LOGGER ( TXT ( "CWaitTimer::ListenIncomingMsg Start" ) );
-
-	if ( !iIncMsgReqStatus )
-		{
-		iIncMsgReqStatus = &aStatus;
-		aStatus = KRequestPending;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::ListenIncomingMsg End Count is %d" ), iIncomingMsg.Count() );
-
-	return iIncomingMsg.Count();
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::ListenIncomingPresenceL()  // presence notifications
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::ListenIncomingPresence ( TRequestStatus& aStatus )
-	{
-	LOGGER ( TXT ( "CWaitTimer::ListenIncomingPresence Start" ) );
-
-	if ( !iIncPresReqStatus )
-		{
-		iIncPresReqStatus = &aStatus;
-		aStatus = KRequestPending;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::ListenIncomingPresence End Count is %d" ), iIncomingPres.Count() );
-
-	return iIncomingPres.Count();
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::ListenAddNotification()  // Add contact notifications
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::ListenAddNotification ( TRequestStatus& aStatus )
-	{
-	LOGGER ( TXT ( "CWaitTimer::ListenAddNotification Start" ) );
-
-	if ( !iIncAddReqStatus )
-		{
-		iIncAddReqStatus = &aStatus;
-		aStatus = KRequestPending;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::ListenAddNotification End Count is %d" ), iAddNotification.Count() );
-
-	return iAddNotification.Count();
-	}	
-// -----------------------------------------------------------------------------
-// CWaitTimer::ListenIncomingServerError()  // presence notifications
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::ListenIncomingServerError ( TRequestStatus& aStatus )
-	{
-	LOGGER ( TXT ( "CWaitTimer::ListenIncomingServerError Start" ) );
-
-	if ( !iIncErrorReqStatus )
-		{
-		iIncErrorReqStatus = &aStatus;
-		aStatus = KRequestPending;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::ListenIncomingServerError End Count is %d" ), iIncomingServerError.Count() );
-
-	return iIncomingServerError.Count();
-	}
-// CWaitTimer::CancelListeningMsg()
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::CancelListeningMsg()
-	{
-	LOGGER ( TXT ( "CWaitTimer::CancelListening Start" ) );
-
-	if ( iIncMsgReqStatus )
-		{
-		User::RequestComplete ( iIncMsgReqStatus, KErrCancel );
-		iIncMsgReqStatus = NULL;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::CancelListening End" ) );
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::CancelListeningPres()
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::CancelListeningPres()
-	{
-	LOGGER ( TXT ( "CWaitTimer::CancelListeningPres Start" ) );
-
-	if ( iIncPresReqStatus )
-		{
-		User::RequestComplete ( iIncPresReqStatus, KErrCancel );
-		iIncPresReqStatus = NULL;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::CancelListeningPres End" ) );
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::CancelListeningAddNotication()
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::CancelListeningAddNotication()
-	{
-	LOGGER ( TXT ( "CWaitTimer::CancelListeningAddNotication Start" ) );
-
-	if ( iIncAddReqStatus )
-		{
-		User::RequestComplete ( iIncAddReqStatus, KErrCancel );
-		iIncAddReqStatus = NULL;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::CancelListeningAddNotication End" ) );
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::CancelListeningServerErrors()
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::CancelListeningServerErrors()
-	{
-	LOGGER ( TXT ( "CWaitTimer::CancelListeningServerErrors Start" ) );
-
-	if ( iIncErrorReqStatus )
-		{
-		User::RequestComplete ( iIncErrorReqStatus, KErrCancel );
-		iIncErrorReqStatus = NULL;
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::CancelListeningServerErrors End" ) );
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::StartListeningL()
-// -----------------------------------------------------------------------------
-//
-
-void CWaitTimer::StartListeningL()
-	{
-	LOGGER ( TXT ( "CWaitTimer::StartListening Start" ) );
-//	Cancel (); // Cancel any request, just to be sure
-//	iProperty.Subscribe(iStatus);
-	iTimer.After ( iStatus, KTimerInterval );
-	SetActive (); // Tell scheduler a request is active
-	LOGGER ( TXT ( "CWaitTimer::StartListening End" ) );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::RunL()
-// -----------------------------------------------------------------------------
-//
-
-void CWaitTimer::RunL()
-	{
-
-	int timeout = IPC_NOWAIT; //TIME_OUT;
-	int err = 0;
-	int status = 0;
-	int size_msg = sizeof ( message_hdr_resp );
-	TBool msgreadcontinue = EFalse;
-	message_hdr_resp* msg_struct = NULL;
-	char* rmsg = NULL;
-	
-	if( !iResponseMsgQCreated )
-		{
-		status = MsgQCreate ( RESPONSE_QUEUE, MAX_MSG_Q_SIZE, MSG_Q_FIFO, &err );
-		iResponseMsgQCreated = ETrue;
-		}
-
-	if(-1 == status)
-		{
-		LOGGER ( TXT ( "CWaitTimer::leave " ) );  
-		User::Leave( status );
-		}	
-    do
-       {
-        rmsg = ( char* ) User::AllocLC ( MAX_MSG_SIZE );
-
-	  // Receive Message from queueTwo
-    
-        status = MsgQReceive ( RESPONSE_QUEUE, rmsg, MAX_MSG_SIZE, timeout, &err );
-        User::LeaveIfError ( err );
-        //size should be atleast size of message_hdr_resp
-        if( -1 == status )
-            {
-		    CleanupStack::PopAndDestroy ( rmsg );
-		    }
-
-        if ( status >= size_msg )
-  		    {
-  		    LOGGER ( TXT ( "CWaitTimer::MsgQReceive responce recvd" ) );
-		    msg_struct = ( message_hdr_resp* )rmsg ;
-		    LOGGER ( TXT ( "CWaitTimer::data recvd of type %d" ), msg_struct->hdr_req.message_type );
-		
-		    switch( msg_struct->hdr_req.message_type )
-			      {
-			      TInt operationindex;
-		          case EText_Message_Receive:
-				      {
-				      LOGGER ( TXT ( "CWaitTimer::EText_Message_Receive" ) );
-				      // complete prfw request
-				      iIncomingMsg.AppendL ( rmsg );
-				      if ( iIncMsgReqStatus )
-				          {
-				          User::RequestComplete ( iIncMsgReqStatus, KErrNone );
-				          iIncMsgReqStatus = NULL;
-				          }
-				      CleanupStack::Pop( rmsg );
-				      break;
-				      }
-		          case EPresenceNotification:
-		              {
-
-        			  LOGGER ( TXT ( "CWaitTimer::EPresence_Notification_Received" ) );
-            	      // complete prfw request
-            		  //	iIncomingPres.AppendL ( rmsg );
-            		  iIncomingPres.Insert (rmsg,0);
-            		  if ( iIncPresReqStatus )
-            		      {
-            		      User::RequestComplete ( iIncPresReqStatus, KErrNone );
-            		      iIncPresReqStatus = NULL;
-            		      }
-            		  CleanupStack::Pop( rmsg );
-            		  break;
-		              }
-		          case ETrying_To_Add_Contact_Publish:
-		              {
-		              LOGGER ( TXT ( "CWaitTimer::ETrying_To_Add_Contact" ) );
-		              // complete prfw request
-		              iAddNotification.AppendL ( rmsg );
-		              if ( iIncAddReqStatus )
-		                  {
-		                  User::RequestComplete ( iIncAddReqStatus, KErrNone );
-		                  iIncAddReqStatus = NULL;
-		                  }
-		              CleanupStack::Pop( rmsg );
-		              break;
-		              }
-		        case ESubscribe_Remote_Pending:
-		        case ETrying_To_Add_Contact_Known:
-		            {
-		            LOGGER ( TXT ( "CWaitTimer::Sync of contacts state" ) );
-		            iContactChangeList.Append(rmsg);
-		            if ( iContactsChangeStatus )
-		                {
-		                User::RequestComplete ( iContactsChangeStatus, KErrNone );
-		                iContactsChangeStatus = NULL;
-		                }
-		            CleanupStack::Pop( rmsg );
-		            break;    
-		            }
-
-		        case ESubscribe_RP_Accepted:
-		            {
-		            CleanupStack::PopAndDestroy( rmsg );
-		            break;    
-		            }
-		       case EPublish_RP_Accepted:
-		            {
-		            CleanupStack::PopAndDestroy( rmsg );
-		            break;
-		            }	   
-		        case EPublish_Removed_Or_Rejected:
-		            {
-		            LOGGER ( TXT ( "CWaitTimer::Sync of contacts state" ) );
-		            iContactChangeList.Append(rmsg);
-		            if ( iContactsChangeStatus )
-		                {
-		                User::RequestComplete ( iContactsChangeStatus, KErrNone );
-		                iContactsChangeStatus = NULL;
-		                }
-		            CleanupStack::Pop( rmsg );
-		            break;    
-		            }
-		          case ESubscribe_Removed_Or_Rejected:
-		              {
-		              LOGGER ( TXT ( "CWaitTimer::Sync of contacts state" ) );
-		              iContactChangeList.Append(rmsg);
-		              if ( iContactsChangeStatus )
-		                  {
-		                  User::RequestComplete ( iContactsChangeStatus, KErrNone );
-		                  iContactsChangeStatus = NULL;
-		                  }
-		              CleanupStack::Pop( rmsg );
-		              break;	
-		              }
-    			case ECurrent_Member_Contacts:
-    				{
-    				iFetchingContinue = EFalse;
-    				// complete ximpfw request
-    				iIncomingData.AppendL ( rmsg );
-    				if(msg_struct->continue_flag == 1)
-    					{
-    					iFetchingContinue = ETrue;
-    					}
-    				else
-    					{
-    					iFetchingStep++ ;	// move to next step
-    					}
-					
-    				if ( iIncReqStatus && iFetchingStep == EDataFetchComplete )// complete request only if step is 1
-    					{
-    					User::RequestComplete ( iIncReqStatus, KErrNone );
-    					iIncReqStatus = NULL;
-    					}
-    				CleanupStack::Pop( rmsg );	
-    				break;	
-    				}
-    			case ELocal_Pending_Contacts:
-    				{
-    				LOGGER ( TXT ( "CWaitTimer::ELocal_Pending_Contacts" ) );
-                    // complete prfw request
-    				iAddNotification.AppendL ( rmsg );  
-    				if ( iIncAddReqStatus )
-    				    {
-                        LOGGER ( TXT ( "CWaitTimer::ELocal_Pending_Contacts" ) );			                    
-                        User::RequestComplete ( iIncAddReqStatus, KErrNone );
-                        iIncAddReqStatus = NULL;
-                        }
-                    CleanupStack::Pop( rmsg );                
-    				break;	
-    				}
-    			case ERemote_Pending_Contacts:
-        			{
-        			LOGGER ( TXT ( "CWaitTimer::ECurrent_Member_Contacts" ) );
-        			iFetchingContinue = EFalse;
-        			// complete ximpfw request
-        			iIncomingData.AppendL ( rmsg );
-        			PendingPresenceContactsL(rmsg);
-        			if(msg_struct->continue_flag == 1)
-        				{
-        				iFetchingContinue = ETrue;
-        				}
-        			else
-        				{
-        				iFetchingStep++ ;	// move next step
-        				}	
-        			if ( iIncReqStatus && iFetchingStep == EDataFetchComplete) // complete request only if step is 1
-        				{
-        				User::RequestComplete ( iIncReqStatus, KErrNone );
-        				iIncReqStatus = NULL;
-        				}
-        			CleanupStack::Pop( rmsg );
-        			break;
-        			}
-    			case ESend_Error:
-    				{
-    				LOGGER ( TXT ( "CWaitTimer::ESend_Error" ) );
-    				// complete ximpfw request
-    				iIncomingServerError.AppendL ( rmsg );
-    				if ( iIncErrorReqStatus )
-    					{
-    					User::RequestComplete ( iIncErrorReqStatus, KErrNone );
-    					iIncErrorReqStatus = NULL;
-    					}
-    				CleanupStack::Pop( rmsg );
-    				break;
-    				}
-    				
-    			case EUserEndGprs: 
-    			    LOGGER ( TXT ( "CWaitTimer::EUserCancelAccessPoint start" ) );
-    			    
-    			case EServer_DisConnect_Request:
-    				{
-    				iServerDisconnected = ETrue;
-    				LOGGER ( TXT ( "CWaitTimer::EServer_DisConnect_Request start" ) );
-    				CancelListeningMsg();
-    				CancelListening();
-    				CancelListeningPres();
-    				CancelListeningAddNotication();
-    				CancelListeningServerErrors();
-                    CancelContactsChangeListening();
-                
-    				MXIMPObjectFactory& prfwObjFact = iConnMan.HandleToHost().ObjectFactory();
-    				MXIMPStatus* status = prfwObjFact.NewStatusLC();// status
-    				status->SetResultCode( KErrDisconnected );
-    				iConnMan.HandleToHost().HandleConnectionTerminated( status );
- 					//IssueReleaseRequestL();//Release the connection
-    				CleanupStack::PopAndDestroy(); // status
-    				CleanupStack::Pop( rmsg );
-    				LOGGER ( TXT ( "CWaitTimer::EServer_DisConnect_Request end" ) );
-    				break;
-    				}
-    			case ESearch_State_Finished:
-    				{
-                    LOGGER ( TXT ( "CWaitTimer::ESearch_State_Finished" ) );
-    				operationindex = ( FindOperationL ( iOpId, COssSendDataOperation::OperationId ) );
-    
-    				if ( operationindex != KErrNotFound )
-    					{
-    					LOGGER ( TXT ( "CWaitTimer::FindOperationL found" ) );
-    					iOperations[ operationindex ]->SetResponse ( rmsg ); //ownership of rmsg is transferred
-    					iOperations[ operationindex ]->CompletedOperation ( KErrNone );
-    					}
-    				CleanupStack::Pop( rmsg );	
-    				break;	
-    				}
-    			case ESearch:
-    				{
-    				LOGGER ( TXT ( "CWaitTimer::ESearch" ) );
-    				if ( msg_struct->response != 0 ) 
-    					{
-    					LOGGER ( TXT ( "CWaitTimer::ESearch : Result" ) );
-                        char* pResponse = ( char* ) User::AllocLC ( status );
-    					memset ( pResponse, '\0', status );
-                        memcpy ( pResponse, rmsg, status );
-    					iSearchElements.AppendL ( pResponse );
-    				    CleanupStack::Pop( pResponse );
-    		            CleanupStack::PopAndDestroy( rmsg );
-    					}
-    				else
-    					{
-    					LOGGER ( TXT ( "CWaitTimer::ESearch: ERROR !!" ) );
-    					operationindex = ( FindOperationL ( iOpId, COssSendDataOperation::OperationId ) );
-    					iOperations[ operationindex ]->SetResponse ( rmsg ); //ownership of rmsg is transferred
-    				    iOperations[ operationindex ]->CompletedOperation ( KErrNotSupported );// for all errors
-    				    CleanupStack::Pop( rmsg );
-    				    // send  not supported, since the error mapping is  not done 	
-    					}	
-    				break;
-    				}
-    			case ESearch_Get_Keys:
-    				{
-    				
-    				LOGGER ( TXT ( "CWaitTimer::ESearch_Get_Keys" ) );
-    				operationindex = ( FindOperationL ( iOpId, COssSendDataOperation::OperationId ) );
-    
-    				if ( operationindex != KErrNotFound )
-    					{
-    					LOGGER ( TXT ( "CWaitTimer::FindOperationL found" ) );
-    					iOperations[ operationindex ]->SetResponse ( rmsg ); //ownership of rmsg is transferred
-    					iOperations[ operationindex ]->CompletedOperation ( KErrNone );
-    					}
-    				CleanupStack::Pop( rmsg );
-    				LOGGER ( TXT ( "CWaitTimer::ESearch_Get_Keys end" ) );
-    				break;
-    				}
-    			case ESearch_State_During :
-    				{
-    				LOGGER ( TXT ( "CWaitTimer::ESearch_State_During" ) );
-    				iSearchElements.ResetAndDestroy();
-    				CleanupStack::PopAndDestroy( rmsg );
-    				LOGGER ( TXT ( "CWaitTimer::ESearch_State_During end" ) );
-    				break;	
-    				}
-			case EUpdateOwnAvtar :	
-			    {
-                LOGGER ( TXT ( "CWaitTimer::EUpdateOwnAvtar" ) );
-                operationindex = ( FindOperationL ( iOpId, COssSendDataOperation::OperationId ) );
-
-                if ( operationindex != KErrNotFound )
-                    {
-                    LOGGER ( TXT ( "CWaitTimer::FindOperationL found" ) );
-
-                    iOperations[ operationindex ]->SetResponse ( rmsg ); //ownership of rmsg is transferred
-                    iOperations[ operationindex ]->CompletedOperation ( KErrNone );
-                    }
-                CleanupStack::Pop( rmsg );
-                break;
-			    }
-    			default:
-    					{
-    					LOGGER ( TXT ( "CWaitTimer::default start" ) );
-    					operationindex = ( FindOperationL ( iOpId, COssSendDataOperation::OperationId ) );
-    
-    					if ( operationindex != KErrNotFound )
-    						{
-    						LOGGER ( TXT ( "CWaitTimer::FindOperationL found" ) );
-    
-    						iOperations[ operationindex ]->SetResponse ( rmsg ); //ownership of rmsg is transferred
-    						iOperations[ operationindex ]->CompletedOperation ( KErrNone );
-    						}
-    					CleanupStack::Pop( rmsg );
-    					LOGGER ( TXT ( "CWaitTimer::default end" ) );
-    					break;
-    					}
-			      }
-
-		    TInt pendingMsgCount = MsgQCheck(RESPONSE_QUEUE, &err );
-		    if( pendingMsgCount > 0)
-		        {
-		        msgreadcontinue = ETrue;
-		        }
-		    else 
-		        {
-		        msgreadcontinue = EFalse;
-		        }
-		    LOGGER ( TXT ( "CWaitTimer::pendingMsgCount is %d" ), pendingMsgCount );   
-  		    }
-       }while( msgreadcontinue );
-		/*
-		// there is no pending message in msgqueue,
-		// set active and subscribe for incomming queue message
-		iProperty.Subscribe(iStatus);
-		SetActive(); // Tell scheduler a request is active	*/
-		
-		iTimer.After( iStatus, KTimerInterval );
-		SetActive();
-	}
-// -----------------------------------------------------------------------------
-// CWaitTimer::PendingPresenceContactsL()
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::PendingPresenceContactsL(char* aRmessage)
-    {
-    char* prmsg = NULL;
-    prmsg = aRmessage;
-    HBufC16 *contactName = NULL;
-    HBufC* name = NULL;
-    int len = 0;
-    if( aRmessage )
-        {
-        prmsg += sizeof ( message_hdr_resp );
-        MPresenceBuddyInfo2* buddyPresInfo = MPresenceBuddyInfo2::NewLC();
-   
-        MPresenceCacheWriter2* presenceCacheWriter = MPresenceCacheWriter2::CreateWriterL();
-        CleanupDeletePushL(presenceCacheWriter);
-        while(1)
-            {
-            len = strlen(prmsg) + 1;
-            if (1 == len)
-                {
-                break;
-                }
-            char* contact = prmsg;  
-            prmsg += len;
-
-            contactName = OssProtocolAdapUtils::ConvertCharToTUint16LC( contact );
-            LOGGER ( TXT ( "CWaitTimer::PendingPresenceContacts:ContactName:%S " ), contactName );
-
-            //  contacts.AppendL(contactName);
-            name = HBufC::NewLC( contactName->Length() + iConnMan.ServiceName().Length() + KColon().Length() );
-            TPtr namePtr( name->Des() );
-            namePtr.Zero();
-            namePtr.Append(iConnMan.ServiceName() ); // prepend service name
-            namePtr.Append(KColon);
-            namePtr.Append(contactName->Des() );
-            buddyPresInfo->SetIdentityL(namePtr);
-            LOGGER ( TXT ( "CPresenceNotificationHandler::ProcessIncomingDataL  :ContactName:%S " ), contactName ); 
-    
-            buddyPresInfo->SetAnyFieldL(KExtensionKey,KPendingRequestExtensionValue());
-            CleanupStack::PopAndDestroy(2);//name,contactName
-            name = NULL;
-            contactName = NULL;
-            // Writing into Presence Cache
-            TInt cacheerror = presenceCacheWriter->WritePresenceL(buddyPresInfo);
-            User::LeaveIfError ( cacheerror);
-           
-            } 
-        CleanupStack::PopAndDestroy(2);//presenceCacheWriter,buddyPresInfo
-
-        }
-    }
-// -----------------------------------------------------------------------------
-// CWaitTimer::ResponseL()
-// -----------------------------------------------------------------------------
-//
-
-char* CWaitTimer::ResponseL ( TInt aTransId )
-	{
-	
-	if ( aTransId == 0 )   // for contact list
-		{
-		if ( iIncomingData.Count() == 0 )
-			{
-			User::Leave ( KErrNotFound );
-			}
-
-		// take first one from the array
-		char* buff = iIncomingData[ 0 ];
-
-		iIncomingData.Remove ( 0 );
-		iIncomingData.Compress();
-		return buff;
-		}
-
-	if ( aTransId == 1 )     //for receive message
-		{
-		if ( iIncomingMsg.Count() == 0 )
-			{
-			User::Leave ( KErrNotFound );
-			}
-
-		// take first one from the array
-		char* buff = iIncomingMsg[ 0 ];
-
-		iIncomingMsg.Remove ( 0 );
-
-		return buff;
-		}
-	if ( aTransId == 2 )     //for presence notifications
-		{
-		TInt pCount = iIncomingPres.Count();
-		
-		if ( pCount == 0 )
-			{
-			User::Leave ( KErrNotFound );
-			}
-
-		// take first one from the array
-		char* buff = iIncomingPres[ pCount-1 ];
-
-		iIncomingPres.Remove ( pCount-1 );
-		iIncomingPres.Compress();
-		return buff;
-		}
-	if ( aTransId == 3 )     //for send error
-		{
-		if ( iIncomingServerError.Count() == 0 )
-			{
-			User::Leave ( KErrNotFound );
-			}
-
-		// take first one from the array
-		char* buff = iIncomingServerError[ 0 ];
-
-		iIncomingServerError.Remove ( 0 );
-
-		return buff;
-		}
-	if ( aTransId == 4 )     //for Add notifications
-		{
-		if ( iAddNotification.Count() == 0 )
-			{
-			User::Leave ( KErrNotFound );
-			}
-
-		// take first one from the array
-		char* buff = iAddNotification[ 0 ];
-
-		iAddNotification.Remove ( 0 );
-
-		return buff;
-		}			
-	if( aTransId == 5 )	 // search results 
-		{
-	    // take first one from the array
-	    char*  buff=NULL;
-	    
-		if ( iSearchElements.Count() != 0 )
-			{
-		    buff = iSearchElements[ 0 ];
-			iSearchElements.Remove ( 0 );
-			iSearchElements.Compress();
-			}
-       	else 
-	        {
-	       	TInt x ( FindOperationL ( 6, COssSendDataOperation::OperationId ) );
-			if( x != -1)
-				{	// is operation completed?
-				TRequestStatus* status = iOperations[ x ]->Status();
-
-				if ( status && ( *status == KRequestPending ) )
-					{
-					User::Leave ( KErrNotReady );
-					}
-				delete iOperations[ x ];
-				iOperations.Remove ( x );
-				}
-	
-	        }
-	
-		return buff; // return the  buffer 	
-		}
-	if ( aTransId == 200 )     //for contact sync
-		{
-		if ( iContactChangeList.Count() == 0 )
-			{
-			User::Leave ( KErrNotFound );
-			}
-
-		// take first one from the array
-		char* buff = iContactChangeList[ 0 ];
-
-		iContactChangeList.Remove ( 0 );
-        iContactChangeList.Compress();
-		return buff;
-		}			
-	// try to find operation
-	TInt x ( FindOperationL ( aTransId, COssSendDataOperation::OperationId ) );
-
-	// is operation completed?
-	TRequestStatus* status = iOperations[ x ]->Status();
-
-	if ( status && ( *status == KRequestPending ) )
-		{
-		User::Leave ( KErrNotReady );
-		}
-
-	char* buff = iOperations[ x ]->Response();
-
-	delete iOperations[ x ];
-	iOperations.Remove ( x );
-	return buff;
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::RunError()
-// -----------------------------------------------------------------------------
-//
-
-TInt CWaitTimer::RunError ( TInt aError )
-	{
-	return aError;
-	}
-
-// =============================================================================
-// =============== New private Functions of the base class =====================
-// =============================================================================
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::FindOperation()
-// Find operation in array
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::FindOperation (
-    TInt aOpId,
-    TInt ( COssSendDataOperation:: *aIdFunc ) () const ) const
-	{
-	LOGGER ( TXT ( "CWaitTimer::FindOperation Start" ) );
-	TInt count ( iOperations.Count() );
-
-	for ( TInt x ( 0 ) ; x < count ; ++x )
-		{
-		if ( aOpId == ( ( *iOperations[ x ] ).*aIdFunc ) () )
-			{
-			LOGGER ( TXT ( "CWaitTimer::FindOperation Returns %d" ), x );
-			return x;
-			}
-		}
-
-	LOGGER ( TXT ( "CWaitTimer::FindOperation End" ) );
-
-	return KErrNotFound;
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::FindOperationL()
-// Find operation in array, leave if not found
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CWaitTimer::FindOperationL (
-    TInt aOpId,
-    TInt ( COssSendDataOperation:: *aIdFunc ) () const ) const
-	{
-	LOGGER ( TXT ( "CWaitTimer::FindOperation Start" ) );
-	TInt x ( FindOperation ( aOpId, aIdFunc ) );
-
-	LOGGER ( TXT ( "CWaitTimer::FindOperation End Returns %d" ), x );
-
-	return x;
-	}
-
-// -----------------------------------------------------------------------------
-// CWaitTimer::IssueReleaseRequestL()
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CWaitTimer::IssueReleaseRequestL()
-	{
-	LOGGER ( TXT ( "CWaitTimer::IssueReleaseRequestL Start" ) );
-	int err = 0;
-	int timeout = NO_WAIT;
-	message_hdr_req *msgHdr = NULL;
-	msgHdr = ( message_hdr_req* ) User::AllocLC(sizeof ( message_hdr_req ));
-	memset ( msgHdr, '\0', sizeof ( message_hdr_req ) );
-	msgHdr->message_type = EKill_Process;
-	
-	TInt nBytes = sizeof ( message_hdr_req );
-
-	MsgQCreate ( REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err );
-	
-	MsgQSend ( REQUEST_QUEUE, ( char* ) msgHdr , nBytes, MSG_PRI_NORMAL, timeout, &err );
-	
-	CleanupStack::PopAndDestroy ( msgHdr );
-	
-	LOGGER ( TXT ( "CWaitTimer::IssueReleaseRequestL end" ) );
-
-	}
-// ---------------------------------------------------------------------------
-// CWaitTimer::IsServerDisconnect()
-// ---------------------------------------------------------------------------
-//	
-TBool CWaitTimer::IsServerDisconnect()
-	{
-	return iServerDisconnected;	
-	}
-// ---------------------------------------------------------------------------
-// CWaitTimer::IsFetchContactsCompleted()
-// ---------------------------------------------------------------------------
-//  
-TBool CWaitTimer::IsFetchContactsCompleted()
-    {
-    if(iFetchingStep == EDataFetchComplete)
-        {
-        return ETrue;
-        }
-    return EFalse;
-    }
-
-	
-// End of file