diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mceoutevent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mceoutevent.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,368 @@ +/* +* 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 +#include "mceoutevent.h" +#include "mcesession.h" +#include "mcerefer.h" +#include "mcemanager.h" +#include "mceclientserver.h" +#include "mceitcsender.h" +#include "mceserial.h" +#include "mceclilogs.h" + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceOutEvent::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutEvent* CMceOutEvent::NewL( + CMceManager& aManager, + CSIPProfile& aProfile, + const TDesC8& aRecipient, + const TDesC8& aEventHeader, + TUint32 aRefreshInterval, + HBufC8* aOriginator ) + { + MCECLI_DEBUG("CMceOutEvent::NewL, Entry"); + MCECLI_DEBUG_SVALUE("recipient", aRecipient ); + MCECLI_DEBUG_SVALUE("event header", aEventHeader ); + + TUint32 profileId(0); + if ( aProfile.GetParameter( KSIPProfileId, profileId ) != KErrNone ) + { + User::Leave(KErrNotFound); + } + + CMceOutEvent* self = new (ELeave) CMceOutEvent( aManager, + profileId, + KMceNotAssigned, + aRefreshInterval ); + CleanupStack::PushL( self ); + self->ConstructL( aEventHeader, + aRecipient, + aOriginator, + KMceDlgTypeSubscribe, + NULL ); + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceOutEvent::NewL, Exit"); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutEvent* CMceOutEvent::NewL( + CMceEvent& aEvent, + const TDesC8& aEventHeader, + TUint32 aRefreshInterval ) + { + MCECLI_DEBUG("CMceOutEvent::NewL, Entry"); + MCECLI_DEBUG_DVALUE("event", aEvent.Id() ); + MCECLI_DEBUG_SVALUE("event header", aEventHeader ); + + CMceOutEvent* self = new (ELeave) CMceOutEvent( aEvent.Manager(), + aEvent.ProfileId(), + aEvent.DialogId(), + aRefreshInterval ); + CleanupStack::PushL( self ); + + self->ConstructL( aEventHeader, + aEvent.Recipient(), + aEvent.Originator(), + KMceDlgTypeSubscribe ); + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceOutEvent::NewL, Exit"); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutEvent* CMceOutEvent::NewL( + CMceSession& aSession, + const TDesC8& aEventHeader, + TUint32 aRefreshInterval ) + { + MCECLI_DEBUG("CMceOutEvent::NewL, Entry"); + MCECLI_DEBUG_DVALUE("session", aSession.Id() ); + MCECLI_DEBUG_SVALUE("event header", aEventHeader ); + + CMceOutEvent* self = new (ELeave) CMceOutEvent( aSession.Manager(), + aSession.Profile(), + aSession.DialogId(), + aRefreshInterval ); + CleanupStack::PushL( self ); + self->ConstructL( aEventHeader, + aSession.Recipient(), + aSession.Originator(), + KMceDlgTypeSubscribe ); + CleanupStack::Pop( self ); + + MCECLI_DEBUG("CMceOutEvent::NewL, Exit"); + + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutEvent* CMceOutEvent::NewL( + CMceRefer& aRefer, + const TDesC8& aEventHeader, + TUint32 aRefreshInterval ) + { + MCECLI_DEBUG("CMceOutEvent::NewL, Entry"); + MCECLI_DEBUG_DVALUE("refer", aRefer.Id() ); + MCECLI_DEBUG_SVALUE("event header", aEventHeader ); + + CMceOutEvent* self = new (ELeave) CMceOutEvent( aRefer.Manager(), + aRefer.ProfileId(), + aRefer.DialogId(), + aRefreshInterval ); + CleanupStack::PushL( self ); + self->ConstructL( aEventHeader, + aRefer.Recipient(), + aRefer.Originator(), + KMceDlgTypeSubscribe ); + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceOutEvent::NewL, Exit"); + + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::NewL +// ----------------------------------------------------------------------------- +// +CMceOutEvent* CMceOutEvent::NewL( + CMceManager& aManager, + TUint32 aProfileId, + const TDesC8& aRecipient, + const TDesC8& aEventHeader, + TUint32 aRefreshInterval, + HBufC8* aOriginator, + TUint32 aDialogId, + TUint32 aDialogType, + CDesC8Array* aParams ) + { + MCECLI_DEBUG("CMceOutEvent::NewL, Entry"); + MCECLI_DEBUG_DVALUE("profile", aProfileId ); + MCECLI_DEBUG_SVALUE("recipient", aRecipient ); + MCECLI_DEBUG_SVALUE("event header", aEventHeader ); + MCECLI_DEBUG_DVALUE("dialog id", aDialogId ); + + CMceOutEvent* self = new (ELeave) CMceOutEvent( aManager, + aProfileId, + aDialogId, + aRefreshInterval ); + CleanupStack::PushL( self ); + self->ConstructL( aEventHeader, + aRecipient, + aOriginator, + aDialogType, + aParams ); + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceOutEvent::NewL, Exit"); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::~CMceOutEvent +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutEvent::~CMceOutEvent() + { + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::SubscribeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceOutEvent::SubscribeL( + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + MCECLI_DEBUG("CMceOutEvent::SubscribeL, Entry"); + TUint state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + + User::LeaveIfError( State() == EIdle ? KErrNone : KErrNotReady ); + User::LeaveIfError( + ( aContentType && aContent ) || !( aContentType || aContent ) ? + KErrNone : KErrArgument ); + + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + + CMceMsgSIPEvent* subscribe = NULL; + // stand alone + subscribe = new (ELeave) CMceMsgSIPEvent( iId, + iDialogId, + EMceItcEventTypeSubscribe, + CMceRefer::ENoSuppression, + iRefreshInterval, + aHeaders, + aContentType ); + + CleanupStack::PushL( subscribe ); + subscribe->OwnershipRollbackPushLC(); + + iSender->SendL( ids, EMceItcSubscribe , *subscribe, aContent ); + + CleanupStack::Pop(); // subscribe->OwnershipRollbackPushLC() + CleanupStack::PopAndDestroy( subscribe ); + + iState = static_cast( ids.iState ); + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceEvent::SubscribeL, after ITC, state", state ); + MCECLI_DEBUG("CMceEvent::SubscribeL, Exit"); + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::CMceOutEvent +// ----------------------------------------------------------------------------- +// +CMceOutEvent::CMceOutEvent( CMceManager& aManager, + TUint32 aProfileId, + TUint32 aDialogId, + TUint32 aRefreshInterval ) + : CMceEvent( aManager, aProfileId, aDialogId, aRefreshInterval ) + { + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceOutEvent::ConstructL( const TDesC8& aEventHeader, + const TDesC8& aRecipient, + HBufC8* aOriginator, + TUint32 aDialogType, + CDesC8Array* aParams ) + { + HBufC8* eventHeader = aEventHeader.AllocLC(); + HBufC8* recipient = aRecipient.AllocLC(); + + CMceEvent::ConstructL( eventHeader, + recipient, + aOriginator, + aDialogType, + aParams ); + + CleanupStack::Pop( recipient ); + CleanupStack::Pop( eventHeader ); + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceOutEvent::ConstructL( const TDesC8& aEventHeader, + const TDesC8& aRecipient, + const TDesC8& aOriginator, + TUint32 aDialogType ) + { + HBufC8* eventHeader = aEventHeader.AllocLC(); + HBufC8* recipient = aRecipient.AllocLC(); + HBufC8* originator = aOriginator.AllocLC(); + + CMceEvent::ConstructL( eventHeader, + recipient, + originator, + aDialogType, + NULL ); + + CleanupStack::Pop( originator ); + CleanupStack::Pop( recipient ); + CleanupStack::Pop( eventHeader ); + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::UpdateL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceOutEvent::UpdateL( TUint32 aRefreshInterval, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + MCECLI_DEBUG("CMceOutEvent::UpdateL, Entry"); + TUint state = State(); + MCECLI_DEBUG_EVENTSTATE( "state", state ); + + User::LeaveIfError( aRefreshInterval > 0 ? KErrNone : KErrArgument ); + User::LeaveIfError( State() == EActive ? KErrNone : KErrNotReady ); + User::LeaveIfError( + ( aContentType && aContent ) || !( aContentType || aContent ) ? + KErrNone : KErrArgument ); + + CMceRefer* refer = iManager.FindRefer( *this ); + if ( refer ) + { + // Updating not supported for event attached to refer. + User::Leave( KErrNotSupported ); + } + + iRefreshInterval = aRefreshInterval; + + TMceIds ids; + PrepareForITC( ids ); + ids.iState = State(); + + CMceMsgSIPEvent* update = + new (ELeave) CMceMsgSIPEvent( iId, + iDialogId, + EMceItcEventTypeSubscribe, + CMceRefer::ENoSuppression, + iRefreshInterval, + aHeaders, + aContentType ); + CleanupStack::PushL( update ); + update->OwnershipRollbackPushLC(); + + iSender->SendL( ids, EMceItcSubscribeUpdate, *update, aContent ); + + CleanupStack::Pop(); // update->OwnershipRollbackPushLC() + CleanupStack::PopAndDestroy( update ); + + iState = static_cast( ids.iState ); + + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceEvent::UpdateL, after ITC, state", state ); + MCECLI_DEBUG("CMceEvent::SubscribeL, Exit"); + + } + +// ----------------------------------------------------------------------------- +// CMceOutEvent::IsInEvent +// ----------------------------------------------------------------------------- +// +TBool CMceOutEvent::IsInEvent() const + { + return EFalse; + }