diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceserver/inc/mcesipevent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcesipevent.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,349 @@ +/* +* 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: +* +*/ + + + + +#ifndef CMCESIPEVENT_H +#define CMCESIPEVENT_H + +#include + +#include "mcesrv.h" +#include "mcecssubsession.h" +#include "mcesipmanager.h" +#include "mceevents.h" +#include "mcerefer.h" +#include "mceevent.h" + +// FORWARD DECLARATION +class CMceSipStateMachine; +class CMceComSession; +class CMceState; +class TMceActionSet; +class CMceComEvent; +class CIdle; +class CMceMsgSIPEvent; +class CMceMsgSIPData; +class CSIPProfile; + +// CLASS DECLARATION + +enum TEventStateType + { + EMoSubscribe=1, + EMtSubscribe, + EMoRefer, + EMtRefer, + }; + + +const TUint KMceDefaultSubscrExpire = 3600; + +_LIT8(KStateActive, "active"); +_LIT8(KStateTerminated, "terminated"); + + +/** +* MCE SIP session. +* +* @lib +* @since +*/ +class CMceSipEvent : public CMceCsSubSession + { + +public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aClientSession, reference to client session. + * @param aSIPConnection, reference to sip connection + */ + static CMceSipEvent* NewL (CMceCsSession& aClientSession, + CMceSipConnection& aSIPConnection, + CSIPProfile& aProfile); + + /** + * Two-phased constructor. + * @param aClientSession, reference to session. + * @param aSIPConnection, reference to sip connection + */ + static CMceSipEvent* NewLC (CMceCsSession& aClientSession, + CMceSipConnection& aSIPConnection, + CSIPProfile& aProfile); + + /** + * Destructor. + */ + ~CMceSipEvent(); + +public: // New Functions + + /** + * Handles the incoming SUBSCRIBE or REFER request that caused this + * event to be created. + * @param aTransaction The received server transaction + */ + void EventRequestedL( CSIPServerTransaction* aTransaction ); + +public: // from CMceCsSubSession + + /** + * Creates new incoming dialog + * @param aInitialRequest request causing creation + * @return created dialog + */ + CSIPDialogAssocBase* CreateIncomingDialogL( CSIPServerTransaction& aInitialRequest ); + + /** + * Creates outgoing dialog from existing dialog + * @param aDialogType type of new dialog + * @param aParams parameters + * @param aExistingDialog existing dialog + * @return created dialog + */ + CSIPDialogAssocBase* CreateOutgoingDialogL( TMceDialogType aDialogType, + CDesC8Array& aParams, + CSIPDialog& aExistingDialog ); + + /** + * Creates outgoing dialog based on given parameters + * @param aDialogType type of new dialog + * @param aParams parameters + * @return created dialog + */ + CSIPDialogAssocBase* CreateOutgoingDialogL( TMceDialogType aDialogType, + CDesC8Array& aParams ); + + /** + * Provides services of MCE server subsession + * @param aIds, ids from the client. + * @param aFunction, function from the client. + * @return aReturnMessage, return message for client + */ + HBufC8* DoServiceL( TMceIds& aIds, + TMceItcFunctions aFunction ); + + /** + * Provides services of MCE server subsession + * @param aIds, ids from the client. + * @param aFunction, function from the client. + * @param aMessage, encoded message from the client. + */ + void DoServiceL( TMceIds& aIds, + TMceItcFunctions aFunction, + const TDesC8& aMessage ); + + + /** + * Provides services of MCE server subsession + * @param aIds, ids from the client. + * @param aFunction, function from the client. + * @param aMessage, message from the client. + */ + void DoServiceL( TMceIds& aIds, + TMceItcFunctions aFunction, + CMceMsgBase& aMessage ); + + + /** + * Returns ETrue, if session can be deleted + * @return ETrue, if session can be deleted + */ + TBool CanDispose(); + + /** + * Called when session is forced to terminate + * @return ETrue, if can be disposed + */ + TBool Terminate(); + + /** + * Initializes incoming dialog + * @param aTransaction, server transaction containing the request + */ + void DoInitializeIncomingDialogL( CSIPServerTransaction& aTransaction ); + + /** + * Called when error has been occured within dialog + * @param aError error code + */ + void ErrorOccured( TInt aError ); + + /** + * Called when error has been occured + * @param aError error code + * @param aTransaction the transaction + */ + void DoErrorOccured( TInt aError, CSIPTransactionBase& aTransaction ); + + + /** + * Called when connection state has been changed + * @param aIsActive ETrue, if connection is active + */ + void DoConnectionStateChanged( TBool aIsActive ); + + /** + * Called when dialog has been cancelled + */ + void Canceled(); + + TEventStateType EventStateType() const; + + void IncomingSubscribeL( + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aBody); + + void IncomingReferL( + HBufC8* aReferTo, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aBody); + + void ClientStateChangedL( CMceRefer::TState aState, TBool aIsResponse ); + + void ClientStateChangedL( CMceEvent::TState aState, TBool aIsResponse ); + + void NotifyReceivedL( CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aBody) ; + + void SuppressedReferTerminated(); + +protected: //CMceCsSubSession + + + /** + * Returns ETrue, if session accepts transaction + * @param aTransaction the pending transaction + * @return ETrue, if session will accepts the transaction + */ + TBool AcceptDialogTransaction( CSIPServerTransaction& aTransaction ); + + /** + * Returns ETrue, if session accepts transaction + * @param aTransaction the pending transaction + * @return ETrue, if session will accepts the transaction + */ + TBool AcceptDialogTransactionL( CSIPServerTransaction& aTransaction ); + + /** + * Checks if session accepts method containing in incoming request + * @param aMethod the method + * @return ETrue, if accepted + */ + TBool AcceptMethod( RStringF aMethod ); + + /** + * Called when request has been received. + * Request can be obtained by calling Request() method + * @param aInsideDialog tells whether request was received inside dialog + * @param aDialog Dialog for which request is received + */ + void RequestReceived( TBool aInsideDialog, CSIPDialog& aDialog); + + /** + * Called when response (2XX) has been received to pending transaction. + * Response can be obtained by calling Response() method + */ + void ResponseReceived(); + + /** + * Called when response (1XX) has been received to pending transaction. + * Response can be obtained by calling Response() method + */ + void ProvisionalResponseReceived(); + + /** + * Called when response (3XX) has been received to pending transaction. + * Response can be obtained by calling Response() method + */ + void RedirectionResponseReceived(); + + /** + * Called when error response (4XX-7XX) has been received to pending transaction. + * Response can be obtained by calling Response() method + */ + void ErrorResponseReceived(); + + /** + * Called when stand-alone request has been received. + * method must return ETrue, if session consumes the request + * Request can be obtained by calling Request() method + *@return TConsumeStatus + */ + void StandAloneRequestReceived(); + + /** + * Called when stand-alone response (any) has been received to pending transaction. + * Response can be obtained by calling Response() method + * @param aResponseType response type + */ + void StandAloneResponseReceived( TMceSipResponseType aResponseType ); + + +private: + + CMceSipEvent ( CMceCsSession& aClientSession, + CMceSipConnection& aSIPConnection, + CSIPProfile& aProfile); + + void ConstructL ( CMceCsSession& aClientSession ); + + void HandleSIPEvent( TMceSipEventCode aEventCode ); + + void SetEventStateType(const TEventStateType aEventStateType ); + + void DoClientStateChangedL( TUint32 aState, TBool aIsResponse ); + + void ClearDataL(); + + void UpdateDataL( TMceItcFunctions aFunction, + CMceMsgSIPData& aMessage ); + + void DoInitializeL( TMceItcFunctions aFunction, CMceMsgSIPEvent& aMessage ); + + void LocalDoServiceL( TMceIds& aIds, + TMceItcFunctions aFunction ); + + void LocalDoServiceL( TMceIds& aIds, + TMceItcFunctions aFunction, + CMceMsgSIPData& aMessage ); + + static TInt Idle( TAny* aObject ); + + CDesC8Array* CopyArrayLC( const CDesC8Array* aArray ); + + HBufC8* CopyBufferLC( const HBufC8* aBuffer ); + +private: // Own Data + + CMceComEvent* iEvent; + TEventStateType iStateType; + CIdle* iIdle; + friend class TMceActionSet; + + // Definitions for unit testing + MCESRV_UT_DEFINITIONS + }; + +#endif + +// End of File