multimediacommsengine/mmcecli/src/mcemsrpsink.cpp
branchrcs
changeset 49 64c62431ac08
equal deleted inserted replaced
44:fb024d5e35fa 49:64c62431ac08
       
     1 /*
       
     2 * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include <uricommon.h>
       
    21 #include <uri8.h>
       
    22 #include <uriutils.h>
       
    23 #include<e32cmn.h>
       
    24 #include<e32const.h>
       
    25 #include <f32file.h>
       
    26 
       
    27 #include "mcemsrpsink.h"
       
    28 #include <mcertpsource.h>
       
    29 #include <mcemsrpsource.h>
       
    30 #include "mcecommsrpsink.h"
       
    31 #include "mcesession.h"
       
    32 #include "mcemediastream.h"
       
    33 #include "mceclilogs.h"
       
    34 #include "mcemanager.h"
       
    35 #include "mcecommediastream.h"
       
    36 #include <e32cmn.h>
       
    37 #include <e32const.h>
       
    38 #include <f32file.h>
       
    39 
       
    40 #define _FLAT_DATA static_cast<CMceComMsrpSink*>( iFlatData )
       
    41 #define FLAT_DATA( data ) (_FLAT_DATA->data)
       
    42 
       
    43 #define _FLAT_ARRAY_DATA static_cast<CMceComMsrpSink*>(iFlatData)
       
    44 #define FLAT_ARRAY_DATA(iArray,data) (_FLAT_ARRAY_DATA)->iArray.AppendL(data)
       
    45 
       
    46 #define _FLAT_PTRARRAY_DATA static_cast<CMceComMsrpSink*>(iFlatData)
       
    47 #define FLAT_PTRARRAY_DATA(iArray,data) (_FLAT_PTRARRAY_DATA)->iArray->AppendL(data)
       
    48 
       
    49 // ============================ MEMBER FUNCTIONS ===============================
       
    50 
       
    51 // -----------------------------------------------------------------------------
       
    52 // CMceMsrpSink::NewL
       
    53 // -----------------------------------------------------------------------------
       
    54 //
       
    55 EXPORT_C CMceMsrpSink* CMceMsrpSink::NewL()
       
    56     {    
       
    57     CMceMsrpSink* self = CMceMsrpSink::NewLC();    
       
    58 	CleanupStack::Pop(self);
       
    59     return self;   
       
    60     }
       
    61 	
       
    62 	
       
    63 // -----------------------------------------------------------------------------
       
    64 // CMceMsrpSink::NewLC
       
    65 // -----------------------------------------------------------------------------
       
    66 //
       
    67 EXPORT_C CMceMsrpSink* CMceMsrpSink::NewLC()
       
    68     {    
       
    69     CMceMsrpSink* self = new (ELeave) CMceMsrpSink(); 
       
    70 	CleanupStack::PushL(self);
       
    71 	self->ConstructL();
       
    72     return self;   
       
    73     }   
       
    74 
       
    75 	
       
    76 // -----------------------------------------------------------------------------
       
    77 // CMceMsrpSinke::ConstructL
       
    78 // -----------------------------------------------------------------------------
       
    79 //
       
    80 void CMceMsrpSink::ConstructL()
       
    81     { 
       
    82     CMceComMsrpSink *sink = CMceComMsrpSink::NewLC();
       
    83     CMceMediaSink::ConstructL(sink);		
       
    84 	CleanupStack::Pop(sink);
       
    85     }
       
    86        
       
    87 
       
    88 // -----------------------------------------------------------------------------
       
    89 // CMceMsrpSinke::~CMceMsrpSinke
       
    90 // -----------------------------------------------------------------------------
       
    91 //
       
    92 EXPORT_C CMceMsrpSink::~CMceMsrpSink()
       
    93     {
       
    94     }	
       
    95 
       
    96 
       
    97 // -----------------------------------------------------------------------------
       
    98 // CMceMsrpSink::CMceMsrpSink
       
    99 // -----------------------------------------------------------------------------
       
   100 //
       
   101 CMceMsrpSink::CMceMsrpSink()
       
   102     :CMceMediaSink()
       
   103     {
       
   104     }
       
   105 	
       
   106 // -----------------------------------------------------------------------------
       
   107 // CMceMicSource::EnableL
       
   108 // -----------------------------------------------------------------------------
       
   109 //
       
   110 EXPORT_C void CMceMsrpSink::EnableL()
       
   111     {
       
   112     MCECLI_DEBUG("CMceMsrpSink::EnableL, Entry");
       
   113     
       
   114     CMceMediaSink::DoEnableL(); 
       
   115     
       
   116     MCECLI_DEBUG("CMceMsrpSink::EnableL, Exit");
       
   117     
       
   118     }
       
   119     
       
   120 // -----------------------------------------------------------------------------
       
   121 // CMceMsrpSink::Disable
       
   122 // -----------------------------------------------------------------------------
       
   123 //
       
   124 EXPORT_C void CMceMsrpSink::DisableL()
       
   125     {
       
   126     MCECLI_DEBUG("CMceMsrpSink::DisableL, Entry");
       
   127 
       
   128     CMceMediaSink::DoDisableL();
       
   129     
       
   130     MCECLI_DEBUG("CMceMsrpSink::DisableL, Exit");
       
   131     
       
   132     }
       
   133 
       
   134 // -----------------------------------------------------------------------------
       
   135 // CMceMsrpSinke::Path
       
   136 // -----------------------------------------------------------------------------
       
   137 //
       
   138 
       
   139 EXPORT_C RPointerArray<TUriC8>& CMceMsrpSink::Path()
       
   140     {
       
   141     return FLAT_DATA(iPath);
       
   142     }
       
   143 
       
   144  
       
   145 
       
   146 // -----------------------------------------------------------------------------
       
   147 // CMceMsrpSinke::SetPath
       
   148 // -----------------------------------------------------------------------------
       
   149 //
       
   150 EXPORT_C void CMceMsrpSink::SetPathL( const RPointerArray<TUriC8>& aMsrpPath )
       
   151     {
       
   152     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   153     // destroy the existing MSRP path entries
       
   154     static_cast<CMceComMsrpSink*>(iFlatData)->iPath.ResetAndDestroy();
       
   155     for(int i=0;i<aMsrpPath.Count();i++)
       
   156         {        
       
   157         TUriParser8* parser = new (ELeave) TUriParser8;
       
   158         CleanupStack::PushL(parser);
       
   159         User::LeaveIfError( parser->Parse(aMsrpPath[i]->UriDes()));
       
   160         FLAT_ARRAY_DATA(iPath, parser);
       
   161         CleanupStack::Pop(parser);
       
   162         }
       
   163     }
       
   164 
       
   165 
       
   166 // -----------------------------------------------------------------------------
       
   167 // CMceMsrpSink::AcceptTypesL
       
   168 // -----------------------------------------------------------------------------
       
   169 //
       
   170 
       
   171 void CMceMsrpSink::AcceptTypesL(CDesC8ArrayFlat& aAcceptTypes)
       
   172     {
       
   173     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   174     
       
   175     for (TInt i=0; i< FLAT_DATA(iAcceptTypes).Count();i++)
       
   176         {
       
   177         aAcceptTypes.AppendL(FLAT_DATA(iAcceptTypes)[i]);
       
   178         }
       
   179     }
       
   180   
       
   181 // -----------------------------------------------------------------------------
       
   182 // CMceMsrpSink::SetAcceptTypesL
       
   183 // -----------------------------------------------------------------------------
       
   184 //
       
   185 EXPORT_C void CMceMsrpSink::SetAcceptTypesL( const MDesC8Array& aAcceptTypes )
       
   186     {
       
   187     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   188     // reset the existing entries
       
   189     static_cast<CMceComMsrpSink*>(iFlatData)->iAcceptTypes.Reset();
       
   190     for(int i=0; i<aAcceptTypes.MdcaCount();i++)
       
   191         {       
       
   192         FLAT_ARRAY_DATA(iAcceptTypes, aAcceptTypes.MdcaPoint(i));        
       
   193         }
       
   194     }
       
   195 
       
   196 
       
   197 // -----------------------------------------------------------------------------
       
   198 // CMceMsrpSink::AcceptWrappedTypes
       
   199 // -----------------------------------------------------------------------------
       
   200 //
       
   201 
       
   202 EXPORT_C TDes8& CMceMsrpSink::AcceptWrappedTypesL()
       
   203     {
       
   204     return FLAT_DATA(iAcceptWrappedTypes);
       
   205     }
       
   206     
       
   207 // -----------------------------------------------------------------------------
       
   208 // CMceMsrpSink::SetAcceptTypesL
       
   209 // -----------------------------------------------------------------------------
       
   210 //
       
   211 EXPORT_C void CMceMsrpSink::SetAcceptWrappedTypesL( const TDes8& aAcceptWrappedTypes )
       
   212     {
       
   213     MCECLI_DEBUG(" \n CMceMsrpSink::SetAcceptWrappedTypesL : Entry");
       
   214     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   215     FLAT_DATA(iAcceptWrappedTypes) = aAcceptWrappedTypes;
       
   216     FLAT_DATA(iWrappedTypes) = ETrue;
       
   217     MCECLI_DEBUG(" \n CMceMsrpSink::SetAcceptWrappedTypesL : Entry");
       
   218     }
       
   219 
       
   220 
       
   221 // -----------------------------------------------------------------------------
       
   222 // CMceMsrpSink::SetFileSelector
       
   223 // -----------------------------------------------------------------------------
       
   224 //
       
   225 EXPORT_C void CMceMsrpSink::SetFileSelectorL(const TDesC& aName, const TDesC8& aFileType, TUint aFileSize )
       
   226     {
       
   227     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   228     FLAT_DATA(iFileShare) = ETrue;
       
   229     if (FLAT_DATA(iFileName) !=NULL )
       
   230         {
       
   231         delete FLAT_DATA(iFileName);
       
   232         FLAT_DATA(iFileName) = NULL;
       
   233         }
       
   234     FLAT_DATA(iFileName) = aName.Alloc();
       
   235     FLAT_DATA(iFileSize) = aFileSize;
       
   236     if (FLAT_DATA(iFileType) !=NULL )
       
   237         {
       
   238         delete FLAT_DATA(iFileType);
       
   239         FLAT_DATA(iFileType) = NULL;
       
   240         }
       
   241     FLAT_DATA(iFileType) = aFileType.Alloc();
       
   242     }
       
   243 
       
   244 // -----------------------------------------------------------------------------
       
   245 // CMceMsrpSink::SetFileDisposition
       
   246 // -----------------------------------------------------------------------------
       
   247 //
       
   248 EXPORT_C void CMceMsrpSink::SetFileDispositionL (const TDes8& aDispositionValue)
       
   249     {
       
   250     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   251     FLAT_DATA(iDispositionValue) = aDispositionValue;
       
   252     }
       
   253 
       
   254 
       
   255 // -----------------------------------------------------------------------------
       
   256 // CMceMsrpSink::SetFileTransferId
       
   257 // -----------------------------------------------------------------------------
       
   258 //
       
   259 EXPORT_C void CMceMsrpSink::SetFileTransferIdL(TDes8& aId)
       
   260     {
       
   261     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   262     //Set Current time as transferid (Which is unique)
       
   263     TTime transferId;
       
   264     transferId.HomeTime();
       
   265     aId.AppendNum(transferId.Int64());
       
   266     FLAT_DATA(iFileTransferid) = aId;
       
   267     }
       
   268 
       
   269 // -----------------------------------------------------------------------------
       
   270 // CMceMsrpSink::SetInformationAttr
       
   271 // -----------------------------------------------------------------------------
       
   272 //
       
   273 EXPORT_C void CMceMsrpSink::SetInformationAttrL(const TDes8& aInfo)
       
   274     {
       
   275     __ASSERT_ALWAYS(iFlatData!=NULL, User::Leave(KErrArgument));
       
   276     static_cast<CMceComMsrpSink*>(iFlatData)->iSessInfo = aInfo.AllocL();
       
   277     }
       
   278 
       
   279 void CMceMsrpSink::InitializeL( CMceMediaStream& aParent )
       
   280     {
       
   281     MCECLI_DEBUG(" \n CMceMsrpSink::InitializeL : Entry");
       
   282     CMceMediaSink::InitializeL(aParent);
       
   283     
       
   284     RPointerArray<TUriC8>& msrpPath= Path();
       
   285     MCECLI_DEBUG_DVALUE("\n CMceMsrpSink::InitializeL: Msrp path count is: ", msrpPath.Count());
       
   286     if (msrpPath.Count() > 0 )
       
   287         {
       
   288         SetPortFromPathAttrL(* (msrpPath[msrpPath.Count()-1]) ,
       
   289                 static_cast<CMceMessageStream&> (aParent) );
       
   290         }
       
   291     MCECLI_DEBUG("\n CMceMsrpSink::InitializeL : Exit");
       
   292     }
       
   293 
       
   294 
       
   295 void CMceMsrpSink::SetPortFromPathAttrL(TUriC8& aMsrpUri, CMceMessageStream& aStream)
       
   296     {
       
   297     __ASSERT_ALWAYS(aStream.Type() == KMceMessage, User::Leave(KErrArgument));
       
   298     
       
   299     MCECLI_DEBUG("\n CMceMsrpSink::SetPortFromPathAttr : Entry");
       
   300     TUriParser8 parser;
       
   301     TInt parseValue = parser.Parse(aMsrpUri.UriDes()); 
       
   302     MCECLI_DEBUG_DVALUE("\n CMceMsrpSink::SetPortFromPathAttr: Parsed return value for MSRP URI: ",
       
   303             parseValue);
       
   304         
       
   305     TBuf8<50> host = parser.Extract(EUriHost);
       
   306     TBuf8<10> portBuf = parser.Extract(EUriPort);
       
   307     TInt Port;
       
   308         
       
   309     TBuf16<10> portBuf16;
       
   310     portBuf16.Copy(portBuf);
       
   311     TLex lex(portBuf16);
       
   312     lex.Val(Port);  // returns the port value 
       
   313     // Set media port
       
   314     aStream.SetLocalMediaPortL(Port);
       
   315 	if (aStream.BoundStream())
       
   316 		{
       
   317 		aStream.BoundStreamL().SetLocalMediaPortL(Port);
       
   318 		}
       
   319     MCECLI_DEBUG_DVALUE("\n CMceMsrpSink::SetPortFromPathAttr: Media port is : ", 
       
   320                 Port);
       
   321     MCECLI_DEBUG("\n CMceMsrpSink::SetPortFromPathAttr : Exit");
       
   322     }
       
   323 
       
   324 
       
   325 EXPORT_C void CMceMsrpSink::SetPathToSaveReceivedFile(const TDesC16& aFilePath)
       
   326     {
       
   327     if ( FLAT_DATA(iFilePath) != NULL)
       
   328         {
       
   329         delete FLAT_DATA(iFilePath);
       
   330         FLAT_DATA(iFilePath) = NULL;
       
   331         }
       
   332     FLAT_DATA(iFilePath) = aFilePath.Alloc();
       
   333     }
       
   334 
       
   335 EXPORT_C void CMceMsrpSink::EnableFileTransferProgressNotifications(TBool enableFlag)
       
   336     {
       
   337     FLAT_DATA(iFTProgressNotification) = enableFlag;
       
   338     }