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