diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mceinrefer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mceinrefer.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,253 @@ +/* +* Copyright (c) 2005 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 "mceinevent.h" +#include "mceinrefer.h" +#include "mceitcsender.h" +#include "mceserial.h" +#include "mceclilogs.h" + +// ============================ MEMBER FUNCTIONS =============================== + + + +// ----------------------------------------------------------------------------- +// CMceInRefer::~CMceInRefer +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceInRefer::~CMceInRefer() + { + } + +// ----------------------------------------------------------------------------- +// CMceInRefer::AcceptL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceInEvent* CMceInRefer::AcceptL() + { + MCECLI_DEBUG("CMceInRefer::AcceptL, Entry"); + TState state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + + User::LeaveIfError( State() == EIdle ? KErrNone : KErrNotReady ); + if ( ReferEvent() ) + { + static_cast< CMceInEvent* >( ReferEvent() )->AcceptL(); + + // resolve new state + iState = ResolveStateL(); + } + else + { + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + iSender->SendL( ids, EMceItcAcceptEvent ); + //update the state + iState = static_cast< TState >( ids.iState ); + } + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceInRefer::AcceptL, after ITC, state", state ); + MCECLI_DEBUG("CMceInRefer::AcceptL, Exit"); + + return static_cast< CMceInEvent* >( TransferEventOwnership() ); + } + +// ----------------------------------------------------------------------------- +// CMceInRefer::RejectL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInRefer::RejectL() + { + MCECLI_DEBUG("CMceInRefer::RejectL, Entry"); + TState state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + + User::LeaveIfError( State() == EIdle ? KErrNone : KErrNotReady ); + if ( ReferEvent() ) + { + static_cast< CMceInEvent* >( ReferEvent() )->RejectL(); + // resolve new state + iState = ResolveStateL(); + } + else + { + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + iSender->SendL( ids, EMceItcRejectEvent ); + //update the state + iState = static_cast( ids.iState ); + } + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceInRefer::RejectL, after ITC, state", state ); + MCECLI_DEBUG("CMceInRefer::RejectL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// CMceInRefer::RespondL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceInEvent* CMceInRefer::RespondL( + const TDesC8& aReason, + TUint32 aCode, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + MCECLI_DEBUG("CMceInRefer::RespondL, Entry"); + TState state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + MCECLI_DEBUG_SVALUE( "reason", aReason ); + MCECLI_DEBUG_DVALUE( "code", aCode ); + + + User::LeaveIfError( State() == EIdle ? KErrNone : KErrNotReady ); + User::LeaveIfError( + ( aContentType && aContent ) || !( aContentType || aContent ) ? + KErrNone : KErrArgument ); + + if ( ReferEvent() ) + { + static_cast< CMceInEvent* >( ReferEvent() )-> RespondL( aReason, + aCode, + aHeaders, + aContentType, + aContent ); + // resolve new state + iState = ResolveStateL(); + } + else + { + //copy reason + HBufC8* reason = aReason.AllocLC(); + //create reply + CMceMsgSIPReply* reply = new (ELeave) CMceMsgSIPReply( *reason, + aCode, + *aHeaders, + *aContentType ); + CleanupStack::PushL( reply ); + + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + + iSender->SendL( ids, EMceItcRespondEvent , *reply, aContent ); + + //update the state + iState = static_cast( ids.iState ); + + //cleanup + CleanupStack::PopAndDestroy( reply ); + CleanupStack::PopAndDestroy( reason ); + delete aHeaders; + delete aContentType; + } + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceInRefer::RespondL, after ITC, state", state ); + MCECLI_DEBUG("CMceInRefer::RespondL, Exit"); + + return ( iState == EPending ? + static_cast< CMceInEvent* >( TransferEventOwnership() ) : NULL ); + } + +// ----------------------------------------------------------------------------- +// CMceInRefer::NewL +// ----------------------------------------------------------------------------- +// +CMceInRefer* CMceInRefer::NewL( CMceManager& aManager, + TUint32 aProfileId, + CMceMsgSIPEvent& aEventMsg, + CMceInEvent* aInEvent ) + { + MCECLI_DEBUG("CMceInRefer::NewL, Entry"); + MCECLI_DEBUG_DVALUE("profile", aProfileId ); + + CMceInRefer* self = new (ELeave) CMceInRefer( + aManager, + aProfileId, + aEventMsg.Id(), + aEventMsg.DialogId(), + static_cast< TType > ( aEventMsg.ReferType() ) ); + + CleanupStack::PushL( self ); + + HBufC8* referTo = aEventMsg.ReferTo(); + CleanupStack::PushL( referTo ); + HBufC8* recipient = aEventMsg.Recipient(); + CleanupStack::PushL( recipient ); + HBufC8* originator = aEventMsg.Originator(); + CleanupStack::PushL( originator ); + + self->ConstructL( referTo, + recipient, + originator, + aInEvent ); + + CleanupStack::Pop( originator ); + CleanupStack::Pop( recipient ); + CleanupStack::Pop( referTo ); + + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceInRefer::NewL, Exit"); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMceInRefer::CMceInRefer +// ----------------------------------------------------------------------------- +// +CMceInRefer::CMceInRefer( CMceManager& aManager, + TUint32 aProfileId, + TUint32 aId, + TUint32 aDialogId, + TType aType ) + : CMceRefer( aManager, aProfileId, aDialogId, aType ) + { + iId = aId; + } + +// ----------------------------------------------------------------------------- +// CMceInRefer::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceInRefer::ConstructL( HBufC8* aReferTo, + HBufC8* aRecipient, + HBufC8* aOrginator, + CMceInEvent* aInEvent ) + { + iEvent = aInEvent; + CMceRefer::ConstructL( aRecipient, aReferTo, aOrginator, NULL ); + iEvent = NULL; + iOwnedEvent = aInEvent; + } + +// ----------------------------------------------------------------------------- +// CMceInRefer::IsInRefer +// ----------------------------------------------------------------------------- +// +TBool CMceInRefer::IsInRefer() const + { + return ETrue; + } +