diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/sipapi/src/sipdialogstate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/sipapi/src/sipdialogstate.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,247 @@ +/* +* Copyright (c) 2003-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: +* Name : sipdialogstate.h +* Part of : SIPAPI +* Interface : +* Version : +* +*/ + + + + +/** + @internalComponent +*/ + +#ifndef CSIPDIALOGSTATE_H +#define CSIPDIALOGSTATE_H + +// INCLUDES +/*#include +#include */ +#include "sipdialog.h" +#include "_sipcodecdefs.h" + +// FORWARD DECLARATIONS +class CSIPMessageElements; +class CSIPResponseElements; +class CSIPClientTransaction; +class CSIPServerTransaction; +class CSIPDialogAssocImplementation; +class CSIPInviteDialogAssoc; +class CSIPNotifyDialogAssoc; +class CSIPSubscribeDialogAssoc; +class CSIPReferDialogAssoc; +class CSIPRefresh; +class CConnectionCallback; + +// CLASS DECLARATION + +/* + * Base class for all dialog states. + */ +class CDialogState : public CBase + { +public: // Destructor + + virtual ~CDialogState(); + +public: // New functions + + virtual CSIPDialog::TState State() const = 0; + + virtual CSIPClientTransaction* + SendNonTargetRefreshRequestL(const CSIPDialogImplementation& aDialog, + CSIPDialogAssocImplementation& aAssoc, + RStringF aMethod, + CSIPMessageElements* aElements) const; + + virtual CSIPClientTransaction* + SendInviteL(const CSIPDialogImplementation& aDialog, + CSIPInviteDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual CSIPClientTransaction* + SendPrackL(CSIPInviteDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual CSIPClientTransaction* + SendUpdateL(CSIPInviteDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual void SendAckL(CSIPInviteDialogAssoc& aAssoc, + const CSIPClientTransaction& aTransaction, + CSIPMessageElements* aElements) const; + + virtual CSIPClientTransaction* + SendByeL(CSIPInviteDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual CSIPClientTransaction* + SendNotifyL(CSIPNotifyDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual CSIPClientTransaction* + SendReferL(const CSIPDialogImplementation& aDialog, + CSIPReferDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual void SendResponseL(CSIPDialogImplementation& aDialog, + const CSIPResponseElements& aElements, + TUint32 aRequestId, + TBool aAffectsDialogState, + TBool aTargetRefresh) const; + + virtual void ConnectionLost(CSIPDialogImplementation& aDialog) const = 0; + + virtual CSIPClientTransaction* + SendSubscribeL(const CSIPDialogImplementation& aDialog, + CSIPSubscribeDialogAssoc& aAssoc, + CSIPMessageElements* aElements, + CSIPRefresh* aRefresh) const; + + virtual CSIPClientTransaction* + UpdateL(const CSIPDialogImplementation& aDialog, + CSIPSubscribeDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual CSIPClientTransaction* + SendUnsubscribeL(CSIPSubscribeDialogAssoc& aAssoc, + CSIPMessageElements* aElements) const; + + virtual TBool + IncomingResponseL(CSIPDialogImplementation& aDialog, + CSIPResponseElements* aElements, + TUint32 aRequestId, + TUint32 aDialogId, + CConnectionCallback& aCallback) const; + + virtual TBool + IncomingResponseL(CSIPDialogImplementation& aDialog, + CSIPResponseElements* aElements, + TUint32 aRequestId, + TUint32 aRefreshId, + TUint32 aDialogId, + CConnectionCallback& aCallback) const; + + virtual TBool + IncomingRequestL(CSIPDialogImplementation& aDialog, + CSIPServerTransaction* aTransaction, + CConnectionCallback& aCallback) const; + + virtual TBool ErrorOccured(CSIPDialogImplementation& aDialog, + TInt aError, + TUint32 aRequestId, + CConnectionCallback& aCallback) const; + + virtual TBool ErrorOccured(CSIPDialogImplementation& aDialog, + TInt aError, + TUint32 aRefreshId, + TUint32 aRequestId, + CConnectionCallback& aCallback) const; + +protected: // New functions + + TBool HandleErrorOccurred(CSIPDialogImplementation& aDialog, + TInt aError, + TUint32 aRequestId, + CConnectionCallback& aCallback, + CDialogState& aTerminated) const; + + TBool HandleRefreshErrorOccurred(CSIPDialogImplementation& aDialog, + TInt aError, + TUint32 aRefreshId, + CConnectionCallback& aCallback, + CDialogState& aTerminated) const; + + TBool RequestReceivedL(CSIPDialogImplementation& aDialog, + CSIPServerTransaction* aTransaction, + CConnectionCallback& aCallback) const; + + void SendResponseWithinDialogL(CSIPDialogImplementation& aDialog, + const CSIPResponseElements& aElements, + TUint32 aRequestId, + TBool aTargetRefresh) const; + + /** + * A response within dialog has been been received. The response might + * create a new dialog if INVITE has forked. + * + * @param aDialog Dialog instance + * @param aElements Response elements + * @param aRequestId Identifies the transaction + * @param aDialogId DialogId + * @param aCallback For selecting a callback function and its parameters + * @param aEarly Early state of dialog state machine + * @param aConfirmed Confirmed state of dialog state machine + * @param aTerminated Terminated state of dialog state machine + * + * @return ETrue if the caller should make a callback function call, + * EFalse otherwise + */ + TBool IncomingResponseWithinDialogL(CSIPDialogImplementation& aDialog, + CSIPResponseElements* aElements, + TUint32 aRequestId, + TUint32 aDialogId, + CConnectionCallback& aCallback, + const CDialogState& aEarly, + const CDialogState& aConfirmed, + const CDialogState& aTerminated) const; + + CSIPInviteDialogAssoc* + CheckIfForkingL(CSIPDialogImplementation& aDialog, + TUint32 aDialogId, + CSIPResponseElements* aElements, + CSIPClientTransaction& aTransaction) const; + + CSIPInviteDialogAssoc* + CreateForkedInviteAssocLC(CSIPDialogImplementation& aDialog, + CSIPResponseElements& aElements) const; + + /** + * A response to a refreshed request has been received. + * + * @param aDialog Dialog instance + * @param aElements Response elements + * @param aRequestId Identifies the transaction + * @param aRefreshId Identifies the refresh + * @param aCallback For selecting a callback function and its parameters + * @param aEarly Early state of dialog state machine + * @param aConfirmed Confirmed state of dialog state machine + * @param aTerminated Terminated state of dialog state machine + * + * @return ETrue if the caller should make a callback function call, + * EFalse otherwise + */ + TBool ResponseToRefreshL(CSIPDialogImplementation& aDialog, + CSIPResponseElements* aElements, + TUint32 aRequestId, + TUint32 aRefreshId, + CConnectionCallback& aCallback, + const CDialogState& aEarly, + const CDialogState& aConfirmed, + const CDialogState& aTerminated) const; + +private: // New functions + + CSIPClientTransaction* InvalidStateL() const; + +private: // For testing purposes + + UNIT_TEST(CSIP_Test) + }; + +#endif