--- /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