sipproviderplugins/sipprovider/sipconnectionplugins/inc/sipscpr.h
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sipproviderplugins/sipprovider/sipconnectionplugins/inc/sipscpr.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,185 @@
+// 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:
+// SIP SubConnection Provider class.
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef SYMBIAN_SIPSCPR_H
+#define SYMBIAN_SIPSCPR_H
+
+#include <comms-infras/ss_subconnprov.h>
+#include <comms-infras/corescpr.h>
+#include <comms-infras/corescprstates.h>
+#include <comms-infras/corescpractivities.h>
+#include <cs_subconevents.h>
+#include <cs_subconparams.h>
+#include <sip_subconevents.h>
+#include <sip_subconparams.h>
+#include <comms-infras/ss_nodemessages.h>
+#include <comms-infras/ss_mmnode.h>
+#include <comms-infras/ss_parameterfamilybundle.h>
+
+#include <comms-infras/ss_log.h>
+#include "sipscprfactory.h"
+#include "SipStateMachine.h"	
+#include "transitionengine.h"
+#include "sipprovisioninfo.h" 
+#include "sipcprmessages.h"
+
+
+#ifdef __CFLOG_ACTIVE
+	#define KSipSCprTag KESockSubConnectionTag
+	_LIT8(KSipSCprSubTag, "sipscpr");
+#endif
+
+
+namespace SipSCprStates
+	{
+
+	class TNoTagOrAlreadyStarted;
+    class TNoTagOrAlreadyStopped;
+   	class TStoreProvision;
+    class TStartSession;
+    class TAwaitingSessionEstablished;    
+    class TStopSession;
+    class TAwaitingSessionTerminated;
+    class TSetParameters;
+    //class TSendProviderDown;
+	}
+
+
+namespace SipSCpr
+{
+enum TSCprStage
+  	{
+   	EFresh = 0,
+   	EStarting,
+   	EActive,
+   	EStopping,
+   	EStopped
+   	};
+}
+	
+class TSipSCprMessages
+	{
+public:
+	enum 
+	{ERealmId = 0x200041F6};
+private:
+	enum
+	{	
+	ESipSCprSessionEstablished = Messages::TEBase::TNull::EId+8000,
+	ESipSCprSessionTerminated,
+	ESipSCprSessionError,
+	EConnectionUp
+	};
+public:
+	typedef Messages::TMessageSigNumber<ESipSCprSessionEstablished, TSipSCprMessages::ERealmId> TSipSessionEstablished;
+	typedef Messages::TMessageSigNumber<ESipSCprSessionTerminated, TSipSCprMessages::ERealmId> TSipSessionTerminated;
+	typedef Messages::TMessageSigNumber<ESipSCprSessionError, TSipSCprMessages::ERealmId> TSipSessionError;
+	typedef Messages::TMessageSigNumber<EConnectionUp, TSipSCprMessages::ERealmId> TConnectionUp;	
+	};
+
+
+class CSipSubConnectionProvider : public CCoreSubConnectionProvider,
+									public MSIPStateMachineClient
+/** SIP subconnection provider
+
+@internalTechnology
+@released Since 9.4 */
+    {
+    friend class CSipSubConnectionProviderFactory;
+	friend class SipSCprStates::TNoTagOrAlreadyStarted;
+    friend class SipSCprStates::TNoTagOrAlreadyStopped;
+   	friend class SipSCprStates::TStoreProvision;
+    friend class SipSCprStates::TStartSession;
+    friend class SipSCprStates::TAwaitingSessionEstablished;    
+    friend class SipSCprStates::TStopSession;
+    friend class SipSCprStates::TAwaitingSessionTerminated;
+    friend class SipSCprStates::TSetParameters;
+    //friend class SipSCprStates::TSendProviderDown;
+    
+	
+public:
+    typedef CSipSubConnectionProviderFactory FactoryType;   
+    
+    static CSipSubConnectionProvider* NewL(ESock::CSubConnectionProviderFactoryBase& aFactory, TSubConnOpen::TSubConnType aSubConnType);
+    
+    /**
+    Destructor of the class
+    */
+	virtual ~CSipSubConnectionProvider();
+	
+	/**
+	Returns the address of the object of this class. This address will be used to create 
+	SIP high-level state machine
+	*/
+	MSIPStateMachineClient* NodeAddr();
+	
+	//-=========================================================
+	// MSIPStateMachineClient methods
+	//-=========================================================	
+	virtual void CallEstablished();
+	virtual void CallTerminated(TInt aError, TInt aSipCode);
+	virtual void IncomingCall(TIncomingCallParameters& aCallParams);
+	virtual void CredentialsRequired(const TDesC8 & aRealm);    
+	virtual void ReceiveNotification(TDesC8 & aNotification);
+	
+	TSubConnOpen::TSubConnType subconType;
+
+protected:
+    CSipSubConnectionProvider(ESock::CSubConnectionProviderFactoryBase& aFactory);
+    /**
+    Second-level of the construction of the object of the class
+    
+    @aSubConnType  subconnection type (Could be CreateNew, Default and WaitIncoming)
+    */
+    void ConstructL(TSubConnOpen::TSubConnType aSubConnType);
+    
+    virtual void ReceivedL(const Messages::TRuntimeCtxId& aSender, const Messages::TNodeId& aRecipient, Messages::TSignatureBase& aMessage);
+    
+    /**
+    intializes the iParameterBundle with the incoming conneciton paramenter values
+    
+    @param aCallParams, incoming connection parameter values
+    */
+	void InitialiseParametersL(TIncomingCallParameters& aCallParams);
+	
+	// Sets the parameters(invite or subscribe) into SIP state machine
+	void DoParametersAboutToBeSetL(ESock::RCFParameterFamilyBundle_const& aParameterBundle);
+	
+	/**
+	Creates the SIP High-level state machine 
+	*/
+	void CreateStateMachineL();
+	
+		
+protected:
+	TBool					iAwaitingSubConnection;
+	SipSCpr::TSCprStage		iStage;
+	CSipStateMachine*		iSipSm;
+	CSIPTransitionEngine*	iTransitionEngine;
+	//TPtrC8					iFromField;
+	TDesC8*					iFromField;
+	TInt					iStopCode;
+	TInt 					iActivityAwaitingResponse;
+    };
+
+#endif //SYMBIAN_SIPSCPR_H
+