--- /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 <e32base.h>
+#include <stringpool.h>*/
+#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