diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mceinevent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mceinevent.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,267 @@ +/* +* 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 "mceitcsender.h" +#include "mceserial.h" +#include "mceclilogs.h" + +// ============================ MEMBER FUNCTIONS =============================== + + + +// ----------------------------------------------------------------------------- +// CMceInEvent::~CMceInEvent +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceInEvent::~CMceInEvent() + { + } + +// ----------------------------------------------------------------------------- +// CMceInEvent::AcceptEventL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInEvent::AcceptL() + { + MCECLI_DEBUG("CMceInEvent::AcceptL, Entry"); + TUint state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + + User::LeaveIfError( State() == EIdle ? KErrNone : KErrNotReady ); + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + iSender->SendL( ids, EMceItcAcceptEvent ); + //update the state + iState = static_cast( ids.iState ); + + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceEvent::AcceptL, after ITC, state", state ); + MCECLI_DEBUG("CMceInEvent::AcceptL, Exit"); + } + +// ----------------------------------------------------------------------------- +// CMceInEvent::RejectEventL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInEvent::RejectL() + { + MCECLI_DEBUG("CMceInEvent::RejectL, Entry"); + TUint state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + + User::LeaveIfError( State() == EIdle ? KErrNone : KErrNotReady ); + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + iSender->SendL( ids, EMceItcRejectEvent ); + //update the state + iState = static_cast( ids.iState ); + + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceEvent::RejectL, after ITC, state", state ); + MCECLI_DEBUG("CMceInEvent::RejectL, Exit"); + } + + +// ----------------------------------------------------------------------------- +// CMceInEvent::RespondEventL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInEvent::RespondL( + const TDesC8& aReason, + TUint32 aCode, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + MCECLI_DEBUG("CMceInEvent::RespondL, Entry"); + TUint 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 ); + + //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( "CMceEvent::RespondL, after ITC, state", state ); + MCECLI_DEBUG("CMceInEvent::RespondL, Exit"); + + } + +// ----------------------------------------------------------------------------- +// CMceInEvent::NotifyL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInEvent::NotifyL( + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + MCECLI_DEBUG("CMceInEvent::NotifyL, Entry"); + TUint state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + + User::LeaveIfError( State() == EActive ? KErrNone : KErrNotReady ); + User::LeaveIfError( + ( aContentType && aContent ) || !( aContentType || aContent ) ? + KErrNone : KErrArgument ); + + //create notify message + CMceMsgSIPEvent* notify = new (ELeave) CMceMsgSIPEvent( + iId, + iDialogId, + EMceItcEventTypeEither, + CMceRefer::ENoSuppression, + ( TUint32 ) KErrNotFound, + aHeaders, + aContentType ); + CleanupStack::PushL( notify ); + + notify->OwnershipRollbackPushLC(); + + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + + iSender->SendL( ids, EMceItcNotify, *notify, aContent ); + + CleanupStack::Pop(); // notify->OwnershipRollbackPushLC() + + //update the state + iState = static_cast( ids.iState ); + + //cleanup + CleanupStack::PopAndDestroy( notify ); + + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceEvent::NotifyL, after ITC, state", state ); + MCECLI_DEBUG("CMceInEvent::NotifyL, Exit"); + } + + +// ----------------------------------------------------------------------------- +// CMceInEvent::NewL +// ----------------------------------------------------------------------------- +// +CMceInEvent* CMceInEvent::NewL( CMceManager& aManager, + TUint32 aProfileId, + CMceMsgSIPEvent& aEventMsg ) + { + MCECLI_DEBUG("CMceInEvent::NewL, Entry"); + MCECLI_DEBUG_DVALUE("profile", aProfileId ); + + CMceInEvent* self = new (ELeave) CMceInEvent( aManager, + aProfileId, + aEventMsg.Id(), + aEventMsg.DialogId(), + aEventMsg.RefreshInterval() ); + CleanupStack::PushL( self ); + + HBufC8* eventHeader = aEventMsg.EventHeader(); + CleanupStack::PushL( eventHeader ); + HBufC8* recipient = aEventMsg.Recipient(); + CleanupStack::PushL( recipient ); + HBufC8* originator = aEventMsg.Originator(); + CleanupStack::PushL( originator ); + self->ConstructL( eventHeader, + recipient, + originator, + KMceDlgTypeSubscribe ); + + CleanupStack::Pop( originator ); + CleanupStack::Pop( recipient ); + CleanupStack::Pop( eventHeader ); + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceInEvent::NewL, Exit"); + return self; + + } + + +// ----------------------------------------------------------------------------- +// CMceInEvent::CMceInEvent +// ----------------------------------------------------------------------------- +// +CMceInEvent::CMceInEvent( CMceManager& aManager, + TUint32 aProfileId, + TUint32 aId, + TUint32 aDialogId, + TUint32 aRefreshInterval ) + : CMceEvent( aManager, aProfileId, aDialogId, aRefreshInterval ) + { + iId = aId; + } + + +// ----------------------------------------------------------------------------- +// CMceInEvent::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceInEvent::ConstructL( HBufC8* aEventHeader, + HBufC8* aRecipient, + HBufC8* aOriginator, + TUint32 aDialogType ) + { + CMceEvent::ConstructL( aEventHeader, + aRecipient, + aOriginator, + aDialogType, + NULL ); + } + + +// ----------------------------------------------------------------------------- +// CMceInEvent::IsInEvent +// ----------------------------------------------------------------------------- +// +TBool CMceInEvent::IsInEvent() const + { + return ETrue; + }