omadm/omadmextensions/adapters/lawmodmadapter/src/lawmodmadapter.cpp
branchRCL_3
changeset 23 c4687ff85147
child 26 ae4a65edc4fe
equal deleted inserted replaced
22:9360ca28b668 23:c4687ff85147
       
     1 /*
       
     2 * Copyright (c) 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:  DCMO DM Adapter implementation
       
    15 *
       
    16 */
       
    17 
       
    18 // INCLUDE
       
    19 #include <implementationproxy.h>
       
    20 #include <smldmadapter.h>
       
    21 #include <centralrepository.h>
       
    22 #include <e32base.h>
       
    23 #include <ecom.h>
       
    24 #include <utf.h>
       
    25 #include <LawmoAdapterCRKeys.h>
       
    26 #include <DevManInternalCRKeys.h>
       
    27 #include <SyncMLClientDM.h>  // syncmlclientapi.lib
       
    28 #include <NSmlPrivateAPI.h> // Generic alert
       
    29 #include <nsmlconstants.h>
       
    30 #include <TerminalControl3rdPartyAPI.h>
       
    31 #include <coreapplicationuisdomainpskeys.h>
       
    32 #include <LAWMOInterface.h>
       
    33 //User Include
       
    34 #include "lawmodmadapter.h"
       
    35 #include "nsmldebug.h"
       
    36 #include "nsmldmuri.h"
       
    37 #include "TPtrC8I.h"
       
    38 #include "lawmodebug.h"
       
    39 // CONSTANTS
       
    40 
       
    41 #define MAXBUFLEN 255
       
    42 
       
    43 // ============================= MEMBER FUNCTIONS =============================
       
    44 
       
    45 // ----------------------------------------------------------------------------
       
    46 // CLawmoDMAdapter::NewL
       
    47 // Symbian 1st phase contructor
       
    48 // (static, may leave)
       
    49 // Status : Draft
       
    50 // ----------------------------------------------------------------------------
       
    51 //
       
    52 CLawmoDMAdapter* CLawmoDMAdapter::NewL( MSmlDmCallback* aCallback )
       
    53     {
       
    54     RDEBUG( "CLawmoDMAdapter NewL: begin"  );
       
    55     CLawmoDMAdapter* self = NewLC( aCallback );
       
    56     CleanupStack::Pop( self );
       
    57     return self;
       
    58     }
       
    59 
       
    60 // ----------------------------------------------------------------------------
       
    61 // CLawmoDMAdapter::NewLC
       
    62 // Symbian 1st phase contructor. Push object to cleanup-stack
       
    63 // (static, may leave)
       
    64 // Status : Draft
       
    65 // ----------------------------------------------------------------------------
       
    66 //
       
    67 CLawmoDMAdapter* CLawmoDMAdapter::NewLC( MSmlDmCallback* aCallback )
       
    68     {
       
    69     	RDEBUG( "CLawmoDMAdapter NewLC : begin"  );
       
    70     	CLawmoDMAdapter* self = new ( ELeave ) CLawmoDMAdapter( aCallback );
       
    71     	CleanupStack::PushL( self );
       
    72     	self->ConstructL();
       
    73     	RDEBUG( "CLawmoDMAdapter NewLC : end"  );
       
    74     	return self;
       
    75     }
       
    76 
       
    77 // ----------------------------------------------------------------------------
       
    78 // CLawmoDMAdapter::CLawmoDMAdapter()
       
    79 // C++ Constructor
       
    80 // Status : Draft
       
    81 // ----------------------------------------------------------------------------
       
    82 CLawmoDMAdapter::CLawmoDMAdapter( TAny* aEcomArguments )
       
    83     : CSmlDmAdapter::CSmlDmAdapter( aEcomArguments )
       
    84     {
       
    85     	RDEBUG( "CLawmoDMAdapter default constructor"  );
       
    86     }
       
    87 
       
    88 // ----------------------------------------------------------------------------
       
    89 // CLawmoDMAdapter::ConstructL
       
    90 // 2nd phase contructor
       
    91 // (may leave)
       
    92 // Status : Draft
       
    93 // ----------------------------------------------------------------------------
       
    94 //
       
    95 void CLawmoDMAdapter::ConstructL()
       
    96     {
       
    97     	RDEBUG( "CLawmoDMAdapter::ConstructL"  );
       
    98         User::LeaveIfError( ilawmoSession.Connect() );
       
    99         RDEBUG( "CLawmoDMAdapter::session connected"  );
       
   100         iRootNode.Zero();
       
   101         TBuf<MAXBUFLEN> temp; 
       
   102         CRepository *repository=CRepository::NewLC ( KCRUidLawmoAdapter );
       
   103         repository->Get(KLawmoRootNode,temp);
       
   104         iRootNode.Copy(temp);
       
   105         CleanupStack::PopAndDestroy();
       
   106     }
       
   107 
       
   108 // ----------------------------------------------------------------------------
       
   109 // CLawmoDMAdapter::~CLawmoDMAdapter()
       
   110 // C++ Destructor
       
   111 // Status : Draft
       
   112 // ----------------------------------------------------------------------------
       
   113 //
       
   114 CLawmoDMAdapter::~CLawmoDMAdapter()
       
   115     {
       
   116     	RDEBUG( "CLawmoDMAdapter Destructor"  );
       
   117     	ilawmoSession.Close();
       
   118     }
       
   119 
       
   120 // ----------------------------------------------------------------------------
       
   121 // CLawmoDMAdapter::DDFVersionL
       
   122 // Return DM plug-in version
       
   123 // (may leave)
       
   124 // Status : Draft
       
   125 // ----------------------------------------------------------------------------
       
   126 //
       
   127 void CLawmoDMAdapter::DDFVersionL( CBufBase& aDDFVersion )
       
   128     {
       
   129     // Insert version information
       
   130     RDEBUG( "CLawmoDMAdapter::DDFVersionL" );
       
   131     aDDFVersion.InsertL( 0, KLAWMODMAdapterVersion );
       
   132     }
       
   133 
       
   134 // ----------------------------------------------------------------------------
       
   135 // CLawmoDMAdapter::DDFStructureL
       
   136 // Return DM plug-in structure
       
   137 // (may leave)
       
   138 // Status : Draft
       
   139 // ----------------------------------------------------------------------------
       
   140 //
       
   141 void CLawmoDMAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
       
   142     {
       
   143     // Declare accesses
       
   144     RDEBUG( "CLawmoDMAdapter::DDFStructureL begin" );
       
   145     TSmlDmAccessTypes accessTypes;
       
   146     accessTypes.SetGet();    
       
   147     
       
   148     // Create root node 
       
   149     MSmlDmDDFObject& root = aDDF.AddChildObjectL( iRootNode );
       
   150     FillNodeInfoL( root,
       
   151                    accessTypes,
       
   152                    MSmlDmDDFObject::EPermanent,
       
   153                    MSmlDmDDFObject::ENode,
       
   154                    MSmlDmDDFObject::EOne,
       
   155                    KNullDesC8(),
       
   156                    KMimeType );
       
   157                    
       
   158    	root.SetDFTitleL( KNSmlLAWMOAdapterTitle );
       
   159                    
       
   160    	FillLAWMODDFL(root);
       
   161    	RDEBUG( "CLawmoDMAdapter::DDFStructureL end" );
       
   162 
       
   163     }
       
   164 
       
   165 // ----------------------------------------------------------------------------
       
   166 // CLawmoDMAdapter::StreamingSupport
       
   167 // Return streaming support status, set supported item size
       
   168 // Status : Draft
       
   169 // ----------------------------------------------------------------------------
       
   170 //
       
   171 TBool CLawmoDMAdapter::StreamingSupport( TInt& /* aItemSize */ )
       
   172     {
       
   173     // Not supported
       
   174     RDEBUG( "CLawmoDMAdapter::StreamingSupport"  );
       
   175     return EFalse;
       
   176     }
       
   177     
       
   178 // ----------------------------------------------------------------------------
       
   179 // CLawmoDMAdapter::StreamCommittedL
       
   180 // Commit stream buffer
       
   181 // (may leave)
       
   182 // Status : Draft
       
   183 // ----------------------------------------------------------------------------
       
   184 //
       
   185 void CLawmoDMAdapter::StreamCommittedL()
       
   186     {        
       
   187     RDEBUG("CLawmoDMAdapter::StreamCommitted"  );
       
   188     // Intentionally left empty 
       
   189     }
       
   190 
       
   191 // ----------------------------------------------------------------------------
       
   192 // CLawmoDMAdapter::CompleteOutstandingCmdsL
       
   193 // Complete outstanding commands
       
   194 // (may leave)
       
   195 // Status : Draft
       
   196 // ----------------------------------------------------------------------------
       
   197 //
       
   198 void CLawmoDMAdapter::CompleteOutstandingCmdsL()
       
   199     {
       
   200     RDEBUG( "CLawmoDMAdapter::CompleteOutstandingCmdsL"  );
       
   201     }
       
   202 
       
   203 // ----------------------------------------------------------------------------
       
   204 // CLawmoDMAdapter::FillNodeInfoL
       
   205 // Fill node info
       
   206 // (may leave)
       
   207 // Status : Draft
       
   208 // ----------------------------------------------------------------------------
       
   209 //
       
   210 void CLawmoDMAdapter::FillNodeInfoL( MSmlDmDDFObject& aDDFObject, 
       
   211                                      TSmlDmAccessTypes& aAccessTypes, 
       
   212                                      MSmlDmDDFObject::TScope aScope,
       
   213                                      MSmlDmDDFObject::TDFFormat aFormat, 
       
   214                                      MSmlDmDDFObject::TOccurence aOccurence,
       
   215                                      const TDesC8& aDescription,
       
   216                                      const TDesC8& aMIMEType )
       
   217     {
       
   218     RDEBUG( "CLawmoDMAdapter::FillNodeInfoL - begin"  );
       
   219     aDDFObject.SetAccessTypesL( aAccessTypes );
       
   220     aDDFObject.SetScopeL( aScope );
       
   221     aDDFObject.SetOccurenceL( aOccurence );
       
   222     aDDFObject.SetDFFormatL( aFormat );
       
   223     aDDFObject.SetDescriptionL( aDescription );
       
   224     if ( aFormat != MSmlDmDDFObject::ENode )
       
   225         {
       
   226         aDDFObject.AddDFTypeMimeTypeL( aMIMEType );
       
   227         }
       
   228     RDEBUG( "CLawmoDMAdapter::FillNodeInfoL - end"  );    
       
   229     }
       
   230 
       
   231 // ----------------------------------------------------------------------------
       
   232 // CLawmoDMAdapter::CopyCommandL
       
   233 // Copy object
       
   234 // (may leave)
       
   235 // Status : Draft
       
   236 // ----------------------------------------------------------------------------
       
   237 //
       
   238 void CLawmoDMAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, 
       
   239                                     const TDesC8& /*aTargetLUID*/,
       
   240                                     const TDesC8& /*aSourceURI*/, 
       
   241                                     const TDesC8& /*aSourceLUID*/,
       
   242                                     const TDesC8& /*aType*/, 
       
   243                                     TInt aStatusRef )
       
   244     {
       
   245     // Not supported
       
   246     RDEBUG( "CLawmoDMAdapter::CopyCommandL"  );
       
   247     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   248     }
       
   249 
       
   250 // ----------------------------------------------------------------------------
       
   251 // DeleteObjectL
       
   252 // Delete object
       
   253 // (may leave)
       
   254 // Status : Draft
       
   255 // ----------------------------------------------------------------------------
       
   256 //
       
   257 void CLawmoDMAdapter::DeleteObjectL( const TDesC8& /* aURI */, 
       
   258                                      const TDesC8& /* aLUID */,
       
   259                                      TInt aStatusRef )
       
   260 
       
   261     {
       
   262     // Not supported
       
   263     RDEBUG( "CLawmoDMAdapter::DeleteObjectL"  );
       
   264     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   265     }
       
   266     
       
   267 // ----------------------------------------------------------------------------
       
   268 // CLawmoDMAdapter::FetchLeafObjectL
       
   269 // Fetch leaf
       
   270 // (may leave)
       
   271 // Status : Draft
       
   272 // ----------------------------------------------------------------------------
       
   273 //
       
   274 void CLawmoDMAdapter::FetchLeafObjectL( const TDesC8& aURI, 
       
   275                                         const TDesC8& aLUID,
       
   276 								        const TDesC8& aType, 
       
   277 								        TInt aResultsRef,
       
   278 								        TInt aStatusRef )
       
   279     {
       
   280     RDEBUG("CLawmoDMAdapter::FetchLeafObjectL() Begin");
       
   281     
       
   282     TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
       
   283     CBufFlat *lObject = CBufFlat::NewL( MAXBUFLEN );
       
   284     CleanupStack::PushL( lObject );
       
   285     lObject->Reset();
       
   286     
       
   287     TInt err = InternalFetchObjectL( uriPtrc, aLUID, aType, lObject, aStatusRef );
       
   288     
       
   289     if((err == ELawMoSuccess)||(err == ELawMoOk))
       
   290     Callback().SetResultsL( aResultsRef, *lObject, aType );
       
   291     
       
   292     CSmlDmAdapter::TError status =  MapErrorToStatus( err );
       
   293 
       
   294     Callback().SetStatusL( aStatusRef, status );
       
   295     CleanupStack::PopAndDestroy( lObject );
       
   296     RDEBUG("CLawmoDMAdapter::FetchLeafObjectL() End");
       
   297     }
       
   298 
       
   299 // ----------------------------------------------------------------------------
       
   300 //InternalFetchObjectL
       
   301 // ----------------------------------------------------------------------------
       
   302 
       
   303 TInt CLawmoDMAdapter::InternalFetchObjectL( const TDesC8& aURI, 
       
   304                                               const TDesC8& /*aLUID*/,
       
   305                                               const TDesC8& /*aType*/, 
       
   306                                               CBufFlat* aObject,
       
   307                                               TInt aStatusRef )
       
   308     {    
       
   309     RDEBUG("CLawmoDMAdapter::InternalFetchObjectL() Begin");
       
   310     CLawmoDMAdapter::TNodeIdentifier identifier = GetNodeIdentifier(aURI);
       
   311     TInt numOfSegs = NSmlDmURI::NumOfURISegs( aURI ) ;
       
   312     TInt err (ELawMoInvalid);
       
   313 
       
   314     switch(identifier)
       
   315        {
       
   316        
       
   317        case CLawmoDMAdapter::ENodeState:
       
   318             {
       
   319             RDEBUG("CLawmoDMAdapter::InternalFetchObjectL ENodeState");
       
   320             TInt state;
       
   321             err = GetStateL(state);
       
   322             TBuf8<MAXBUFLEN> tmp;
       
   323             tmp.Num(state);
       
   324             aObject->InsertL(aObject->Size(),tmp);
       
   325             }
       
   326        break;
       
   327         
       
   328        case CLawmoDMAdapter::ENodeItemName:
       
   329            {
       
   330            RDEBUG("CLawmoDMAdapter::InternalFetchObjectL ENodeItemName");
       
   331            TBuf<MAXBUFLEN> val;
       
   332            TBuf<MAXBUFLEN> property;
       
   333            TPtrC8 seg = NSmlDmURI::URISeg(aURI, numOfSegs-2);
       
   334 		   property.Copy(seg);
       
   335            err = ilawmoSession.GetListItemName(property, val);
       
   336            TBuf8<MAXBUFLEN> tmp;
       
   337            tmp.Copy(val);
       
   338            aObject->InsertL(aObject->Size(),tmp);
       
   339            }
       
   340        break;
       
   341        
       
   342        case CLawmoDMAdapter::ENodeToBeWiped:
       
   343            {
       
   344            RDEBUG("CLawmoDMAdapter::InternalFetchObjectL ENodeToBeWiped");
       
   345            TBool val;
       
   346            TBuf<MAXBUFLEN> property;
       
   347            TPtrC8 seg = NSmlDmURI::URISeg(aURI, numOfSegs-2);
       
   348 		   property.Copy(seg);
       
   349            err = ilawmoSession.GetToBeWipedValue(property, val);
       
   350            TBuf8<MAXBUFLEN> tmp;           
       
   351            if(val)
       
   352                tmp.Copy(KNSmlTrue);
       
   353            else
       
   354                tmp.Copy(KNSmlFalse);
       
   355            aObject->InsertL(aObject->Size(),tmp);
       
   356            }
       
   357        break;
       
   358        
       
   359        case CLawmoDMAdapter::ENodeWipe:
       
   360            {
       
   361            RDEBUG("CLawmoDMAdapter::InternalFetchObjectL ENodeWipe");
       
   362            err = ELawMoSuccess;
       
   363            TBuf8<MAXBUFLEN> tmp;
       
   364            tmp.Zero();
       
   365            RDEBUG("CLawmoDMAdapter::InternalFetchObjectL Null value return");
       
   366            aObject->InsertL(aObject->Size(),tmp);
       
   367            }
       
   368            break;
       
   369        default:
       
   370            err = ELawMoUnknown;
       
   371        break;
       
   372        
       
   373        }
       
   374      RDEBUG("CLawmoDMAdapter::InternalFetchObjectL() End");
       
   375      return err;     
       
   376     }
       
   377     
       
   378 // ----------------------------------------------------------------------------
       
   379 // CLawmoDMAdapter::FetchLeafObjectSizeL
       
   380 // Calculate leaf object size
       
   381 // (may leave)
       
   382 // Status : Draft
       
   383 // ----------------------------------------------------------------------------
       
   384 //
       
   385 void CLawmoDMAdapter::FetchLeafObjectSizeL( const TDesC8& /* aURI */, 
       
   386                                             const TDesC8& /* aLUID */,
       
   387 									        const TDesC8& /* aType */, 
       
   388 									        TInt /* aResultsRef */,
       
   389 									        TInt aStatusRef )
       
   390     {
       
   391     RDEBUG( "CLawmoDMAdapter::FetchLeafObjectSizeL"  );
       
   392     MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
       
   393     // Respond
       
   394     Callback().SetStatusL( aStatusRef, retValue );
       
   395     }    
       
   396 
       
   397 // ----------------------------------------------------------------------------
       
   398 // CLawmoDMAdapter::ChildURIListL
       
   399 // Create child URI list
       
   400 // (may leave)
       
   401 // Status : Draft
       
   402 // ----------------------------------------------------------------------------
       
   403 //
       
   404 void CLawmoDMAdapter::ChildURIListL( const TDesC8& aURI, 
       
   405                                      const TDesC8& /* aLUID */,
       
   406 					                 const CArrayFix<TSmlDmMappingInfo>& /* aPreviousURISegmentList */,
       
   407             					     TInt aResultsRef, 
       
   408             					     TInt aStatusRef )
       
   409     {
       
   410     RDEBUG( "CLawmoDMAdapter::ChildURIListL - begin"  );
       
   411     MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
       
   412     CBufBase *currentURISegmentList = CBufFlat::NewL( MAXBUFLEN );
       
   413 	CleanupStack::PushL( currentURISegmentList );
       
   414 	// Bcoz root node is configurable, remove the node for this operation.
       
   415     TPtrC8 uriPtrc = NSmlDmURI::RemoveFirstSeg(aURI);
       
   416     
       
   417     if( uriPtrc == KNullDesC8)
       
   418     {	
       
   419         currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmLawmo );
       
   420         Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
       
   421         Callback().SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
       
   422         CleanupStack::PopAndDestroy(  ); // currentURISegmentList
       
   423         RDEBUG( "CLawmoDMAdapter::ChildURIListL(): end" );
       
   424         return;
       
   425     }
       
   426     else if( ( aURI.Match( KLawmoAvWipe ) != KErrNotFound ) &&
       
   427             (aURI.Match( KLawmoAvWipe2 ) == KErrNotFound ))
       
   428         {
       
   429           currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmLawmo2 );
       
   430         }
       
   431     else if( ( aURI.Match( KLawmoAvWipe2 ) != KErrNotFound ))
       
   432         {
       
   433           currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmLawmo3 );
       
   434         }
       
   435     // Operations    
       
   436     else if(( aURI.Match( KLawmoOperationsMatch ) != KErrNotFound ))
       
   437         {
       
   438           currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmLawmoOperations );
       
   439         } 
       
   440     // Ext    
       
   441     else if(( aURI.Match(KLawmoOperationsExtMatch) != KErrNotFound))
       
   442         {
       
   443           currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDdfOpExtWipeAll );
       
   444         }        
       
   445     else
       
   446         {
       
   447         retValue = CSmlDmAdapter::ENotFound;
       
   448         }
       
   449 
       
   450     Callback().SetStatusL( aStatusRef, retValue );
       
   451     CleanupStack::PopAndDestroy(); // currentURISegmentList
       
   452     RDEBUG( "CLawmoDMAdapter::ChildURIListL - end"  );
       
   453     }    
       
   454 
       
   455 // ----------------------------------------------------------------------------
       
   456 // CLawmoDMAdapter::AddNodeObjectL
       
   457 // Add node
       
   458 // (may leave)
       
   459 // Status : Draft
       
   460 // ----------------------------------------------------------------------------
       
   461 //
       
   462 void CLawmoDMAdapter::AddNodeObjectL( const TDesC8& /* aURI */,
       
   463                                      const TDesC8& /* aParentLUID */,
       
   464 								     TInt aStatusRef )
       
   465     {
       
   466     // Not supported
       
   467     RDEBUG( "CLawmoDMAdapter::AddNodeObjectL - begin"  );
       
   468     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   469     RDEBUG( "CLawmoDMAdapter::AddNodeObjectL - end"  );
       
   470     }    
       
   471 
       
   472 // ----------------------------------------------------------------------------
       
   473 // CLawmoDMAdapter::ExecuteCommandL
       
   474 // Execute command
       
   475 // (may leave)
       
   476 // Status : Draft
       
   477 // ----------------------------------------------------------------------------
       
   478 //
       
   479 void CLawmoDMAdapter::ExecuteCommandL( const TDesC8&  aURI , 
       
   480                                       const TDesC8& /* aLUID */,
       
   481 							          const TDesC8&  aArgument, 
       
   482 							          const TDesC8& /* aType */,
       
   483 								      TInt aStatusRef )
       
   484     {
       
   485     RDEBUG("CLawmoDMAdapter::ExecuteCommandL() Begin");
       
   486     CSmlDmAdapter::TError status;
       
   487     if(IsFactoryProfileL())
       
   488         {
       
   489         RDEBUG("CLawmoDMAdapter::ExecuteCommandL() its factory prof");
       
   490         SetCurrentServerIdL();
       
   491         TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
       
   492         CLawmoDMAdapter::TNodeIdentifier identifier = GetNodeIdentifier(uriPtrc);
       
   493         TLawMoStatus err(ELawMoSuccess);
       
   494         RDEBUG_2("ExecuteCommandL executing %d", identifier);
       
   495         switch(identifier)
       
   496             {
       
   497             case ENodePartLock:
       
   498             err = LockDeviceL();
       
   499             break;
       
   500     
       
   501             case ENodeUnlock:
       
   502             err = UnLockDeviceL();
       
   503             break;
       
   504             
       
   505             case ENodeWipe:
       
   506             {
       
   507             //Write correlator id into the cenrep            
       
   508             /********* disable this comment after correlator is added
       
   509             CRepository* crep = NULL;
       
   510             crep = CRepository::NewLC( KCRUidLawmoAdapter );
       
   511             RDEBUG("CLawmoDMAdapter::SetCurrentServerId() cenrep1");
       
   512             TInt reterr = crep->Set( KLawmoCorrelator, aArgument );
       
   513             CleanupStack::PopAndDestroy(crep);*/            
       
   514             err = ilawmoSession.DeviceWipe();
       
   515             }
       
   516             break;
       
   517             
       
   518             case ENodeWipeAll:
       
   519             err = ilawmoSession.DeviceWipeAll();
       
   520             break;  
       
   521             
       
   522             default:
       
   523             err = ELawMoUnknown;
       
   524             break;           
       
   525             }        
       
   526         if((identifier == ENodeWipe)||(identifier == ENodeWipeAll))
       
   527             {
       
   528             CRepository* crep = NULL;
       
   529             TInt reterr(KErrNone);
       
   530             TBuf<MAXBUFLEN> argument;
       
   531             TBuf<MAXBUFLEN> opURI;
       
   532             argument.Copy(aArgument);
       
   533             opURI.Copy(aURI);
       
   534             crep = CRepository::NewLC( KCRUidLawmoAdapter );
       
   535             if(argument.Length()!=0)
       
   536             reterr = crep->Set( KLawmoCorrelator, argument );
       
   537             RDEBUG_2("CLawmoDMAdapter write correlator %d", reterr);
       
   538             reterr = crep->Set( KLawmoSourceURI, opURI);
       
   539             RDEBUG_2("CLawmoDMAdapter write sourceURI %d", reterr);
       
   540             CleanupStack::PopAndDestroy(crep);
       
   541             }        
       
   542         else
       
   543             {        
       
   544             CRepository* crep = NULL;
       
   545             _LIT8(KNsmlNull,"null");
       
   546             crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys );
       
   547             RDEBUG("CLawmoDMAdapter::ExecuteCommandL Sourceref Crep");
       
   548             TInt reterr = crep->Set( KNSmlDMSCOMOTargetRef, KNsmlNull ); 
       
   549             RDEBUG_2("CLawmoDMAdapter::cenrep set for SourceRef, %d",reterr);
       
   550             CleanupStack::PopAndDestroy();
       
   551             }
       
   552         status = MapErrorToStatus( err );       //map lawmo/syncml error codes     
       
   553         }
       
   554     else
       
   555         {
       
   556         RDEBUG("CLawmoDMAdapter::ExecuteCommandL() NOT factory prof");
       
   557         status = CSmlDmAdapter::ENotAllowed; //405
       
   558         }
       
   559     Callback().SetStatusL( aStatusRef, status );
       
   560     RDEBUG( "CLawmoDMAdapter::ExecuteCommandL - end"  );
       
   561     }    
       
   562 
       
   563 // ----------------------------------------------------------------------------
       
   564 // CLawmoDMAdapter::ExecuteCommandL
       
   565 // Execute command, streaming enabled
       
   566 // (may leave)
       
   567 // Status : Draft
       
   568 // ----------------------------------------------------------------------------
       
   569 //
       
   570 void CLawmoDMAdapter::ExecuteCommandL( const TDesC8& /* aURI */, 
       
   571                                       const TDesC8& /* aLUID */,
       
   572 								      RWriteStream*& /* aStream */,
       
   573 								      const TDesC8& /* aType */,
       
   574 								      TInt aStatusRef )
       
   575     {
       
   576     // Not supported
       
   577     RDEBUG( "CLawmoDMAdapter::ExecuteCommandL Streaming"  );
       
   578     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   579     }    
       
   580     
       
   581 // ----------------------------------------------------------------------------
       
   582 // CLawmoDMAdapter::UpdateLeafObjectL
       
   583 // Update leaf object
       
   584 // (may leave)
       
   585 // Status : Draft
       
   586 // ----------------------------------------------------------------------------
       
   587 //
       
   588 void CLawmoDMAdapter::UpdateLeafObjectL( const TDesC8&  aURI,
       
   589                                         const TDesC8&   aLUID,
       
   590                                         const TDesC8&   aObject,
       
   591                                         const TDesC8&   aType,
       
   592                                         TInt aStatusRef )
       
   593     {
       
   594     RDEBUG( "CLawmoDMAdapter::UpdateLeafObjectL - begin"  );
       
   595     CSmlDmAdapter::TError status;
       
   596     if(IsFactoryProfileL())
       
   597        {
       
   598         RDEBUG("CLawmoDMAdapter::UpdateLeafObjectL() is factory prof");
       
   599         TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
       
   600         TInt err = InternalUpdateObjectL( uriPtrc, aLUID, aObject, aType, aStatusRef );        
       
   601         status = MapErrorToStatus( err );
       
   602        }
       
   603     else
       
   604         {
       
   605         RDEBUG("CLawmoDMAdapter::UpdateLeafObjectL() NOT factory prof");
       
   606         status = CSmlDmAdapter::ENotAllowed;//405
       
   607         }
       
   608     
       
   609     Callback().SetStatusL( aStatusRef, status );    
       
   610     RDEBUG( "CLawmoDMAdapter::UpdateLeafObjectL - end"  );
       
   611     }
       
   612 
       
   613 	// ----------------------------------------------------------------------------
       
   614 //InternalFetchObjectL
       
   615 // ----------------------------------------------------------------------------
       
   616 
       
   617 TInt CLawmoDMAdapter::InternalUpdateObjectL( const TDesC8& aURI, 
       
   618                                               const TDesC8& /*aLUID*/,
       
   619                                               const TDesC8& aObject, 
       
   620                                               const TDesC8& /*aType*/,
       
   621                                               TInt aStatusRef )
       
   622     { 		
       
   623       RDEBUG( "CLawmoDMAdapter::InternalUpdateObjectL - begin"  );
       
   624       CLawmoDMAdapter::TNodeIdentifier identifier = GetNodeIdentifier(aURI);
       
   625       TInt numOfSegs = NSmlDmURI::NumOfURISegs( aURI ) ;
       
   626       TInt err (ELawMoInvalid);
       
   627       RDEBUG_2("UpdateCommand updating %d", identifier);      
       
   628       switch(identifier)
       
   629          {         
       
   630          case CLawmoDMAdapter::ENodeToBeWiped:
       
   631            {
       
   632            TInt value;
       
   633            HBufC8 *object = HBufC8::NewLC( aObject.Length() );
       
   634            TPtr8 objPtr = object->Des();
       
   635            objPtr.Format( aObject );
       
   636            objPtr.LowerCase();
       
   637            if(objPtr.Compare(KNSmlTrue) == 0)
       
   638            value = 1;
       
   639            else if(objPtr.Compare(KNSmlFalse) == 0)
       
   640            value = 0;
       
   641            else
       
   642                {
       
   643                 TLex8 lex( aObject );                
       
   644                 RDEBUG( "CLawmoDMAdapter::InternalUpdateObjectL lexing"  );
       
   645                 User::LeaveIfError( lex.Val( value ) );                
       
   646                }
       
   647            CleanupStack::PopAndDestroy(); // object
       
   648 
       
   649            if(value<0||value>1)
       
   650                {
       
   651                RDEBUG_2("value to set %d", value);
       
   652                return ELawMoInvalid;
       
   653                }
       
   654            
       
   655            RDEBUG_2("value to set %d", value);
       
   656            TPtrC8 seg = NSmlDmURI::URISeg(aURI, numOfSegs-2);
       
   657 		   TBuf<MAXBUFLEN> property;
       
   658 		   property.Copy(seg);
       
   659 		   RDEBUG_2("category %s", property.PtrZ());
       
   660            err = ilawmoSession.SetToBeWipedValue(property, value);
       
   661            }
       
   662            break;
       
   663            
       
   664          default:
       
   665              err = ELawMoUnknown;
       
   666              break;
       
   667          
       
   668          }
       
   669     RDEBUG( "CLawmoDMAdapter::InternalUpdateObjectL - End"  );
       
   670 	return err;
       
   671 	}
       
   672 // ----------------------------------------------------------------------------
       
   673 // CLawmoDMAdapter::UpdateLeafObjectL
       
   674 // Update leaf object, streaming enabled
       
   675 // (may leave)
       
   676 // Status : Draft
       
   677 // ----------------------------------------------------------------------------
       
   678 //
       
   679 void CLawmoDMAdapter::UpdateLeafObjectL( const TDesC8& /* aURI */, 
       
   680                                          const TDesC8& /* aLUID */,
       
   681 									     RWriteStream*& /* aStream */, 
       
   682 									     const TDesC8& /* aType */,
       
   683 		 							     TInt aStatusRef )
       
   684     {
       
   685     
       
   686     // Not supported
       
   687     RDEBUG( "CLawmoDMAdapter::UpdateLeafObjectL - Streaming"  );
       
   688     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );//500
       
   689     }
       
   690     
       
   691 // ----------------------------------------------------------------------------
       
   692 // CLawmoDMAdapter::StartAtomicL
       
   693 // Start atomic
       
   694 // (may leave)
       
   695 // Status : Draft
       
   696 // ----------------------------------------------------------------------------
       
   697 //
       
   698 void CLawmoDMAdapter::StartAtomicL()
       
   699     {
       
   700     }
       
   701     
       
   702 // ----------------------------------------------------------------------------
       
   703 // CLawmoDMAdapter::CommitAtomicL
       
   704 // Commit atomic commands
       
   705 // (may leave)
       
   706 // Status : Draft
       
   707 // ----------------------------------------------------------------------------
       
   708 //
       
   709 void CLawmoDMAdapter::CommitAtomicL()
       
   710     {
       
   711     }
       
   712 
       
   713 // ----------------------------------------------------------------------------
       
   714 // CLawmoDMAdapter::RollbackAtomicL
       
   715 // Lose all modifications after 'StartAtomicL' command
       
   716 // (may leave)
       
   717 // Status : Draft
       
   718 // ----------------------------------------------------------------------------
       
   719 //
       
   720 void CLawmoDMAdapter::RollbackAtomicL()
       
   721     {
       
   722     }    
       
   723 
       
   724 // ---------------------------------------------------------------------------
       
   725 // CNSmlDmFotaAdapter::MapStatusToError()
       
   726 // Returns a status code corresponding to the system error code given 
       
   727 // as parameter.
       
   728 // ---------------------------------------------------------------------------
       
   729 //
       
   730 CSmlDmAdapter::TError CLawmoDMAdapter::MapErrorToStatus( TInt aError ) const
       
   731  {
       
   732     RDEBUG( "CLawmoDMAdapter::MapErrorToStatus - Begin"  );
       
   733     CSmlDmAdapter::TError err;
       
   734     
       
   735     switch( aError )
       
   736         {
       
   737         case ELawMoSuccess:
       
   738             err = CSmlDmAdapter::EExecSuccess; //1200
       
   739             break;
       
   740         case ELawMoOk:
       
   741             err = CSmlDmAdapter::EOk; //200
       
   742             break;
       
   743         case ELawMoFail:
       
   744             err = CSmlDmAdapter::EExecClientError; //1400
       
   745             break;    
       
   746         case ELawMoUserCancelled:
       
   747             err = CSmlDmAdapter::EExecUserCancelled; //1401
       
   748             break;
       
   749         case ELawMoFullyLockFailed:
       
   750             err = CSmlDmAdapter::EExecDownloadFailed; //1402
       
   751             break;
       
   752         case ELawMoPartialLockFailed:
       
   753             err = CSmlDmAdapter::EExecAltDwnldAuthFail; //1403
       
   754             break; 
       
   755         case ELawMoUnlockFailed:
       
   756             err = CSmlDmAdapter::EExecDownFailOOM; //1404
       
   757             break;            
       
   758         case ELawMoWipeFailed:
       
   759             err = CSmlDmAdapter::EExecInstallFailed; //1405
       
   760             break;    
       
   761         case ELawMoWipeNotPerformed:
       
   762             err = CSmlDmAdapter::EExecInstallOOM; //1406
       
   763             break; 
       
   764         case ELawMoWipeSuccess:
       
   765             err = CSmlDmAdapter::EExecDownFailOOM; //1201 ??????
       
   766             break;            
       
   767         case ELawMoAccepted:
       
   768             err = CSmlDmAdapter::EAcceptedForProcessing; //202
       
   769             break;
       
   770         case ELawMoUnknown:
       
   771             err = CSmlDmAdapter::ENotFound; //404
       
   772             break;
       
   773         case ELawMoInvalid:
       
   774             err = CSmlDmAdapter::EError; //500
       
   775             break;
       
   776         default :
       
   777         		err = CSmlDmAdapter::EExecClientError;//1400        
       
   778         }
       
   779     
       
   780     return err;
       
   781  }
       
   782       
       
   783 // ========================= OTHER EXPORTED FUNCTIONS =========================
       
   784 
       
   785 void CleanupEComArray(TAny* aArray)
       
   786 	{
       
   787 	(static_cast<RImplInfoPtrArray*> (aArray))->ResetAndDestroy();
       
   788 	(static_cast<RImplInfoPtrArray*> (aArray))->Close();
       
   789 	}
       
   790 
       
   791 // ----------------------------------------------------------------------------
       
   792 // CLawmoDMAdapter::FillLAWMODDFL
       
   793 // This function constructs the DDFnode with the details
       
   794 // ----------------------------------------------------------------------------
       
   795 //	
       
   796 void CLawmoDMAdapter::FillLAWMODDFL(MSmlDmDDFObject& aDDF)
       
   797 {
       
   798 	RDEBUG("CLawmoDMAdapter::FillDCMPDDFL(): begin");
       
   799 		
       
   800 	TSmlDmAccessTypes accessTypesG;
       
   801     accessTypesG.SetGet();
       
   802     
       
   803     MSmlDmDDFObject& nStateDDF = aDDF.AddChildObjectL( KNSmlDdfState );			// State
       
   804     FillNodeInfoL( nStateDDF, accessTypesG,  
       
   805                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::EInt, MSmlDmDDFObject::EOne,
       
   806                         KNSmlDdfStateDescription, KMimeType );
       
   807 
       
   808     FillDynamicNodeL(aDDF);
       
   809         
       
   810     MSmlDmDDFObject& nOperationsDDF = aDDF.AddChildObjectL( KNSmlDdfOperations );
       
   811     FillNodeInfoL( nOperationsDDF, accessTypesG,  
       
   812                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENode, MSmlDmDDFObject::EOne,
       
   813                         KNSmlDdfOperationsDescription, KMimeType ); 
       
   814     
       
   815     TSmlDmAccessTypes accessTypesE;   
       
   816     accessTypesE.SetExec();
       
   817         
       
   818     MSmlDmDDFObject& nPartLockDDF = nOperationsDDF.AddChildObjectL( KNSmlDdfPartLock );     // Partial Lock
       
   819     FillNodeInfoL( nPartLockDDF, accessTypesE,  
       
   820                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENull, MSmlDmDDFObject::EOne,
       
   821                         KNSmlDdfPartLockDescription, KMimeType );
       
   822     
       
   823     MSmlDmDDFObject& nUnlockDDF = nOperationsDDF.AddChildObjectL( KNSmlDdfUnlock );     // Unlock
       
   824     FillNodeInfoL( nUnlockDDF, accessTypesE,  
       
   825                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENull, MSmlDmDDFObject::EOne,
       
   826                         KNSmlDdfUnlockDescription, KMimeType );
       
   827 
       
   828     TSmlDmAccessTypes accessTypesEG;   
       
   829     accessTypesEG.SetExec();
       
   830     accessTypesEG.SetGet();
       
   831     
       
   832     MSmlDmDDFObject& nWipeDDF = nOperationsDDF.AddChildObjectL( KNSmlDdfWipe );     // Wipe
       
   833     FillNodeInfoL( nWipeDDF, accessTypesEG,  
       
   834                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENull, MSmlDmDDFObject::EOne,
       
   835                         KNSmlDdfWipeDescription, KMimeType ); 
       
   836     
       
   837     MSmlDmDDFObject& nExtDDF = aDDF.AddChildObjectL( KNSmlDdfOpExt );       // Ext
       
   838     FillNodeInfoL( nExtDDF, accessTypesG,  
       
   839                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENode, MSmlDmDDFObject::EOne,
       
   840                         KNSmlDdfExtDescription, KMimeType );
       
   841     
       
   842     MSmlDmDDFObject& nOpExtDDF = nExtDDF.AddChildObjectL( KNSmlDdfOpExtWipeAll );      // WipeAll
       
   843     FillNodeInfoL( nOpExtDDF, accessTypesE, 
       
   844                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENull, MSmlDmDDFObject::EOne, 
       
   845                         KNSmlDdfOpExtDescription, KMimeType ); 
       
   846     //Check for any generic alerts and send
       
   847     RDEBUG("CLawmoDMAdapter::FillDCMPDDFL(): send generic alert");
       
   848     SendGenericAlertL();
       
   849 	RDEBUG("CLawmoDMAdapter::FillDCMPDDFL(): end");
       
   850 }    
       
   851 
       
   852 void CLawmoDMAdapter::FillDynamicNodeL(MSmlDmDDFObject& aDDF)
       
   853     {
       
   854     RDEBUG("CDCMOServer::FillDynamicNode(): start");
       
   855     RImplInfoPtrArray infoArray;
       
   856     // Note that a special cleanup function is required to reset and destroy
       
   857     // all items in the array, and then close it.
       
   858     TCleanupItem cleanup(CleanupEComArray, &infoArray);
       
   859     CleanupStack::PushL(cleanup);
       
   860     REComSession::ListImplementationsL(KLAWMOPluginInterfaceUid, infoArray);
       
   861     RDEBUG("CDCMOServer::GetPluginUids(): listImpl");
       
   862     
       
   863     TSmlDmAccessTypes accessTypesG;
       
   864     accessTypesG.SetGet();    
       
   865     
       
   866     TSmlDmAccessTypes accessTypesSR;
       
   867     accessTypesSR.SetGet();
       
   868     accessTypesSR.SetReplace();
       
   869     
       
   870     MSmlDmDDFObject& nAwlDDF = aDDF.AddChildObjectL( KNSmlDdfAvailWipeList );                   // AWL
       
   871     FillNodeInfoL( nAwlDDF, accessTypesG,  
       
   872                         MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENode, MSmlDmDDFObject::EOne,
       
   873                         KNSmlDdfAWLDescription, KMimeType ); 
       
   874     
       
   875     // Loop through each info for each implementation
       
   876     for (TInt i=0; i< infoArray.Count(); i++)
       
   877         {
       
   878         RDEBUG("CDCMOServer::FillDynamicNode(): for loop");
       
   879         MSmlDmDDFObject& nDynamicNodeDDF = nAwlDDF.AddChildObjectL(infoArray[i]->OpaqueData());
       
   880         FillNodeInfoL( nDynamicNodeDDF, accessTypesG,  
       
   881                             MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENode, MSmlDmDDFObject::EOne,
       
   882                             KNSmlDdfDynNodeDescription, KMimeType ); 
       
   883         RDEBUG("CDCMOServer::FillDynamicNode(): fill dyn node");
       
   884         
       
   885         MSmlDmDDFObject& nListItemDDF = nDynamicNodeDDF.AddChildObjectL( KNSmlDdfListItemName );     // ListItemName
       
   886         FillNodeInfoL( nListItemDDF, accessTypesG, 
       
   887                             MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne, 
       
   888                             KNSmlDdfListDescription, KMimeType );
       
   889    
       
   890         
       
   891         MSmlDmDDFObject& nToWipeDDF = nDynamicNodeDDF.AddChildObjectL( KNSmlDdfToBeWiped );     // ToBeWiped
       
   892         FillNodeInfoL( nToWipeDDF, accessTypesSR, 
       
   893                             MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::EBool, MSmlDmDDFObject::EOne, 
       
   894                             KNSmlDdfToWipeDescription, KMimeType );
       
   895         RDEBUG("CDCMOServer::FillDynamicNode(): loop done");
       
   896         }
       
   897     CleanupStack::PopAndDestroy(); //cleanup
       
   898     }
       
   899 
       
   900 TBool CLawmoDMAdapter::IsFactoryProfileL()
       
   901     {
       
   902     RDEBUG("CLawmoDMAdapter::IsFactoryProfile() begin");
       
   903     TBool retval(EFalse);
       
   904     RSyncMLSession ses;
       
   905     ses.OpenL() ;
       
   906     CleanupClosePushL(ses);
       
   907     TSmlJobId jid;
       
   908     TSmlUsageType jtype;
       
   909     ses.CurrentJobL(jid, jtype);
       
   910     RSyncMLDevManJob job;
       
   911     job.OpenL(ses, jid);
       
   912     CleanupClosePushL(job) ;
       
   913     
       
   914     TSmlProfileId pid(job.Profile() ); 
       
   915     TInt fpid(-1);//factory profile id
       
   916     RDEBUG("CLawmoDMAdapter::IsFactoryProfile() before cenrep");
       
   917     
       
   918     CRepository* crep = NULL;
       
   919     crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys );
       
   920     RDEBUG("CLawmoDMAdapter::IsFactoryProfile() CRep1");
       
   921     TInt reterr = crep->Get( KMaxFactoryDMProfileId, fpid ); 
       
   922     RDEBUG("CLawmoDMAdapter::IsFactoryProfile() CRep2");
       
   923     fpid =fpid + KMaxDataSyncID; //fpid in cenrep needs to be updated
       
   924     RDEBUG_2("factprofidStored %d", fpid);
       
   925     
       
   926     if( pid <= fpid )
       
   927         {
       
   928         RDEBUG("CLawmoDMAdapter::IsFactoryProfile() pid is factory");
       
   929         retval = ETrue;
       
   930         }
       
   931     else
       
   932         {
       
   933         RDEBUG("CLawmoDMAdapter::IsFactoryProfile() pid not factory");
       
   934         }
       
   935     CleanupStack::PopAndDestroy(crep);  
       
   936     CleanupStack::PopAndDestroy( &job) ;
       
   937     CleanupStack::PopAndDestroy( &ses) ;
       
   938     
       
   939     RDEBUG("CLawmoDMAdapter::IsFactoryProfile() end");    
       
   940     return retval;
       
   941     }
       
   942 
       
   943 void CLawmoDMAdapter::SetCurrentServerIdL()
       
   944     {
       
   945     RDEBUG("CLawmoDMAdapter::SetCurrentServerId() begin");
       
   946     TBuf<MAXBUFLEN> tsrvrid;
       
   947     TBuf<MAXBUFLEN> tsrvrname;
       
   948     RSyncMLSession ses;
       
   949     ses.OpenL() ;
       
   950     CleanupClosePushL(ses);
       
   951     
       
   952     TSmlJobId jid;
       
   953     TSmlUsageType jtype;
       
   954     ses.CurrentJobL(jid, jtype);
       
   955     
       
   956     RSyncMLDevManJob job;
       
   957     job.OpenL(ses, jid);
       
   958     CleanupClosePushL(job) ;
       
   959     TSmlProfileId pid(job.Profile() ); 
       
   960     
       
   961     RDEBUG("CLawmoDMAdapter::SetCurrentServerId() syncprofile");
       
   962     RSyncMLDevManProfile syncProfile;
       
   963     syncProfile.OpenL(ses, pid);    
       
   964     CleanupClosePushL(syncProfile);    
       
   965     tsrvrid.Copy(syncProfile.ServerId());
       
   966     tsrvrname.Copy(syncProfile.DisplayName());
       
   967     TInt tempPid = (TInt) syncProfile.Identifier();
       
   968     
       
   969     RDEBUG_2("CLawmoDMAdapter::SetCurrentServerId() ProfileId 1 %d",tempPid);
       
   970     RDEBUG_2("CLawmoDMAdapter::SetCurrentServerId() ProfileId 2 %d",(TInt) pid);
       
   971     RDEBUG_2("CLawmoDMAdapter::SetCurrentServerId() Srvrid %s",tsrvrid.PtrZ());  
       
   972     RDEBUG_2("CLawmoDMAdapter::SetCurrentServerId() srvrname %s",tsrvrname.PtrZ());
       
   973     
       
   974     CRepository* crep = NULL;
       
   975     crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys );
       
   976     TInt reterr = crep->Set( KLAWMOfactoryDmProfileID, (TInt)pid ); 
       
   977     RDEBUG_2("CLawmoDMAdapter::setProfile() %d",reterr);
       
   978     reterr = crep->Set( KLAWMOfactoryDmServerID, tsrvrid ); 
       
   979     RDEBUG_2("CLawmoDMAdapter::SetCurrentServerId() %d",reterr);
       
   980     reterr = crep->Set(KLAWMOfactoryDmServerName,tsrvrname);
       
   981     RDEBUG_2("CLawmoDMAdapter::servername() %d",reterr);
       
   982     
       
   983     CleanupStack::PopAndDestroy( &syncProfile);
       
   984     CleanupStack::PopAndDestroy( &job) ;
       
   985     CleanupStack::PopAndDestroy( &ses) ;
       
   986     CleanupStack::PopAndDestroy() ;//cenrep
       
   987     
       
   988     RDEBUG("CLawmoDMAdapter::SetCurrentServerId() end");
       
   989     }
       
   990 
       
   991 CLawmoDMAdapter::TNodeIdentifier CLawmoDMAdapter::GetNodeIdentifier(const TDesC8& aURI)
       
   992     {
       
   993     RDEBUG("CLawmoDMAdapter::GetNodeIdentifier() begin");
       
   994 
       
   995     TInt    numOfSegs = NSmlDmURI::NumOfURISegs( aURI ) ;
       
   996     TPtrC8I seg1 = NSmlDmURI::URISeg(aURI, 0);
       
   997 
       
   998     if (seg1 == iRootNode)
       
   999         {
       
  1000         if(numOfSegs == 1) return CLawmoDMAdapter::ENodeLawMo;
       
  1001 
       
  1002         TPtrC8I seg2 = NSmlDmURI::URISeg(aURI, 1);
       
  1003 
       
  1004         if (seg2 == KNSmlDdfState)
       
  1005             {
       
  1006                 return CLawmoDMAdapter::ENodeState;
       
  1007             }            
       
  1008         else if (seg2 == KNSmlDdfAvailWipeList)
       
  1009             {               
       
  1010                 if (numOfSegs == 2)
       
  1011                 {
       
  1012                     return CLawmoDMAdapter::ENodeAvWipeList;
       
  1013                 }
       
  1014                 else if (numOfSegs == 3) 
       
  1015                 {            
       
  1016                     // We are not using dynamic node name to do any decision making
       
  1017                     return CLawmoDMAdapter::ENodeDynamic;
       
  1018                 }
       
  1019                 else if (numOfSegs == 4) 
       
  1020                 {
       
  1021                     TPtrC8I seg4 = NSmlDmURI::URISeg(aURI, 3);
       
  1022                     
       
  1023                     if (seg4 == KNSmlDdfListItemName)
       
  1024                         {
       
  1025                         return CLawmoDMAdapter::ENodeItemName;
       
  1026                         }
       
  1027                     else if (seg4 == KNSmlDdfToBeWiped)
       
  1028                         {
       
  1029                         return CLawmoDMAdapter::ENodeToBeWiped;
       
  1030                         }
       
  1031                     else
       
  1032                         {
       
  1033                         return CLawmoDMAdapter::ENodeNotUsedAndAlwaysLast;
       
  1034                         }
       
  1035                 }
       
  1036                 else
       
  1037                 {
       
  1038                 return CLawmoDMAdapter::ENodeNotUsedAndAlwaysLast;
       
  1039                 }
       
  1040             }            
       
  1041         else if (seg2 == KNSmlDdfOperations)                    
       
  1042             {
       
  1043                 if(numOfSegs == 2)
       
  1044                     {
       
  1045                      return CLawmoDMAdapter::ENodeOperations;
       
  1046                     }
       
  1047                 else if(numOfSegs == 3)
       
  1048                     {
       
  1049                     TPtrC8I seg3 = NSmlDmURI::URISeg(aURI, 2);
       
  1050                 
       
  1051                     if(seg3 == KNSmlDdfPartLock)
       
  1052                         {
       
  1053                         return CLawmoDMAdapter::ENodePartLock;
       
  1054                         }  
       
  1055                     else if(seg3 == KNSmlDdfUnlock)
       
  1056                         {
       
  1057                         return CLawmoDMAdapter::ENodeUnlock;
       
  1058                         } 
       
  1059                     else if(seg3 == KNSmlDdfWipe)
       
  1060                         {
       
  1061                         return CLawmoDMAdapter::ENodeWipe;
       
  1062                         } 
       
  1063                     }
       
  1064                 else
       
  1065                     { 
       
  1066                     return CLawmoDMAdapter::ENodeNotUsedAndAlwaysLast;
       
  1067                     }
       
  1068             }
       
  1069         else if (seg2 == KNSmlDdfOpExt)
       
  1070             {
       
  1071                 if(numOfSegs == 2)
       
  1072                 {
       
  1073                     return CLawmoDMAdapter::ENodeExt;
       
  1074                 }
       
  1075                 else if(numOfSegs == 3)
       
  1076                 {
       
  1077                 TPtrC8I seg3 = NSmlDmURI::URISeg(aURI, 2);
       
  1078 
       
  1079                 if(seg3 == KNSmlDdfOpExtWipeAll)
       
  1080                     {
       
  1081                     return CLawmoDMAdapter::ENodeWipeAll;
       
  1082                     } 
       
  1083                 else
       
  1084                     {
       
  1085                     return CLawmoDMAdapter::ENodeNotUsedAndAlwaysLast;
       
  1086                     }
       
  1087                 }
       
  1088                 else
       
  1089                 {
       
  1090                 return CLawmoDMAdapter::ENodeNotUsedAndAlwaysLast;
       
  1091                 }
       
  1092             }
       
  1093         }
       
  1094     RDEBUG("CLawmoDMAdapter::GetNodeIdentifier() End");
       
  1095     return CLawmoDMAdapter::ENodeNotUsedAndAlwaysLast;
       
  1096     }
       
  1097 
       
  1098 void CLawmoDMAdapter::SendGenericAlertL()
       
  1099 {
       
  1100     RDEBUG("CLawmoDMAdapter::SendGenericAlert(): begin");    
       
  1101     // check if wipe generic alert needs to be sent ?
       
  1102     TInt wipeStatus;
       
  1103     CRepository *repository=CRepository::NewLC ( KCRUidLawmoAdapter );
       
  1104     repository->Get(KLawmoWipeStatus,wipeStatus);
       
  1105     RDEBUG("CDCMOServer::SendGenericAlert(): chkin wipestatus");
       
  1106     if(wipeStatus!=-1)
       
  1107         {
       
  1108         //Wipe Alert needs tobe sent
       
  1109         RNSmlPrivateAPI privateAPI;
       
  1110         privateAPI.OpenL();
       
  1111         RDEBUG("CLawmoDMAdapter::SendGenericAlert(): OpenL");
       
  1112         CleanupClosePushL(privateAPI);
       
  1113         RArray<CNSmlDMAlertItem> iItemArray;
       
  1114         CNSmlDMAlertItem* item = new (ELeave) CNSmlDMAlertItem ;
       
  1115         RDEBUG("CLawmoDMAdapter::SendGenericAlert(): alertItem");
       
  1116         TBuf<MAXBUFLEN> targetURI;
       
  1117         targetURI.Append(KNullDesC);
       
  1118         TBuf<MAXBUFLEN> correlator;
       
  1119         correlator.Append(KNullDesC);
       
  1120         TBuf<MAXBUFLEN> sourceURI;
       
  1121         sourceURI.Append(KNullDesC);
       
  1122         RDEBUG("CLawmoDMAdapter::SendGenericAlert(): bfore cenrep");
       
  1123         // Construct generic alert message
       
  1124         TInt reterr = repository->Get(KLawmoCorrelator,correlator );
       
  1125         reterr = repository->Get(KLawmoSourceURI,sourceURI);
       
  1126         RDEBUG("CLawmoDMAdapter::SendGenericAlert(): after cenrep");
       
  1127         
       
  1128         HBufC8 *descorrelator = HBufC8::NewL(MAXBUFLEN);
       
  1129         (descorrelator->Des()).Copy(correlator);
       
  1130         
       
  1131         HBufC8 *aSourceuri = HBufC8::NewL(MAXBUFLEN);
       
  1132         (aSourceuri->Des()).Copy(sourceURI);   
       
  1133         item->iSource = aSourceuri;    
       
  1134         
       
  1135         HBufC8 *aTargeturi = HBufC8::NewL(MAXBUFLEN);   
       
  1136         (aTargeturi->Des()).Copy(targetURI);    
       
  1137         item->iTarget = aTargeturi; 
       
  1138         if(item->iTarget->Des().Compare(KNullDesC8)==0)
       
  1139             RDEBUG("CLawmoDMAdapter::SendGenericAlert() targeturi is NULL");
       
  1140         RDEBUG("CLawmoDMAdapter::SendGenericAlert(): targeturidone");
       
  1141         
       
  1142         HBufC8 *aMetatype = HBufC8::NewL(MAXBUFLEN); 
       
  1143         (aMetatype->Des()).Copy(KLawmoMetatype);               
       
  1144         item->iMetaType = aMetatype;     
       
  1145         
       
  1146         HBufC8 *aMetaformat = HBufC8::NewL(MAXBUFLEN); 
       
  1147         (aMetaformat->Des()).Copy(KLawmoMetaformat);         
       
  1148         item->iMetaFormat = aMetaformat;
       
  1149         
       
  1150         HBufC8 *aMetamark = HBufC8::NewL(MAXBUFLEN); 
       
  1151         (aMetamark->Des()).Copy(KLawmoMetamark);               
       
  1152         item->iMetaMark = aMetamark;
       
  1153         
       
  1154         //appending result code
       
  1155         HBufC8 *data = HBufC8::NewL(MAXBUFLEN);
       
  1156         (data->Des()).Num(wipeStatus);
       
  1157         item->iData = data;
       
  1158         
       
  1159         repository->Set(KLawmoWipeStatus,-1);//reset the wipestatus
       
  1160         
       
  1161         TInt genericStatus(KErrNone);
       
  1162         RDEBUG("CLawmoDMAdapter::SendGenericAlert(): Appending data");
       
  1163         iItemArray.AppendL(*item);
       
  1164         RDEBUG("CLawmoDMAdapter::SendGenericAlert(): Issuing request");
       
  1165         TRAP_IGNORE(genericStatus=privateAPI.AddDMGenericAlertRequestL(*descorrelator, iItemArray ));
       
  1166         RDEBUG_2("CLawmoDMAdapter::SendGenericAlert(): Api call done %d", genericStatus);
       
  1167         delete data;    
       
  1168         delete aMetamark;    
       
  1169         delete aMetaformat;    
       
  1170         delete aMetatype;  
       
  1171 		delete aTargeturi;
       
  1172         delete aSourceuri;
       
  1173         delete item;
       
  1174         delete descorrelator;		
       
  1175         iItemArray.Reset();         
       
  1176         iItemArray.Close();
       
  1177         CleanupStack::PopAndDestroy( &privateAPI);
       
  1178         }
       
  1179     
       
  1180     CleanupStack::PopAndDestroy();
       
  1181     RDEBUG("CLawmoDMAdapter::SendGenericAlert(): end");    
       
  1182 }
       
  1183 
       
  1184 TLawMoStatus CLawmoDMAdapter::LockDeviceL()
       
  1185     {
       
  1186     RDEBUG("CLawmoDMAdapter::LockDevice(): begin");
       
  1187     TInt lockValue(0);
       
  1188     TInt currentLawmoState(0);
       
  1189     TLawMoStatus lawmostatus(ELawMoSuccess);
       
  1190     RDEBUG("CLawmoDMAdapter::LockDevice(): 1");
       
  1191     CRepository* crep = NULL;
       
  1192     crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys );
       
  1193     RDEBUG("CLawmoDMAdapter::LockDevice(): 2");
       
  1194 
       
  1195     User::LeaveIfError(RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus,lockValue));
       
  1196     RDEBUG("CLawmoDMAdapter::LockDevice(): 3");  
       
  1197     
       
  1198     // If Locked already by Tarm/autolock, set LawmoState.
       
  1199     if(lockValue>EAutolockOff)
       
  1200         {
       
  1201         RDEBUG("CLawmoDMAdapter::LockDevice(): 3.0");
       
  1202         TInt err = crep->Set( KLAWMOPhoneLock, EPartialLocked );
       
  1203         CleanupStack::PopAndDestroy(crep);  
       
  1204         if(err==KErrNone)   return lawmostatus;
       
  1205         else 
       
  1206         return ELawMoPartialLockFailed;
       
  1207         }
       
  1208 
       
  1209     TInt reterr = crep->Get( KLAWMOPhoneLock, currentLawmoState );     
       
  1210     if(reterr!= KErrNone)
       
  1211         lawmostatus = ELawMoPartialLockFailed;
       
  1212     RDEBUG("CLawmoDMAdapter::LockDevice(): 3.1");
       
  1213     
       
  1214     if(currentLawmoState==EUnlocked)
       
  1215         {
       
  1216         RTerminalControl tc;
       
  1217         RTerminalControl3rdPartySession ts;
       
  1218         
       
  1219         User::LeaveIfError( tc.Connect() );
       
  1220         CleanupClosePushL( tc );
       
  1221 
       
  1222         User::LeaveIfError( ts.Open( tc ) );
       
  1223         CleanupClosePushL( ts );
       
  1224         RDEBUG("CLawmoDMAdapter::LockDevice(): 3.5");
       
  1225         TBuf8<8> data;
       
  1226         data.Copy(_L8("1"));
       
  1227         TInt status = ts.SetDeviceLockParameter(RTerminalControl3rdPartySession::ELock, data);        
       
  1228         RDEBUG_2("CLawmoDMAdapter::LockDevice() %d", status );        
       
  1229         if (status == KErrNone)    
       
  1230             {
       
  1231             reterr = crep->Set( KLAWMOPhoneLock, EPartialLocked );
       
  1232             if (reterr!= KErrNone)
       
  1233                 lawmostatus = ELawMoPartialLockFailed;
       
  1234             }
       
  1235         else if (status == KErrCancel)
       
  1236             lawmostatus = ELawMoUserCancelled;
       
  1237         else
       
  1238             lawmostatus = ELawMoPartialLockFailed;
       
  1239         
       
  1240         ts.Close();
       
  1241         tc.Close();
       
  1242         RDEBUG("CLawmoDMAdapter::LockDevice(): set val to 20");       
       
  1243         CleanupStack::PopAndDestroy( &ts );
       
  1244         CleanupStack::PopAndDestroy( &tc );
       
  1245         RDEBUG("CLawmoDMAdapter::LockDevice(): 5");
       
  1246         }
       
  1247     
       
  1248     CleanupStack::PopAndDestroy(crep);  
       
  1249     RDEBUG("CLawmoDMAdapter::LockDevice(): End");
       
  1250     return lawmostatus;
       
  1251     }
       
  1252 
       
  1253 TLawMoStatus CLawmoDMAdapter::UnLockDeviceL()
       
  1254     {
       
  1255     RDEBUG("CDCMOServer::UnLockDevice(): begin");
       
  1256     CRepository* crep = NULL;
       
  1257     TInt currentLawmoState =0;
       
  1258     TLawMoStatus lawmostat(ELawMoSuccess);    
       
  1259     TBool currentLockState(EFalse);
       
  1260     TInt lockValue(0);
       
  1261     User::LeaveIfError(RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus,lockValue));
       
  1262     RDEBUG("CDCMOServer::unLockDevice(): 0");
       
  1263 
       
  1264     if(lockValue>EAutolockOff)
       
  1265         currentLockState = ETrue;
       
  1266     
       
  1267     RDEBUG("CDCMOServer::UnLockDevice(): 1");
       
  1268     crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys );
       
  1269     RDEBUG("CDCMOServer::UnLockDevice(): 2");
       
  1270     TInt reterr = crep->Get( KLAWMOPhoneLock, currentLawmoState ); 
       
  1271     RDEBUG("CDCMOServer::UnLockDevice(): 2.1");
       
  1272     
       
  1273     if(reterr!= KErrNone)
       
  1274         lawmostat = ELawMoUnlockFailed;
       
  1275     
       
  1276     if((currentLawmoState != EUnlocked) ||(currentLockState))
       
  1277         {
       
  1278         RTerminalControl tc;
       
  1279         RTerminalControl3rdPartySession ts;
       
  1280         RDEBUG("CDCMOServer::UnLockDevice(): 3");
       
  1281         User::LeaveIfError( tc.Connect() );
       
  1282         CleanupClosePushL( tc );  
       
  1283         User::LeaveIfError( ts.Open( tc ) );
       
  1284         CleanupClosePushL( ts );
       
  1285         RDEBUG("CDCMOServer::UnLockDevice(): 4");
       
  1286         TBuf8<8> data;
       
  1287         data.Copy(_L8("0"));
       
  1288         TInt status = ts.SetDeviceLockParameter(RTerminalControl3rdPartySession::ELock, data);       
       
  1289         RDEBUG_2("CDCMOServer::UnLockDevice() %d", status );
       
  1290         if (status == KErrNone)    
       
  1291             {
       
  1292             reterr = crep->Set( KLAWMOPhoneLock, EUnlocked );
       
  1293             if (reterr!= KErrNone)
       
  1294                 lawmostat = ELawMoPartialLockFailed;
       
  1295             }
       
  1296         else if (status == KErrCancel)
       
  1297             lawmostat = ELawMoUserCancelled;
       
  1298         else
       
  1299             lawmostat = ELawMoUnlockFailed;
       
  1300         
       
  1301         ts.Close();
       
  1302         tc.Close();
       
  1303         RDEBUG("CDCMOServer::UnLockDevice(): set to 30");
       
  1304         CleanupStack::PopAndDestroy( &ts );
       
  1305         CleanupStack::PopAndDestroy( &tc );
       
  1306         }
       
  1307     
       
  1308     if(!currentLockState)
       
  1309         {
       
  1310         reterr = crep->Set( KLAWMOPhoneLock, EUnlocked );
       
  1311         if(reterr!=KErrNone)   
       
  1312             lawmostat = ELawMoUnlockFailed;
       
  1313         }
       
  1314 
       
  1315     CleanupStack::PopAndDestroy(crep); 
       
  1316     RDEBUG("CDCMOServer::UnLockDevice(): End");
       
  1317     return lawmostat;    
       
  1318     }
       
  1319 
       
  1320 TLawMoStatus CLawmoDMAdapter::GetStateL(TInt& aState)
       
  1321 {
       
  1322     RDEBUG("CDCMOServer::GetState(): begin");
       
  1323     TLawMoStatus lawmostat(ELawMoOk);
       
  1324     CRepository* crep = NULL;
       
  1325     crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys );
       
  1326     RDEBUG("CDCMOServer::GetState(): created cenrep");
       
  1327     TInt reterr = crep->Get( KLAWMOPhoneLock, aState );
       
  1328     RDEBUG("CDCMOServer::GetState(): get on cenrep");
       
  1329     if(reterr!= KErrNone)
       
  1330     {
       
  1331             RDEBUG("CDCMOServer::GetLocalCategoryL(): centrep Get error");
       
  1332             lawmostat = ELawMoInvalid;
       
  1333     }
       
  1334     RDEBUG("CDCMOServer::GetState(): writing the int val");
       
  1335     CleanupStack::PopAndDestroy(crep); 
       
  1336     RDEBUG("CDCMOServer::GetState(): End");
       
  1337     return lawmostat;
       
  1338 }
       
  1339 
       
  1340 // End of File