multimediacommsengine/mmcecli/src/mceeventmanagerreceiver.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcecli/src/mceeventmanagerreceiver.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2004 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 "mceineventobserver.h"
+#include "mceinreferobserver.h"
+#include "mcemanager.h"
+#include "mceinevent.h" 
+#include "mceinrefer.h"
+#include "mcetransactiondatacontainer.h"
+#include "mceserial.h"
+#include "mceeventmanagerreceiver.h"
+#include "mce.h"
+#include "mceclilogs.h"
+
+// -----------------------------------------------------------------------------
+// CMceEventManagerReceiver::CMceEventManagerReceiver
+// -----------------------------------------------------------------------------
+//
+CMceEventManagerReceiver::CMceEventManagerReceiver( RMce& aMce,
+                                                    CMceManager& aManager)
+                                          
+ : CMceItcReceiverBase ( aMce ),
+   iManager( aManager )
+	{
+	iIdsPckg().iAppUID = aManager.AppUid().iUid;
+	iIdsPckg().iManagerType = KMceCSSIPEvent;
+	Init();
+	}
+
+// -----------------------------------------------------------------------------
+// CMceEventManagerReceiver::~CMceEventManagerReceiver
+// -----------------------------------------------------------------------------
+//
+CMceEventManagerReceiver::~CMceEventManagerReceiver () 
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMceEventManagerReceiver::IncomingEventL
+// -----------------------------------------------------------------------------
+//
+void CMceEventManagerReceiver::IncomingEventL( TMceItcCallBack aEvent, 
+                                               TMceIds& aIds, 
+                                               const TDesC8& aContext )
+	{
+    MCECLI_DEBUG("CMceEventManagerReceiver::IncomingEventL, Entry");
+    MCECLI_DEBUG_DVALUE("context size", aContext.Length() );
+	
+	__ASSERT_ALWAYS( aEvent == EMceItcObjectAdded, 
+	    User::Leave( KErrNotSupported ) );
+	__ASSERT_ALWAYS( aIds.iMsgType == EMceItcMsgTypeEvent, 
+	    User::Leave( KErrNotSupported ) );
+    
+    HandleIncomingEventL( aContext, NULL, aIds );
+	
+    MCECLI_DEBUG("CMceEventManagerReceiver::IncomingEventL, Exit");
+	}
+
+	
+// -----------------------------------------------------------------------------
+// CMceEventManagerReceiver::IncomingEventL
+// -----------------------------------------------------------------------------
+//
+void CMceEventManagerReceiver::IncomingEventL( TMceItcCallBack aEvent, 
+                                               TMceIds& aIds, 
+                                               const TDesC8& aContext, 
+                                               HBufC8* aContent )
+	{
+    MCECLI_DEBUG("CMceManagerReceiver::IncomingEventL, Entry");
+    MCECLI_DEBUG_DVALUE("context size", aContext.Length() );
+    MCECLI_DEBUG_DVALUE("content size", aContent ? aContent->Length() : 0 );
+
+	__ASSERT_ALWAYS( aEvent == EMceItcObjectAdded, 
+	    User::Leave( KErrNotSupported ) );
+	__ASSERT_ALWAYS( aIds.iMsgType == EMceItcMsgTypeEvent, 
+	    User::Leave( KErrNotSupported ) );
+    
+    HandleIncomingEventL( aContext, aContent, aIds );
+
+    MCECLI_DEBUG("CMceEventManagerReceiver::IncomingEventL, Exit");
+	
+	}
+	
+// -----------------------------------------------------------------------------
+// CMceEventManagerReceiver::IncomingEventL
+// -----------------------------------------------------------------------------
+//
+void CMceEventManagerReceiver::IncomingEventL( TMceItcCallBack /*aEvent*/, 
+                                               TMceIds& /*aIds*/ )
+	{
+    MCECLI_DEBUG("CMceManagerReceiver::IncomingEventL, NotSupported!");
+	
+	User::Leave( KErrNotSupported );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMceEventManagerReceiver::ErrorOccuredL
+// -----------------------------------------------------------------------------
+//
+void CMceEventManagerReceiver::ErrorOccuredL ( TMceIds& /*aIds*/, TInt aError )
+	{
+    MCECLI_DEBUG_DVALUE("CMceEventManagerReceiver::ErrorOccuredL, error", aError );
+	
+	User::Leave( aError );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMceEventManagerReceiver::HandleIncomingEventL
+// -----------------------------------------------------------------------------
+//
+void CMceEventManagerReceiver::HandleIncomingEventL ( const TDesC8& aContext, 
+                                                      HBufC8* aContent,
+                                                      TMceIds& aIds )
+	{
+    MCECLI_DEBUG("CMceEventManagerReceiver::HandleIncomingEventL, Entry");
+	     
+	// create and decode message
+	CMceMsgSIPEvent* eventMsg = new(ELeave) CMceMsgSIPEvent();
+	CleanupStack::PushL( eventMsg );
+	eventMsg->DecodeL( aContext );
+	eventMsg->PushL();
+        
+    TMceTransactionDataContainer* container = iManager.TransactionContainer();
+    
+    if ( eventMsg->EventType() == EMceItcEventTypeSubscribe )
+        {
+        MCECLI_DEBUG("CMceEventManagerReceiver::HandleIncomingEventL, \
+creating new in-event");
+        
+        CMceInEvent* event = CMceInEvent::NewL( iManager, 
+                                            aIds.iProfileID, 
+                                            *eventMsg );
+        if ( iManager.InEventObserver() )
+            {
+            if ( container )
+                {
+                container->SetHeaders( eventMsg->SIPHeaders() );
+                container->SetContentType( eventMsg->ContentType() );
+                container->SetContent( aContent ); 
+                eventMsg->Pop();
+	            } 
+	        else
+	            {
+	            delete aContent;
+	            }
+	        iManager.InEventObserver()->IncomingEvent( event, container );
+            }
+        else
+            {
+            CleanupStack::PushL( event );
+            event->RejectL();
+            CleanupStack::PopAndDestroy( event );
+            delete aContent;
+            }
+        }
+    else if ( eventMsg->EventType() == EMceItcEventTypeRefer ) 
+        {
+        CMceInEvent* event = NULL;
+        if ( eventMsg->ReferType() == CMceRefer::ENoSuppression )
+            {            
+            MCECLI_DEBUG("CMceEventManagerReceiver::HandleIncomingEventL, \
+no suppression. creating new in-event");
+            event = CMceInEvent::NewL( iManager, aIds.iProfileID, *eventMsg );
+            }
+            
+        CleanupStack::PushL( event );
+	    CMceMsgSIPEvent* referMsg = new(ELeave) CMceMsgSIPEvent();
+	    CleanupStack::PushL( referMsg );
+	    referMsg->DecodeL( aContext );
+	    referMsg->PushL();
+            MCECLI_DEBUG("CMceEventManagerReceiver::HandleIncomingEventL, \
+creating new in-refer-event");
+	    CMceInRefer* refer = CMceInRefer::NewL( iManager, 
+                                                aIds.iProfileID, 
+                                                *referMsg,
+                                                event );
+	    
+	    CleanupStack::Pop( referMsg );
+	    CleanupStack::Pop( event ); // Ownership was transferred to refer
+	    CleanupStack::PushL( referMsg );
+	    
+	    if ( iManager.InReferObserver() )
+            {
+            if ( container )
+                {
+                container->SetHeaders( referMsg->SIPHeaders() );
+                container->SetContentType( referMsg->ContentType() );
+                container->SetContent( aContent );
+                referMsg->Pop();                                    
+	            } 
+	        else
+	            {
+	            delete aContent;
+	            }
+            iManager.InReferObserver()->IncomingRefer( 
+                                       refer,
+					                   refer->ReferTo(),
+					                   container ); 
+		    CleanupStack::PopAndDestroy( referMsg ); 
+            }
+        else
+            {
+            CleanupStack::PushL( refer );
+            refer->RejectL();
+            CleanupStack::PopAndDestroy( refer );
+            CleanupStack::PopAndDestroy( referMsg );
+            delete aContent;
+            }   
+        }
+    else
+        {
+        MCECLI_DEBUG("CMceEventManagerReceiver::HandleIncomingEventL, \
+not supported");
+        User::Leave( KErrNotSupported );
+        }
+    
+    CleanupStack::PopAndDestroy( eventMsg );
+	
+    if ( container )
+    	{
+    	container->Clear();
+    	}
+	}
+
+