diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SampleApp/sipengine/src/SIPExSIPIdleState.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SampleApp/sipengine/src/SIPExSIPIdleState.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,150 @@ + +// 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 "SIPExSIPIdleState.h" +#include "SIPExSIPEngine.h" + +#include +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSIPExSIPIdleState::CSIPExSIPIdleState +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CSIPExSIPIdleState::CSIPExSIPIdleState() + { + } + +// ----------------------------------------------------------------------------- +// CSIPExSIPIdleState::~CSIPExSIPIdleState +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPExSIPIdleState::~CSIPExSIPIdleState() + { + } + +// ----------------------------------------------------------------------------- +// CSIPExSIPIdleState::NewL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPExSIPIdleState* CSIPExSIPIdleState::NewL() + { + CSIPExSIPIdleState* self = new (ELeave) CSIPExSIPIdleState(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPExSIPIdleState::LinkStates() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSIPExSIPIdleState::LinkStates( + CSIPExSIPStateBase& aClientEstablishingState, + CSIPExSIPStateBase& aServerOfferingState) + { + iClientEstablishingState = &aClientEstablishingState; + iServerOfferingState = &aServerOfferingState; + } + +// ----------------------------------------------------------------------------- +// CSIPExSIPIdleState::SendInviteL() +// Create and send an INVITE request to the recipient. +// ----------------------------------------------------------------------------- +void CSIPExSIPIdleState::SendInviteL( + CSIPExSIPEngine& aEngine, + const TDesC8& aSipUri ) + { + // Retrieve the active profile and connection + CSIPProfile& prof = aEngine.Profile(); + CSIPConnection& conn = aEngine.ConnectionL(); + + // Create CUri8 from passed descriptor + CUri8* uri8 = aEngine.ConvertToUri8LC( aSipUri ); + + // Get dialog association, save for future use + // The ownership of uri8 is transferred + CSIPInviteDialogAssoc* dialogAssoc = + CSIPInviteDialogAssoc::NewL( conn, uri8, prof ); + CleanupStack::Pop( uri8 ); + + aEngine.SetDialogAssoc( *dialogAssoc ); //Ownership is transferred!! + + // Create the necessary message elements + CSIPMessageElements* msgElements = aEngine.CreateMessageElementsLC(); + + // Send the INVITE in the dialog + // The ownership of msgElements is transferred + CSIPClientTransaction* tx = dialogAssoc->SendInviteL( msgElements ); + CleanupStack::Pop( msgElements ); + + // Save the pointer to the transaction to the Engine + aEngine.SetClientTx( tx ); + + // Change machine state + aEngine.SetCurrentState( iClientEstablishingState ); + } + + +// ----------------------------------------------------------------------------- +// CSIPExSIPIdleState::InviteReceivedL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +void CSIPExSIPIdleState::InviteReceivedL( + CSIPExSIPEngine& aEngine, + CSIPServerTransaction* aTransaction ) + { + _LIT8( KLogEntry, "180 Ringing sent" ); + + // Get dialog association, save for future use + CSIPInviteDialogAssoc* dialogAssoc = + CSIPInviteDialogAssoc::NewL( *aTransaction ); + aEngine.SetDialogAssoc( *dialogAssoc ); + + // Create the necessary response elements and send + CSIPResponseElements* elem = + CSIPResponseElements::NewLC( + 180, SIPStrings::StringF( SipStrConsts::EPhraseRinging ) ); + aTransaction->SendResponseL( elem ); + CleanupStack::Pop( elem ); + aEngine.Observer()->WriteLog( KLogEntry ); + + // Get the From header from the request + const CSIPRequestElements* reqElem = aTransaction->RequestElements(); + const CSIPFromHeader* fromHeader = reqElem->FromHeader(); + + // Change machine state + aEngine.SetCurrentState( iServerOfferingState ); + + TUint32 iapId( 0 ); + User::LeaveIfError( + aEngine.Profile().GetParameter( KSIPAccessPointId, iapId ) ); + + // Send user name from the From header to the Engine Observer + // as a parameter. Send also id of used IAP. + aEngine.Observer()->InviteReceived( + fromHeader->SIPAddress().Uri8().Uri().Extract( EUriUserinfo ), iapId ); + } + +// End of file \ No newline at end of file