realtimenetprots/sipfw/SampleApp/sipengine/src/SIPExSIPClientOfferingState.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SampleApp/sipengine/src/SIPExSIPClientOfferingState.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,142 @@
+
+// Copyright (c) 2004-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:
+//
+
+
+
+// INCLUDE FILES
+#include	"SIPExSIPClientOfferingState.h"
+#include	"SIPExSIPEngine.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSIPExSIPClientOfferingState::CSIPExSIPClientOfferingState
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSIPExSIPClientOfferingState::CSIPExSIPClientOfferingState()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPExSIPClientOfferingState::~CSIPExSIPClientOfferingState
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPExSIPClientOfferingState::~CSIPExSIPClientOfferingState()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPExSIPClientOfferingState::NewL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPExSIPClientOfferingState* CSIPExSIPClientOfferingState::NewL()
+	{
+	CSIPExSIPClientOfferingState* self =
+		new (ELeave) CSIPExSIPClientOfferingState();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPExSIPClientOfferingState::LinkStates()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSIPExSIPClientOfferingState::LinkStates(
+	CSIPExSIPStateBase& aIdleState,
+	CSIPExSIPStateBase& aEstablishedState,
+	CSIPExSIPStateBase& aTerminatedState )
+	{
+	iIdleState = &aIdleState;
+	iEstablishedState = &aEstablishedState;
+	iTerminatedState = &aTerminatedState;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CSIPExSIPClientOfferingState::CancelInviteL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CSIPExSIPClientOfferingState::CancelInviteL( CSIPExSIPEngine& aEngine )
+	{
+	// Get the current Client Transaction
+	CSIPClientTransaction& clientTA = aEngine.ClientTx();
+
+	// Use it the to send CANCEL request
+    CSIPClientTransaction* ta = clientTA.CancelL();
+    delete ta;
+
+	aEngine.SetCurrentState( iIdleState );
+	aEngine.Observer()->InvitationCancelled();
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// CSIPExSIPClientOfferingState::ResponseReceivedL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CSIPExSIPClientOfferingState::ResponseReceivedL( 
+    CSIPExSIPEngine& aEngine,
+    CSIPClientTransaction& aTransaction )
+	{
+	const CSIPResponseElements* respElem = aTransaction.ResponseElements();
+
+	TUint statusCode = respElem->StatusCode();
+
+	if ( statusCode >= 200 && statusCode < 300 )
+		{
+		// Final Response received from network.
+		// Get the IP Address of the remote party from the Response Elements
+		const TInetAddr addr = 
+		            aEngine.IPAddressFromResponseElementsL( *respElem );
+
+
+		// Then, send ACK to remote party
+		CSIPInviteDialogAssoc& dialogAssoc = aEngine.DialogAssoc();
+		dialogAssoc.SendAckL( aTransaction );
+
+        // Get used iap's id
+		TUint32 iapId( 0 );
+		CSIPConnection* conn = aEngine.DialogAssoc().Dialog().Connection();
+		if ( conn )
+		    {
+		    iapId = conn->IapId();
+		    }
+
+		// After ACKing, notify observer, giving IP Address and IAP id
+		// as parameter
+		aEngine.Observer()->InviteAcceptedByRemote( addr, iapId );
+
+
+		// Finally, change engine state
+		aEngine.SetCurrentState( iEstablishedState );
+		}
+	else if ( statusCode >= 100 && statusCode < 200 )
+		{
+		// Provisional Response received from network.
+		aEngine.Observer()->InviteReceivedByRemote( statusCode );
+		}
+	else
+		{
+		aEngine.Observer()->InviteDeclinedByRemote( statusCode );
+		aEngine.SetCurrentState( iTerminatedState );
+		}
+	}
+
+// End of file
\ No newline at end of file