webservices/wsstar/wsstarplugin/src/wsstarpolicymanager.cpp
changeset 0 62f9d29f7211
equal deleted inserted replaced
-1:000000000000 0:62f9d29f7211
       
     1 /*
       
     2 * Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:           
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 
       
    26 
       
    27 #include <e32std.h>
       
    28 #include <utf.h> // for reading policy from file (utf-8 conversion)
       
    29 
       
    30 #include <SenServiceConnection.h> // public error codes
       
    31 
       
    32 #include "senwspolicymanager.h"
       
    33 #include "seninternalwspolicy.h"
       
    34 
       
    35 #include "wsstarpolicymanager.h"
       
    36 
       
    37 #include "senpointermap.h"
       
    38 #include "wsstarhttpclient.h"
       
    39 #include "wspolicy.h"
       
    40 #include "sendebug.h"
       
    41 #include "wsstardictionary.h"
       
    42 #include "MSenServicePolicy.h"
       
    43 #include "wsstarpolicyrequest.h"
       
    44 #include "senlogger.h"
       
    45 
       
    46 class CWSStarHandlerContext;
       
    47 class CWSStarPolicyHandler;
       
    48 using namespace MSWSPolicy;
       
    49 
       
    50 namespace
       
    51     {
       
    52     _LIT8(KHttp, "http");
       
    53 /*    
       
    54     TInt IsUriAlreadyExist(const TDesC8& aContract, const TDesC8 aUriName, RPolicyRequestMap& aRequestMap)
       
    55         {
       
    56         TInt uriCount(aRequestMap.Count());
       
    57         // check this if it is already in aRequestMap                
       
    58         for (TInt j = 0; j< uriCount; j++)
       
    59             {
       
    60             CPolicyReqMap* req = aRequestMap[j];
       
    61             TPtrC8 contract = req->Contract();
       
    62             TPtrC8 uri = req->Uri();
       
    63             if(contract.Compare(aContract) == 0 && uri.Compare(aUriName) == 0)
       
    64                 {
       
    65                 return KErrNone;
       
    66                 }
       
    67             }
       
    68         return KErrNotFound;
       
    69         }
       
    70   */  
       
    71     }
       
    72     
       
    73 //---------------------------------------------------------------------------
       
    74 // Create instance of concrete ECOM interface implementation
       
    75 //---------------------------------------------------------------------------
       
    76 //
       
    77 CWSStarPolicyManager* CWSStarPolicyManager::NewL(TAny* aHandlerCtx)
       
    78     {
       
    79     
       
    80     MSenHandlerContext* handlerCtx =
       
    81         reinterpret_cast<MSenHandlerContext*>(aHandlerCtx);
       
    82     CWSStarPolicyManager* self   = new (ELeave) CWSStarPolicyManager(*handlerCtx);
       
    83     CleanupStack::PushL (self);
       
    84     self->ConstructL();
       
    85     CleanupStack::Pop(self);
       
    86     return self;
       
    87     }
       
    88 
       
    89 
       
    90 //---------------------------------------------------------------------------
       
    91 // Constructor
       
    92 //---------------------------------------------------------------------------
       
    93 //
       
    94 CWSStarPolicyManager::CWSStarPolicyManager(MSenHandlerContext& aCtx): iSenHandlerContext(aCtx)
       
    95     {
       
    96     }
       
    97 
       
    98 //---------------------------------------------------------------------------
       
    99 // Destructor
       
   100 //---------------------------------------------------------------------------
       
   101 //
       
   102 CWSStarPolicyManager::~CWSStarPolicyManager()
       
   103     {
       
   104     TLSLOG(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,(_L("~CWSStarPolicyManager::~CWSStarPolicyManager()")));
       
   105     delete iRegistry;
       
   106     delete iPolicyManager;
       
   107 //    iPolicyMap.ResetAndDestroy();
       
   108     iContracts.ResetAndDestroy();
       
   109     delete iDictionary;
       
   110     
       
   111     }
       
   112 
       
   113 //---------------------------------------------------------------------------
       
   114 // Second phase construction.
       
   115 //---------------------------------------------------------------------------
       
   116 //
       
   117 void CWSStarPolicyManager::ConstructL()
       
   118     {
       
   119     TLSLOG(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,(_L("CWSStarPolicyManager::ConstructL()")));
       
   120     iRegistry = CPolicyRegistry::NewL();
       
   121     iDictionary = CWSStarDictionary::NewL(*(CSIF*)iSenHandlerContext.GetAnyL(HandlerContextKey::KSIF()), *Log());//codescannerwarnings
       
   122     iPolicyManager = CSenWSPolicyManager::NewL(*iSenHandlerContext.GetSenCoreServiceManager());
       
   123     }
       
   124  
       
   125 //---------------------------------------------------------------------------
       
   126 // 
       
   127 //---------------------------------------------------------------------------
       
   128 //     
       
   129 TInt CWSStarPolicyManager::InvokeL(const TDesC8& aContract)
       
   130     {
       
   131     TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarPolicyManager::InvokeL(const TDesC8& aContract)");
       
   132     
       
   133     
       
   134     if( aContract.Length() < 1 )
       
   135         {
       
   136         return KErrArgument;
       
   137         }
       
   138     if(!IsContractExist(aContract))
       
   139         {
       
   140         HBufC8* cont = aContract.AllocL();
       
   141         iContracts.Append(cont);
       
   142         }
       
   143 
       
   144     return KErrNone;
       
   145     }
       
   146 //---------------------------------------------------------------------------
       
   147 // 
       
   148 //---------------------------------------------------------------------------
       
   149 // 
       
   150 TInt CWSStarPolicyManager::IsContractExist(const TDesC8& aContract)    
       
   151     {
       
   152     
       
   153     TInt count(iContracts.Count());
       
   154     for(TInt i = 0; i< count; i++)
       
   155         {
       
   156         
       
   157         TPtrC8 contract = iContracts[i]->Des();
       
   158         if(contract.Compare(aContract) == 0)
       
   159             {
       
   160             return ETrue;
       
   161             }
       
   162         }
       
   163 
       
   164     return EFalse;
       
   165     }
       
   166 //---------------------------------------------------------------------------
       
   167 // 
       
   168 #if !defined( RD_SEN_WS_STAR_DISABLE_POLICY_HTTP_GET )
       
   169 TInt CWSStarPolicyManager::DownloadPolicyL( CSenWSDescription* apSD ) 
       
   170 #else // RD_SEN_WS_STAR_DISABLE_POLICY_HTTP_GET == TRUE
       
   171 TInt CWSStarPolicyManager::DownloadPolicyL( CSenWSDescription* /* apSD */ ) 
       
   172 #endif  // RD_SEN_WS_STAR_DISABLE_POLICY_HTTP_GET
       
   173     {
       
   174     TLSLOG(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,(_L("CWSStarPolicyManager::DownloadPolicyL()")));
       
   175     TInt contCount = iContracts.Count();
       
   176     for(TInt j = 0; j< contCount; j++)    
       
   177     {
       
   178         TPtrC8 ptr = iContracts[j]->Des();
       
   179         RegisterWsPolicyL(ptr);            
       
   180     }
       
   181 
       
   182 
       
   183     TInt error(KErrNone);
       
   184     TInt leaveCode(KErrNone);
       
   185     
       
   186     RExpiredPolicyArray list;
       
   187     CleanupClosePushL(list);    
       
   188     TInt retVal = iPolicyManager->ExpiredPoliciesL(list, error);
       
   189     if(retVal == KErrNone)
       
   190     {
       
   191         TPtrC8 finalUri(KHttp);
       
   192         if( finalUri != KNullDesC8 )
       
   193             {
       
   194             error = KErrNotFound; // testing
       
   195             TInt leaveCode(KErrNone);
       
   196     #if !defined( RD_SEN_WS_STAR_DISABLE_POLICY_HTTP_GET )
       
   197             TRAP( leaveCode, error = GetHttpPolicyL( finalUri, list, apSD); )
       
   198     #endif 
       
   199 
       
   200             
       
   201                         
       
   202             }
       
   203     }
       
   204     if( error )
       
   205         {
       
   206         TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarPolicyManager::DownloadPolicyL:");
       
   207         TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KMinLogLevel, _L8("- GetHttpPolicyL returned error: %d"), error ));
       
   208         TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel," => attempting to read policy from file system..");
       
   209         TRAP( leaveCode, error = GetPolicyFromFileL( list ); )
       
   210         TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KMinLogLevel, _L8("- GetPolicyFromFileL returned: %d"), error ));
       
   211         }
       
   212 
       
   213     CleanupStack::Pop(&list);  
       
   214     
       
   215     TInt count(list.Count());
       
   216     for(TInt i = 0; i< count; i++)
       
   217     {
       
   218         CExpiredPolicy* req = list[i];
       
   219         if(req->Contents() != KNullDesC8())
       
   220         {
       
   221             RPointerArray<CSenWSDescription> serviceDescriptions;
       
   222             CleanupClosePushL(serviceDescriptions);
       
   223             TInt retVal(KErrNone);
       
   224             TInt leaveCode(KErrNone);
       
   225             TRAP(leaveCode, retVal = iSenHandlerContext.GetSenCoreServiceManager()->ServiceDescriptionsL(serviceDescriptions, req->Contract()));
       
   226             if(leaveCode == KErrNone && retVal == KErrNone && serviceDescriptions.Count() > 0)
       
   227                 {
       
   228                 for(TInt j = 0; j < serviceDescriptions.Count(); j++)
       
   229                     {
       
   230                     CSenWSDescription* sD = serviceDescriptions[j];
       
   231 
       
   232                     CSenWSDescription* tempSd = CSenWSDescription::NewLC();
       
   233                         CBufFlat *pBuf = CBufFlat::NewL(64);
       
   234                         CleanupStack::PushL(pBuf);
       
   235                         RBufWriteStream bufWs(*pBuf);
       
   236                         CleanupClosePushL(bufWs);
       
   237                         
       
   238                         if(sD->Contract() == KWSStarSTSContract)
       
   239                             {
       
   240                             CWSStarTrustClient* pTrustClient = (CWSStarTrustClient*)sD;   
       
   241                             pTrustClient->WriteAsXMLToL(bufWs);
       
   242                             tempSd->SetReader(*iSenHandlerContext.GetSenCoreServiceManager()->XMLReader());
       
   243                             TLSLOG_ALL(KSenCoreServiceManagerLogChannelBase  , KMaxLogLevel,(pBuf->Ptr(0)));
       
   244                             tempSd->ParseL(pBuf->Ptr(0));
       
   245                             }
       
   246                         else if (sD->DescriptionClassType() == MSenServiceDescription::EWSStarServiceSession)
       
   247                             {
       
   248                             CWSStarServiceSession* pSd = (CWSStarServiceSession*)sD;
       
   249                             pSd->WriteAsXMLToL(bufWs);
       
   250                             tempSd->SetReader(*iSenHandlerContext.GetSenCoreServiceManager()->XMLReader());
       
   251                             TLSLOG_ALL(KSenCoreServiceManagerLogChannelBase  , KMaxLogLevel,(pBuf->Ptr(0)));
       
   252                             tempSd->ParseL(pBuf->Ptr(0));
       
   253                             }
       
   254 
       
   255                     CleanupStack::PopAndDestroy(&bufWs);
       
   256                     CleanupStack::PopAndDestroy(pBuf);
       
   257                     
       
   258                     TInt errorCode(KErrGeneral);
       
   259                     AddWsPolicy1L(tempSd, req->Uri(), req->Contents(), errorCode );             
       
   260                     iDictionary->InvokeL(&iSenHandlerContext, tempSd);
       
   261 			        TSenDataTrafficDetails details;
       
   262 			        iDictionary->DataTrafficDetails(details);
       
   263 				    iPolicyDetails += details;  
       
   264                     CleanupStack::PopAndDestroy(tempSd); 
       
   265                     }
       
   266                 }
       
   267             CleanupStack::PopAndDestroy(&serviceDescriptions); 
       
   268         }
       
   269     }
       
   270     list.ResetAndDestroy();
       
   271 /*
       
   272 //This is ONLY working for MS cases. i.e. urn:wstar:sts contract.
       
   273 //Right now its not parsing any other Sds to find dictionaries becuase 
       
   274 //the search uses MS specifc namespace to dfind the dictioanry elements
       
   275 #ifndef RD_SEN_WS_STAR_DISABLE_DICTIONARY_FETCHING
       
   276         iDictionary->InvokeL(&iSenHandlerContext); 
       
   277 #endif // not defined RD_SEN_WS_STAR_DISABLE_DICTIONARY_FETCHING
       
   278 //        }
       
   279     requestMap.ResetAndDestroy();
       
   280     iRegistry->ResetRegistry();
       
   281 */    
       
   282     return error;
       
   283     }
       
   284 
       
   285 //---------------------------------------------------------------------------
       
   286 // 
       
   287 //---------------------------------------------------------------------------
       
   288 //
       
   289 TInt CWSStarPolicyManager::GetHttpPolicyL( const TDesC8& aEndpoint, RExpiredPolicyArray& aRequestMap, CSenWSDescription* /*apSD*/ )
       
   290     {
       
   291     TInt retVal(KErrNone);
       
   292     CSenWSDescription* pInitializer = CSenWSDescription::NewLC();
       
   293     pInitializer->SetEndPointL(aEndpoint);
       
   294 
       
   295     CWSStarHttpClient* pPolicyClient = CWSStarHttpClient::NewLC(*(CSIF*)iSenHandlerContext.GetAnyL(HandlerContextKey::KSIF()), pInitializer, *Log());//codescannerwarnings
       
   296         
       
   297     // Fix the first URI and request part of the request
       
   298     TInt count( aRequestMap.Count() );
       
   299     for (TInt i = 0; i< count; i++)
       
   300         {
       
   301         
       
   302         CExpiredPolicy* req = aRequestMap[i];
       
   303         TPtrC8 contract = req->Contract();
       
   304         TPtrC8 endpoint = req->Uri();
       
   305         
       
   306         TPtrC8 request(endpoint.Right(endpoint.Length() - aEndpoint.Length()));
       
   307 
       
   308         RPointerArray<CSenWSDescription> serviceDescriptions;
       
   309         CleanupClosePushL(serviceDescriptions);
       
   310         TInt retVal(KErrNone);
       
   311         TInt leaveCode(KErrNone);
       
   312         TRAP(leaveCode, retVal = iSenHandlerContext.GetSenCoreServiceManager()->ServiceDescriptionsL(serviceDescriptions, contract));
       
   313         if(leaveCode == KErrNone && retVal == KErrNone && serviceDescriptions.Count() > 0)
       
   314             {
       
   315             CSenWSDescription* sD = serviceDescriptions[0];
       
   316 
       
   317             HBufC8* pResponse = NULL;
       
   318             TInt leaveCode(KErrNone);
       
   319             TInt submitRetCode(KErrNone);
       
   320 
       
   321             TRAP( leaveCode, submitRetCode = pPolicyClient->GetHttpL( request, pResponse, sD ); )
       
   322             TSenDataTrafficDetails details;
       
   323             pPolicyClient->DataTrafficDetails(details);
       
   324             iPolicyDetails += details; 
       
   325                     
       
   326             if( submitRetCode && retVal == KErrNone )
       
   327                 {
       
   328                 // Store the error code from the 1st failing request 
       
   329                 retVal = submitRetCode;
       
   330                 }    
       
   331             if( leaveCode && retVal == KErrNone )
       
   332                 {
       
   333                 retVal = leaveCode;
       
   334                 }    
       
   335             if(pResponse && pResponse->Length() > 0)
       
   336                 {
       
   337                 CleanupStack::PushL(pResponse);
       
   338                 TPtrC8 pReq = pResponse->Des();                
       
   339                 req->SetContentsL( pReq );          
       
   340                 CleanupStack::PopAndDestroy(pResponse);            
       
   341                 }    
       
   342             else // if(retVal == 404)    
       
   343                 {
       
   344                 delete pResponse;
       
   345                 TPtrC8 pReq(KNullDesC8());
       
   346                 req->SetContentsL( pReq );          
       
   347                 }
       
   348 
       
   349             }
       
   350         CleanupStack::PopAndDestroy(&serviceDescriptions);        
       
   351 
       
   352 
       
   353         } // for each request
       
   354     CleanupStack::PopAndDestroy(pPolicyClient); 
       
   355     CleanupStack::PopAndDestroy(pInitializer);  
       
   356     return retVal;
       
   357     }
       
   358 //---------------------------------------------------------------------------
       
   359 // 
       
   360 //---------------------------------------------------------------------------
       
   361 // 
       
   362 // start of "debug / test method"    
       
   363 TInt CWSStarPolicyManager::GetPolicyFromFileL( RExpiredPolicyArray& aRequestMap )
       
   364     {
       
   365     TLSLOG_L(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,"CWSStarPolicyManager::GetPolicyFromFileL:");
       
   366 
       
   367     TInt retVal(KErrNone);
       
   368     
       
   369     TInt count(aRequestMap.Count());
       
   370     TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel, _L8("- Count: %d"), count));
       
   371 
       
   372     _LIT(KPath, "c:\\");
       
   373     for (TInt i = 0; i< count; i++)
       
   374         {
       
   375         TFileName filepath(KPath);    
       
   376 
       
   377         CExpiredPolicy* req = aRequestMap[i];
       
   378         TPtrC8 contract = req->Contract();
       
   379         TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel, _L8("- Contract: '%S'"), &contract));
       
   380 
       
   381         TPtrC8 endpoint = req->Uri();
       
   382         TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel, _L8("- Endpoint: '%S'"), &endpoint));
       
   383 
       
   384         TInt namePosition = endpoint.LocateReverse('/');
       
   385         TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel, _L8("- Nameposition: %d"), namePosition));
       
   386 
       
   387 
       
   388         if(namePosition > 0)
       
   389             {
       
   390 //            _LIT(KXmlFileExt, ".xml");
       
   391 
       
   392             TPtrC8 name = endpoint.Right( endpoint.Length() - (namePosition+1) );
       
   393             
       
   394             if( name == KNullDesC8 ) 
       
   395                 {
       
   396                 // Note: if metadata endpoint ends with '/' -char, USE hardcoded DEFAULT VALUE
       
   397                 _LIT8(KDefaultPolicyFilename, "secpol.xml");
       
   398                 name.Set( KDefaultPolicyFilename );                
       
   399                 }
       
   400             
       
   401             HBufC* nameBuf = HBufC::NewLC(name.Length());
       
   402             TPtr nameBufPtr( nameBuf->Des() );
       
   403             
       
   404             retVal = CnvUtfConverter::ConvertToUnicodeFromUtf8( nameBufPtr, name );  
       
   405             
       
   406             if(retVal == KErrNone)
       
   407                 {
       
   408                 TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase  , KNormalLogLevel, _L8("- Policy file name: '%S'"), nameBuf));
       
   409                 TFileName filename; 
       
   410                 filename.Append( nameBufPtr );
       
   411                 filepath.Append( filename );
       
   412     
       
   413                 RFs fss;
       
   414                 User::LeaveIfError( fss.Connect() );
       
   415                 CleanupClosePushL( fss );
       
   416                 
       
   417                 RFile  xmlFile;
       
   418                 retVal = xmlFile.Open(fss , filepath, EFileRead );
       
   419                 if(retVal == KErrNone)
       
   420                     {
       
   421                     TInt size;
       
   422                     xmlFile.Size(size);
       
   423                     if(size > 0)
       
   424                         {
       
   425                         HBufC8 *pBuf=HBufC8::NewLC(size); // CodeScannerWarning
       
   426                         TPtr8 buf8ptr(pBuf->Des());
       
   427                         xmlFile.Read(buf8ptr, size);
       
   428                         req->SetContentsL(buf8ptr);
       
   429                         CleanupStack::PopAndDestroy(pBuf);
       
   430                         }
       
   431                     }
       
   432                 xmlFile.Close();                
       
   433                 CleanupStack::PopAndDestroy( &fss );
       
   434                 }
       
   435             CleanupStack::PopAndDestroy( nameBuf );
       
   436             }
       
   437         }
       
   438     return retVal;
       
   439     }
       
   440 // end of "debug / test method"    
       
   441 
       
   442 //---------------------------------------------------------------------------
       
   443 // 
       
   444 //---------------------------------------------------------------------------
       
   445 //   
       
   446 CSenElement* CWSStarPolicyManager::PolicyL(MSenServiceDescription* aSD)	//codescannerwarnings
       
   447     {
       
   448     TInt error(KErrGeneral);
       
   449     CSenWSDescription* sd = (CSenWSDescription*)aSD;
       
   450     CSenElement* ele = WsPolicy1L(sd, error);    
       
   451     
       
   452     if(error == KErrNone)
       
   453         return ele;
       
   454     
       
   455     return NULL;    
       
   456     } 
       
   457     
       
   458 CSenElement* CWSStarPolicyManager::PolicyL(const TDesC8& aUri)	//codescannerwarnings
       
   459     {
       
   460     TInt error(KErrGeneral);
       
   461     
       
   462     CSenElement* ele = WsPolicy1L(NULL, aUri, error);    
       
   463     
       
   464     if(error == KErrNone)
       
   465         return ele;
       
   466     
       
   467     return NULL;    
       
   468     } 
       
   469 //---------------------------------------------------------------------------
       
   470 // 
       
   471 //---------------------------------------------------------------------------
       
   472 // 
       
   473 TInt CWSStarPolicyManager::UpdatePolicyL(CWSStarPolicyHandler* aPolicyHandler)
       
   474     {
       
   475     TLSLOG(KSenCoreServiceManagerLogChannelBase  , KMinLogLevel,(_L("CWSStarPolicyManager::UpdatePolicyL ")));    
       
   476     TInt retVal(KErrNone);
       
   477     
       
   478     TInt count(iContracts.Count());
       
   479     for ( TInt i = 0; i < count; i++ )
       
   480         {
       
   481         TPtrC8 contract = iContracts[i]->Des();
       
   482         RPointerArray<CSenWSDescription> serviceDescriptions;
       
   483         CleanupClosePushL(serviceDescriptions);
       
   484 
       
   485         TInt leaveCode(KErrNone);
       
   486         TInt getSDsError(KErrNone);
       
   487         TRAP(leaveCode, getSDsError = iSenHandlerContext.GetSenCoreServiceManager()->ServiceDescriptionsL(serviceDescriptions, contract));
       
   488         if( getSDsError && retVal == KErrNone )
       
   489             {
       
   490             // store the return code from 1st error:
       
   491             retVal = getSDsError;
       
   492             }
       
   493             
       
   494         TInt sdCount(serviceDescriptions.Count());
       
   495         if( sdCount > 0  && getSDsError == KErrNone && leaveCode == KErrNone )
       
   496             {
       
   497             for ( TInt j = 0; j < sdCount; j++ )
       
   498                 {
       
   499                 CSenWSDescription* sD = serviceDescriptions[j];
       
   500                 TInt updateError(KErrNone);
       
   501                 if(sD->Contract() == KWSStarSTSContract)
       
   502                     {
       
   503                     CWSStarTrustClient* pTrustClient = (CWSStarTrustClient*)sD;   
       
   504                     updateError = pTrustClient->UpdatePolicyL( aPolicyHandler, pTrustClient );
       
   505                     }
       
   506                 else if (sD->DescriptionClassType() == MSenServiceDescription::EWSStarServiceSession)
       
   507                     {
       
   508                     CWSStarServiceSession* pWsSession = (CWSStarServiceSession*)sD;
       
   509                     updateError = pWsSession->UpdatePolicyL( aPolicyHandler, pWsSession );
       
   510                     }
       
   511                 if( updateError && retVal == KErrNone )
       
   512                     {
       
   513                     // store the code from first update error:
       
   514                     retVal = updateError;
       
   515                     }
       
   516                 } // for each SD
       
   517             } // if any SD to process
       
   518             CleanupStack::PopAndDestroy(); //serviceDescriptions
       
   519             
       
   520         } // for each item in policy map    
       
   521     return retVal;
       
   522     }
       
   523 //---------------------------------------------------------------------------
       
   524 // 
       
   525 //---------------------------------------------------------------------------
       
   526 //    
       
   527 RFileLogger* CWSStarPolicyManager::Log() const
       
   528     {
       
   529     RFileLogger* pLog = NULL;
       
   530     TRAP_IGNORE( pLog = (RFileLogger*)iSenHandlerContext.GetAnyL(HandlerContextKey::KLogger); )
       
   531     return pLog;
       
   532     }
       
   533 
       
   534 
       
   535 TInt  CWSStarPolicyManager::RegisterWsPolicyL( const TDesC8& aContract )
       
   536     {
       
   537     
       
   538     RPointerArray<CSenWSDescription> serviceDescriptions;
       
   539     CleanupClosePushL(serviceDescriptions);
       
   540     TInt retVal(KErrNone);
       
   541     TInt leaveCode(KErrNone);
       
   542     TInt errorCode(KErrGeneral);    
       
   543     TRAP(leaveCode, retVal = iSenHandlerContext.GetSenCoreServiceManager()->ServiceDescriptionsL(serviceDescriptions, aContract));
       
   544     if(leaveCode == KErrNone && retVal == KErrNone && serviceDescriptions.Count() > 0)
       
   545         {
       
   546         for(TInt j = 0; j < serviceDescriptions.Count(); j++)
       
   547             {
       
   548             CSenWSDescription* sD = serviceDescriptions[j];
       
   549             CSenWSDescription* tempSd = CSenWSDescription::NewLC();
       
   550                 CBufFlat *pBuf = CBufFlat::NewL(64); 
       
   551                 CleanupStack::PushL(pBuf);
       
   552                 RBufWriteStream bufWs(*pBuf);
       
   553                 CleanupClosePushL(bufWs);
       
   554                 
       
   555                 if(sD->Contract() == KWSStarSTSContract)
       
   556                     {
       
   557                     CWSStarTrustClient* pTrustClient = (CWSStarTrustClient*)sD;   
       
   558                     pTrustClient->WriteAsXMLToL(bufWs);
       
   559                     tempSd->SetReader(*iSenHandlerContext.GetSenCoreServiceManager()->XMLReader());
       
   560                     TLSLOG_ALL(KSenCoreServiceManagerLogChannelBase  , KMaxLogLevel,(pBuf->Ptr(0)));
       
   561                     tempSd->ParseL(pBuf->Ptr(0));
       
   562                     }
       
   563                 else if (sD->DescriptionClassType() == MSenServiceDescription::EWSStarServiceSession)
       
   564                     {
       
   565                     CWSStarServiceSession* pSd = (CWSStarServiceSession*)sD;
       
   566                     pSd->WriteAsXMLToL(bufWs);
       
   567                     tempSd->SetReader(*iSenHandlerContext.GetSenCoreServiceManager()->XMLReader());
       
   568                     TLSLOG_ALL(KSenCoreServiceManagerLogChannelBase  , KMaxLogLevel,(pBuf->Ptr(0)));
       
   569                     tempSd->ParseL(pBuf->Ptr(0));
       
   570                     }
       
   571             
       
   572             CleanupStack::PopAndDestroy(&bufWs);
       
   573             CleanupStack::PopAndDestroy(pBuf);
       
   574 
       
   575             RegisterWsPolicy1L(tempSd, errorCode);
       
   576             
       
   577             CleanupStack::PopAndDestroy(tempSd); 
       
   578 
       
   579             }
       
   580         }
       
   581     CleanupStack::PopAndDestroy(&serviceDescriptions);        
       
   582     return KErrNone;            
       
   583     }
       
   584 //---------------------------------------------------------------------------
       
   585 // 
       
   586 //---------------------------------------------------------------------------
       
   587 //  
       
   588 TInt CWSStarPolicyManager::UnRegisterWsPolicyL(MSenServiceDescription& aServiceDescription,
       
   589                                                     TInt& aErrorTo)
       
   590     {
       
   591     CSenWSDescription* sD = (CSenWSDescription*)&aServiceDescription;
       
   592     return UnRegisterWsPolicy1L(sD, aErrorTo);
       
   593     }
       
   594 //---------------------------------------------------------------------------
       
   595 // 
       
   596 //---------------------------------------------------------------------------
       
   597 //  
       
   598 
       
   599 TInt CWSStarPolicyManager::PolicyConsumerAddedL(CSenServiceSession* aNewSession, MSenRemoteServiceConsumer& aRemoteConsumer)
       
   600     {
       
   601   
       
   602     CSenElement* clientPolicy = NULL;
       
   603     MSenServicePolicy* service = NULL;
       
   604     TPtrC8 cosumerid = aRemoteConsumer.Id();
       
   605 
       
   606     if(aNewSession->Contract() == KWSStarSTSContract)
       
   607         {
       
   608         CWSStarTrustClient* pTrustClient = (CWSStarTrustClient*)aNewSession;   
       
   609         service = pTrustClient->ServicePolicy();
       
   610         clientPolicy = service->ClientPolicy();        
       
   611         }
       
   612     else if(aNewSession->DescriptionClassType() == MSenServiceDescription::EWSStarServiceSession)
       
   613         {
       
   614         service = aNewSession->ServicePolicy();
       
   615         clientPolicy = service->ClientPolicy();                
       
   616         }
       
   617     
       
   618 
       
   619     if(clientPolicy)
       
   620         {
       
   621         RPointerArray<CSenElement> metaDataPoliciesUris;
       
   622         CleanupClosePushL(metaDataPoliciesUris);
       
   623         clientPolicy->ElementsL(metaDataPoliciesUris, KMetaDataLocalName);
       
   624         TInt count(metaDataPoliciesUris.Count());
       
   625         if(count> 0)
       
   626             {
       
   627             CSenElement* metaData = NULL;
       
   628             for(TInt i=0; i<count; i++)
       
   629                 {
       
   630                 metaData = metaDataPoliciesUris[i];
       
   631                 if(metaData && metaData->HasContent())
       
   632                     {
       
   633                     TPtrC8 uriName = metaData->Content();
       
   634                     AddPolicyConsumer1L(uriName,cosumerid);        
       
   635                     }
       
   636                 }
       
   637             }
       
   638         CleanupStack::PopAndDestroy(&metaDataPoliciesUris);             
       
   639         }
       
   640         
       
   641     return KErrNone;
       
   642     }
       
   643 //---------------------------------------------------------------------------
       
   644 // 
       
   645 //---------------------------------------------------------------------------
       
   646 //  
       
   647 
       
   648 TInt CWSStarPolicyManager::AddWsPolicy1L(CSenWSDescription* aPattern, const TDesC8& aUri,
       
   649                                                const TDesC8& aPolicy, TInt& aErrorTo)
       
   650 {
       
   651     return iPolicyManager->AddWsPolicy1L(aPattern, aUri, aPolicy, aErrorTo);
       
   652 }
       
   653 
       
   654 TInt CWSStarPolicyManager::RemoveWsPolicy1L( CSenWSDescription* aPattern, 
       
   655                                                 const TDesC8& aUri, TInt& aErrorTo)
       
   656 {
       
   657     return iPolicyManager->RemoveWsPolicy1L(aPattern, aUri, aErrorTo);
       
   658 }
       
   659                                                                                                                                                                                                
       
   660 TInt CWSStarPolicyManager::RegisterWsPolicy1L(CSenWSDescription* aPattern,
       
   661                                                     TInt& aErrorTo)
       
   662 {
       
   663     return iPolicyManager->RegisterWsPolicyL(aPattern, aErrorTo);    
       
   664 }
       
   665 
       
   666 TInt CWSStarPolicyManager::UnRegisterWsPolicy1L(CSenWSDescription* aPattern,
       
   667                                                     TInt& aErrorTo)
       
   668 {
       
   669     return iPolicyManager->UnRegisterWsPolicy1L(aPattern, aErrorTo);
       
   670 }
       
   671                                                     
       
   672 CSenElement*  CWSStarPolicyManager::WsPolicy1L( CSenWSDescription* aPattern, 
       
   673                                                 const TDesC8& aUri, TInt& aErrorTo)
       
   674 {
       
   675     return iPolicyManager->WsPolicy1L(aPattern, aUri, aErrorTo);
       
   676 }
       
   677 
       
   678 CSenElement*  CWSStarPolicyManager::WsPolicy1L( CSenWSDescription* aPattern, 
       
   679                                                 TInt& aErrorTo)
       
   680 {
       
   681     return iPolicyManager->WsPolicy1L(aPattern, aErrorTo);
       
   682 }
       
   683 CSenElement*  CWSStarPolicyManager::WsPolicy1L( const TDesC8& aProviderId, TInt& aErrorTo)
       
   684 {
       
   685     return iPolicyManager->WsPolicy1L(aProviderId, aErrorTo);
       
   686 }
       
   687 TInt CWSStarPolicyManager::AddPolicyConsumer1L(const TDesC8& aUri, const TDesC8& aConsumerId)
       
   688 {
       
   689     return iPolicyManager->AddPolicyConsumer1L(aUri,aConsumerId);    
       
   690 }
       
   691 
       
   692 TInt CWSStarPolicyManager::RemovePolicyConsumer1L(const TDesC8& aUri, const TDesC8& aConsumerId)
       
   693 {
       
   694     return iPolicyManager->RemovePolicyConsumer1L(aUri,aConsumerId);    
       
   695 }
       
   696 void CWSStarPolicyManager::DataTrafficDetails(TSenDataTrafficDetails& aDetails) 		
       
   697 {
       
   698 	aDetails = iPolicyDetails;
       
   699 }
       
   700 
       
   701 // END OF FILE
       
   702