diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mceoutrefer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mceoutrefer.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,311 @@ +/* +* 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 "mceoutrefer.h" +#include "mcemanager.h" +#include "mceclientserver.h" +#include "mceitcsender.h" +#include "mceserial.h" +#include "mceclilogs.h" + +// CONSTANTS +_LIT8( KReferEventHeader, "refer" ); + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceOutRefer::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutRefer* CMceOutRefer::NewL( + CMceManager& aManager, + CSIPProfile& aProfile, + const TDesC8& aRecipient, + const TDesC8& aReferTo, + TType aType, + HBufC8* aOriginator) + + { + MCECLI_DEBUG("CMceOutRefer::NewL, Entry"); + MCECLI_DEBUG_SVALUE("recipient", aRecipient ); + MCECLI_DEBUG_SVALUE("refer to", aReferTo ); + + TUint32 profileId(0); + if ( aProfile.GetParameter( KSIPProfileId, profileId ) != KErrNone ) + { + User::Leave(KErrNotFound); + } + + CMceOutRefer* self = new (ELeave) CMceOutRefer( aManager, + profileId, + KMceNotAssigned, + aType ); + CleanupStack::PushL( self ); + self->ConstructL( aRecipient, aReferTo, aType, aOriginator); + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceOutRefer::NewL, Exit"); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutRefer* CMceOutRefer::NewL( + CMceEvent& aEvent, + const TDesC8& aReferTo, + TType aType ) + { + MCECLI_DEBUG("CMceOutRefer::NewL, Entry"); + MCECLI_DEBUG_DVALUE("event", aEvent.Id() ); + MCECLI_DEBUG_SVALUE("refer to", aReferTo ); + + CMceOutRefer* self = new (ELeave) CMceOutRefer( aEvent.Manager(), + aEvent.ProfileId(), + aEvent.DialogId(), + aType ); + CleanupStack::PushL( self ); + self->ConstructL( aEvent.Recipient(), + aReferTo, + aType, + aEvent.Originator() ); + CleanupStack::Pop( self ); + MCECLI_DEBUG("CMceOutRefer::NewL, Exit"); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutRefer* CMceOutRefer::NewL( + CMceSession& aSession, + const TDesC8& aReferTo, + TType aType ) + { + MCECLI_DEBUG("CMceOutRefer::NewL, Entry"); + MCECLI_DEBUG_SVALUE("session", aSession.Id() ); + MCECLI_DEBUG_SVALUE("refer to", aReferTo ); + + CMceOutRefer* self = new (ELeave) CMceOutRefer( aSession.Manager(), + aSession.Profile(), + aSession.DialogId(), + aType ); + CleanupStack::PushL( self ); + self->ConstructL( aSession.Recipient(), + aReferTo, + aType, + aSession.Originator() ); + CleanupStack::Pop( self ); + + MCECLI_DEBUG("CMceOutRefer::NewL, Exit"); + + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutRefer* CMceOutRefer::NewL( + CMceRefer& aRefer, + const TDesC8& aReferTo, + TType aType ) + { + MCECLI_DEBUG("CMceOutRefer::NewL, Entry"); + MCECLI_DEBUG_SVALUE("refer", aRefer.Id() ); + MCECLI_DEBUG_SVALUE("refer to", aReferTo ); + + CMceOutRefer* self = new (ELeave) CMceOutRefer( aRefer.Manager(), + aRefer.ProfileId(), + aRefer.DialogId(), + aType ); + CleanupStack::PushL( self ); + self->ConstructL( aRefer.Recipient(), + aReferTo, + aType, + aRefer.Originator() ); + CleanupStack::Pop( self ); + + MCECLI_DEBUG("CMceOutRefer::NewL, Exit"); + + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::~CMceOutRefer +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutRefer::~CMceOutRefer() + { + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::ReferL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutEvent* CMceOutRefer::ReferL( + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + MCECLI_DEBUG("CMceOutRefer::ReferL, Entry"); + TState 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* refer = NULL; + refer = new (ELeave) CMceMsgSIPEvent( Id(), + DialogId(), + EMceItcEventTypeRefer, + iType, + ( TUint32 ) KErrNotFound, + aHeaders, + aContentType ); + CleanupStack::PushL( refer ); + refer->OwnershipRollbackPushLC(); + + CMceItcSender& sender = ITCSender(); + + sender.SendL( ids, EMceItcReferEvent, *refer, aContent ); + + CleanupStack::Pop(); // refer->OwnershipRollbackPushLC() + CleanupStack::PopAndDestroy( refer ); + iState = static_cast( ids.iState ); + + state = State(); + MCECLI_DEBUG_EVENTSTATE( "CMceOutRefer::ReferL, after ITC, state", state ); + MCECLI_DEBUG("CMceOutRefer::ReferL, Exit"); + return static_cast< CMceOutEvent* > ( TransferEventOwnership() ); + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::CMceOutRefer +// ----------------------------------------------------------------------------- +// +CMceOutRefer::CMceOutRefer( CMceManager& aManager, + TUint32 aProfileId, + TUint32 aDialogId, + TType aType ) + : CMceRefer( aManager, aProfileId, aDialogId, aType ) + { + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceOutRefer::ConstructL( const TDesC8& aRecipient, + const TDesC8& aReferTo, + TType aType, + HBufC8* aOriginator ) + { + CDesC8ArrayFlat* params = + new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity ); + CleanupStack::PushL( params ); + params->AppendL( aReferTo ); + + if ( iDialogId == KMceNotAssigned ) + { + params->AppendL( aRecipient ); + if ( aOriginator ) + { + params->AppendL( *aOriginator ); + } + else + { + params->AppendL( KNullDesC8 ); + } + } + + if ( aType == ENoSuppression ) + { + HBufC8* originator = NULL; + if ( aOriginator ) + { + originator = ( *aOriginator ).AllocL(); + } + CleanupStack::PushL( originator ); + iOwnedEvent = CMceOutEvent::NewL( iManager, + iProfileId, + aRecipient, + KReferEventHeader, + 0, + originator, + iDialogId, + KMceDlgTypeRefer, + params ); + CleanupStack::Pop( originator ); + CleanupStack::Pop( params ); + } + + HBufC8* recipient = aRecipient.AllocLC(); + HBufC8* referTo = aReferTo.AllocLC(); + + if ( aType == ENoSuppression ) + { + CMceRefer::ConstructL( recipient, referTo, aOriginator, NULL ); + CleanupStack::Pop( referTo ); + CleanupStack::Pop( recipient ); + } + else + { + CMceRefer::ConstructL( recipient, referTo, aOriginator, params ); + CleanupStack::Pop( referTo ); + CleanupStack::Pop( recipient ); + CleanupStack::Pop( params ); + } + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceOutRefer::ConstructL( const TDesC8& aRecipient, + const TDesC8& aReferTo, + TType aType, + const TDesC8& aOriginator ) + { + HBufC8* originator = aOriginator.AllocLC(); + ConstructL( aRecipient, aReferTo, aType, originator ); + CleanupStack::Pop( originator ); + + } + +// ----------------------------------------------------------------------------- +// CMceOutRefer::IsInRefer +// ----------------------------------------------------------------------------- +// +TBool CMceOutRefer::IsInRefer() const + { + return EFalse; + } + +