imservices/ossprotocoladaptation/inc/waittimer.h
changeset 0 e6b17d312c8b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imservices/ossprotocoladaptation/inc/waittimer.h	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) 2005 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:  Header for Waittimer.h.
+*
+*/
+
+#ifndef WAITTIMER_H
+#define WAITTIMER_H
+
+#include <e32base.h> // For CActive, link against: euser.lib
+#include <e32std.h>  // For RTimer, link against: euser.lib
+#include <e32property.h>
+// FORWARD DECLARATIONS
+
+class COssSendDataOperation;
+class COSSProtocolConnectionManager;
+class MOSSProtocolConnectionManager;
+class MXIMPProtocolConnectionHost;
+
+enum TDataFetchSteps
+	{
+	EDataFetchingStep1 = -1, // three	
+	EDataFetchingStep2 ,	 // -1
+//	EDataFetchingStep3,		//  0
+	EDataFetchComplete		// 1 done
+	};
+
+/**
+ * CWaitTimer implementation.
+ * Responsible for sending filled message queue and
+ * reading response message queue when it is updated
+ * keep track of updation of message queue
+ */
+class CWaitTimer : public CActive
+	{
+
+	public:
+		// Cancel and destroy
+		~CWaitTimer();
+
+		// Two-phased constructor.
+		static CWaitTimer* NewL (MOSSProtocolConnectionManager& aConnMan);
+
+
+	public: // New functions
+		/**
+		 *  Function for making the initial request
+		 */
+		TInt SendDataL ( TRequestStatus& aStatus, char* msg, TInt nBytes );
+        /**
+		 *  Get response data based on the transaction id
+		 */
+		char* ResponseL ( TInt aTransId );
+		/**
+		 *  start listening on the queue to keep track of the queue updation
+		 */
+		void StartListeningL();
+		/**
+		 *  Increase operation id
+		 */
+		void IncreaseOpId();
+		/**
+		 *  Get operation id
+		 */
+		TInt GetOpId();
+		/**
+		 *  Listen Incoming data
+		 */
+
+		void ListenIncomingData ( TRequestStatus& aStatus );
+
+		/**
+		 *  Listen Incoming data count
+		 */
+
+		TInt IncomingDataCount();
+		/**
+		 *  Returns searched data count
+		 */	
+		TInt SearchDataCount();
+		
+		/**
+		 *  Returns ContactsChange Response Count
+		 */	
+		TInt ContactsChangeResponseCount();
+		
+		/** 
+		 *Listen Incoming message
+     	 */
+		TInt ListenIncomingMsg ( TRequestStatus& aStatus );
+		/**
+		 *  Cancel incoming data listening
+		 */
+		void CancelListening();
+
+		/**
+		 *  Listen Incoming message listening
+		 */
+		void CancelListeningMsg();
+		/**
+		 * returns fetchingcontinue flag
+		 */
+        TBool IsFetchingContinue();
+
+		/**
+		 *  Listen Incoming Presence notifications
+         */
+		TInt ListenIncomingPresence ( TRequestStatus& aStatus );
+		/**
+		 *  Cancel Incoming presence listening
+		 */
+		void CancelListeningPres();
+		/**
+		 *  Listen Incoming Added contact notifications
+         */
+		TInt ListenAddNotification ( TRequestStatus& aStatus );
+		/**
+		 *  Cancel listening Incoming Added contact notifications
+		 */
+		void CancelListeningAddNotication();
+		/**
+		 *  Listen Incoming network server Error notifications
+         */
+		TInt ListenIncomingServerError ( TRequestStatus& aStatus );
+		/**
+		 *  Cancel Incoming server error listening
+		 */
+		void CancelListeningServerErrors();
+		
+		/**
+		 *  issue the releasing reuest and exit
+		 */
+		void IssueReleaseRequestL();
+		
+		/**
+		 *  return ETrue if server disconnect has happen
+		 */
+		TBool IsServerDisconnect();
+		/**
+		 *  Listen any contacts change events
+         */
+		void ListenContactsChange( TRequestStatus& aStatus );
+		
+		/**
+		 *  Cancel any contacts change events listening
+		 */
+		void CancelContactsChangeListening();
+		/**
+		 *  ETrue.if fetching contacts is completed
+		 */
+		TBool IsFetchContactsCompleted();
+		
+	private:
+		/**
+		 *  C++ constructor
+		 */
+		CWaitTimer ( MOSSProtocolConnectionManager& aConnMan );
+
+		/**
+		 *  Second-phase constructor
+		 */
+		void ConstructL();
+
+	private: // From CActive
+	
+		/**
+		 *  Handles recieved message queue data.
+		 */
+		void RunL();
+
+		/**
+		 *  How to cancel me
+		 */
+		void DoCancel();
+		/**
+		 * Override to handle leaves from RunL(). Default implementation causes
+		 * the active scheduler to panic.
+		 */
+		TInt RunError ( TInt aError );
+
+	private: // new private functions
+
+		/**
+		 *  Find operationl
+		 *
+		 *  @return index in array
+		 */
+		TInt FindOperation ( TInt aOpId, TInt ( COssSendDataOperation:: *aIdFunc ) () const ) const;
+		TInt FindOperationL ( TInt aOpId, TInt ( COssSendDataOperation:: *aIdFunc ) () const ) const;
+		/**
+		 * set presence as pending into the presence cache
+		 * for the remote pending contacts
+		 * @param armsg: message to parse to get remote contacts
+		 */
+		void PendingPresenceContactsL(char* aRmessage);      
+	private:
+	    /**
+		 *  State of the active object
+		 */
+		TInt iState;  
+		/**
+		 *  Request status
+		 */
+		TRequestStatus*             iStatus1;
+		/**
+		 *  Send data operations
+		 * Own
+		 * Elements OWNed
+		 */
+		RPointerArray<COssSendDataOperation>   iOperations;
+		/**
+		 *  Logs Id iteration
+		 */
+		TInt                                    iOpidIterator;
+		/**
+		 *  Id iteration
+		 */
+		TInt                                    iOpId;
+
+		/**
+		 *  Max number of active requests
+		 */
+		TInt                                    iMaxActive;
+
+		/**
+		 *  Incoming data queue
+		 *  OWN
+		 */
+		RPointerArray<char>                   iIncomingData;
+		/**
+		 *  Incoming message queue
+		 *  OWN
+		 */
+		RPointerArray<char>                   iIncomingMsg;
+		/**
+		 *  Incoming presence information queue
+		 *  OWN
+		 */
+		RPointerArray<char>                   iIncomingPres;
+		/**
+		 *  Incoming server error queue
+		 *  OWN
+		 */
+		RPointerArray<char>                   iIncomingServerError;
+		/**
+		 *  Incoming add notifications queue
+		 *  OWN
+		 */
+		RPointerArray<char>                   iAddNotification;
+		/**
+		 *  Incoming search elements queue
+		 *  OWN
+		 */
+		RPointerArray<char>                   iSearchElements;
+		/**
+		 *  Incoming conatct change queue
+		 *  OWN
+		 */
+		RPointerArray<char>                   iContactChangeList;
+		/**
+		 *  data Request Status
+		 *  OWN
+		 */
+		TRequestStatus*       iIncReqStatus;
+		/**
+		 *   Message Request Status
+		 *  OWN
+		 */
+		TRequestStatus*       iIncMsgReqStatus;
+		/**
+		 *  Presence Request Status
+		 *  OWN
+		 */
+		TRequestStatus*       iIncPresReqStatus;
+		/**
+		 *  Error Request Status
+		 *  OWN
+		 */
+		TRequestStatus*       iIncErrorReqStatus;
+		/**
+		 *  Add Request Status
+		 *  OWN
+		 */
+		TRequestStatus*       iIncAddReqStatus;
+		/**
+		 *  Contacts Change Request Status
+		 *  OWN
+		 */
+		TRequestStatus*       iContactsChangeStatus;
+		
+		/**
+		 *  Id which is used to do logs more human readable
+		 *  OWN
+		 */
+		TInt                                    iConnectionLogsId;
+		
+	    
+        /**
+		 *  flag for checking fetching is done
+		 */
+	    TBool                                iFetchingContinue;	
+	    
+	    /**
+		 *  connection manager
+		 */
+		MOSSProtocolConnectionManager& iConnMan;
+		/**
+		 *  Flag to denote whether Msg Queue was created
+		 * this will help us in reusing the created msgqueue
+		 */
+		TBool 									iResponseMsgQCreated ;
+		/**
+		 *  ETrue if server disconnect has happen 
+		 */
+		TBool iServerDisconnected;
+		/**
+		 *  timer to trigger message queue uptation checking
+		 */
+		RTimer iTimer;
+		/**
+		 *  stores fetching steps
+		 */ 
+		TInt iFetchingStep;
+	};
+
+#endif // WAITTIMER_H