multimediacommsengine/mmcecli/src/mceoutrefer.cpp
changeset 0 1bce908db942
--- /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;
+    }
+
+