connectivitymodules/SeCon/servers/pcconn/src/sconpcconnserver.cpp
changeset 0 d0791faffa3f
child 18 453dfc402455
equal deleted inserted replaced
-1:000000000000 0:d0791faffa3f
       
     1 /*
       
     2 * Copyright (c) 2005-2009 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:  PC Connectivity server
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <s32mem.h> // For RMemReadStream
       
    20 #include <utf.h>
       
    21 
       
    22 #include "sconpcconnclientserver.h"
       
    23 #include "sconpcconnserver.h"
       
    24 #include "sconpcd.h"
       
    25 #include "sconcsc.h"
       
    26 #include "sconconmlhandler.h"
       
    27 #include "debug.h"
       
    28 
       
    29 #ifdef DEBUG_XML
       
    30 #include <s32file.h>
       
    31 _LIT8( KTimeFormat, "%02d:%02d:%02d.%03d" );
       
    32 _LIT8( KXmlBegin, "\nXML:\n" );
       
    33 #endif
       
    34 
       
    35 _LIT( KSCONGetMetadataRequest, "METADATA:" );
       
    36 
       
    37 //------------------------------------------------------------
       
    38 // Global functions 
       
    39 //------------------------------------------------------------
       
    40 
       
    41 // -----------------------------------------------------------------------------
       
    42 // E32Main()
       
    43 // Entry point 
       
    44 // -----------------------------------------------------------------------------
       
    45 //
       
    46 TInt E32Main()
       
    47     {
       
    48     TRACE_FUNC_ENTRY;
       
    49     __UHEAP_MARK;
       
    50     TInt error( KErrNone );
       
    51     error = CSConPCConnServer::RunServer();
       
    52     __UHEAP_MARKEND;
       
    53     TRACE_FUNC_EXIT;
       
    54     return error;
       
    55     }
       
    56 
       
    57 // -----------------------------------------------------------------------------
       
    58 // PanicServer()
       
    59 // Panics the server with panic reason aPanic 
       
    60 // -----------------------------------------------------------------------------
       
    61 //
       
    62 GLDEF_C void PanicServer(TPCConnServPanic aPanic)
       
    63     {
       
    64     LOGGER_WRITE_1( "CSConPCConnSession::PanicServer() : Panic code  %d", aPanic );  
       
    65     _LIT(KTxtServerPanic,"PCConn server panic");
       
    66     User::Panic(KTxtServerPanic,aPanic);
       
    67     }
       
    68 
       
    69 // -----------------------------------------------------------------------------
       
    70 // CSConPCConnServer::CSConPCConnServer ()
       
    71 // Default constructor - can not leave
       
    72 // -----------------------------------------------------------------------------
       
    73 //
       
    74 CSConPCConnServer::CSConPCConnServer () : CServer2( EPriorityStandard)
       
    75     {
       
    76     LOGGER_WRITE( "* * * *  CSConPCConnServer  * * * *" );
       
    77     }
       
    78 
       
    79 // -----------------------------------------------------------------------------
       
    80 // CSConPCConnServer::~CSConPCConnServer()
       
    81 // Default destructor
       
    82 // -----------------------------------------------------------------------------
       
    83 //
       
    84 EXPORT_C CSConPCConnServer::~CSConPCConnServer()
       
    85     {
       
    86     TRACE_FUNC;
       
    87     }
       
    88 
       
    89 // -----------------------------------------------------------------------------
       
    90 // CSConPCConnServer::NewLC()
       
    91 // Creates a new instance of CSConPCConnServer
       
    92 // -----------------------------------------------------------------------------
       
    93 //
       
    94 EXPORT_C CSConPCConnServer*  CSConPCConnServer::NewLC()
       
    95     {
       
    96     TRACE_FUNC_ENTRY;
       
    97     CSConPCConnServer* self  = new (ELeave) CSConPCConnServer();
       
    98     CleanupStack::PushL( self );
       
    99     self->StartL( KSConPCConnServerName );
       
   100     TRACE_FUNC_EXIT;
       
   101     return self;
       
   102     }
       
   103 
       
   104 // -----------------------------------------------------------------------------
       
   105 // CSConPCConnServer::NewSessionL()
       
   106 // Creates a new session to the client
       
   107 // -----------------------------------------------------------------------------
       
   108 //
       
   109 CSession2* CSConPCConnServer::NewSessionL( 
       
   110     const TVersion &aVersion, const RMessage2& /*aMessage*/ ) const
       
   111     {
       
   112     TRACE_FUNC_ENTRY;
       
   113     
       
   114     // check version
       
   115     TVersion version( KSConPCConnServerVersionMajor, 
       
   116                                   KSConPCConnServerVersionMinor, 
       
   117                                   KSConPCConnServerVersionBuild);
       
   118     
       
   119     if (!User::QueryVersionSupported(version, aVersion))
       
   120         {
       
   121         User::Leave(KErrNotSupported);
       
   122         }
       
   123     
       
   124     // check client identity
       
   125     RThread client;
       
   126     Message().Client( client );
       
   127     TSecureId clientId = client.SecureId();
       
   128     
       
   129     if ( clientId != KSConPCConnClientSecureId )
       
   130         {
       
   131         LOGGER_WRITE( "CSConPCConnServer::NewSessionL() : Secure ID does not match" );
       
   132         User::Leave( KErrAccessDenied );
       
   133         }
       
   134     
       
   135     TRACE_FUNC_EXIT;
       
   136     return CSConPCConnSession::NewL( *CONST_CAST( CSConPCConnServer*, this));
       
   137     }
       
   138 
       
   139 // -----------------------------------------------------------------------------
       
   140 // CSConPCConnServer::RunServer()
       
   141 // Starts the server
       
   142 // -----------------------------------------------------------------------------
       
   143 //
       
   144 TInt CSConPCConnServer::RunServer()
       
   145     {
       
   146     TRACE_FUNC_ENTRY;
       
   147     
       
   148     CTrapCleanup* cleanup = CTrapCleanup::New();
       
   149     TInt ret = KErrNoMemory;
       
   150     if( cleanup )
       
   151         {
       
   152         TRAP( ret, CSConPCConnServer::RunServerL(  ) );
       
   153         delete cleanup;
       
   154         }
       
   155     if( ret != KErrNone )
       
   156         {
       
   157         // Signal the client that server creation failed
       
   158         RProcess::Rendezvous( ret );
       
   159         }
       
   160     TRACE_FUNC_EXIT;
       
   161     return ret;
       
   162     }
       
   163 
       
   164 // -----------------------------------------------------------------------------
       
   165 // CSConPCConnServer::RunServerL()
       
   166 // Starts the server
       
   167 // -----------------------------------------------------------------------------
       
   168 //
       
   169 void CSConPCConnServer::RunServerL()
       
   170     {
       
   171     // Create and install the active scheduler we need
       
   172     TRACE_FUNC_ENTRY;
       
   173     CActiveScheduler *as=new (ELeave)CActiveScheduler;
       
   174     CleanupStack::PushL( as );
       
   175     CActiveScheduler::Install( as );
       
   176 
       
   177     // Create server
       
   178     CSConPCConnServer* server = CSConPCConnServer::NewLC();
       
   179 
       
   180     // Initialisation complete, now signal the client
       
   181     User::LeaveIfError( RThread().RenameMe( KSConPCConnServerName ) );
       
   182     RProcess::Rendezvous( KErrNone );
       
   183 
       
   184     // Ready to run
       
   185     CActiveScheduler::Start();
       
   186     
       
   187     // Cleanup the scheduler
       
   188     CleanupStack::PopAndDestroy( 2, as );
       
   189     TRACE_FUNC_EXIT;
       
   190     }
       
   191     
       
   192 // -----------------------------------------------------------------------------
       
   193 // CSConPCConnServer::IncSessionCount()
       
   194 // Increments session count
       
   195 // -----------------------------------------------------------------------------
       
   196 //
       
   197 void CSConPCConnServer::IncSessionCount()
       
   198     {
       
   199     TRACE_FUNC_ENTRY;
       
   200     iSessionCount++;
       
   201     LOGGER_WRITE_1( "There are now %d sessions", iSessionCount );
       
   202     TRACE_FUNC_EXIT;
       
   203     }    
       
   204     
       
   205 // -----------------------------------------------------------------------------
       
   206 // CSConPCConnServer::DecSessionCount()
       
   207 // Decrements session count
       
   208 // -----------------------------------------------------------------------------
       
   209 //
       
   210 void CSConPCConnServer::DecSessionCount()
       
   211     {
       
   212     TRACE_FUNC_ENTRY;
       
   213     iSessionCount--;
       
   214     LOGGER_WRITE_1( "There are still %d sessions", iSessionCount );
       
   215     if ( iSessionCount < 1 )
       
   216         {
       
   217         Cancel();
       
   218         CActiveScheduler::Stop();   
       
   219         }
       
   220     TRACE_FUNC_EXIT;
       
   221     } 
       
   222 
       
   223 // -----------------------------------------------------------------------------
       
   224 // CSConPCConnSession::CSConPCConnSession()
       
   225 // Default constructor 
       
   226 // -----------------------------------------------------------------------------
       
   227 //
       
   228 CSConPCConnSession::CSConPCConnSession (
       
   229      CSConPCConnServer& aServer ) : iServer (aServer)
       
   230     {
       
   231     TRACE_FUNC_ENTRY;
       
   232     iServer.IncSessionCount();
       
   233     TRACE_FUNC_EXIT;
       
   234     }
       
   235 
       
   236 // -----------------------------------------------------------------------------
       
   237 // CSConPCConnSession::CSConPCConnSession()
       
   238 // Default destructor - frees resources
       
   239 // -----------------------------------------------------------------------------
       
   240 //
       
   241 CSConPCConnSession::~CSConPCConnSession()
       
   242     {
       
   243     TRACE_FUNC_ENTRY;
       
   244     
       
   245     iServer.DecSessionCount();
       
   246 
       
   247     if ( iConMLHandler )
       
   248         {
       
   249         delete iConMLHandler;
       
   250         iConMLHandler = NULL;
       
   251         iConMLHandlerLib.Close();
       
   252         }
       
   253 
       
   254     if ( iPCDHandler )
       
   255         {
       
   256         delete iPCDHandler;
       
   257         iPCDHandler = NULL;
       
   258         iPCDlib.Close();
       
   259         }
       
   260 
       
   261     if ( iCSCHandler )
       
   262         {
       
   263         delete iCSCHandler;
       
   264         iCSCHandler = NULL;
       
   265         iCSClib.Close();
       
   266         }
       
   267     
       
   268     if ( iBuffer )
       
   269         {
       
   270         delete iBuffer;
       
   271         iBuffer = NULL;
       
   272         }
       
   273         
       
   274     iChunk.Close();
       
   275         
       
   276     TRACE_FUNC_EXIT;
       
   277     }
       
   278 
       
   279 // -----------------------------------------------------------------------------
       
   280 // CSConPCConnSession::NewL()
       
   281 // Creates a new instance of CSConPCConnSession
       
   282 // -----------------------------------------------------------------------------
       
   283 //
       
   284 EXPORT_C CSConPCConnSession *CSConPCConnSession::NewL(
       
   285     CSConPCConnServer& aServer)
       
   286     {
       
   287     TRACE_FUNC_ENTRY;
       
   288     CSConPCConnSession* self = new ( ELeave ) CSConPCConnSession(aServer);
       
   289     CleanupStack::PushL( self );
       
   290     self->ConstructL();
       
   291     CleanupStack::Pop( self );
       
   292     TRACE_FUNC_EXIT;
       
   293     return self;
       
   294     }
       
   295 
       
   296 // -----------------------------------------------------------------------------
       
   297 // CSConPCConnSession::ConstructL()
       
   298 // 2nd phase constructor
       
   299 // -----------------------------------------------------------------------------
       
   300 //
       
   301 void CSConPCConnSession::ConstructL()
       
   302     {
       
   303     TRACE_FUNC_ENTRY;
       
   304     TInt ret ( KErrNone );
       
   305     iResult = KErrNone;
       
   306     
       
   307 #ifdef DEBUG_XML
       
   308     // create log file 
       
   309     RFs fs;
       
   310     User::LeaveIfError( fs.Connect () );
       
   311     CleanupClosePushL( fs );
       
   312     
       
   313     RFile file;
       
   314     TInt err = file.Create ( fs, KSConConMLDebugFile, EFileWrite );
       
   315     if( err == KErrNone )
       
   316         {
       
   317         // file created, close it
       
   318         file.Close();
       
   319         }       
       
   320     
       
   321     CleanupStack::PopAndDestroy( &fs );               
       
   322 #endif
       
   323     
       
   324     // initialize buffer
       
   325     iBuffer = CBufFlat::NewL ( KSConPCConnBufferMaxSize );
       
   326     
       
   327     // load handlers
       
   328     if ( !iPCDHandler )
       
   329         {
       
   330         TRAP( ret, LoadPCDDllL() );
       
   331         if ( ret != KErrNone) 
       
   332             {
       
   333             LOGGER_WRITE_1( "CSConPCConnSession::ConstructL() : PCD load failed with error code %d", ret );
       
   334             User::Leave( ret );
       
   335             }
       
   336         }   
       
   337     
       
   338     if ( !iCSCHandler )
       
   339         {
       
   340         TRAP( ret, LoadCSCDllL() );
       
   341         if ( ret != KErrNone) 
       
   342             {
       
   343             LOGGER_WRITE_1( "CSConPCConnSession::ConstructL() : CSC dll load failed with error code %d", ret ); 
       
   344             User::Leave ( ret );
       
   345             }
       
   346         }
       
   347 
       
   348     // Load parser
       
   349     if ( !iConMLHandler )
       
   350         {
       
   351         TRAPD( ret, LoadConMLHandlerDllL() );
       
   352         if ( ret != KErrNone)
       
   353             {
       
   354             LOGGER_WRITE_1( "CSConPCConnSession::ConstructL() : Parser dll load failed with error code %d", ret );
       
   355             User::Leave ( ret );
       
   356             }
       
   357         }
       
   358 
       
   359     TRACE_FUNC_EXIT;
       
   360     }
       
   361 
       
   362 // -----------------------------------------------------------------------------
       
   363 // CSConPCConnSession::ServiceL()
       
   364 // Gets the client's request
       
   365 // -----------------------------------------------------------------------------
       
   366 //
       
   367 void CSConPCConnSession::ServiceL( const RMessage2 &aMessage)
       
   368     {
       
   369     TRACE_FUNC_ENTRY;
       
   370     TRAPD(err,DispatchRequestL(aMessage) );
       
   371     if ( err != KErrNone )
       
   372         {
       
   373         LOGGER_WRITE_1( "CSConPCConnSession::ServiceL() : leave code %d", err );
       
   374         PanicServer( E_DispatchRequest );
       
   375         }
       
   376     TRACE_FUNC_EXIT;
       
   377     }
       
   378 
       
   379 // -----------------------------------------------------------------------------
       
   380 // CSConPCConnSession::DispatchRequestL()
       
   381 // Identifies an IPC command from the client 
       
   382 // -----------------------------------------------------------------------------
       
   383 //
       
   384 void CSConPCConnSession::DispatchRequestL(const RMessage2 &aMessage)
       
   385     {
       
   386     TRACE_FUNC_ENTRY;
       
   387     
       
   388     TInt ret (KErrNone);
       
   389         
       
   390     switch (aMessage.Function())
       
   391         {
       
   392         case EPutMessage:
       
   393             LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EPutMessage" );
       
   394             ret = HandlePutMessageL();
       
   395             break;
       
   396         
       
   397         case EGetMessage:
       
   398             LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EGetMessage" );
       
   399             ret = HandleGetMessageL();
       
   400             break;
       
   401         
       
   402         case EResetMessage:
       
   403             LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EResetMessage" );
       
   404             ret = HandleResetMessage();
       
   405             break;
       
   406             
       
   407         case EChunkMessage:
       
   408             LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EChunkMessage" );
       
   409             ret = HandleChunkMessage( aMessage );
       
   410             break;
       
   411                         
       
   412         default:
       
   413             PanicServer (E_BadRequest);
       
   414             break;
       
   415         }
       
   416 
       
   417     aMessage.Complete( ret );
       
   418     TRACE_FUNC_EXIT;
       
   419     }
       
   420 
       
   421 // -----------------------------------------------------------------------------
       
   422 // CSConPCConnSession::HandlePutMessageL()
       
   423 // Handles a PUT -type message from the client
       
   424 // -----------------------------------------------------------------------------
       
   425 //
       
   426 TInt CSConPCConnSession::HandlePutMessageL()
       
   427     {
       
   428     TRACE_FUNC_ENTRY;
       
   429     LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL() : begin : Heap count : %d", User::Heap().Count() );
       
   430     TInt ret ( KErrNone );
       
   431         
       
   432     if ( !iPCDHandler )
       
   433         {
       
   434         TRAP( ret, LoadPCDDllL() );
       
   435         if ( ret != KErrNone) 
       
   436             {
       
   437             LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL (): PCD dll load failed with error code %d", ret );    
       
   438             return ( ret );
       
   439             }
       
   440         }   
       
   441         
       
   442     if ( ! iConMLHandler )
       
   443         {
       
   444         TRAP ( ret, LoadConMLHandlerDllL() );
       
   445         if ( ret != KErrNone )
       
   446             {
       
   447             LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL (): ConML Handler dll load failed with error code %d", ret );  
       
   448             return ( ret );
       
   449             }
       
   450         }
       
   451         
       
   452     TInt length ( 0 );
       
   453     
       
   454     RMemReadStream buf( iChunk.Base(), iChunk.Size() );
       
   455 
       
   456 
       
   457     iBuffer->Reset();
       
   458 
       
   459     length = buf.ReadInt32L();
       
   460     HBufC8* name = HBufC8::NewLC( length );
       
   461     TPtr8 namePtr = name->Des();
       
   462     buf.ReadL( namePtr, length);
       
   463         
       
   464     length = buf.ReadInt32L();
       
   465     HBufC8* type = HBufC8::NewLC( length );
       
   466     TPtr8 typePtr = type->Des();
       
   467     buf.ReadL( typePtr, length);
       
   468    
       
   469     // WBXML Document
       
   470     length = buf.ReadInt32L();
       
   471     HBufC8* data = HBufC8::NewLC( length );
       
   472     TPtr8 dataPtr = data->Des();
       
   473     
       
   474     buf.ReadL( dataPtr, length );
       
   475     iBuffer->ResizeL( length );
       
   476     iBuffer->Write( 0, dataPtr );
       
   477             
       
   478     buf.Close();
       
   479     
       
   480 #ifdef DEBUG_XML
       
   481     RFs fs;
       
   482     User::LeaveIfError( fs.Connect() );
       
   483     CleanupClosePushL( fs );
       
   484 
       
   485     RFile file;
       
   486     if ( file.Open( fs, KSConConMLDebugFile, EFileWrite ) == KErrNone )
       
   487         {
       
   488         RFileWriteStream fws;
       
   489         TInt fileSize;
       
   490         file.Size( fileSize );
       
   491         
       
   492         TTime now;
       
   493         now.HomeTime();
       
   494         TDateTime time = now.DateTime();
       
   495         TBuf8<16> timeLine;
       
   496         timeLine.Format (KTimeFormat, time.Hour(), time.Minute(), 
       
   497                                     time.Second(), time.MicroSecond() );
       
   498         
       
   499         fws.Attach( file, fileSize );
       
   500         fws.PushL();
       
   501         fws.WriteL( timeLine );
       
   502         _LIT8( KPutMessage, "__________PUT-MESSAGE \nWBXML:\n" );
       
   503         fws.WriteL( KPutMessage );
       
   504         fws.WriteL( iBuffer->Ptr(0), iBuffer->Size() );
       
   505         TRAP_IGNORE( fws.CommitL() );
       
   506         fws.Close();
       
   507  
       
   508         CleanupStack::PopAndDestroy( &fws );
       
   509         }
       
   510     file.Close();   
       
   511     CleanupStack::PopAndDestroy( &fs );
       
   512 #endif
       
   513     
       
   514     if ( ( typePtr.Compare( KSConPCDWBXMLObjectType ) == KErrNone) || 
       
   515          ( typePtr.Compare( KSConPCDWBXMLObjectType2 )== KErrNone) )
       
   516         {
       
   517         LOGGER_WRITE( "CSConPCConnSession::HandlePutMessageL() : Object type PCD " );
       
   518         TRAPD( err, ret = iConMLHandler->ParseDocumentL( *iBuffer, this ) );    
       
   519         if ( err != KErrNone )
       
   520             {
       
   521             ret = err;
       
   522             }
       
   523         if ( ret == KErrNone )
       
   524             {
       
   525             // Possible error code returned from PCCS 
       
   526             ret = iResult;
       
   527             }
       
   528         }
       
   529     else 
       
   530         {
       
   531         LOGGER_WRITE( "Object type not regognized " );
       
   532         ret = KErrNotSupported;
       
   533         }
       
   534     CleanupStack::PopAndDestroy( data );
       
   535     CleanupStack::PopAndDestroy( type );
       
   536     CleanupStack::PopAndDestroy( name );
       
   537     LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL() end : Heap count : %d", User::Heap().Count() );
       
   538     LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL() : returned %d", ret );    
       
   539     return ret;
       
   540     }
       
   541 
       
   542 // -----------------------------------------------------------------------------
       
   543 // CSConPCConnSession::HandleGetMessageL()
       
   544 // Handles a GET -type message from the client
       
   545 // -----------------------------------------------------------------------------
       
   546 //
       
   547 TInt CSConPCConnSession::HandleGetMessageL()
       
   548     {
       
   549     TRACE_FUNC_ENTRY;
       
   550     TInt ret ( KErrNone );
       
   551     
       
   552     if ( !iCSCHandler )
       
   553         {
       
   554         TRAP( ret, LoadCSCDllL() );
       
   555         if ( ret != KErrNone) 
       
   556             {
       
   557             LOGGER_WRITE_1( "CSConPCConnSession::HandleGetMessageL() : CSC dll load failed with error code %d", ret ); 
       
   558             return ret;
       
   559             }
       
   560         }
       
   561 
       
   562     TInt32 length ( 0 );
       
   563     RMemReadStream readBuf( iChunk.Base(), iChunk.Size() );
       
   564     iBuffer->Reset();
       
   565     
       
   566     length = readBuf.ReadInt32L();
       
   567     HBufC8* name = HBufC8::NewLC( length );
       
   568     TPtr8 namePtr8 = name->Des();
       
   569     readBuf.ReadL( namePtr8, length);
       
   570     namePtr8.SetLength( length );
       
   571     LOGGER_WRITE8_1("namePtr: %S", &namePtr8);
       
   572     
       
   573     const TUint8* ptr8 = namePtr8.Ptr();
       
   574     const TUint16* ptr16 = reinterpret_cast<const TUint16*>( ptr8 );
       
   575     TPtrC namePtr;
       
   576     namePtr.Set( ptr16, length/2 );
       
   577     
       
   578     length = readBuf.ReadInt32L();
       
   579     HBufC8* type = HBufC8::NewLC( length );
       
   580     TPtr8 typePtr = type->Des();
       
   581     readBuf.ReadL( typePtr, length);
       
   582     
       
   583     readBuf.Close();
       
   584         
       
   585     if ( typePtr.Compare( KSConCapabilityObjectType ) == KErrNone )
       
   586         {
       
   587         ret = iCSCHandler->CapabilityObject( *iBuffer );
       
   588         
       
   589 #ifdef DEBUG_XML
       
   590         RFs fs;
       
   591         User::LeaveIfError(fs.Connect());
       
   592         CleanupClosePushL(fs);
       
   593 
       
   594         RFile file;
       
   595         if ( file.Open(fs, KSConConMLDebugFile, EFileWrite ) == KErrNone )
       
   596             {
       
   597             RFileWriteStream fws;
       
   598             TInt fileSize;
       
   599             file.Size ( fileSize );
       
   600             TTime now;
       
   601             now.HomeTime();
       
   602             TDateTime time = now.DateTime();
       
   603             TBuf8<16> timeLine;
       
   604             timeLine.Format( KTimeFormat, time.Hour(), time.Minute(), 
       
   605                                         time.Second(), time.MicroSecond() );
       
   606 
       
   607             fws.Attach ( file, fileSize);
       
   608             fws.PushL();
       
   609             fws.WriteL( timeLine );
       
   610             _LIT8( KGetMessage, "__________GET -MESSAGE - Capability Object \n " );
       
   611             fws.WriteL( KGetMessage );
       
   612             fws.WriteL( iBuffer->Ptr(0), iBuffer->Size() );
       
   613             TRAP_IGNORE( fws.CommitL() );
       
   614             fws.Close();
       
   615 
       
   616             CleanupStack::PopAndDestroy( &fws );
       
   617             }
       
   618         file.Close();
       
   619         CleanupStack::PopAndDestroy( &fs );
       
   620 #endif
       
   621 
       
   622         }
       
   623     else if (  typePtr.CompareC( KSConPCDWBXMLObjectType) == KErrNone )
       
   624         {
       
   625         ret = HandleWBXMLGetRequestL( namePtr );
       
   626         }
       
   627     else
       
   628         {
       
   629         LOGGER_WRITE( "CSConPCConnSession::HandleGetMessageL() : Header type not regognized " );
       
   630         ret = KErrNotSupported;
       
   631         }
       
   632     
       
   633     CleanupStack::PopAndDestroy( 2 ); // name, type
       
   634     
       
   635     if ( ret != KErrNone )
       
   636         {
       
   637         return ret;
       
   638         }
       
   639     
       
   640     length = iBuffer->Size();
       
   641     
       
   642     if ( sizeof(TInt32) + length > iChunk.Size() )
       
   643         {
       
   644         // need to resize chunk
       
   645         TInt err = iChunk.Adjust( sizeof(TInt32) + length );
       
   646         LOGGER_WRITE_2("iChunk.Adjust( %d ) err: %d", sizeof(TInt32) + length, err);
       
   647         if ( err )
       
   648             {
       
   649             iBuffer->Reset();
       
   650             LOGGER_WRITE_1( "CSConPCConnSession::HandleGetMessageL() : returned %d", ret );
       
   651             return err;
       
   652             }
       
   653         }
       
   654     
       
   655     // copy data to chunk
       
   656     RMemWriteStream writeBuf ( iChunk.Base(), iChunk.Size() );
       
   657     
       
   658     if ( length > 0 )
       
   659         {
       
   660         writeBuf.WriteInt32L( length );
       
   661         writeBuf.WriteL( iBuffer->Ptr(0), length );
       
   662         writeBuf.CommitL();
       
   663         }
       
   664     else 
       
   665         {
       
   666         writeBuf.WriteInt32L( 0 );
       
   667         }
       
   668     writeBuf.CommitL();
       
   669     writeBuf.Close();
       
   670     iBuffer->Reset();
       
   671     LOGGER_WRITE_1( "CSConPCConnSession::HandleGetMessageL() : returned %d", ret );
       
   672     return ( ret );
       
   673     }
       
   674 
       
   675 // -----------------------------------------------------------------------------
       
   676 // CSConPCConnSession::HandleWBXMLGetRequestL()
       
   677 // Handles a ConML(wbxml) Get request from the client
       
   678 // -----------------------------------------------------------------------------
       
   679 //
       
   680 TInt CSConPCConnSession::HandleWBXMLGetRequestL( const TDesC& aFileName )
       
   681     {
       
   682     TRACE_FUNC_ENTRY;
       
   683     TInt ret(KErrNone);
       
   684     if ( aFileName.Find(KSCONGetMetadataRequest) == 0 )
       
   685         {
       
   686         // ConML get metadata request --> Create metadata task
       
   687         LOGGER_WRITE( "ConML GetMetadataRequest" );
       
   688         TPtrC filename = aFileName.Mid( KSCONGetMetadataRequest().Length() );
       
   689         
       
   690         TSConMethodName method ( EGetMetadata );
       
   691         CSConTask* task = CSConTask::NewLC( method );
       
   692         
       
   693         if ( filename.Length() > task->iGetMetadataParams->iFilename.MaxLength() )
       
   694             {
       
   695             User::Leave( KErrTooBig );
       
   696             }
       
   697         task->iGetMetadataParams->iFilename = filename;
       
   698         
       
   699         ret = iPCDHandler->PutTaskL( task );
       
   700         CleanupStack::Pop( task );
       
   701         LOGGER_WRITE_1("iPCDHandler->PutTaskL ret: %d", ret);
       
   702         }
       
   703     else if ( aFileName.Length() > 0 )
       
   704         {
       
   705         LOGGER_WRITE("Error: aFilename does not match to any definitions");
       
   706         TRACE_FUNC_RET( KErrArgument );
       
   707         return KErrArgument;
       
   708         }
       
   709     
       
   710 	// Get reply
       
   711     LOGGER_WRITE( "CSConPCConnSession::HandleGetMessageL() before ConML GetReplyL" );
       
   712     CSConStatusReply* reply = iPCDHandler->GetReply();
       
   713     CleanupStack::PushL( reply );
       
   714     
       
   715     ConML_ConMLPtr_t content = new ( ELeave ) ConML_ConML_t();
       
   716     CleanupStack::PushL( content );
       
   717     
       
   718     AppendStatusL( content, reply );
       
   719     ret = iConMLHandler->GenerateDocument( content );
       
   720     
       
   721     CleanupStack::PopAndDestroy( content );
       
   722     CleanupStack::PopAndDestroy( reply );
       
   723      
       
   724     TPtrC8 ptr( iConMLHandler->WBXMLDocument() );
       
   725     LOGGER_WRITE_1("ptr.Size(): %d", ptr.Size());
       
   726     iBuffer->ResizeL( ptr.Size() );
       
   727     iBuffer->Write( 0, ptr );
       
   728 
       
   729 #ifdef DEBUG_XML
       
   730     RFile file;
       
   731     if ( file.Open( iFs, KSConConMLDebugFile, EFileWrite) == KErrNone )
       
   732         {
       
   733         RFileWriteStream fws;   
       
   734         TInt fileSize;
       
   735         file.Size ( fileSize );
       
   736         fws.Attach ( file, fileSize);
       
   737         fws.PushL();
       
   738         TTime now;
       
   739         now.HomeTime();
       
   740         TDateTime time = now.DateTime();
       
   741         TBuf8<16> timeLine;
       
   742         timeLine.Format( KTimeFormat, time.Hour(), time.Minute(), 
       
   743                          time.Second(), time.MicroSecond() );
       
   744 
       
   745         fws.WriteL( timeLine );
       
   746         _LIT8( KGetMessage, "__________GET -MESSAGE" );
       
   747         fws.WriteL( KGetMessage );
       
   748         fws.WriteL(KXmlBegin);
       
   749         fws.WriteL(iConMLHandler->XMLDocument().Ptr(), 
       
   750                           iConMLHandler->XMLDocument().Length());
       
   751         fws.WriteL(_L("\n\n"));
       
   752         TRAP_IGNORE( fws.CommitL() );
       
   753         fws.Close();
       
   754         CleanupStack::PopAndDestroy( &fws );
       
   755         }
       
   756         
       
   757     file.Close();
       
   758 #endif
       
   759     TRACE_FUNC_RET(ret);
       
   760     return ret;
       
   761     }
       
   762 
       
   763 // -----------------------------------------------------------------------------
       
   764 // CSConPCConnSession::HandleResetMessage()
       
   765 // Resets the PCCS service
       
   766 // -----------------------------------------------------------------------------
       
   767 //
       
   768 TInt CSConPCConnSession::HandleResetMessage()   
       
   769     {
       
   770     TRACE_FUNC_ENTRY;
       
   771     TInt ret ( KErrNone );
       
   772     
       
   773     // reset PCD
       
   774     if ( iPCDHandler )
       
   775         {
       
   776         iPCDHandler->ResetPCD();
       
   777         }
       
   778         
       
   779     LOGGER_WRITE_1( "CSConPCConnSession::HandleResetMessage() : ret %d", ret );
       
   780     return ret;
       
   781     }
       
   782     
       
   783 // -----------------------------------------------------------------------------
       
   784 // CSConPCConnSession::HandleChunkMessage( const RMessage2& aMessage )
       
   785 // Receives the chunk handle from the client
       
   786 // -----------------------------------------------------------------------------
       
   787 //
       
   788 TInt CSConPCConnSession::HandleChunkMessage( const RMessage2& aMessage )    
       
   789     {
       
   790     TRACE_FUNC_ENTRY;
       
   791     TInt ret ( KErrNone );
       
   792     
       
   793     ret = iChunk.Open( aMessage, 0, EFalse );
       
   794         
       
   795     LOGGER_WRITE_1( "CSConPCConnSession::HandleChunkMessageL() : ret %d", ret );
       
   796     return ret;
       
   797     }
       
   798 
       
   799 // -----------------------------------------------------------------------------
       
   800 // CSConPCConnSession::LoadPCDDllL()
       
   801 // Loads the PCCS service
       
   802 // -----------------------------------------------------------------------------
       
   803 //
       
   804 void CSConPCConnSession::LoadPCDDllL()
       
   805     {
       
   806     TRACE_FUNC_ENTRY;
       
   807     
       
   808     // Dynamically load DLL
       
   809     User::LeaveIfError( iPCDlib.Load( KSConPCDLibName ) );
       
   810     if( iPCDlib.Type()[1] != KSConPCDUid )
       
   811         {
       
   812         LOGGER_WRITE( "CSConPCConnSession::LoadPCDDllL() : KSConPCDUidValue incorrect..." );
       
   813         iPCDlib.Close();
       
   814         User::Leave( KErrNotFound );
       
   815         }   
       
   816     TSConCreateCSConPCDFunc CreateCSConPCDL =
       
   817     (TSConCreateCSConPCDFunc)iPCDlib.Lookup(1);
       
   818     
       
   819     iPCDHandler = (CSConPCD*)CreateCSConPCDL();
       
   820     TRACE_FUNC_EXIT;
       
   821     }
       
   822 
       
   823 // -----------------------------------------------------------------------------
       
   824 // CSConPCConnSession::LoadCSCDllL()
       
   825 // Loads the CSC service
       
   826 // -----------------------------------------------------------------------------
       
   827 //
       
   828 void CSConPCConnSession::LoadCSCDllL()
       
   829     {
       
   830     TRACE_FUNC_ENTRY;
       
   831     // Dynamically load DLL
       
   832     User::LeaveIfError( iCSClib.Load( KSConCSCLibName ) );
       
   833     if( iCSClib.Type()[1] != KSConCSCUid )
       
   834         {
       
   835         LOGGER_WRITE( "CSConPCConnSession::LoadCSCDllL() : KSConCSCUidValue incorrect" );
       
   836         iCSClib.Close();
       
   837         User::Leave( KErrNotFound );
       
   838         }   
       
   839     TSConCreateCSConCSCFunc CreateCSConCSCL = 
       
   840     (TSConCreateCSConCSCFunc)iCSClib.Lookup(1);
       
   841     
       
   842     iCSCHandler = (CSConCSC*)CreateCSConCSCL();
       
   843     TRACE_FUNC_EXIT;
       
   844     }
       
   845 
       
   846 // -----------------------------------------------------------------------------
       
   847 // CSConPCConnSession::LoadConMLHandlerDllL()
       
   848 // Loads the ConML handler
       
   849 // -----------------------------------------------------------------------------
       
   850 //
       
   851 void CSConPCConnSession::LoadConMLHandlerDllL()
       
   852     {
       
   853     TRACE_FUNC_ENTRY;
       
   854     // Dynamically load DLL
       
   855     User::LeaveIfError( iConMLHandlerLib.Load( KSConConMLHandlerLibName ) );
       
   856     if ( iConMLHandlerLib.Type()[1] != KSConConMLHandlerUid )
       
   857         {
       
   858         LOGGER_WRITE( "CSConPCConnSession::LoadConMLHandlerDllL() : KSConConMLHandlerUidValue incorrect" );
       
   859         iConMLHandlerLib.Close();
       
   860         User::Leave( KErrNotFound );
       
   861         }
       
   862     TSConCreateCSConConMLHandlerFunc CreateCSConConMLHandlerL = 
       
   863     (TSConCreateCSConConMLHandlerFunc)iConMLHandlerLib.Lookup(1);
       
   864     
       
   865     iConMLHandler = (CSConConMLHandler*)CreateCSConConMLHandlerL();
       
   866     TRACE_FUNC_EXIT;
       
   867     }
       
   868 
       
   869 // -----------------------------------------------------------------------------
       
   870 // CSConPCConnSession::ConMLL()
       
   871 // Callback function for ConML handler - parsed data processing starts
       
   872 // -----------------------------------------------------------------------------
       
   873 //
       
   874 void CSConPCConnSession::ConMLL( ConML_ConMLPtr_t aContent )
       
   875     {
       
   876     TRACE_FUNC_ENTRY;
       
   877     TInt ret ( KErrNone );
       
   878     
       
   879 #ifdef DEBUG_XML
       
   880     iConMLHandler->GenerateDocument( aContent );
       
   881     RFs fs;
       
   882     User::LeaveIfError(fs.Connect());
       
   883     CleanupClosePushL(fs);
       
   884     RFile file;
       
   885     
       
   886     if ( file.Open(fs, KSConConMLDebugFile, EFileWrite) == KErrNone )
       
   887         {
       
   888         RFileWriteStream fws;
       
   889         TInt fileSize;
       
   890         file.Size( fileSize );
       
   891         fws.Attach ( file, fileSize );
       
   892         fws.PushL();
       
   893         
       
   894         TTime now;
       
   895         now.HomeTime();
       
   896         TDateTime time = now.DateTime();
       
   897         TBuf8<16> timeLine;
       
   898         timeLine.Format (KTimeFormat, time.Hour(), time.Minute(), 
       
   899                                     time.Second(), time.MicroSecond() );
       
   900         
       
   901         fws.WriteL( timeLine );
       
   902         _LIT8( KPutMessage, "__________PUT-MESSAGE" );
       
   903         fws.WriteL( KPutMessage );
       
   904         fws.WriteL( KXmlBegin );
       
   905         fws.WriteL( iConMLHandler->XMLDocument().Ptr(), 
       
   906                     iConMLHandler->XMLDocument().Length());
       
   907         fws.WriteL(_L("\n\n"));
       
   908         TRAP_IGNORE( fws.CommitL() );
       
   909         fws.Close();
       
   910         CleanupStack::PopAndDestroy( &fws );
       
   911         }
       
   912     file.Close();
       
   913     CleanupStack::PopAndDestroy( &fs );
       
   914     
       
   915 #endif
       
   916 
       
   917 
       
   918     if ( aContent )
       
   919         {
       
   920         if ( aContent->execute )
       
   921             {
       
   922             ret = OptionsFromExecuteL( aContent->execute );
       
   923             }
       
   924         else if ( aContent->cancel )
       
   925             {
       
   926             ret = TaskCancelL( aContent->cancel );
       
   927             }
       
   928         else if ( aContent->getStatus )
       
   929             {
       
   930             ret = TaskGetStatusL ( aContent->getStatus );
       
   931             }
       
   932         else 
       
   933             {
       
   934             LOGGER_WRITE( "CSConPCConnSession::ConML() : No appropriate content in ConML -element " );
       
   935             ret = KErrArgument;
       
   936             }
       
   937         }
       
   938     else 
       
   939         {
       
   940         ret  = KErrArgument;
       
   941         }
       
   942     
       
   943     // store result for later use
       
   944     iResult = ret;
       
   945     TRACE_FUNC_EXIT;
       
   946     }
       
   947 
       
   948 // -----------------------------------------------------------------------------
       
   949 // CSConPCConnSession::OptionsFromExecuteL()
       
   950 // Handles data of an execute -element
       
   951 // -----------------------------------------------------------------------------
       
   952 //
       
   953 TInt CSConPCConnSession::OptionsFromExecuteL(ConML_ExecutePtr_t aContent )
       
   954     {
       
   955     TRACE_FUNC_ENTRY;
       
   956     
       
   957     TInt ret ( KErrNone );
       
   958     if ( aContent->updateDeviceInfo )
       
   959         {
       
   960         ret = TaskUpdateDeviceInfoL( aContent->updateDeviceInfo);
       
   961         }
       
   962     else if ( aContent->listInstalledApps )
       
   963         {
       
   964         ret = TaskListInstalledAppsL( aContent->listInstalledApps);
       
   965         }
       
   966     else if ( aContent->install )
       
   967         {
       
   968         ret = TaskInstallL( aContent->install );
       
   969         }       
       
   970     else if ( aContent->unInstall )
       
   971         {
       
   972         ret = TaskUnInstallL( aContent->unInstall );
       
   973         }
       
   974     else if ( aContent->listDataOwners )
       
   975         {
       
   976         ret = TaskListDataOwnersL();
       
   977         }
       
   978     else if ( aContent->setBurMode )    
       
   979         {
       
   980         ret = TaskSetBURModeL( aContent->setBurMode );
       
   981         }
       
   982     else if ( aContent->getDataSize )
       
   983         {
       
   984         ret = TaskGetDataSizeL( aContent->getDataSize );
       
   985         }
       
   986     else if ( aContent->requestData )
       
   987         {
       
   988         ret = TaskRequestDataL( aContent->requestData );
       
   989         }
       
   990     else if ( aContent->listPublicFiles )
       
   991         {
       
   992         ret = TaskListPublicFilesL( aContent->listPublicFiles );
       
   993         }
       
   994     else if ( aContent->reboot )
       
   995         {
       
   996         ret = TaskRebootL();
       
   997         }
       
   998     else if ( aContent->getDataOwnerStatus )
       
   999         {
       
  1000         ret = TaskGetDataOwnerStatusL( aContent->getDataOwnerStatus );      
       
  1001         }
       
  1002     else if ( aContent->supplyData )
       
  1003         {
       
  1004         ret = TaskSupplyDataL( aContent->supplyData );
       
  1005         }
       
  1006     else if ( aContent->getMetadata )
       
  1007         {
       
  1008         ret = TaskGetMetadataL( aContent->getMetadata );
       
  1009         }
       
  1010     else 
       
  1011         {
       
  1012         LOGGER_WRITE( "CSConPCConnSession::OptionsFromExecute() : No content " );
       
  1013         ret = KErrNotSupported;
       
  1014         }
       
  1015     LOGGER_WRITE_1( "CSConPCConnSession::OptionsFromExecute() : returned %d", ret );    
       
  1016     return ret;
       
  1017     }
       
  1018 
       
  1019 // -----------------------------------------------------------------------------
       
  1020 // CSConPCConnSession::TaskCancelL(ConML_CancelPtr_t aContent)
       
  1021 // Sends a Cancel -task to PCCS service
       
  1022 // -----------------------------------------------------------------------------
       
  1023 //
       
  1024 TInt CSConPCConnSession::TaskCancelL( ConML_CancelPtr_t aContent )
       
  1025     {
       
  1026     TRACE_FUNC_ENTRY;
       
  1027     TInt ret ( KErrNone );
       
  1028     TSConMethodName method ( ECancel );
       
  1029     CSConTask* task = CSConTask::NewLC( method );
       
  1030     if ( aContent->all )
       
  1031         {
       
  1032         task->iCancelTaskAll = ETrue;
       
  1033         }
       
  1034     if ( aContent->id )
       
  1035         {
       
  1036         task->iCancelTaskId = ( DesToInt( aContent->id->Data() ));
       
  1037         }
       
  1038     ret = iPCDHandler->PutTaskL( task );
       
  1039     CleanupStack::Pop( task );
       
  1040     LOGGER_WRITE_1( "CSConPCConnSession::TaskCancelL() : returned %d", ret );    
       
  1041     return ret;
       
  1042     }
       
  1043 
       
  1044 
       
  1045 // -----------------------------------------------------------------------------
       
  1046 // CSConPCConnSession::TaskGetStatusL()
       
  1047 // Sends a Get Status -task to PCCS service
       
  1048 // -----------------------------------------------------------------------------
       
  1049 //
       
  1050 TInt CSConPCConnSession::TaskGetStatusL( ConML_GetStatusPtr_t aContent )
       
  1051     {
       
  1052     TRACE_FUNC_ENTRY;
       
  1053     TInt ret ( KErrNone );
       
  1054     TSConMethodName method ( EGetStatus );
       
  1055     CSConTask* task = CSConTask::NewLC( method );
       
  1056     if ( aContent->all )
       
  1057         {
       
  1058         task->iGetStatusParams->iAll = ETrue;
       
  1059         }
       
  1060     if ( aContent->id)
       
  1061         {
       
  1062         task->iGetStatusParams->iTaskId = ( DesToInt( aContent->id->Data() ));
       
  1063         }
       
  1064     ret = iPCDHandler->PutTaskL( task );
       
  1065     CleanupStack::Pop( task );
       
  1066     LOGGER_WRITE_1( "CSConPCConnSession::TaskGetStatusL() : returned %d", ret );    
       
  1067     return ret;
       
  1068     }
       
  1069     
       
  1070 // -----------------------------------------------------------------------------
       
  1071 // CSConPCConnSession::TaskInstallL()
       
  1072 // Sends an Install -task to PCCS service
       
  1073 // -----------------------------------------------------------------------------
       
  1074 //
       
  1075 TInt CSConPCConnSession::TaskInstallL( ConML_InstallPtr_t aContent )
       
  1076     {
       
  1077     TRACE_FUNC_ENTRY;
       
  1078     TInt ret ( KErrNone );
       
  1079     TSConMethodName method ( EInstall );
       
  1080     CSConTask* task = CSConTask::NewLC( method);
       
  1081     task->iInstallParams->iMode = EUnknown;
       
  1082     if ( aContent->name )
       
  1083         {
       
  1084         // Unicode conversion from 8-bit to 16-bit
       
  1085         CnvUtfConverter::ConvertToUnicodeFromUtf8(task->iInstallParams->iPath, 
       
  1086                                                     aContent->name->Data());    
       
  1087         }
       
  1088     if ( aContent->instParams )
       
  1089         {
       
  1090         if ( aContent->instParams->param )
       
  1091             {
       
  1092             for ( ConML_ParamListPtr_t p = aContent->instParams->param; 
       
  1093                   p && p->data; p = p->next)
       
  1094                 {
       
  1095                 LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : Parameters found " );
       
  1096                 if ( p->data->name )
       
  1097                     {
       
  1098                     LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : name param found " );
       
  1099                     TPtrC8 silent(KParamNameSilent);
       
  1100                     
       
  1101                     TInt comp = Mem::Compare((TUint8*)p->data->name->content, (TInt)p->data->name->length, silent.Ptr(), silent.Length());
       
  1102                     if( comp == 0)
       
  1103                         {
       
  1104                         // "Silent"-param found
       
  1105                         LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : Silent-param found " );
       
  1106                         if ( p->data->value )
       
  1107                             {
       
  1108                             TPtrC8 dataValue((TUint8*)p->data->value->content, (TInt)p->data->value->length);
       
  1109                             TInt value = DesToInt( dataValue );
       
  1110                             if (value == 1)
       
  1111                                 {
       
  1112                                 LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : ESilentInstall " );
       
  1113                                 task->iInstallParams->iMode = ESilentInstall;
       
  1114                                 }
       
  1115                             else if( value == 0 )
       
  1116                                 {
       
  1117                                 LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : EUnsilentInstall " );
       
  1118                                 task->iInstallParams->iMode = EUnsilentInstall;
       
  1119                                 }
       
  1120                             }
       
  1121                         }
       
  1122                     }
       
  1123                 }
       
  1124             }
       
  1125         }
       
  1126     ret = iPCDHandler->PutTaskL( task );
       
  1127     CleanupStack::Pop( task );
       
  1128     LOGGER_WRITE_1( "CSConPCConnSession::TaskInstallL() : returned %d", ret );    
       
  1129     return ret;
       
  1130     }
       
  1131     
       
  1132 // -----------------------------------------------------------------------------
       
  1133 // CSConPCConnSession::TaskUnInstallL()
       
  1134 // Sends an Uninstall -task to PCCS service
       
  1135 // -----------------------------------------------------------------------------
       
  1136 //
       
  1137 TInt CSConPCConnSession::TaskUnInstallL( ConML_UnInstallPtr_t aContent )
       
  1138     {
       
  1139     TRACE_FUNC_ENTRY;
       
  1140     TInt ret ( KErrNone );
       
  1141     TSConMethodName method ( EUninstall );
       
  1142     CSConTask* task = CSConTask::NewLC( method );
       
  1143     task->iUninstallParams->iMode = EUnknown;
       
  1144     
       
  1145     if ( aContent->applications->application)       
       
  1146         {
       
  1147         for ( ConML_ApplicationListPtr_t p = 
       
  1148               aContent->applications->application; p && p->data; p = p->next )
       
  1149             {
       
  1150             if ( p->data )
       
  1151                 {
       
  1152                 if ( p->data->name )
       
  1153                     {
       
  1154                     // get application name
       
  1155                     HBufC* nameBuf = CnvUtfConverter::ConvertToUnicodeFromUtf8L( p->data->name->Data() );
       
  1156                     task->iUninstallParams->iName.Copy( nameBuf->Des() );
       
  1157                     delete nameBuf;
       
  1158                     nameBuf = NULL;
       
  1159                     }
       
  1160                 if ( p->data->uid )
       
  1161                     {
       
  1162                     // parse uid:  UID # Type # Size # Version # Vendor # Parent app. name #
       
  1163                     // only UID and Vendor are needed from whole uid-field.
       
  1164                     LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : start parsing uid " );
       
  1165                     
       
  1166                     TPtrC8 buf( p->data->uid->Data() );
       
  1167                     
       
  1168                     RArray<TPtrC8> arr(6);
       
  1169                     CleanupClosePushL( arr );
       
  1170                     TBuf8<1> separator(KSConAppInfoSeparator);
       
  1171                     
       
  1172                     SplitL(buf, separator[0], arr);
       
  1173                     if ( arr.Count() >= 5 )
       
  1174                     	{
       
  1175                     	task->iUninstallParams->iUid = DesToUid( arr[0] );
       
  1176                     	task->iUninstallParams->iType = (TSConAppType)DesToInt( arr[1] );
       
  1177                     	HBufC* vendorBuf = CnvUtfConverter::ConvertToUnicodeFromUtf8L( arr[4] );
       
  1178                     	task->iUninstallParams->iVendor.Copy( vendorBuf->Des() );
       
  1179                     	delete vendorBuf;
       
  1180                     	vendorBuf = NULL;
       
  1181                     	}
       
  1182                     CleanupStack::PopAndDestroy( &arr );
       
  1183                     
       
  1184                         
       
  1185                     } // endif p->data->uid
       
  1186                 }
       
  1187             }
       
  1188         }
       
  1189     
       
  1190     if ( aContent->instParams)
       
  1191         {
       
  1192         if ( aContent->instParams->param )
       
  1193             {
       
  1194             for ( ConML_ParamListPtr_t p = aContent->instParams->param; 
       
  1195                     p && p->data; p = p->next )
       
  1196                 {
       
  1197                 LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : Parameters found " );
       
  1198                 if ( p->data->name )
       
  1199                     {
       
  1200                     LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : name param found " );
       
  1201                     TPtrC8 silent(KParamNameSilent);
       
  1202                     
       
  1203                     TInt comp = Mem::Compare((TUint8*)p->data->name->content, (TInt)p->data->name->length, silent.Ptr(), silent.Length());
       
  1204                     if( comp == 0)
       
  1205                         {
       
  1206                         // "Silent"-param found
       
  1207                         LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : Silent-param found " );
       
  1208                         if ( p->data->value )
       
  1209                             {
       
  1210                             TPtrC8 dataValue((TUint8*)p->data->value->content, (TInt)p->data->value->length);
       
  1211                             TInt value = DesToInt( dataValue );
       
  1212                             if ( value == 1 )
       
  1213                                 {
       
  1214                                 LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : ESilentInstall " );
       
  1215                                 task->iUninstallParams->iMode = ESilentInstall;
       
  1216                                 }
       
  1217                             else if ( value == 0 )
       
  1218                                 {
       
  1219                                 LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : EUnsilentInstall " );
       
  1220                                 task->iUninstallParams->iMode = EUnsilentInstall;
       
  1221                                 }
       
  1222                             }
       
  1223                         }
       
  1224                     }
       
  1225                 }
       
  1226             }
       
  1227         }
       
  1228     ret = iPCDHandler->PutTaskL( task );
       
  1229     CleanupStack::Pop( task );
       
  1230     LOGGER_WRITE_1( "CSConPCConnSession::TaskUnInstallL() : returned %d", ret );    
       
  1231     return ret;
       
  1232     }
       
  1233 
       
  1234 // -----------------------------------------------------------------------------
       
  1235 // CSConPCConnSession::SplitL(const TDesC& aText, const TChar aSeparator, 
       
  1236 // RArray<TPtrC>& aArray)
       
  1237 // Function splits string (eg "name1, name2, name3") into substrings.
       
  1238 // -----------------------------------------------------------------------------
       
  1239 //
       
  1240 void CSConPCConnSession::SplitL(const TDesC8& aText, const TChar aSeparator, 
       
  1241                     RArray<TPtrC8>& aArray)
       
  1242     {
       
  1243     TRACE_FUNC_ENTRY;
       
  1244     TPtrC8 ptr;
       
  1245     ptr.Set(aText);
       
  1246 
       
  1247     for (;;)
       
  1248         {
       
  1249         TInt pos=ptr.Locate(aSeparator);
       
  1250         if (pos==KErrNotFound)
       
  1251             {
       
  1252             aArray.AppendL(ptr);
       
  1253             break;
       
  1254             }
       
  1255 
       
  1256         TPtrC8 subStr=ptr.Left(pos); // get pos characters starting from position 0
       
  1257         aArray.AppendL(subStr);
       
  1258 
       
  1259         if (!(ptr.Length()>pos+1))
       
  1260             {
       
  1261             break;
       
  1262             }
       
  1263             
       
  1264         ptr.Set(ptr.Mid(pos+1));// get all characters starting from position pos+1
       
  1265         }
       
  1266     TRACE_FUNC_EXIT;
       
  1267     }
       
  1268     
       
  1269 // -----------------------------------------------------------------------------
       
  1270 // CSConPCConnSession::TaskListInstalledAppsL()
       
  1271 // Sends a List installed apps -task to PCCS service
       
  1272 // -----------------------------------------------------------------------------
       
  1273 //
       
  1274 TInt CSConPCConnSession::TaskListInstalledAppsL(
       
  1275     ConML_ListInstalledAppsPtr_t aContent )
       
  1276     {
       
  1277     TRACE_FUNC_ENTRY;
       
  1278     TInt ret ( KErrNone );
       
  1279     TSConMethodName method ( EListInstalledApps );
       
  1280     CSConTask* task = CSConTask::NewLC( method );
       
  1281     if( aContent-> drives )
       
  1282         {
       
  1283         task->iListAppsParams->iDriveList = DriveList( aContent->drives->drive);
       
  1284         }
       
  1285     if ( aContent->all )
       
  1286         {
       
  1287         task->iListAppsParams->iAllApps = ETrue;
       
  1288         }
       
  1289     ret = iPCDHandler->PutTaskL( task );
       
  1290     CleanupStack::Pop( task );
       
  1291     LOGGER_WRITE_1( "CSConPCConnSession::TaskListInstalledAppsL() : returned %d", ret);
       
  1292     return ret;
       
  1293     }
       
  1294     
       
  1295 // -----------------------------------------------------------------------------
       
  1296 // CSConPCConnSession::TaskListDataOwnersL()
       
  1297 // Sends a List data owners -task to PCCS service
       
  1298 // -----------------------------------------------------------------------------
       
  1299 //
       
  1300 TInt CSConPCConnSession::TaskListDataOwnersL()
       
  1301     {
       
  1302     TRACE_FUNC_ENTRY;
       
  1303     TInt ret ( KErrNone );
       
  1304     TSConMethodName method ( EListDataOwners );
       
  1305     CSConTask* task = CSConTask::NewLC( method );
       
  1306     ret = iPCDHandler->PutTaskL( task );
       
  1307     CleanupStack::Pop( task );
       
  1308     LOGGER_WRITE_1( "CSConPCConnSession::TaskListDataOwnersL() : returned %d", ret );    
       
  1309     return ret;
       
  1310     }
       
  1311     
       
  1312 // -----------------------------------------------------------------------------
       
  1313 // CSConPCConnSession::TaskSetBURModeL()
       
  1314 // Sends a Set BUR mode -task to PCCS service
       
  1315 // -----------------------------------------------------------------------------
       
  1316 //
       
  1317 TInt CSConPCConnSession::TaskSetBURModeL(ConML_SetBURModePtr_t aContent )
       
  1318     {
       
  1319     TRACE_FUNC_ENTRY;
       
  1320     TInt ret ( KErrNone );
       
  1321     TSConMethodName method ( ESetBURMode );
       
  1322     CSConTask* task = CSConTask::NewLC( method );
       
  1323     if ( aContent->drives )
       
  1324         {
       
  1325         task->iBURModeParams->iDriveList = DriveList( aContent->drives->drive);
       
  1326         }
       
  1327     if ( aContent->partialType )
       
  1328         {
       
  1329         TInt intValue = DesToInt( aContent->partialType->Data() );
       
  1330         task->iBURModeParams->iPartialType = static_cast<TSConBurMode> (intValue) ;
       
  1331         }
       
  1332     if ( aContent->incType )
       
  1333         {
       
  1334         TInt intValue = DesToInt( aContent->incType->Data() );
       
  1335         task->iBURModeParams->iIncType = static_cast<TSConIncType> (intValue) ;
       
  1336         }
       
  1337     ret = iPCDHandler->PutTaskL( task );
       
  1338     CleanupStack::Pop( task );
       
  1339     LOGGER_WRITE_1( "CSConPCConnSession::TaskSetBURModeL() : returned %d", ret );    
       
  1340     return ret;
       
  1341     }
       
  1342     
       
  1343 // -----------------------------------------------------------------------------
       
  1344 // CSConPCConnSession::TaskGetDataSizeL()
       
  1345 // Sends a Get data size -task to PCCS service
       
  1346 // -----------------------------------------------------------------------------
       
  1347 //
       
  1348 TInt CSConPCConnSession::TaskGetDataSizeL(ConML_GetDataSizePtr_t aContent )
       
  1349     {
       
  1350     TRACE_FUNC_ENTRY;
       
  1351     TInt ret ( KErrNone );
       
  1352     TSConMethodName method ( EGetDataSize );
       
  1353     CSConTask* task = CSConTask::NewLC( method );
       
  1354     if ( aContent->dataOwners )
       
  1355         {
       
  1356         for ( ConML_SIDListPtr_t p = aContent->dataOwners->sid; 
       
  1357                 p && p->data; p=p->next )
       
  1358             {
       
  1359             CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner();
       
  1360             if ( p->data->type )
       
  1361                 {
       
  1362                 dataOwner->iType = TSConDOType (DesToInt( 
       
  1363                     p->data->type->Data() ));
       
  1364                 }
       
  1365             if (p->data->uid )
       
  1366                 {
       
  1367                 if( !IsJavaHash( p->data->uid->Data() ) )
       
  1368                     {
       
  1369                     dataOwner->iUid = DesToUid( p->data->uid->Data() );
       
  1370                     }
       
  1371                 else
       
  1372                     {
       
  1373                     TPtr hashPtr = DesToHashLC( p->data->uid->Data() );
       
  1374                     dataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() );
       
  1375                     dataOwner->iJavaHash->Des().Copy( hashPtr );
       
  1376                     CleanupStack::PopAndDestroy(); //DesToHashLC()
       
  1377                     }
       
  1378                 }
       
  1379             if ( p->data->drives )
       
  1380                 {
       
  1381                 dataOwner->iDriveList = DriveList ( p->data->drives->drive );
       
  1382                 }
       
  1383             if ( p->data->transferDataType )
       
  1384                 {
       
  1385                 TInt intValue = DesToInt( p->data->transferDataType->Data() );
       
  1386                 dataOwner->iTransDataType = static_cast<TSConTransferDataType> (intValue);
       
  1387                 }
       
  1388             task->iGetDataSizeParams->iDataOwners.Append( dataOwner );
       
  1389             }
       
  1390         }
       
  1391     ret = iPCDHandler->PutTaskL( task );
       
  1392     CleanupStack::Pop( task );
       
  1393     LOGGER_WRITE_1( "CSConPCConnSession::TaskGetDataSizeL() : returned %d", ret );    
       
  1394     return ret;
       
  1395     }
       
  1396     
       
  1397 // -----------------------------------------------------------------------------
       
  1398 // CSConPCConnSession::TaskRequestDataL()
       
  1399 // Sends a Request data -task to PCCS service
       
  1400 // -----------------------------------------------------------------------------
       
  1401 //
       
  1402 TInt CSConPCConnSession::TaskRequestDataL(ConML_RequestDataPtr_t aContent )
       
  1403     {
       
  1404     TRACE_FUNC_ENTRY;
       
  1405     TInt ret ( KErrNone );
       
  1406     TSConMethodName method ( ERequestData );
       
  1407     CSConTask* task = CSConTask::NewLC( method );
       
  1408     if ( aContent )
       
  1409         {
       
  1410         if ( aContent->sid )
       
  1411             {
       
  1412             for ( ConML_SIDListPtr_t p=aContent->sid; p && p->data; p=p->next )
       
  1413                 {
       
  1414                 if ( p->data->type )
       
  1415                     {
       
  1416                     task->iRequestDataParams->iDataOwner->iType = 
       
  1417                     TSConDOType ( DesToInt ( p->data->type->Data() ) );
       
  1418                     }
       
  1419                 if ( p->data->uid )
       
  1420                     {
       
  1421                     if( !IsJavaHash( p->data->uid->Data() ) )
       
  1422                         {
       
  1423                         task->iRequestDataParams->iDataOwner->iUid = DesToUid(
       
  1424                                                      p->data->uid->Data() );
       
  1425                         }
       
  1426                     else
       
  1427                         {
       
  1428                         TPtr hashPtr = DesToHashLC( p->data->uid->Data() );
       
  1429                         task->iRequestDataParams->iDataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() );
       
  1430                         task->iRequestDataParams->iDataOwner->iJavaHash->Des().Copy( hashPtr );
       
  1431                         CleanupStack::PopAndDestroy(); //DesToHashLC()
       
  1432                         }                                 
       
  1433                     }
       
  1434                 if ( p->data->drives )
       
  1435                     {
       
  1436                     task->iRequestDataParams->iDataOwner->iDriveList = 
       
  1437                     DriveList ( p->data->drives->drive );
       
  1438                     }
       
  1439                 if ( p->data->transferDataType )
       
  1440                     {
       
  1441                     TInt intValue = DesToInt( p->data->transferDataType->Data() );
       
  1442                     task->iRequestDataParams->iDataOwner->iTransDataType =
       
  1443                         static_cast<TSConTransferDataType> (intValue);
       
  1444                     }
       
  1445                 }
       
  1446             }
       
  1447         }
       
  1448     ret = iPCDHandler->PutTaskL( task );
       
  1449     CleanupStack::Pop( task );
       
  1450     LOGGER_WRITE_1( "CSConPCConnSession::TaskRequestDataL() : returned %d", ret );    
       
  1451     return ret;
       
  1452     }
       
  1453 
       
  1454 // -----------------------------------------------------------------------------
       
  1455 // CSConPCConnSession::TaskUpdateDeviceInfoL()
       
  1456 // Sends a Update device info -task to PCCS service
       
  1457 // -----------------------------------------------------------------------------
       
  1458 //
       
  1459 TInt CSConPCConnSession::TaskUpdateDeviceInfoL(
       
  1460     ConML_UpdateDeviceInfoPtr_t aContent )
       
  1461     {
       
  1462     TRACE_FUNC_ENTRY;
       
  1463     TInt ret ( KErrNone );
       
  1464     TSConMethodName method ( EUpdateDeviceInfo );
       
  1465     CSConTask* task = CSConTask::NewLC( method );
       
  1466 
       
  1467     if ( aContent->deviceInfo)
       
  1468         {
       
  1469         ConML_DeviceInfoPtr_t dPtr = aContent->deviceInfo;
       
  1470         if ( dPtr->version )
       
  1471             {
       
  1472             task->iDevInfoParams->iVersion.Copy( dPtr->version->Data());
       
  1473             }
       
  1474         if ( dPtr->maxObjectSize )
       
  1475             {
       
  1476             task->iDevInfoParams->iMaxObjectSize = DesToInt(
       
  1477                                             dPtr->maxObjectSize->Data());
       
  1478             }
       
  1479         if ( dPtr->supportedMethods )
       
  1480             {
       
  1481             ConML_SupportedMethodsPtr_t smPtr = dPtr->supportedMethods;
       
  1482             if ( smPtr->install )
       
  1483                 {
       
  1484                 task->iDevInfoParams->iInstallSupp = ETrue; 
       
  1485                 }
       
  1486             if ( smPtr->unInstall )
       
  1487                 {
       
  1488                 task->iDevInfoParams->iUninstallSupp = ETrue;
       
  1489                 }
       
  1490             if ( smPtr->listInstalledApps )
       
  1491                 {
       
  1492                 task->iDevInfoParams->iInstAppsSupp = ETrue;
       
  1493                 }
       
  1494             if ( smPtr->listDataOwners )
       
  1495                 {
       
  1496                 task->iDevInfoParams->iDataOwnersSupp = ETrue;
       
  1497                 }
       
  1498             if ( smPtr->setBurMode )
       
  1499                 {
       
  1500                 task->iDevInfoParams->iSetBURModeSupp = ETrue;
       
  1501                 }
       
  1502             if ( smPtr->getDataSize )
       
  1503                 {
       
  1504                 task->iDevInfoParams->iGetSizeSupp = ETrue;
       
  1505                 }
       
  1506             if ( smPtr->requestData )
       
  1507                 {
       
  1508                 task->iDevInfoParams->iReqDataSupp = ETrue;
       
  1509                 }
       
  1510             if ( smPtr->supplyData )
       
  1511                 {
       
  1512                 task->iDevInfoParams->iSupplyDataSupp = ETrue;  
       
  1513                 }
       
  1514             if ( smPtr->reboot )
       
  1515                 {
       
  1516                 task->iDevInfoParams->iRebootSupp = ETrue;
       
  1517                 }
       
  1518             }
       
  1519         }
       
  1520     ret = iPCDHandler->PutTaskL( task );
       
  1521     CleanupStack::Pop( task );
       
  1522     LOGGER_WRITE_1( "CSConPCConnSession::TaskUpdateDeviceInfoL() : returned %d", ret );    
       
  1523     return ret;
       
  1524     }
       
  1525     
       
  1526 // -----------------------------------------------------------------------------
       
  1527 // CSConPCConnSession::TaskListPublicFilesL()
       
  1528 // Sends a List public files -task to PCCS service
       
  1529 // -----------------------------------------------------------------------------
       
  1530 //
       
  1531 TInt CSConPCConnSession::TaskListPublicFilesL(
       
  1532     ConML_ListPublicFilesPtr_t aContent )
       
  1533     {
       
  1534     TRACE_FUNC_ENTRY;
       
  1535     TInt ret ( KErrNone );
       
  1536     TSConMethodName method ( EListPublicFiles );
       
  1537     CSConTask* task = CSConTask::NewLC( method );
       
  1538     if ( aContent->sid )
       
  1539         {
       
  1540         for ( ConML_SIDListPtr_t p = aContent->sid; p && p->data; p = p->next )
       
  1541             {
       
  1542             CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner();
       
  1543             
       
  1544             if ( p->data->type )                
       
  1545                 {
       
  1546                 dataOwner->iType = TSConDOType ( DesToInt( 
       
  1547                                         p->data->type->Data() ) );
       
  1548                 }
       
  1549             if ( p->data->uid )
       
  1550                 {
       
  1551                 if( !IsJavaHash( p->data->uid->Data() ) )
       
  1552                     {
       
  1553                     dataOwner->iUid = DesToUid( p->data->uid->Data() );
       
  1554                     }
       
  1555                 else
       
  1556                     {
       
  1557                     TPtr hashPtr = DesToHashLC( p->data->uid->Data() );
       
  1558                     dataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() );
       
  1559                     dataOwner->iJavaHash->Des().Copy( hashPtr );
       
  1560                     CleanupStack::PopAndDestroy(); //DesToHashLC()
       
  1561                     }
       
  1562                 }
       
  1563             if ( p->data->drives )
       
  1564                 {
       
  1565                 dataOwner->iDriveList = DriveList ( p->data->drives->drive );
       
  1566                 }
       
  1567             if ( p->data->packageInfo && p->data->packageInfo->name )
       
  1568                 {
       
  1569                 // Unicode conversion from 8-bit to 16-bit
       
  1570                 CnvUtfConverter::ConvertToUnicodeFromUtf8(
       
  1571                         dataOwner->iPackageName, 
       
  1572                         p->data->packageInfo->name->Data());
       
  1573                 }
       
  1574             task->iPubFilesParams->iDataOwners.Append( dataOwner );
       
  1575             }
       
  1576         }
       
  1577     ret = iPCDHandler->PutTaskL( task );
       
  1578     CleanupStack::Pop( task );
       
  1579     LOGGER_WRITE_1( "CSConPCConnSession::TaskListPublicFilesL() : returned %d", ret );    
       
  1580     return ret;
       
  1581     }
       
  1582         
       
  1583 // -----------------------------------------------------------------------------
       
  1584 // CSConPCConnSession::TaskSupplyDataL()
       
  1585 // Sends a Supply data -task to PCCS service
       
  1586 // -----------------------------------------------------------------------------
       
  1587 //
       
  1588 TInt CSConPCConnSession::TaskSupplyDataL ( ConML_SupplyDataPtr_t aContent )
       
  1589     {
       
  1590     TRACE_FUNC_ENTRY;
       
  1591     TInt ret ( KErrNone );
       
  1592     TSConMethodName method ( ESupplyData );
       
  1593     CSConTask* task = CSConTask::NewLC( method );
       
  1594     if (aContent )
       
  1595         {
       
  1596         for ( ConML_SIDListPtr_t p = aContent->sid; p && p->data; p = p->next )
       
  1597             {
       
  1598             if ( p->data->type )
       
  1599                 {
       
  1600                 task->iSupplyDataParams->iDataOwner->iType = 
       
  1601                 TSConDOType ( DesToInt( p->data->type->Data() ) );
       
  1602                 }
       
  1603             if ( p->data->uid )
       
  1604                 {
       
  1605                 if( !IsJavaHash( p->data->uid->Data() ) )
       
  1606                     {
       
  1607                     task->iSupplyDataParams->iDataOwner->iUid = DesToUid( 
       
  1608                                                 p->data->uid->Data() );
       
  1609                     }
       
  1610                 else
       
  1611                     {
       
  1612                     TPtr hashPtr = DesToHashLC( p->data->uid->Data() );
       
  1613                     task->iSupplyDataParams->iDataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() );
       
  1614                     task->iSupplyDataParams->iDataOwner->iJavaHash->Des().Copy( hashPtr );
       
  1615                     CleanupStack::PopAndDestroy(); //DesToHashLC()
       
  1616                     }
       
  1617                 }
       
  1618             if ( p->data->drives )
       
  1619                 {
       
  1620                 task->iSupplyDataParams->iDataOwner->iDriveList = 
       
  1621                 DriveList ( p->data->drives->drive );
       
  1622                 }
       
  1623             if ( p->data->transferDataType )
       
  1624                 {
       
  1625                 TInt intValue = DesToInt ( p->data->transferDataType->Data() );
       
  1626                 task->iSupplyDataParams->iDataOwner->iTransDataType =
       
  1627                     static_cast<TSConTransferDataType> (intValue);
       
  1628                 }
       
  1629             if ( p->data->data )
       
  1630                 {
       
  1631                 task->iSupplyDataParams->iRestoreData = HBufC8::NewL(
       
  1632                                             p->data->data->Data().Size() );
       
  1633                 *task->iSupplyDataParams->iRestoreData = p->data->data->Data();
       
  1634                 }
       
  1635             if ( p->data->moreData )
       
  1636                 {
       
  1637                 task->iSupplyDataParams->iMoreData = ETrue;
       
  1638                 }
       
  1639             else
       
  1640                 {
       
  1641                 task->iSupplyDataParams->iMoreData = EFalse;
       
  1642                 }
       
  1643             }
       
  1644         }
       
  1645     ret = iPCDHandler->PutTaskL( task );
       
  1646     CleanupStack::Pop( task );
       
  1647     LOGGER_WRITE_1( "CSConPCConnSession::TaskSupplyDataL() : returned %d", ret );    
       
  1648     return ret;
       
  1649 }
       
  1650 
       
  1651 // -----------------------------------------------------------------------------
       
  1652 // CSConPCConnSession::TaskGetDataOwnerStatusL()
       
  1653 // Sends a Get data owner status -task to PCCS service
       
  1654 // -----------------------------------------------------------------------------
       
  1655 //
       
  1656 TInt CSConPCConnSession::TaskGetDataOwnerStatusL
       
  1657     ( ConML_GetDataOwnerStatusPtr_t aContent )
       
  1658     {
       
  1659     TRACE_FUNC_ENTRY;
       
  1660     TInt ret ( KErrNone );
       
  1661     TSConMethodName method ( EGetDataOwnerStatus );
       
  1662     CSConTask* task = CSConTask::NewLC( method );
       
  1663 
       
  1664     if ( aContent->dataOwners )
       
  1665         {
       
  1666         for ( ConML_SIDListPtr_t p = aContent->dataOwners->sid; 
       
  1667                 p && p->data; p=p->next )
       
  1668             {
       
  1669             CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner();
       
  1670             if ( p->data->type )    
       
  1671                 {
       
  1672                 dataOwner->iType = TSConDOType (DesToInt(
       
  1673                                      p->data->type->Data() ));
       
  1674                 }
       
  1675             if ( p->data->uid )             
       
  1676                 {
       
  1677                 if( !IsJavaHash( p->data->uid->Data() ) )
       
  1678                     {
       
  1679                     dataOwner->iUid = DesToUid( p->data->uid->Data() );
       
  1680                     }
       
  1681                 else
       
  1682                     {
       
  1683                     TPtr hashPtr = DesToHashLC( p->data->uid->Data() );
       
  1684                     dataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() );
       
  1685                     dataOwner->iJavaHash->Des().Copy( hashPtr );
       
  1686                     CleanupStack::PopAndDestroy(); //DesToHashLC()
       
  1687                     }
       
  1688                 }           
       
  1689             task->iGetDataOwnerParams->iDataOwners.Append( dataOwner );
       
  1690             }
       
  1691         }
       
  1692     ret = iPCDHandler->PutTaskL( task );
       
  1693     CleanupStack::Pop( task );
       
  1694     LOGGER_WRITE_1( "CSConPCConnSession::TaskGetDataOwnerStatusL() : returned %d", ret );    
       
  1695     return ret; 
       
  1696     }
       
  1697     
       
  1698 // -----------------------------------------------------------------------------
       
  1699 // CSConPCConnSession::TaskRebootL()
       
  1700 // Sends a Reboot -task to PCCS service
       
  1701 // -----------------------------------------------------------------------------
       
  1702 //
       
  1703 TInt CSConPCConnSession::TaskRebootL( )
       
  1704     {
       
  1705     TRACE_FUNC_ENTRY;
       
  1706     TInt ret ( KErrNone );
       
  1707     TSConMethodName method ( EReboot );
       
  1708     CSConTask* task = CSConTask::NewLC( method );
       
  1709     ret = iPCDHandler->PutTaskL( task );
       
  1710     CleanupStack::Pop( task );
       
  1711     LOGGER_WRITE_1( "CSConPCConnSession::TaskRebootL() : returned %d", ret );    
       
  1712     return ret;
       
  1713     }
       
  1714 
       
  1715 // -----------------------------------------------------------------------------
       
  1716 // CSConPCConnSession::TaskGetMetadataL()
       
  1717 // Sends a GetMetadata -task to PCCS service
       
  1718 // -----------------------------------------------------------------------------
       
  1719 //
       
  1720 TInt CSConPCConnSession::TaskGetMetadataL( ConML_GetMetadataPtr_t aContent )
       
  1721     {
       
  1722     TRACE_FUNC_ENTRY;
       
  1723     TInt ret ( KErrNone );
       
  1724     TSConMethodName method ( EGetMetadata );
       
  1725     CSConTask* task = CSConTask::NewLC( method );
       
  1726     if( aContent )
       
  1727         {
       
  1728         if ( aContent->filename )
       
  1729             {
       
  1730             // Unicode conversion from 8-bit to 16-bit
       
  1731             CnvUtfConverter::ConvertToUnicodeFromUtf8(task->iGetMetadataParams->iFilename, 
       
  1732                                                         aContent->filename->Data());    
       
  1733             }
       
  1734         }
       
  1735     ret = iPCDHandler->PutTaskL( task );
       
  1736     CleanupStack::Pop( task );
       
  1737     LOGGER_WRITE_1( "CSConPCConnSession::TaskGetMetadataL() : returned %d", ret );    
       
  1738     return ret;
       
  1739     }
       
  1740     
       
  1741 // -----------------------------------------------------------------------------
       
  1742 // CSConPCConnSession::TaskRebootL()
       
  1743 // Appends a status element from the reply data of PCCS
       
  1744 // -----------------------------------------------------------------------------
       
  1745 //
       
  1746 void CSConPCConnSession::AppendStatusL( 
       
  1747     ConML_ConMLPtr_t aContent, CSConStatusReply* reply )
       
  1748     {
       
  1749     TRACE_FUNC_ENTRY;
       
  1750     
       
  1751     if ( !reply )
       
  1752         {
       
  1753         LOGGER_WRITE( "CSConPCConnSession::AppendStatus() : No data in reply!" );
       
  1754         return;
       
  1755         }
       
  1756     aContent->status = new ( ELeave ) ConML_Status_t();
       
  1757         
       
  1758     if ( reply->iTasks.Count() > 0 ) 
       
  1759         {
       
  1760         for ( TInt i=0; i < reply->iTasks.Count(); i ++)
       
  1761             {
       
  1762             ConML_TaskListPtr_t task = new ( ELeave ) ConML_TaskList_t();
       
  1763             CleanupStack::PushL( task );
       
  1764             GenericListAddL ( &aContent->status->task, task );
       
  1765             CleanupStack::Pop(); // task
       
  1766             
       
  1767             task->data = new ( ELeave ) ConML_Task_t();
       
  1768             task->data->id = new ( ELeave ) pcdata_t();
       
  1769             task->data->id->SetDataL ( IntToDesLC(reply->iTasks[i]->iTaskId) );
       
  1770             CleanupStack::PopAndDestroy(); // IntToDesLC 
       
  1771             TSConMethodName method ( reply->iTasks[i]->iMethod );
       
  1772             
       
  1773             switch ( method )
       
  1774                 {
       
  1775                 case EUpdateDeviceInfo:
       
  1776                     task->data->updateDeviceInfo = 
       
  1777                         new ( ELeave ) ConML_UpdateDeviceInfo_t();
       
  1778                     task->data->updateDeviceInfo->results = 
       
  1779                         new ( ELeave ) ConML_Results_t();
       
  1780                     AppendUpdateDeviceInfoResultsL( 
       
  1781                         task->data->updateDeviceInfo->results,
       
  1782                         reply->iTasks[i]->iDevInfoParams );
       
  1783                     break;
       
  1784                 
       
  1785                 case ESetBURMode:
       
  1786                     task->data->setBurMode = 
       
  1787                         new ( ELeave ) ConML_SetBURMode_t();
       
  1788                     task->data->setBurMode->results = 
       
  1789                         new ( ELeave) ConML_Results_t();
       
  1790                     AppendSetBURModeResultsL( 
       
  1791                         task->data->setBurMode->results,
       
  1792                         reply->iTasks[i]->iBURModeParams );
       
  1793                     break;
       
  1794             
       
  1795                 case EListInstalledApps:
       
  1796                     task->data->listInstalledApps = 
       
  1797                         new ( ELeave ) ConML_ListInstalledApps_t();
       
  1798                     task->data->listInstalledApps->results = 
       
  1799                         new ( ELeave ) ConML_Results_t();
       
  1800                     AppendListInstalledAppsResultsL( 
       
  1801                         task->data->listInstalledApps->results,
       
  1802                         reply->iTasks[i]->iListAppsParams);
       
  1803                     break;
       
  1804                 
       
  1805                 case EInstall:
       
  1806                     task->data->install = new ( ELeave ) ConML_Install_t();
       
  1807                     task->data->install->results = 
       
  1808                         new ( ELeave ) ConML_Results_t();
       
  1809                     AppendInstallResultsL( 
       
  1810                         task->data->install->results, 
       
  1811                         reply->iTasks[i]->iInstallParams );
       
  1812                     break;
       
  1813             
       
  1814                 case EUninstall:
       
  1815                     task->data->unInstall = new ( ELeave ) ConML_UnInstall_t();
       
  1816                     task->data->unInstall->results = 
       
  1817                         new ( ELeave ) ConML_Results_t();
       
  1818                     AppendUninstallResultsL(
       
  1819                         task->data->unInstall->results, 
       
  1820                         reply->iTasks[i]->iUninstallParams );
       
  1821                     break;
       
  1822                 
       
  1823                 case EListDataOwners:
       
  1824                     task->data->listDataOwners = 
       
  1825                         new ( ELeave ) ConML_ListDataOwners_t();
       
  1826                     task->data->listDataOwners->results = 
       
  1827                         new ( ELeave ) ConML_Results_t();
       
  1828                     AppendListDataOwnersResultsL( 
       
  1829                         task->data->listDataOwners->results, 
       
  1830                         reply->iTasks[i]->iListDataOwnersParams );
       
  1831                     break;
       
  1832                 
       
  1833                 case EGetDataOwnerStatus:
       
  1834                     task->data->getDataOwnerStatus = 
       
  1835                         new ( ELeave ) ConML_GetDataOwnerStatus_t();
       
  1836                     task->data->getDataOwnerStatus->results = 
       
  1837                         new ( ELeave ) ConML_Results_t();
       
  1838                     AppendGetDataOwnerStatusResultsL( 
       
  1839                         task->data->getDataOwnerStatus->results,
       
  1840                         reply->iTasks[i]->iGetDataOwnerParams);
       
  1841                     break;
       
  1842                 
       
  1843                 case EGetDataSize:
       
  1844                     task->data->getDataSize = 
       
  1845                         new ( ELeave ) ConML_GetDataSize_t();
       
  1846                     task->data->getDataSize->results = 
       
  1847                         new ( ELeave ) ConML_Results_t();
       
  1848                     AppendGetDataSizeResultsL( 
       
  1849                         task->data->getDataSize->results,
       
  1850                         reply->iTasks[i]->iGetDataSizeParams );
       
  1851                     break;
       
  1852                                 
       
  1853                 case EListPublicFiles:
       
  1854                     task->data->listPublicFiles = 
       
  1855                         new ( ELeave ) ConML_ListPublicFiles_t();
       
  1856                     task->data->listPublicFiles->results = 
       
  1857                         new ( ELeave ) ConML_Results_t();
       
  1858                     AppendListPublicFilesResultsL ( 
       
  1859                         task->data->listPublicFiles->results,
       
  1860                         reply->iTasks[i]->iPubFilesParams );
       
  1861                     break;
       
  1862             
       
  1863                 case ERequestData:
       
  1864                     task->data->requestData = 
       
  1865                         new ( ELeave ) ConML_RequestData_t();
       
  1866                     task->data->requestData->results = 
       
  1867                         new ( ELeave ) ConML_Results_t();
       
  1868                     AppendRequestDataResultsL( 
       
  1869                         task->data->requestData->results, 
       
  1870                         reply->iTasks[i]->iRequestDataParams );
       
  1871                     break;
       
  1872                 
       
  1873                 case ESupplyData:
       
  1874                     task->data->supplyData = 
       
  1875                         new ( ELeave ) ConML_SupplyData_t();
       
  1876                     task->data->supplyData->results = 
       
  1877                         new ( ELeave ) ConML_Results_t();
       
  1878                     AppendSupplyDataResultsL ( 
       
  1879                         task->data->supplyData->results, 
       
  1880                         reply->iTasks[i]->iSupplyDataParams );
       
  1881                     break;
       
  1882                 
       
  1883                 case EGetMetadata:
       
  1884                     task->data->getMetadata = 
       
  1885                         new ( ELeave ) ConML_GetMetadata_t();
       
  1886                     task->data->getMetadata->results = 
       
  1887                         new ( ELeave ) ConML_Results_t();
       
  1888                     AppendGetMetadataResultsL ( 
       
  1889                         task->data->getMetadata->results, 
       
  1890                         reply->iTasks[i]->iGetMetadataParams );
       
  1891                     break;
       
  1892                     
       
  1893                 default:
       
  1894                     LOGGER_WRITE_1( "CSConPCConnSession:: AppendStatus() : Unknown method  %d ", method );
       
  1895                     break;
       
  1896                 }
       
  1897             }
       
  1898         }
       
  1899     else
       
  1900         {
       
  1901         LOGGER_WRITE( "CSConPCConnSession::AppendStatus() : No Task " );     
       
  1902         }
       
  1903     TRACE_FUNC_EXIT;
       
  1904     }
       
  1905 
       
  1906 // -----------------------------------------------------------------------------
       
  1907 // CSConPCConnSession::AppendUpdateDeviceInfoResultsL()
       
  1908 // Appends a update device info -element from the reply data of PCCS
       
  1909 // -----------------------------------------------------------------------------
       
  1910 //
       
  1911 void CSConPCConnSession::AppendUpdateDeviceInfoResultsL 
       
  1912     ( ConML_ResultsPtr_t aContent, CSConUpdateDeviceInfo* aResult )
       
  1913     {
       
  1914     TRACE_FUNC_ENTRY;
       
  1915     if ( aResult )  
       
  1916         {
       
  1917         if ( aResult->iComplete )
       
  1918             {
       
  1919             aContent->complete = new ( ELeave ) pcdata_t();
       
  1920             }
       
  1921         AppendProgressL ( aContent, aResult->iProgress );
       
  1922     
       
  1923         aContent->deviceInfo = new ( ELeave ) ConML_DeviceInfo_t();
       
  1924         aContent->deviceInfo->version = new ( ELeave ) pcdata_t();
       
  1925         aContent->deviceInfo->version->SetDataL ( aResult->iVersion );
       
  1926 
       
  1927         aContent->deviceInfo->supportedMethods = 
       
  1928             new ( ELeave ) ConML_SupportedMethods_t();
       
  1929             
       
  1930         if ( aResult->iInstallSupp )
       
  1931             {
       
  1932             aContent->deviceInfo->supportedMethods->install = 
       
  1933                 new ( ELeave ) pcdata_t();
       
  1934             }
       
  1935         if ( aResult->iUninstallSupp )
       
  1936             {
       
  1937             aContent->deviceInfo->supportedMethods->unInstall = 
       
  1938                 new ( ELeave ) pcdata_t();
       
  1939             }
       
  1940         if ( aResult->iInstAppsSupp )
       
  1941             {
       
  1942             aContent->deviceInfo->supportedMethods->listInstalledApps = 
       
  1943                 new ( ELeave ) pcdata_t();
       
  1944             }
       
  1945         if ( aResult->iDataOwnersSupp )
       
  1946             {
       
  1947             aContent->deviceInfo->supportedMethods->listDataOwners = 
       
  1948                 new ( ELeave ) pcdata_t();
       
  1949             }
       
  1950         if ( aResult->iSetBURModeSupp )
       
  1951             {
       
  1952             aContent->deviceInfo->supportedMethods->setBurMode = 
       
  1953                 new ( ELeave ) pcdata_t();
       
  1954             }
       
  1955         if ( aResult->iGetSizeSupp )
       
  1956             {
       
  1957             aContent->deviceInfo->supportedMethods->getDataSize = 
       
  1958                 new ( ELeave ) pcdata_t();
       
  1959             }
       
  1960         if ( aResult->iReqDataSupp )
       
  1961             {
       
  1962             aContent->deviceInfo->supportedMethods->requestData = 
       
  1963                 new (ELeave ) pcdata_t();
       
  1964             }
       
  1965         if ( aResult->iSupplyDataSupp )
       
  1966             {
       
  1967             aContent->deviceInfo->supportedMethods->supplyData = 
       
  1968                 new ( ELeave ) pcdata_t();
       
  1969             }
       
  1970         if ( aResult->iRebootSupp )
       
  1971             {
       
  1972             aContent->deviceInfo->supportedMethods->reboot = 
       
  1973                 new ( ELeave ) pcdata_t();
       
  1974             }
       
  1975         aContent->deviceInfo->maxObjectSize = new ( ELeave ) pcdata_t();
       
  1976         aContent->deviceInfo->maxObjectSize->SetDataL ( IntToDesLC(
       
  1977             aResult->iMaxObjectSize ));
       
  1978         CleanupStack::PopAndDestroy(); // IntToDesLC
       
  1979         }
       
  1980     TRACE_FUNC_EXIT;
       
  1981     }
       
  1982     
       
  1983 // -----------------------------------------------------------------------------
       
  1984 // CSConPCConnSession::AppendSetBURModeResultsL()
       
  1985 // Appends a Set BUR mode -element from the reply data of PCCS
       
  1986 // -----------------------------------------------------------------------------
       
  1987 //
       
  1988 void CSConPCConnSession::AppendSetBURModeResultsL (
       
  1989     ConML_ResultsPtr_t aContent, CSConSetBURMode* aResult )
       
  1990     {
       
  1991     TRACE_FUNC_ENTRY;
       
  1992     if ( aResult )
       
  1993         {
       
  1994         if ( aResult->iComplete )
       
  1995             {
       
  1996             aContent->complete = new ( ELeave ) pcdata_t();
       
  1997             }
       
  1998         AppendProgressL ( aContent, aResult->iProgress );
       
  1999         }
       
  2000     TRACE_FUNC_EXIT;
       
  2001     }
       
  2002     
       
  2003 // -----------------------------------------------------------------------------
       
  2004 // CSConPCConnSession::AppendListInstalledAppsResultsL()
       
  2005 // Appends a List installed apps -element from the reply data of PCCS
       
  2006 // -----------------------------------------------------------------------------
       
  2007 //
       
  2008 void CSConPCConnSession::AppendListInstalledAppsResultsL ( 
       
  2009     ConML_ResultsPtr_t aContent, CSConListInstApps* aResult )
       
  2010     {
       
  2011     TRACE_FUNC_ENTRY;
       
  2012 
       
  2013     if ( aResult )
       
  2014         {
       
  2015         if ( aResult->iComplete )
       
  2016             {
       
  2017             aContent->complete = new ( ELeave ) pcdata_t();
       
  2018             }
       
  2019         AppendProgressL ( aContent, aResult->iProgress );
       
  2020         
       
  2021         if ( aResult->iApps.Count() > 0 )
       
  2022             {
       
  2023             // 5 * KMaxFileName should be enought
       
  2024             // ( 4 items of TFileName and uid + type + size + 6* "#" )
       
  2025             HBufC8* buf = HBufC8::NewLC( 5 * KMaxFileName );
       
  2026             TPtr8 ptrBuf = buf->Des();
       
  2027             
       
  2028             aContent->applications = new ( ELeave ) ConML_Applications_t();
       
  2029             for ( TInt i=0; i<aResult->iApps.Count(); i++)
       
  2030                 {
       
  2031                 ConML_ApplicationListPtr_t app = 
       
  2032                     new ( ELeave )ConML_ApplicationList_t();
       
  2033                 CleanupStack::PushL ( app );
       
  2034                 GenericListAddL ( &aContent->applications->application, app );
       
  2035                 CleanupStack::Pop(); // app
       
  2036                 
       
  2037                 app->data = new ( ELeave ) ConML_Application_t();
       
  2038                 app->data->name = new ( ELeave ) pcdata_t();
       
  2039                 app->data->name->SetDataL( BufToDesLC( 
       
  2040                     aResult->iApps[i]->iName));
       
  2041                 CleanupStack::PopAndDestroy(); // BufToDesLC
       
  2042                 
       
  2043                 // create uid: UID # Type # Size # Version # Vendor # Parent app. name #
       
  2044                 LOGGER_WRITE( "CSConPCConnSession::AppendListInstalledAppsResultsL() : Create Uid" );
       
  2045                 
       
  2046                 ptrBuf.Copy( UidToDesLC( aResult->iApps[i]->iUid ) );
       
  2047                 CleanupStack::PopAndDestroy(); // UidToDesLC
       
  2048                 
       
  2049                 ptrBuf.Append( KSConAppInfoSeparator );
       
  2050                 
       
  2051                 ptrBuf.Append( IntToDesLC(aResult->iApps[i]->iType ));
       
  2052                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2053                 
       
  2054                 ptrBuf.Append( KSConAppInfoSeparator );
       
  2055                 
       
  2056                 ptrBuf.Append( IntToDesLC(aResult->iApps[i]->iSize ) );
       
  2057                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2058                 
       
  2059                 ptrBuf.Append( KSConAppInfoSeparator );
       
  2060                 ptrBuf.Append( aResult->iApps[i]->iVersion );
       
  2061                 
       
  2062                 ptrBuf.Append( KSConAppInfoSeparator );
       
  2063                 ptrBuf.Append( BufToDesLC( aResult->iApps[i]->iVendor ) );
       
  2064                 CleanupStack::PopAndDestroy(); // BufToDesLC
       
  2065                 
       
  2066                 ptrBuf.Append( KSConAppInfoSeparator );
       
  2067                 ptrBuf.Append( BufToDesLC( aResult->iApps[i]->iParentName ) );
       
  2068                 CleanupStack::PopAndDestroy(); // BufToDesLC
       
  2069                 
       
  2070                 ptrBuf.Append( KSConAppInfoSeparator );
       
  2071                 
       
  2072                 LOGGER_WRITE( "CSConPCConnSession::AppendListInstalledAppsResultsL() : set data" );
       
  2073                 app->data->uid = new ( ELeave ) pcdata_t();
       
  2074                 app->data->uid->SetDataL( *buf );
       
  2075                     
       
  2076                 LOGGER_WRITE( "CSConPCConnSession::AppendListInstalledAppsResultsL() : Info added" );
       
  2077                 }
       
  2078             CleanupStack::PopAndDestroy(buf);       
       
  2079             }
       
  2080         }
       
  2081     TRACE_FUNC_EXIT;
       
  2082     }
       
  2083     
       
  2084 // -----------------------------------------------------------------------------
       
  2085 // CSConPCConnSession::AppendListPublicFilesResultsL()
       
  2086 // Appends a List public files -element from the reply data of PCCS
       
  2087 // -----------------------------------------------------------------------------
       
  2088 //
       
  2089 void CSConPCConnSession::AppendListPublicFilesResultsL ( 
       
  2090     ConML_ResultsPtr_t aContent, CSConListPublicFiles* aResult )
       
  2091     {
       
  2092     TRACE_FUNC_ENTRY;
       
  2093     if ( aResult )
       
  2094         {
       
  2095         if ( aResult->iComplete )
       
  2096             {
       
  2097             aContent->complete = new ( ELeave ) pcdata_t();
       
  2098             }
       
  2099         AppendProgressL ( aContent, aResult->iProgress );
       
  2100         
       
  2101         if ( aResult->iFiles.Count() > 0 )
       
  2102             {
       
  2103             aContent->files = new ( ELeave ) ConML_Files_t();
       
  2104             for ( TInt i=0;i<aResult->iFiles.Count(); i++ )
       
  2105                 {
       
  2106                 ConML_FileListPtr_t file = new ( ELeave ) ConML_FileList_t();
       
  2107                 CleanupStack::PushL( file );
       
  2108                 GenericListAddL ( &aContent->files->file, file );
       
  2109                 CleanupStack::Pop(); // file
       
  2110                 
       
  2111                 file->data = new ( ELeave ) ConML_File_t();
       
  2112                 file->data->name = new ( ELeave ) pcdata_t();
       
  2113                 file->data->name->SetDataL( BufToDesLC (
       
  2114                     aResult->iFiles[i]->iPath ) );
       
  2115                 CleanupStack::PopAndDestroy(); // BufToDesLC
       
  2116                 
       
  2117                 file->data->modified = new ( ELeave ) pcdata_t();
       
  2118                 file->data->modified->SetDataL( BufToDesLC (
       
  2119                     aResult->iFiles[i]->iModified ) );
       
  2120                 CleanupStack::PopAndDestroy(); // BufToDesLC
       
  2121                 
       
  2122                 file->data->size = new ( ELeave ) pcdata_t();
       
  2123                 file->data->size->SetDataL( IntToDesLC ( 
       
  2124                     aResult->iFiles[i]->iSize ) );
       
  2125                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2126                 
       
  2127                 file->data->userPerm = new ( ELeave ) pcdata_t();
       
  2128                 switch ( aResult->iFiles[i]->iUserPerm )
       
  2129                     {
       
  2130                     case EPermReadOnly:
       
  2131                         file->data->userPerm->SetDataL ( KSConPermReadOnly );
       
  2132                         break;
       
  2133                     
       
  2134                     case EPermNormal:
       
  2135                         file->data->userPerm->SetDataL ( KSConPermNormal );
       
  2136                         break;
       
  2137                     
       
  2138                     default:
       
  2139                         LOGGER_WRITE( "CSConPCConnSession:: AppendListPublicFilesResultsL() : Unknown userPerm! " );
       
  2140                         break;          
       
  2141                     }
       
  2142                 }
       
  2143         }
       
  2144     }
       
  2145     TRACE_FUNC_EXIT;
       
  2146     }
       
  2147     
       
  2148 // -----------------------------------------------------------------------------
       
  2149 // CSConPCConnSession::AppendRequestDataResultsL()
       
  2150 // Appends a Request data -element from the reply data of PCCS
       
  2151 // -----------------------------------------------------------------------------
       
  2152 //
       
  2153 void CSConPCConnSession::AppendRequestDataResultsL( 
       
  2154     ConML_ResultsPtr_t aContent, CSConRequestData* aResult )
       
  2155     {
       
  2156     TRACE_FUNC_ENTRY;
       
  2157     if ( aResult )
       
  2158         {
       
  2159         if ( aResult->iComplete )
       
  2160             {
       
  2161             aContent->complete = new ( ELeave ) pcdata_t();
       
  2162             }
       
  2163         AppendProgressL ( aContent, aResult->iProgress );
       
  2164         
       
  2165         if ( aResult->iMoreData )
       
  2166             {
       
  2167             aContent->moreData = new ( ELeave ) pcdata_t();
       
  2168             }
       
  2169         if ( aResult->iBackupData )
       
  2170             {
       
  2171             aContent->data = new ( ELeave ) pcdata_t();
       
  2172             aContent->data->SetDataL( aResult->iBackupData->Des() );
       
  2173             }
       
  2174         }
       
  2175     TRACE_FUNC_EXIT;
       
  2176     }
       
  2177 
       
  2178 // -----------------------------------------------------------------------------
       
  2179 // CSConPCConnSession::AppendSupplyDataResultsL()
       
  2180 // Appends a Supply data -element from the reply data of PCCS
       
  2181 // -----------------------------------------------------------------------------
       
  2182 //
       
  2183 void CSConPCConnSession::AppendSupplyDataResultsL( 
       
  2184     ConML_ResultsPtr_t aContent, CSConSupplyData* aResult )
       
  2185     {
       
  2186     TRACE_FUNC_ENTRY;
       
  2187     if ( aResult )
       
  2188         {
       
  2189         if ( aResult->iComplete )
       
  2190             {
       
  2191             aContent->complete = new ( ELeave ) pcdata_t();
       
  2192             }
       
  2193         AppendProgressL( aContent, aResult->iProgress );
       
  2194         }
       
  2195     TRACE_FUNC_EXIT;
       
  2196     }
       
  2197 
       
  2198 // -----------------------------------------------------------------------------
       
  2199 // CSConPCConnSession::AppendInstallResultsL()
       
  2200 // Appends an Install -element from the reply data of PCCS
       
  2201 // -----------------------------------------------------------------------------
       
  2202 //
       
  2203 void CSConPCConnSession::AppendInstallResultsL( 
       
  2204     ConML_ResultsPtr_t aContent, CSConInstall* aResult )
       
  2205     {
       
  2206     TRACE_FUNC_ENTRY;
       
  2207     if ( aResult )
       
  2208         {
       
  2209         if ( aResult->iComplete )
       
  2210             {
       
  2211             aContent->complete = new ( ELeave ) pcdata_t();
       
  2212             }
       
  2213         AppendProgressL( aContent, aResult->iProgress );
       
  2214         }
       
  2215     TRACE_FUNC_EXIT;
       
  2216     }
       
  2217     
       
  2218 // -----------------------------------------------------------------------------
       
  2219 // CSConPCConnSession::AppendUninstallResultsL()
       
  2220 // Appends an Uninstall -element from the reply data of PCCS
       
  2221 // -----------------------------------------------------------------------------
       
  2222 //
       
  2223 void CSConPCConnSession::AppendUninstallResultsL( 
       
  2224     ConML_ResultsPtr_t aContent, CSConUninstall* aResult )
       
  2225     {
       
  2226     TRACE_FUNC_ENTRY;
       
  2227     if ( aResult )
       
  2228         {
       
  2229         if ( aResult->iComplete )
       
  2230             {
       
  2231             LOGGER_WRITE( "CSConPCConnSession::AppendUninstallResultsL() Complete" );
       
  2232             aContent->complete = new ( ELeave ) pcdata_t();
       
  2233             }
       
  2234         LOGGER_WRITE_1( "CSConPCConnSession::AppendUninstallResultsL() iProgress: %d", aResult->iProgress );
       
  2235         AppendProgressL( aContent, aResult->iProgress );
       
  2236         }
       
  2237     TRACE_FUNC_EXIT;
       
  2238     }
       
  2239     
       
  2240 // -----------------------------------------------------------------------------
       
  2241 // CSConPCConnSession::AppendListDataOwnersResultsL()
       
  2242 // Appends a List data owners -element from the reply data of PCCS
       
  2243 // -----------------------------------------------------------------------------
       
  2244 //
       
  2245 void CSConPCConnSession::AppendListDataOwnersResultsL ( 
       
  2246     ConML_ResultsPtr_t aContent, CSConListDataOwners* aResult  )
       
  2247     {
       
  2248     TRACE_FUNC_ENTRY;
       
  2249     if ( aResult )  
       
  2250         {
       
  2251         if ( aResult->iComplete )
       
  2252             {
       
  2253             aContent->complete = new ( ELeave ) pcdata_t();
       
  2254             }
       
  2255         AppendProgressL( aContent, aResult->iProgress );
       
  2256         
       
  2257         if ( aResult->iDataOwners.Count() > 0 )
       
  2258             {
       
  2259             aContent->dataOwners = new ( ELeave ) ConML_DataOwners_t();
       
  2260             for ( TInt i=0; i < aResult->iDataOwners.Count(); i ++)
       
  2261                 {
       
  2262                 ConML_SIDListPtr_t sid = new ( ELeave ) ConML_SIDList_t();
       
  2263                 CleanupStack::PushL( sid );
       
  2264                 GenericListAddL ( &aContent->dataOwners->sid, sid );
       
  2265                 CleanupStack::Pop();
       
  2266             
       
  2267                 sid->data = new ( ELeave ) ConML_SID_t();
       
  2268                 
       
  2269                 sid->data->type = new ( ELeave ) pcdata_t();
       
  2270                 sid->data->type->SetDataL ( IntToDesLC ( 
       
  2271                     aResult->iDataOwners[i]->iType) );  
       
  2272                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2273                 
       
  2274                 sid->data->uid = new ( ELeave ) pcdata_t();
       
  2275                 
       
  2276                 if( aResult->iDataOwners[i]->iUid.iUid )
       
  2277                     {
       
  2278                     sid->data->uid->SetDataL ( UidToDesLC ( 
       
  2279                         aResult->iDataOwners[i]->iUid ) );
       
  2280                     CleanupStack::PopAndDestroy(); // UidToDesLC    
       
  2281                     }
       
  2282                     
       
  2283                 if( aResult->iDataOwners[i]->iJavaHash )
       
  2284                     {
       
  2285                     sid->data->uid->SetDataL ( HashToDesLC ( 
       
  2286                         aResult->iDataOwners[i]->iJavaHash->Des() ) );
       
  2287                     CleanupStack::PopAndDestroy(); // HashToDesLC
       
  2288                     }
       
  2289                                 
       
  2290                 if ( HasDrives ( aResult->iDataOwners[i]->iDriveList ) )
       
  2291                     {
       
  2292                     sid->data->drives = new ( ELeave ) ConML_Drives_t();
       
  2293                     AppendDrivesL ( sid->data->drives, 
       
  2294                         aResult->iDataOwners[i]->iDriveList );
       
  2295                     }       
       
  2296             
       
  2297                 if ( aResult->iDataOwners[i]->iPackageName.Length() > 0 ) 
       
  2298                     {
       
  2299                     sid->data->packageInfo = 
       
  2300                         new ( ELeave ) ConML_PackageInfo_t();
       
  2301                     sid->data->packageInfo->name = new ( ELeave ) pcdata_t();
       
  2302                     sid->data->packageInfo->name->SetDataL ( BufToDesLC ( 
       
  2303                         aResult->iDataOwners[i]->iPackageName  ) );
       
  2304 
       
  2305                     CleanupStack::PopAndDestroy(); // BufToDesLC
       
  2306                     }           
       
  2307             
       
  2308                 if ( aResult->iDataOwners[i]->iHasFiles || 
       
  2309                 aResult->iDataOwners[i]->iSupportsInc ||
       
  2310                 aResult->iDataOwners[i]->iDelayToPrep ||
       
  2311                 aResult->iDataOwners[i]->iReqReboot )
       
  2312                     {
       
  2313                     sid->data->burOptions = new ( ELeave ) ConML_BUROptions_t();
       
  2314                     if ( aResult->iDataOwners[i]->iHasFiles ) 
       
  2315                         {
       
  2316                         sid->data->burOptions->hasFiles = 
       
  2317                             new ( ELeave ) pcdata_t();
       
  2318                         sid->data->burOptions->hasFiles->SetDataL( IntToDesLC(
       
  2319                                 aResult->iDataOwners[i]->iHasFiles ));
       
  2320                                 
       
  2321                         CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2322                         }
       
  2323                     if ( aResult->iDataOwners[i]->iSupportsInc )
       
  2324                         {
       
  2325                         sid->data->burOptions->supportsInc = 
       
  2326                             new ( ELeave ) pcdata_t();
       
  2327                         }
       
  2328                     if ( aResult->iDataOwners[i]->iDelayToPrep )                        
       
  2329                         {
       
  2330                         sid->data->burOptions->delayToPrepareData = 
       
  2331                             new ( ELeave ) pcdata_t();
       
  2332                         }
       
  2333                     if ( aResult->iDataOwners[i]->iReqReboot )
       
  2334                         {
       
  2335                         sid->data->burOptions->requiresReboot = 
       
  2336                             new ( ELeave ) pcdata_t();
       
  2337                         }
       
  2338                     }
       
  2339                 }
       
  2340             }
       
  2341         }
       
  2342     TRACE_FUNC_EXIT;
       
  2343     }
       
  2344 
       
  2345 // -----------------------------------------------------------------------------
       
  2346 // CSConPCConnSession::AppendGetDataOwnerStatusResultsL()
       
  2347 // Appends a Get data owner status -element from the reply data of PCCS
       
  2348 // -----------------------------------------------------------------------------
       
  2349 //
       
  2350 void CSConPCConnSession::AppendGetDataOwnerStatusResultsL 
       
  2351     ( ConML_ResultsPtr_t aContent, CSConGetDataOwnerStatus* aResult )
       
  2352     {
       
  2353     TRACE_FUNC_ENTRY;
       
  2354     if ( aResult )
       
  2355         {
       
  2356         if ( aResult->iComplete )
       
  2357             {
       
  2358             aContent->complete = new ( ELeave ) pcdata_t();
       
  2359             }
       
  2360         AppendProgressL( aContent, aResult->iProgress );
       
  2361 
       
  2362         if ( aResult->iDataOwners.Count() > 0 )
       
  2363             {
       
  2364             aContent->dataOwners = new ( ELeave ) ConML_DataOwners_t();
       
  2365             for ( TInt i=0; i < aResult->iDataOwners.Count(); i ++)
       
  2366                 {
       
  2367                 ConML_SIDListPtr_t sid = new ( ELeave ) ConML_SIDList_t();
       
  2368                 CleanupStack::PushL( sid );
       
  2369                 GenericListAddL ( &aContent->dataOwners->sid, sid );
       
  2370                 CleanupStack::Pop();
       
  2371             
       
  2372                 sid->data = new ( ELeave ) ConML_SID_t();
       
  2373                 
       
  2374                 sid->data->type = new ( ELeave ) pcdata_t();
       
  2375                 sid->data->type->SetDataL ( IntToDesLC ( 
       
  2376                     aResult->iDataOwners[i]->iType) );  
       
  2377                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2378                 
       
  2379                 sid->data->uid = new ( ELeave ) pcdata_t();
       
  2380                 sid->data->uid->SetDataL ( UidToDesLC ( 
       
  2381                     aResult->iDataOwners[i]->iUid ) );
       
  2382                 CleanupStack::PopAndDestroy(); // UidToDesLC    
       
  2383                 
       
  2384                 sid->data->dataOwnerStatus = new ( ELeave ) pcdata_t();
       
  2385                 sid->data->dataOwnerStatus->SetDataL ( IntToDesLC( 
       
  2386                         aResult->iDataOwners[i]->iDataOwnStatus ));
       
  2387                 
       
  2388                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2389                 }
       
  2390             }
       
  2391         }
       
  2392     TRACE_FUNC_EXIT;
       
  2393     }
       
  2394 
       
  2395 // -----------------------------------------------------------------------------
       
  2396 // CSConPCConnSession::AppendGetDataSizeResultsL()
       
  2397 // Appends a Get data owner size -element from the reply data of PCCS
       
  2398 // -----------------------------------------------------------------------------
       
  2399 //
       
  2400 void CSConPCConnSession::AppendGetDataSizeResultsL ( 
       
  2401     ConML_ResultsPtr_t aContent, CSConGetDataSize* aResult )
       
  2402     {
       
  2403     TRACE_FUNC_ENTRY;
       
  2404     if ( aResult )  
       
  2405         {
       
  2406         if ( aResult->iComplete )
       
  2407             {
       
  2408             aContent->complete = new ( ELeave ) pcdata_t();
       
  2409             }
       
  2410         AppendProgressL( aContent, aResult->iProgress );
       
  2411         
       
  2412         if ( aResult->iDataOwners.Count() > 0 )
       
  2413             {
       
  2414             aContent->dataOwners = new ( ELeave ) ConML_DataOwners_t();
       
  2415                 
       
  2416             for ( TInt i=0; i< aResult->iDataOwners.Count(); i++ )      
       
  2417                 {
       
  2418                 ConML_SIDListPtr_t sid = new ( ELeave ) ConML_SIDList_t();
       
  2419                 CleanupStack::PushL( sid );
       
  2420                 GenericListAddL ( &aContent->dataOwners->sid, sid );
       
  2421                 CleanupStack::Pop();
       
  2422                 
       
  2423                 sid->data = new ( ELeave ) ConML_SID_t();
       
  2424                 
       
  2425                 sid->data->type = new ( ELeave ) pcdata_t();
       
  2426                 sid->data->type->SetDataL ( IntToDesLC ( 
       
  2427                     aResult->iDataOwners[i]->iType) );  
       
  2428                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2429                     
       
  2430                 sid->data->uid = new ( ELeave ) pcdata_t();
       
  2431                 
       
  2432                 if( aResult->iDataOwners[i]->iUid.iUid )
       
  2433                     {
       
  2434                     sid->data->uid->SetDataL ( UidToDesLC ( 
       
  2435                         aResult->iDataOwners[i]->iUid ) );
       
  2436                     CleanupStack::PopAndDestroy(); // UidToDesLC    
       
  2437                     }
       
  2438 
       
  2439                 if( aResult->iDataOwners[i]->iJavaHash )
       
  2440                     {
       
  2441                     sid->data->uid->SetDataL ( HashToDesLC ( 
       
  2442                         aResult->iDataOwners[i]->iJavaHash->Des() ) );
       
  2443                     CleanupStack::PopAndDestroy(); // HashToDesLC
       
  2444                     }
       
  2445     
       
  2446                 if ( HasDrives (  aResult->iDataOwners[i]->iDriveList ) )
       
  2447                     {
       
  2448                     sid->data->drives = new ( ELeave ) ConML_Drives_t();
       
  2449                     AppendDrivesL ( sid->data->drives, 
       
  2450                         aResult->iDataOwners[i]->iDriveList );
       
  2451                     }       
       
  2452                 
       
  2453                 sid->data->size = new ( ELeave ) pcdata_t();
       
  2454                 sid->data->size->SetDataL( IntToDesLC( 
       
  2455                     aResult->iDataOwners[i]->iSize ) );
       
  2456                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2457                 
       
  2458                 sid->data->transferDataType = new ( ELeave ) pcdata_t();
       
  2459                 sid->data->transferDataType->SetDataL( IntToDesLC( 
       
  2460                         aResult->iDataOwners[i]->iTransDataType ) );
       
  2461 
       
  2462                 CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2463                 }
       
  2464             }
       
  2465         }
       
  2466     TRACE_FUNC_EXIT;
       
  2467     }
       
  2468 
       
  2469 // -----------------------------------------------------------------------------
       
  2470 // CSConPCConnSession::AppendGetMetadataResultsL()
       
  2471 // Appends a GetMetadata -element from the reply data of PCCS
       
  2472 // -----------------------------------------------------------------------------
       
  2473 //
       
  2474 void CSConPCConnSession::AppendGetMetadataResultsL(
       
  2475     ConML_ResultsPtr_t aContent, CSConGetMetadata* aResult )
       
  2476     {
       
  2477     TRACE_FUNC_ENTRY;
       
  2478     
       
  2479     if ( aResult )
       
  2480         {
       
  2481         if ( aResult->iComplete )
       
  2482             {
       
  2483             aContent->complete = new ( ELeave ) pcdata_t();
       
  2484             
       
  2485             // add filename only if task is completed
       
  2486             aContent->filename = new ( ELeave ) pcdata_t();
       
  2487             aContent->filename->SetDataL( BufToDesLC(aResult->iFilename ) );
       
  2488             CleanupStack::PopAndDestroy(); // BufToDesLC
       
  2489             }
       
  2490         AppendProgressL( aContent, aResult->iProgress );
       
  2491         
       
  2492         if ( aResult->iData )
       
  2493             {
       
  2494             aContent->data = new ( ELeave ) pcdata_t();
       
  2495             aContent->data->SetDataL( aResult->iData->Des() );
       
  2496             }
       
  2497         
       
  2498         if ( aResult->iMoreData )
       
  2499             {
       
  2500             aContent->moreData = new ( ELeave ) pcdata_t();
       
  2501             }
       
  2502         }
       
  2503     TRACE_FUNC_EXIT;
       
  2504     }
       
  2505 
       
  2506 // -----------------------------------------------------------------------------
       
  2507 // CSConPCConnSession::AppendProgressL()
       
  2508 // Appends a Progress -element from the reply data of PCCS
       
  2509 // -----------------------------------------------------------------------------
       
  2510 //
       
  2511 void CSConPCConnSession::AppendProgressL ( 
       
  2512     ConML_ResultsPtr_t aContent, TInt progress )
       
  2513     {
       
  2514     TRACE_FUNC_ENTRY;
       
  2515     aContent->progress = new ( ELeave ) ConML_Progress_t();
       
  2516     aContent->progress->value = new ( ELeave ) pcdata_t();
       
  2517     aContent->progress->value->SetDataL ( IntToDesLC ( progress ));
       
  2518     CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2519     TRACE_FUNC_EXIT;
       
  2520     }
       
  2521 
       
  2522 // -----------------------------------------------------------------------------
       
  2523 // CSConPCConnSession::AppendDrivesL()
       
  2524 // Appends a Drives -element from the reply data of PCCS
       
  2525 // -----------------------------------------------------------------------------
       
  2526 //
       
  2527 void CSConPCConnSession::AppendDrivesL( 
       
  2528     ConML_DrivesPtr_t aContent, TDriveList aDrives )
       
  2529     {
       
  2530     TRACE_FUNC_ENTRY;
       
  2531     
       
  2532     for ( TInt i = 0; i<KMaxDrives; i++ )
       
  2533         {
       
  2534         if ( aDrives[i] )
       
  2535             {
       
  2536             ConML_DriveListPtr_t drive = new ( ELeave ) ConML_DriveList_t();
       
  2537             CleanupStack::PushL ( drive );
       
  2538             GenericListAddL ( &aContent->drive, drive );
       
  2539             CleanupStack::Pop(); // drive
       
  2540             
       
  2541             drive->data = new ( ELeave ) ConML_Drive_t();
       
  2542             drive->data->name = new ( ELeave ) pcdata_t();
       
  2543             drive->data->name->SetDataL( DriveNumToDesLC(i+KSConFirstDrive  ));
       
  2544             CleanupStack::PopAndDestroy(); // IntToDesLC
       
  2545             }
       
  2546         }
       
  2547     TRACE_FUNC_EXIT;
       
  2548     }
       
  2549 
       
  2550 // -----------------------------------------------------------------------------
       
  2551 // CSConPCConnSession::DriveList()
       
  2552 // Converts an Drives -element to TDriveList
       
  2553 // -----------------------------------------------------------------------------
       
  2554 //
       
  2555 TDriveList CSConPCConnSession::DriveList( ConML_DriveListPtr_t aContent )
       
  2556     {
       
  2557     TBuf8<KMaxDrives>  driveBuf;
       
  2558     TDriveList driveList;
       
  2559 
       
  2560     for ( ConML_DriveListPtr_t p = aContent; p && p->data; p = p->next )
       
  2561         {
       
  2562         if ( p->data->name )            
       
  2563             {
       
  2564             driveBuf.Append( p->data->name->Data() );
       
  2565             }
       
  2566         }
       
  2567 
       
  2568     for ( TInt i = 0; i<KMaxDrives; i++ )
       
  2569         {
       
  2570         if ( driveBuf.Locate ( TChar( i + KSConFirstDrive ) ) != KErrNotFound )
       
  2571             {
       
  2572             driveList.Append( KSConDriveExists );
       
  2573             }
       
  2574         else
       
  2575             {
       
  2576             driveList.Append( KSConNoDrive );
       
  2577             }
       
  2578         }
       
  2579     return driveList;
       
  2580     }
       
  2581 
       
  2582     
       
  2583 // -----------------------------------------------------------------------------
       
  2584 // CSConPCConnSession::IntToDesLC()
       
  2585 // Converts an integer to descriptor
       
  2586 // -----------------------------------------------------------------------------
       
  2587 //
       
  2588 TDesC8& CSConPCConnSession::IntToDesLC(const TInt& anInt)
       
  2589     {
       
  2590     HBufC8* buf = HBufC8::NewLC(20);
       
  2591     TPtr8 ptrBuf = buf->Des();
       
  2592     ptrBuf.Num(anInt);
       
  2593     return *buf;
       
  2594     }
       
  2595     
       
  2596 // -----------------------------------------------------------------------------
       
  2597 // CSConPCConnSession::DriveNumToDesLC()
       
  2598 // Convers a drive number to equivalent drive letter 
       
  2599 // -----------------------------------------------------------------------------
       
  2600 //
       
  2601 TDesC8& CSConPCConnSession::DriveNumToDesLC( const TInt& anInt )
       
  2602     {
       
  2603     TChar mark ( anInt );
       
  2604     HBufC8* buf = HBufC8::NewLC(1);
       
  2605     TPtr8 ptrBuf = buf->Des();
       
  2606     ptrBuf.Append(mark);
       
  2607     return *buf;
       
  2608     }
       
  2609     
       
  2610 // -----------------------------------------------------------------------------
       
  2611 // CSConPCConnSession::BufToDesLC()
       
  2612 // converts a buffer to descriptor
       
  2613 // -----------------------------------------------------------------------------
       
  2614 //
       
  2615 TDesC8& CSConPCConnSession::BufToDesLC( const TDesC& aBuf)
       
  2616     {
       
  2617     HBufC8* buf = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aBuf );
       
  2618     CleanupStack::PushL( buf );
       
  2619     return *buf;
       
  2620     }
       
  2621     
       
  2622 // -----------------------------------------------------------------------------
       
  2623 // CSConPCConnSession::UidToDesLC()
       
  2624 // converts an UID to a descriptor
       
  2625 // -----------------------------------------------------------------------------
       
  2626 //
       
  2627 TDesC8& CSConPCConnSession::UidToDesLC( const TUid& aUid )
       
  2628     {
       
  2629     HBufC8* buf = HBufC8::NewLC(10);
       
  2630     TPtr8 ptrBuf = buf->Des();
       
  2631     ptrBuf.Copy (aUid.Name().Mid(1, 8) );
       
  2632     return *buf;
       
  2633     }
       
  2634     
       
  2635 // -----------------------------------------------------------------------------
       
  2636 // CSConPCConnSession::DesToUid()
       
  2637 // converts a descriptor to a UID value
       
  2638 // -----------------------------------------------------------------------------
       
  2639 //
       
  2640 TUid CSConPCConnSession::DesToUid ( const TDesC8& aDes )
       
  2641     {
       
  2642     TLex8 lex( aDes );
       
  2643     TUint32 value;
       
  2644     lex.Val( value, EHex );
       
  2645     TUid uid = TUid::Uid( value );
       
  2646     return uid;
       
  2647     }   
       
  2648     
       
  2649 // -----------------------------------------------------------------------------
       
  2650 // CSConPCConnSession::DesToInt()
       
  2651 // converts a descriptor to a integer value
       
  2652 // -----------------------------------------------------------------------------
       
  2653 //
       
  2654 TInt CSConPCConnSession::DesToInt( const TDesC8& aDes)
       
  2655     {
       
  2656     TLex8 lex(aDes);
       
  2657     TInt value = 0;
       
  2658     lex.Val(value);
       
  2659     return value;
       
  2660     }
       
  2661 
       
  2662 // -----------------------------------------------------------------------------
       
  2663 // CSConPCConnSession::HasDrives()
       
  2664 // Returns ETrue if at least one drive is found from the given TDriveList
       
  2665 // -----------------------------------------------------------------------------
       
  2666 //
       
  2667 TBool CSConPCConnSession::HasDrives( TDriveList& aDrive )
       
  2668     {
       
  2669     TBool hasDrives ( EFalse );     
       
  2670     for ( TInt i = 0; i<KMaxDrives; i++ )
       
  2671         {
       
  2672         if ( aDrive[i] )
       
  2673             {
       
  2674             hasDrives = ETrue;
       
  2675             }
       
  2676         }
       
  2677     return hasDrives;
       
  2678     }
       
  2679 // -----------------------------------------------------------------------------
       
  2680 // CSConPCConnSession::HashToDesLC()
       
  2681 // converts a Java hash to descriptor
       
  2682 // -----------------------------------------------------------------------------
       
  2683 //
       
  2684 TDesC8& CSConPCConnSession::HashToDesLC( const TDesC& aBuf)
       
  2685     {
       
  2686     HBufC8* buf = HBufC8::NewLC(aBuf.Size()+5);
       
  2687     TPtr8 ptrBuf = buf->Des();
       
  2688     // Unicode conversion from 16-bit to 8-bit
       
  2689     CnvUtfConverter::ConvertFromUnicodeToUtf8(ptrBuf, aBuf);
       
  2690     //Add JAVA_ identifier to the begining of the hash
       
  2691     ptrBuf.Insert(0, KSConJavaHashId);
       
  2692     return *buf;
       
  2693     }
       
  2694 // -----------------------------------------------------------------------------
       
  2695 // CSConPCConnSession::DesToHashLC()
       
  2696 // converts descriptor to Java hash
       
  2697 // -----------------------------------------------------------------------------
       
  2698 //    
       
  2699 TPtr CSConPCConnSession::DesToHashLC( const TDesC8& aDes )
       
  2700     {
       
  2701     HBufC* buf = HBufC::NewLC(aDes.Size());
       
  2702     TPtr ptrBuf = buf->Des();
       
  2703     // Unicode conversion from 8-bit to 16-bit
       
  2704     CnvUtfConverter::ConvertToUnicodeFromUtf8(ptrBuf, aDes);
       
  2705     //Delete JAVA_
       
  2706     ptrBuf.Delete(0, KSConJavaHashId().Length());   
       
  2707     return ptrBuf;
       
  2708     }
       
  2709 // -----------------------------------------------------------------------------
       
  2710 // CSConPCConnSession::IsJavaHash()
       
  2711 // Returns ETrue if descriptor is Java hash, else EFalse
       
  2712 // -----------------------------------------------------------------------------
       
  2713 //  
       
  2714 TBool CSConPCConnSession::IsJavaHash( const TDesC8& aDes )
       
  2715     {
       
  2716     if ( aDes.FindC(KSConJavaHashId) == 0 )
       
  2717         {
       
  2718         return ETrue;
       
  2719         }
       
  2720     else
       
  2721         {
       
  2722         return EFalse;
       
  2723         }
       
  2724     }
       
  2725