diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SampleApp/gameengine/Src/SIPExStateRegistered.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SampleApp/gameengine/Src/SIPExStateRegistered.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,149 @@ + +// 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: +// + + + +// INCLUDES +#include "SIPExStateRegistered.h" +#include "SIPExGameEngine.h" +#include "SIPExSIPEngine.h" + + +// ----------------------------------------------------------------------------- +// TSIPExStateRegistered::InviteL +// SIP engine is signaled to send invite to the specified address. +// The UI is notified and the active state changed to the Inviting. +// ----------------------------------------------------------------------------- +// +void TSIPExStateRegistered::InviteL( + CSIPExEngine* aContext, + const TDesC& aAddress ) + { + ChangeState( aContext, aContext->iStateInviting ); + + HBufC8* address = HBufC8::NewLC( aAddress.Length() ); + address->Des().Copy( aAddress ); + aContext->SIPEngine()->SendInviteL( *address ); + aContext->InfoL( KInviting() ); + aContext->InfoL( aAddress ); + aContext->StatusInfoL( KGameStarting() ); + CleanupStack::PopAndDestroy( address ); + } + +// ----------------------------------------------------------------------------- +// TSIPExStateRegistered::SendInstantMsgL +// Calls base classes function to send the instant message. +// ----------------------------------------------------------------------------- +// +void TSIPExStateRegistered::SendInstantMsgL( CSIPExEngine* aContext, + const TDesC& aAddress, const TDesC& aMsg ) + { + HBufC8* addr = HBufC8::NewLC( aAddress.Length() ); + addr->Des().Copy( aAddress ); + + HBufC8* msg = HBufC8::NewLC( aMsg.Length() ); + msg->Des().Copy( aMsg ); + + aContext->SIPEngine()->CreateIML( *msg, *addr ); + + CleanupStack::PopAndDestroy( msg ); + CleanupStack::PopAndDestroy( addr ); + } + +// ----------------------------------------------------------------------------- +// TSIPExStateRegistered::SessionEnded +// Notifies the UI. +// ----------------------------------------------------------------------------- +// +void TSIPExStateRegistered::SessionEnded( CSIPExEngine* aContext ) + { + // Keep track whether session ended while accept dialog was shown to user. + iEnded = ETrue; + + Info( aContext, KSessionEnded() ); + StatusInfo( aContext, KGameOver() ); + TRAPD( ignore, aContext->SocketEngineL()->Stop() ); + aContext->DestroySocketEngine(); + } + +// ----------------------------------------------------------------------------- +// TSIPExStateRegistered::InviteReceived +// The acceptance is asked from the user and if accepted we reset game, start +// listening socket and signal the SIP engine to send Accepted to the remote +// peer. +// ----------------------------------------------------------------------------- +// +void TSIPExStateRegistered::InviteReceived( + CSIPExEngine* aContext, + const TDesC8& aFrom, + const TUint32 aIapId ) + { + iEnded = EFalse; + + TBool retVal( EFalse ); + TRAPD( ignore, retVal = aContext->AcceptInvitationL( aFrom ) ); + if ( iEnded ) + { + return; + } + if( retVal ) + { + StatusInfo( aContext, KGameStarting() ); + ChangeState( aContext, aContext->iStateAcceptingSIP ); + aContext->ResetGame(); + aContext->SetPeer( CSIPExEngine::EServer ); + Info( aContext, KListening() ); + TInetAddr addr; + TRAP( ignore, addr = + aContext->SocketEngineL()->StartListeningL( aIapId ) ); + Info( aContext, KAccepting() ); + TRAP( ignore, aContext->SIPEngine()->AcceptInviteL( addr ) ); + Info( aContext, KWaitingRemoteConn() ); + } + else + { + TRAP( ignore, aContext->SIPEngine()->DeclineInviteL() ); + Info( aContext, KInviteDeclined() ); + } + } + +// ----------------------------------------------------------------------------- +// TSIPExStateRegistered::DisableProfile +// Disable profile and notify the UI. +// ----------------------------------------------------------------------------- +// +void TSIPExStateRegistered::DisableProfileL( CSIPExEngine* aContext ) + { + ChangeState( aContext, aContext->iStateIdle ); + aContext->SIPEngine()->DisableProfileL(); + aContext->InfoL( KProfileDisabled() ); + } + +// ----------------------------------------------------------------------------- +// TSIPExStateRegistered::SocketState +// Notify the UI. +// ----------------------------------------------------------------------------- +// +void TSIPExStateRegistered::SocketState( CSIPExEngine* aContext, TInt aNewState ) + { + if( aNewState == CSIPExSocketEngine::ENotConnected ) + { + Info( aContext, KConnectionDropped() ); + StatusInfo( aContext, KGameOver() ); + } + } + +// End of file