--- /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 <sipprofile.h>
+#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<TState>( 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;
+ }
+
+