multimediacommsengine/mmcecli/src/mcemsrpsink.cpp
branchrcs
changeset 49 64c62431ac08
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcecli/src/mcemsrpsink.cpp	Mon Sep 06 17:32:13 2010 +0530
@@ -0,0 +1,338 @@
+/*
+* 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 <uricommon.h>
+#include <uri8.h>
+#include <uriutils.h>
+#include<e32cmn.h>
+#include<e32const.h>
+#include <f32file.h>
+
+#include "mcemsrpsink.h"
+#include <mcertpsource.h>
+#include <mcemsrpsource.h>
+#include "mcecommsrpsink.h"
+#include "mcesession.h"
+#include "mcemediastream.h"
+#include "mceclilogs.h"
+#include "mcemanager.h"
+#include "mcecommediastream.h"
+#include <e32cmn.h>
+#include <e32const.h>
+#include <f32file.h>
+
+#define _FLAT_DATA static_cast<CMceComMsrpSink*>( iFlatData )
+#define FLAT_DATA( data ) (_FLAT_DATA->data)
+
+#define _FLAT_ARRAY_DATA static_cast<CMceComMsrpSink*>(iFlatData)
+#define FLAT_ARRAY_DATA(iArray,data) (_FLAT_ARRAY_DATA)->iArray.AppendL(data)
+
+#define _FLAT_PTRARRAY_DATA static_cast<CMceComMsrpSink*>(iFlatData)
+#define FLAT_PTRARRAY_DATA(iArray,data) (_FLAT_PTRARRAY_DATA)->iArray->AppendL(data)
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMceMsrpSink* CMceMsrpSink::NewL()
+    {    
+    CMceMsrpSink* self = CMceMsrpSink::NewLC();    
+	CleanupStack::Pop(self);
+    return self;   
+    }
+	
+	
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMceMsrpSink* CMceMsrpSink::NewLC()
+    {    
+    CMceMsrpSink* self = new (ELeave) CMceMsrpSink(); 
+	CleanupStack::PushL(self);
+	self->ConstructL();
+    return self;   
+    }   
+
+	
+// -----------------------------------------------------------------------------
+// CMceMsrpSinke::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMceMsrpSink::ConstructL()
+    { 
+    CMceComMsrpSink *sink = CMceComMsrpSink::NewLC();
+    CMceMediaSink::ConstructL(sink);		
+	CleanupStack::Pop(sink);
+    }
+       
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSinke::~CMceMsrpSinke
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMceMsrpSink::~CMceMsrpSink()
+    {
+    }	
+
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::CMceMsrpSink
+// -----------------------------------------------------------------------------
+//
+CMceMsrpSink::CMceMsrpSink()
+    :CMceMediaSink()
+    {
+    }
+	
+// -----------------------------------------------------------------------------
+// CMceMicSource::EnableL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::EnableL()
+    {
+    MCECLI_DEBUG("CMceMsrpSink::EnableL, Entry");
+    
+    CMceMediaSink::DoEnableL(); 
+    
+    MCECLI_DEBUG("CMceMsrpSink::EnableL, Exit");
+    
+    }
+    
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::Disable
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::DisableL()
+    {
+    MCECLI_DEBUG("CMceMsrpSink::DisableL, Entry");
+
+    CMceMediaSink::DoDisableL();
+    
+    MCECLI_DEBUG("CMceMsrpSink::DisableL, Exit");
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSinke::Path
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C RPointerArray<TUriC8>& CMceMsrpSink::Path()
+    {
+    return FLAT_DATA(iPath);
+    }
+
+ 
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSinke::SetPath
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::SetPathL( const RPointerArray<TUriC8>& aMsrpPath )
+    {
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    // destroy the existing MSRP path entries
+    static_cast<CMceComMsrpSink*>(iFlatData)->iPath.ResetAndDestroy();
+    for(int i=0;i<aMsrpPath.Count();i++)
+        {        
+        TUriParser8* parser = new (ELeave) TUriParser8;
+        CleanupStack::PushL(parser);
+        User::LeaveIfError( parser->Parse(aMsrpPath[i]->UriDes()));
+        FLAT_ARRAY_DATA(iPath, parser);
+        CleanupStack::Pop(parser);
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::AcceptTypesL
+// -----------------------------------------------------------------------------
+//
+
+void CMceMsrpSink::AcceptTypesL(CDesC8ArrayFlat& aAcceptTypes)
+    {
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    
+    for (TInt i=0; i< FLAT_DATA(iAcceptTypes).Count();i++)
+        {
+        aAcceptTypes.AppendL(FLAT_DATA(iAcceptTypes)[i]);
+        }
+    }
+  
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::SetAcceptTypesL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::SetAcceptTypesL( const MDesC8Array& aAcceptTypes )
+    {
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    // reset the existing entries
+    static_cast<CMceComMsrpSink*>(iFlatData)->iAcceptTypes.Reset();
+    for(int i=0; i<aAcceptTypes.MdcaCount();i++)
+        {       
+        FLAT_ARRAY_DATA(iAcceptTypes, aAcceptTypes.MdcaPoint(i));        
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::AcceptWrappedTypes
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TDes8& CMceMsrpSink::AcceptWrappedTypesL()
+    {
+    return FLAT_DATA(iAcceptWrappedTypes);
+    }
+    
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::SetAcceptTypesL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::SetAcceptWrappedTypesL( const TDes8& aAcceptWrappedTypes )
+    {
+    MCECLI_DEBUG(" \n CMceMsrpSink::SetAcceptWrappedTypesL : Entry");
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    FLAT_DATA(iAcceptWrappedTypes) = aAcceptWrappedTypes;
+    FLAT_DATA(iWrappedTypes) = ETrue;
+    MCECLI_DEBUG(" \n CMceMsrpSink::SetAcceptWrappedTypesL : Entry");
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::SetFileSelector
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::SetFileSelectorL(const TDesC& aName, const TDesC8& aFileType, TUint aFileSize )
+    {
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    FLAT_DATA(iFileShare) = ETrue;
+    if (FLAT_DATA(iFileName) !=NULL )
+        {
+        delete FLAT_DATA(iFileName);
+        FLAT_DATA(iFileName) = NULL;
+        }
+    FLAT_DATA(iFileName) = aName.Alloc();
+    FLAT_DATA(iFileSize) = aFileSize;
+    if (FLAT_DATA(iFileType) !=NULL )
+        {
+        delete FLAT_DATA(iFileType);
+        FLAT_DATA(iFileType) = NULL;
+        }
+    FLAT_DATA(iFileType) = aFileType.Alloc();
+    }
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::SetFileDisposition
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::SetFileDispositionL (const TDes8& aDispositionValue)
+    {
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    FLAT_DATA(iDispositionValue) = aDispositionValue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::SetFileTransferId
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::SetFileTransferIdL(TDes8& aId)
+    {
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    //Set Current time as transferid (Which is unique)
+    TTime transferId;
+    transferId.HomeTime();
+    aId.AppendNum(transferId.Int64());
+    FLAT_DATA(iFileTransferid) = aId;
+    }
+
+// -----------------------------------------------------------------------------
+// CMceMsrpSink::SetInformationAttr
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMceMsrpSink::SetInformationAttrL(const TDes8& aInfo)
+    {
+    __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
+    static_cast<CMceComMsrpSink*>(iFlatData)->iSessInfo = aInfo.AllocL();
+    }
+
+void CMceMsrpSink::InitializeL( CMceMediaStream& aParent )
+    {
+    MCECLI_DEBUG(" \n CMceMsrpSink::InitializeL : Entry");
+    CMceMediaSink::InitializeL(aParent);
+    
+    RPointerArray<TUriC8>& msrpPath= Path();
+    MCECLI_DEBUG_DVALUE("\n CMceMsrpSink::InitializeL: Msrp path count is: ", msrpPath.Count());
+    if (msrpPath.Count() > 0 )
+        {
+        SetPortFromPathAttrL(* (msrpPath[msrpPath.Count()-1]) ,
+                static_cast<CMceMessageStream&> (aParent) );
+        }
+    MCECLI_DEBUG("\n CMceMsrpSink::InitializeL : Exit");
+    }
+
+
+void CMceMsrpSink::SetPortFromPathAttrL(TUriC8& aMsrpUri, CMceMessageStream& aStream)
+    {
+    __ASSERT_ALWAYS(aStream.Type() == KMceMessage, User::Leave(KErrArgument));
+    
+    MCECLI_DEBUG("\n CMceMsrpSink::SetPortFromPathAttr : Entry");
+    TUriParser8 parser;
+    TInt parseValue = parser.Parse(aMsrpUri.UriDes()); 
+    MCECLI_DEBUG_DVALUE("\n CMceMsrpSink::SetPortFromPathAttr: Parsed return value for MSRP URI: ",
+            parseValue);
+        
+    TBuf8<50> host = parser.Extract(EUriHost);
+    TBuf8<10> portBuf = parser.Extract(EUriPort);
+    TInt Port;
+        
+    TBuf16<10> portBuf16;
+    portBuf16.Copy(portBuf);
+    TLex lex(portBuf16);
+    lex.Val(Port);  // returns the port value 
+    // Set media port
+    aStream.SetLocalMediaPortL(Port);
+	if (aStream.BoundStream())
+		{
+		aStream.BoundStreamL().SetLocalMediaPortL(Port);
+		}
+    MCECLI_DEBUG_DVALUE("\n CMceMsrpSink::SetPortFromPathAttr: Media port is : ", 
+                Port);
+    MCECLI_DEBUG("\n CMceMsrpSink::SetPortFromPathAttr : Exit");
+    }
+
+
+EXPORT_C void CMceMsrpSink::SetPathToSaveReceivedFile(const TDesC16& aFilePath)
+    {
+    if ( FLAT_DATA(iFilePath) != NULL)
+        {
+        delete FLAT_DATA(iFilePath);
+        FLAT_DATA(iFilePath) = NULL;
+        }
+    FLAT_DATA(iFilePath) = aFilePath.Alloc();
+    }
+
+EXPORT_C void CMceMsrpSink::EnableFileTransferProgressNotifications(TBool enableFlag)
+    {
+    FLAT_DATA(iFTProgressNotification) = enableFlag;
+    }