videofeeds/omaprovisioning/src/CIptvOmaProvisioningAdapter.cpp
changeset 0 96612d01cf9f
child 2 dec420019252
equal deleted inserted replaced
-1:000000000000 0:96612d01cf9f
       
     1 /*
       
     2 * Copyright (c) 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 the License "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:    Receives and stores the IPTV settings.*
       
    15 */
       
    16 
       
    17 
       
    18 
       
    19 
       
    20 #include <e32base.h>
       
    21 #include <CWPAdapter.h>
       
    22 #include <CWPCharacteristic.h>
       
    23 #include <CWPParameter.h>
       
    24 #include "IptvDebug.h"
       
    25 #include "IptvEngineUids.h"
       
    26 #include "CIptvUtil.h"
       
    27 #include <StringLoader.h>
       
    28 #include <IptvOmaProvisioningAdapter.rsg>
       
    29 #include <bautils.h>
       
    30 #include <f32file.h>
       
    31 #include "iptvlocalisationliterals.h"
       
    32 #include <bautils.h>
       
    33 
       
    34 #include "CIptvService.h"
       
    35 #include "CIptvServices.h"
       
    36 #include "CIptvServiceManagementClient.h"
       
    37 #include "CIptvOmaProvisioningAdapter.h"
       
    38 #include "IptvOmaProvisioningAdapterUIDs.h"
       
    39 
       
    40 // Type
       
    41 _LIT(KIptvVodCast, "VC");
       
    42 _LIT(KIptvLiveTv, "LiveTV");
       
    43 _LIT(KIptvVod, "VOD");
       
    44 _LIT(KIptvBrowser, "Browser");
       
    45 _LIT(KIptvApplication, "Application");
       
    46 _LIT(KIptvMobileTv, "MobileTv");
       
    47 _LIT(KIptvSecureProvisioningServer, "SecureProvisioningServer");
       
    48 _LIT(KIptvVideoStore, "VideoStore");
       
    49 
       
    50 // Protocol
       
    51 _LIT(KIptvProtocolRss, "RSS2.0");
       
    52 _LIT(KIptvProtocolDvbIpi, "DVB-IPI");
       
    53 _LIT(KIptvProtocolHTTPProp, "HTTP-PROP");   // Application and plugin specific communication mechanism
       
    54 _LIT(KIptvProtocolHTTP, "HTTP");            // Browser
       
    55 _LIT(KIptvProtocolXMLTV, "XMLTV" );
       
    56 
       
    57 _LIT(KIptvAppId, "w9031");
       
    58 
       
    59 // Parameter names
       
    60 _LIT(KIptvParamNameApplicationMaxBandWidth, "APPLICATION/MAX-BANDWIDTH");
       
    61 _LIT(KIptvParamNameApplicationNetInfo, "APPLICATION/NETINFO");
       
    62 _LIT(KIptvParamNameApplicationMinUdpPort, "APPLICATION/MIN-UDP-PORT");
       
    63 _LIT(KIptvParamNameApplicationInfraId, "APPLICATION/INFRA-ID");
       
    64 _LIT(KIptvParamNameApplicationTypeId, "APPLICATION/TYPE-ID");
       
    65 _LIT(KIptvParamNameApplicationIconUrl, "APPLICATION/ICON-URL");
       
    66 _LIT(KIptvParamNameApplicationAccountUrl, "APPLICATION/ACCOUNT-URL");
       
    67 
       
    68 const TInt KIptvDriveLetterSpace( 2 );
       
    69 
       
    70 // ================= MEMBER FUNCTIONS =======================
       
    71 
       
    72 // ---------------------------------------------------------
       
    73 // CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter
       
    74 // C++ default constructor can NOT contain any code, that
       
    75 // might leave.
       
    76 // ---------------------------------------------------------
       
    77 //
       
    78 CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter() : CWPAdapter()
       
    79     {
       
    80     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter() start" );
       
    81     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter() exit" );
       
    82     }
       
    83 
       
    84 // ---------------------------------------------------------
       
    85 // CIptvOmaProvisioningAdapter::ConstructL
       
    86 // Symbian 2nd phase constructor can leave.
       
    87 // ---------------------------------------------------------
       
    88 //
       
    89 void CIptvOmaProvisioningAdapter::ConstructL()
       
    90     {
       
    91     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ConstructL() start" );
       
    92 
       
    93     iServices = CIptvServices::NewL();
       
    94 
       
    95     HBufC* resourceText = LoadResourceTextL( R_IPTV_OMA_CLIENT_PROV_SUMMARY_TITLE );
       
    96     CleanupStack::PushL( resourceText ); //1->
       
    97     if ( resourceText->Des().Length() > KIptvOcpMaxSummaryTitleLength )
       
    98         {
       
    99         iSummaryTitle = resourceText->Des().Left( KIptvOcpMaxSummaryTitleLength - 1 );
       
   100         }
       
   101     else
       
   102         {
       
   103         iSummaryTitle = resourceText->Des();
       
   104         }
       
   105 
       
   106     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iSummaryTitle = %S", &iSummaryTitle );
       
   107 
       
   108     CleanupStack::PopAndDestroy( resourceText ); // <-1
       
   109     
       
   110     User::LeaveIfError( iFs.Connect() );
       
   111 
       
   112     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ConstructL() exit" );
       
   113     }
       
   114 
       
   115 // ---------------------------------------------------------
       
   116 // CIptvOmaProvisioningAdapter::NewL
       
   117 // Static constructor.
       
   118 // ---------------------------------------------------------
       
   119 //
       
   120 CIptvOmaProvisioningAdapter* CIptvOmaProvisioningAdapter::NewL()
       
   121     {
       
   122     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::NewL() start" );
       
   123     CIptvOmaProvisioningAdapter* self = new ( ELeave ) CIptvOmaProvisioningAdapter;
       
   124     CleanupStack::PushL( self );
       
   125     self->ConstructL();
       
   126     CleanupStack::Pop( self );
       
   127     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::NewL() exit" );
       
   128     return self;
       
   129     }
       
   130 
       
   131 // Destructor
       
   132 CIptvOmaProvisioningAdapter::~CIptvOmaProvisioningAdapter()
       
   133     {
       
   134     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::~CIptvOmaProvisioningAdapter() start" );
       
   135 
       
   136     delete iCurrentService;
       
   137     delete iServices;
       
   138 
       
   139     iFs.Close();
       
   140 
       
   141     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::~CIptvOmaProvisioningAdapter() exit" );
       
   142     }
       
   143 
       
   144 // -----------------------------------------------------------------------------
       
   145 // CIptvOmaProvisioningAdapter::ContextExtension
       
   146 // -----------------------------------------------------------------------------
       
   147 //
       
   148 TInt CIptvOmaProvisioningAdapter::ContextExtension( MWPContextExtension*& aExtension )
       
   149     {
       
   150     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() start" );
       
   151     aExtension = this;
       
   152     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() exit" );
       
   153     return KErrNone;
       
   154     }
       
   155 
       
   156 // -----------------------------------------------------------------------------
       
   157 // CIptvOmaProvisioningAdapter::SaveDataL
       
   158 // -----------------------------------------------------------------------------
       
   159 //
       
   160 const TDesC8& CIptvOmaProvisioningAdapter::SaveDataL( TInt /*aIndex*/ ) const
       
   161     {
       
   162     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() start" );
       
   163 
       
   164     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() exit" );
       
   165     return KIptvEmptyDes8;
       
   166     }
       
   167 
       
   168 // -----------------------------------------------------------------------------
       
   169 // CIptvOmaProvisioningAdapter::DeleteL
       
   170 // -----------------------------------------------------------------------------
       
   171 //
       
   172 void CIptvOmaProvisioningAdapter::DeleteL( const TDesC8& /*aSaveData*/ )
       
   173     {
       
   174     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DeleteL() start" );
       
   175     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DeleteL() exit" );
       
   176     }
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 // CIptvOmaProvisioningAdapter::Uid
       
   180 // -----------------------------------------------------------------------------
       
   181 //
       
   182 TUint32 CIptvOmaProvisioningAdapter::Uid() const
       
   183     {
       
   184     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::Uid() start" );
       
   185     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::Uid() exit" );
       
   186     return PROVISIONING_IPTV_ADAPTER_UID;
       
   187     }
       
   188 
       
   189 // -----------------------------------------------------------------------------
       
   190 // CIptvOmaProvisioningAdapter::DetailsL
       
   191 // -----------------------------------------------------------------------------
       
   192 //
       
   193 TInt CIptvOmaProvisioningAdapter::DetailsL( TInt /*aItem*/, MWPPairVisitor& /*aVisitor */ )
       
   194     {
       
   195     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DetailsL() start" );
       
   196     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DetailsL() exit ");
       
   197     return KErrNotSupported;
       
   198     }  
       
   199 
       
   200 // -----------------------------------------------------------------------------
       
   201 // CIptvOmaProvisioningAdapter::SummaryCount
       
   202 // -----------------------------------------------------------------------------
       
   203 //
       
   204 TInt CIptvOmaProvisioningAdapter::ItemCount() const
       
   205     {
       
   206     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ItemCount() start" );
       
   207     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ItemCount() exit" );
       
   208     
       
   209     TInt count;
       
   210     if ( iServices )
       
   211         {
       
   212         count = iServices->Count();
       
   213         }
       
   214     else
       
   215         {
       
   216         count = 0;
       
   217         }
       
   218          
       
   219     return count;
       
   220     }
       
   221 
       
   222 // -----------------------------------------------------------------------------
       
   223 // CIptvOmaProvisioningAdapter::SummaryTitle
       
   224 // -----------------------------------------------------------------------------
       
   225 //
       
   226 const TDesC16& CIptvOmaProvisioningAdapter::SummaryTitle( TInt /*aIndex*/ ) const
       
   227     {
       
   228     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryTitle() start" );
       
   229 
       
   230     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryTitle() exit" );
       
   231     return iSummaryTitle;
       
   232     }
       
   233 
       
   234 // -----------------------------------------------------------------------------
       
   235 // CIptvOmaProvisioningAdapter::SummaryText
       
   236 // -----------------------------------------------------------------------------
       
   237 //
       
   238 const TDesC16& CIptvOmaProvisioningAdapter::SummaryText( TInt aIndex ) const
       
   239     {
       
   240     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryText() start" );
       
   241     
       
   242     if ( !iServices )
       
   243         {
       
   244         return KIptvEmptyDes;
       
   245         }
       
   246         
       
   247     TInt error;
       
   248     CIptvService& service = iServices->Service( aIndex, error );
       
   249     
       
   250     if ( error == KErrNone )
       
   251         {
       
   252         IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: service name found, returning it as a summary text: %S", &(service.GetName()) );
       
   253         IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryText() exit" );
       
   254         return service.GetName();
       
   255         }
       
   256     else
       
   257         {
       
   258         IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: service name not found, returning empty des" );
       
   259         IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryText() exit" );
       
   260         return KIptvEmptyDes;
       
   261         }
       
   262     }
       
   263 
       
   264 // -----------------------------------------------------------------------------
       
   265 // CIptvOmaProvisioningAdapter::SaveL
       
   266 // -----------------------------------------------------------------------------
       
   267 //
       
   268 void CIptvOmaProvisioningAdapter::SaveL( TInt /*aIndex*/ )
       
   269     {
       
   270     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SaveL() start" );
       
   271     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SaveL() exit" );
       
   272     }
       
   273 
       
   274 // -----------------------------------------------------------------------------
       
   275 // CIptvOmaProvisioningAdapter::CanSetAsDefault
       
   276 // -----------------------------------------------------------------------------
       
   277 //
       
   278 TBool CIptvOmaProvisioningAdapter::CanSetAsDefault( TInt /*aIndex*/ ) const
       
   279     {
       
   280     // service profile cannot be set as default via OMA CP.
       
   281     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CanSetAsDefault() start" );
       
   282     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CanSetAsDefault() exit" );
       
   283     return EFalse;
       
   284     }
       
   285 
       
   286 // -----------------------------------------------------------------------------
       
   287 // CWPIptvAdapter::SetAsDefaultL
       
   288 // -----------------------------------------------------------------------------
       
   289 //
       
   290 void CIptvOmaProvisioningAdapter::SetAsDefaultL( TInt /*aIndex*/ )
       
   291     {
       
   292     // service profile cannot be set as default via OMA CP.
       
   293     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SetAsDefaultL() start" );
       
   294     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SetAsDefaultL() exit" );
       
   295     }
       
   296 
       
   297 // -----------------------------------------------------------------------------
       
   298 // CIptvOmaProvisioningAdapter::VisitL
       
   299 // -----------------------------------------------------------------------------
       
   300 //
       
   301 void CIptvOmaProvisioningAdapter::VisitL( CWPCharacteristic& aCharacteristic )
       
   302     {
       
   303     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aCharacteristic) start" );
       
   304 
       
   305     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: aCharacteristic.Type() == %d", aCharacteristic.Type() );
       
   306         
       
   307     switch ( aCharacteristic.Type() )
       
   308         {
       
   309         case KWPApplication:
       
   310             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case KWPApplication" );
       
   311 
       
   312             if ( iCurrentService )
       
   313                 {
       
   314                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: deleting iCurrentService" );
       
   315                 delete iCurrentService;
       
   316                 iCurrentService = NULL;
       
   317                 }
       
   318 
       
   319             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: creating iCurrentService" );
       
   320             iCurrentService = CIptvService::NewL();
       
   321                     
       
   322             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: starting to fill iCurrentService" );
       
   323             
       
   324             aCharacteristic.AcceptL( *this );
       
   325 
       
   326             IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iAppId = %S", &iAppId );
       
   327             
       
   328             if ( iAppId == KIptvAppId ) 
       
   329                 {
       
   330                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: was our service settings" );
       
   331                 
       
   332                 if ( iServices )
       
   333                     {
       
   334                     TInt i;
       
   335                     TBool serviceWasAlreadyAdded( EFalse );
       
   336                     TInt servicesCount = iServices->Count();
       
   337                     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iServices.Count() = %d", servicesCount );
       
   338                     for ( i = 0; ( i < iServices->Count() ) && !serviceWasAlreadyAdded; i++ )
       
   339                         {
       
   340                         if ( iServices->GetServiceRefL(i).CompareL( *iCurrentService ) )
       
   341                             {
       
   342                             serviceWasAlreadyAdded = ETrue;
       
   343                             }
       
   344                         }
       
   345                     if ( !serviceWasAlreadyAdded )
       
   346                         {
       
   347                         IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding iCurrentService to iServices" );
       
   348                         iServices->AddL( *iCurrentService );
       
   349                         IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iServices.Count() = %d", iServices->Count() );
       
   350                         }
       
   351                     else
       
   352                         {
       
   353                         IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iCurrentService was already in iServices, skipping add" );
       
   354                         }
       
   355                     }
       
   356                 else
       
   357                     {
       
   358                     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iServices didnt exist, skipping add" );
       
   359                     }
       
   360                 }
       
   361             else
       
   362                 {
       
   363                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: was not our setting, skipping add" );
       
   364                 }
       
   365 
       
   366             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: deleting iCurrentService" );
       
   367             delete iCurrentService;
       
   368             iCurrentService = NULL;
       
   369             break;
       
   370             
       
   371         case KWPNamedCharacteristic:
       
   372             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case KWPNamedCharacteristic" );
       
   373             IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name = %S", &aCharacteristic.Name() );
       
   374             break;
       
   375             
       
   376         case KWPAppAuth:
       
   377             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case KWPAppAuth" );
       
   378             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: accepting" );
       
   379             aCharacteristic.AcceptL( *this );
       
   380             break;        
       
   381         }
       
   382 
       
   383     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aCharacteristic) exit" );
       
   384     }
       
   385 
       
   386 // -----------------------------------------------------------------------------
       
   387 // CIptvOmaProvisioningAdapter::VisitL
       
   388 // -----------------------------------------------------------------------------
       
   389 //
       
   390 void CIptvOmaProvisioningAdapter::VisitL( CWPParameter& aParameter )
       
   391     {
       
   392     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aParameter) start" );
       
   393 
       
   394     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter ID    = %d", aParameter.ID() );
       
   395     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter value = %S", &aParameter.Value() );
       
   396 
       
   397     switch ( aParameter.ID() )
       
   398         {
       
   399         //well known parameters
       
   400         case EWPParameterAppID:
       
   401             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case EWPParameterAppID" );
       
   402             IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: value = %S", &aParameter.Value() );
       
   403             iAppId.Set( aParameter.Value() );
       
   404             break;
       
   405         
       
   406         case EWPParameterToProxy:
       
   407             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterToProxy -> ignoring" );
       
   408             break;
       
   409             
       
   410         case EWPParameterProviderID:
       
   411             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterProviderID -> collecting" );
       
   412             if ( aParameter.Value().Length() > KIptvSmServicesDbProviderIdMaxLength )
       
   413                 {
       
   414                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: provider ID too long! -> skipping value" );
       
   415                 }
       
   416             else
       
   417                 {
       
   418                 iCurrentService->SetProviderId( aParameter.Value() );
       
   419                 }
       
   420             break;
       
   421 
       
   422         case EWPParameterName:
       
   423             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterName -> collecting" );
       
   424 
       
   425 #if defined(__SERIES60_30__) || defined(__SERIES60_31__) || defined(__SERIES60_32__)
       
   426 
       
   427             // Video Store name must be localised here.
       
   428             if ( 0 == aParameter.Value().CompareF( KQtnIptvVideoStoreList ) )
       
   429                 {
       
   430                 HBufC* resourceText = LoadResourceTextL( R_IPTV_VIDEO_STORE_LIST );
       
   431                 if ( resourceText->Length() > KIptvSmServicesDbNameMaxLength )
       
   432                     {
       
   433                     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name too long! -> skipping value" );
       
   434                     }
       
   435                 else
       
   436                     {
       
   437                     iCurrentService->SetName( *resourceText );
       
   438                     }
       
   439                 delete resourceText;
       
   440                 }
       
   441             else if ( aParameter.Value().Length() > KIptvSmServicesDbNameMaxLength )
       
   442                 {
       
   443                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name too long! -> skipping value" );
       
   444                 }
       
   445             else
       
   446                 {
       
   447                 iCurrentService->SetName( aParameter.Value() );
       
   448                 }
       
   449 
       
   450 #else // S60 5.0 ->
       
   451 
       
   452             if ( aParameter.Value().Length() > KIptvSmServicesDbNameMaxLength )
       
   453                 {
       
   454                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name too long! -> skipping value" );
       
   455                 }
       
   456             else
       
   457                 {
       
   458                 iCurrentService->SetName( aParameter.Value() );
       
   459                 }
       
   460 
       
   461 #endif // defined(__SERIES60_30__) || defined(__SERIES60_31__) || defined(__SERIES60_32__)
       
   462 
       
   463             break;
       
   464 
       
   465         case EWPParameterToNapID:
       
   466             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterToNapID -> collecting" );
       
   467             if ( aParameter.Value().Length() > KIptvSmServicesDbIapNameMaxLength )
       
   468                 {
       
   469                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iap name too long! -> skipping value" );                
       
   470                 }
       
   471             else
       
   472                 {
       
   473                 iCurrentService->SetIapNameL( aParameter.Value() );
       
   474                 iCurrentService->SetFlags(
       
   475                     iCurrentService->GetFlags() | CIptvService::EReadOnlyIaps );
       
   476                 }
       
   477             break;
       
   478 
       
   479         case EWPParameterAddr:
       
   480             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter  EWPParameterAddr -> collecting" );
       
   481             if ( aParameter.Value().Length() > KIptvSmServicesDbAddressMaxLength )
       
   482                 {
       
   483                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: address too long! -> skipping value" );
       
   484                 }
       
   485             else
       
   486                 {
       
   487                 iCurrentService->SetAddress( aParameter.Value() );
       
   488                 }
       
   489             break;
       
   490   
       
   491         case EWPParameterAAuthName: /* 305 */
       
   492             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter  EWPParameterAuthName -> collecting" );
       
   493             if ( aParameter.Value().Length() > KIptvSmPasswordsDbUserNameMaxLength )
       
   494                 {
       
   495                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: user name too long! -> skipping value" );
       
   496                 }
       
   497             else
       
   498                 {
       
   499                 iCurrentService->SetUserName( aParameter.Value() );
       
   500                 }
       
   501             break;
       
   502             
       
   503         case EWPParameterAAuthSecret: /* 306 */
       
   504             IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter  EWPParameterAuthSecret -> collecting" );
       
   505             if ( aParameter.Value().Length() > KIptvSmPasswordsDbPasswordMaxLength )
       
   506                 {
       
   507                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: password too long! -> skipping value" );
       
   508                 }
       
   509             else
       
   510                 {
       
   511                 iCurrentService->SetPassword( aParameter.Value() );
       
   512                 }
       
   513             break;
       
   514 
       
   515         //application spesific parameters                    
       
   516         case EWPNamedParameter:
       
   517             IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter name  = %S", &aParameter.Name() );
       
   518             IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter value = %S", &aParameter.Value() );
       
   519 
       
   520             if ( aParameter.Name() == KIptvParamNameApplicationMaxBandWidth )
       
   521                 {
       
   522                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter  APPLICATION/MAX-BANDWIDTH -> ignoring" );
       
   523                 }
       
   524             else if ( aParameter.Name() == KIptvParamNameApplicationNetInfo )
       
   525                 {
       
   526                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter  APPLICATION/NETINFO -> ignoring" );
       
   527                 }
       
   528             else if ( aParameter.Name() == KIptvParamNameApplicationMinUdpPort )
       
   529                 {
       
   530                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/MIN-UDP-PORT -> ignoring" );
       
   531                 }
       
   532             else if ( aParameter.Name() == KIptvParamNameApplicationInfraId )
       
   533                 {
       
   534                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/INFRA-ID -> collecting" );
       
   535                 
       
   536                 if ( aParameter.Value() == KIptvProtocolRss )
       
   537                     {
       
   538                     TUid uid;
       
   539                     uid.iUid = KIptvRssPluginImplementationUid;
       
   540                     iCurrentService->SetEpgPluginUid( uid );
       
   541                     uid.iUid = 0;
       
   542                     iCurrentService->SetIptvPluginUid( uid );
       
   543                     uid.iUid = IPTV_HTTP_VOD_DOWNLOAD_PLUGIN_IMPLEMENTATION_UID;
       
   544                     iCurrentService->SetVodPluginUid( uid );
       
   545                     }
       
   546                 else if (aParameter.Value() == KIptvProtocolDvbIpi)
       
   547                     {
       
   548                     TUid uid;
       
   549                     uid.iUid = KIptvSmartvisionPluginUid;
       
   550                     iCurrentService->SetEpgPluginUid( uid );  
       
   551                     iCurrentService->SetIptvPluginUid( uid );
       
   552                     uid.iUid = IPTV_HTTP_VOD_DOWNLOAD_PLUGIN_IMPLEMENTATION_UID;
       
   553                     iCurrentService->SetVodPluginUid( uid );
       
   554                     }
       
   555                 else if ( aParameter.Value() == KIptvProtocolHTTPProp )
       
   556                     {                    
       
   557                     }
       
   558                 else if ( aParameter.Value() == KIptvProtocolHTTP )
       
   559                     {                    
       
   560                     }
       
   561                 else if ( aParameter.Value() == KIptvProtocolXMLTV )
       
   562                     {                    
       
   563                     TUid uid;
       
   564         	          uid.iUid = KIptvLiveTvXmlTvPluginUid;
       
   565         	          iCurrentService->SetIptvPluginUid( uid );
       
   566                     iCurrentService->SetEpgPluginUid( uid );
       
   567         	          uid.iUid = IPTV_HTTP_VOD_DOWNLOAD_PLUGIN_IMPLEMENTATION_UID;
       
   568         	          iCurrentService->SetVodPluginUid( uid );
       
   569                     }
       
   570                 else
       
   571                     {
       
   572                     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: not a valid protocol" );
       
   573                     }
       
   574                 
       
   575                 }
       
   576             else if ( aParameter.Name() == KIptvParamNameApplicationTypeId )
       
   577                 {
       
   578                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/TYPE-ID -> collecting" );
       
   579 
       
   580                 if ( aParameter.Value() == KIptvVodCast )
       
   581                     {
       
   582                     iCurrentService->SetType( CIptvService::EVodCast );
       
   583                     iCurrentService->SetFlags( 0 );
       
   584                     }
       
   585                 else if ( aParameter.Value() == KIptvVod )
       
   586                     {
       
   587                     iCurrentService->SetType( CIptvService::EVod );
       
   588                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   589                     }
       
   590                 else if ( aParameter.Value() == KIptvLiveTv )
       
   591                     {
       
   592                     iCurrentService->SetType( CIptvService::ELiveTv );
       
   593                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   594                     }
       
   595                 else if ( aParameter.Value() == KIptvBrowser )
       
   596                     {
       
   597                     iCurrentService->SetType( CIptvService::EBrowser );                
       
   598                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   599                     }
       
   600                 else if ( aParameter.Value() == KIptvApplication )
       
   601                     {
       
   602                     iCurrentService->SetType( CIptvService::EApplication );                
       
   603                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   604                     }
       
   605                 else if ( aParameter.Value() == KIptvMobileTv )
       
   606                     {
       
   607                     iCurrentService->SetType( CIptvService::EMobileTv );                
       
   608                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   609                     }
       
   610                 else if ( aParameter.Value() == KIptvSecureProvisioningServer )
       
   611                     {
       
   612                     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: ESecureProvisioningServer type service" );
       
   613                     iCurrentService->SetType(
       
   614                         CIptvService::ESecureProvisioningServer );
       
   615                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   616                     }
       
   617                 else if ( aParameter.Value() == KIptvVideoStore )
       
   618                     {
       
   619                     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: EVideoStore type service" );
       
   620                     iCurrentService->SetType( CIptvService::EVideoStore );                
       
   621                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   622                     }
       
   623                 else
       
   624                     {
       
   625                     // All other services go under other
       
   626                     iCurrentService->SetType( CIptvService::EOther );
       
   627                     iCurrentService->SetFlags( CIptvService::EMainService );
       
   628                     }
       
   629                     
       
   630                 }
       
   631             else if ( aParameter.Name() == KIptvParamNameApplicationIconUrl )
       
   632                 {
       
   633                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/ICON-URL -> collecting" );
       
   634                 if ( aParameter.Value().Length() > KIptvSmServicesDbIconPathMaxLength )
       
   635                     {
       
   636                     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: icon path too long! -> skipping value" );
       
   637                     }
       
   638                 else
       
   639                     {
       
   640                     SetIconPathL( aParameter.Value() );
       
   641                     }
       
   642                 }
       
   643             else if ( aParameter.Name() == KIptvParamNameApplicationAccountUrl )
       
   644                 {
       
   645                 IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/ACCOUNT-URL -> collecting" );
       
   646                 if ( aParameter.Value().Length() > KIptvSmServicesDbAccountManagementUrlMaxLength )
       
   647                     {
       
   648                     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/ACCOUNT-URL too long, skipping" );
       
   649                     }
       
   650                 else
       
   651                     {
       
   652                     iCurrentService->SetAccountManagementUrl( aParameter.Value() );
       
   653                     }
       
   654                 }
       
   655             break;
       
   656             
       
   657         default:
       
   658             break;
       
   659         }
       
   660         
       
   661     
       
   662     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aParameter) exit" );
       
   663     }
       
   664 
       
   665 // -----------------------------------------------------------------------------
       
   666 // CIptvOmaProvisioningAdapter::SettingsSavedL
       
   667 // -----------------------------------------------------------------------------
       
   668 //
       
   669 void CIptvOmaProvisioningAdapter::SettingsSavedL ( const TDesC8& aAppIdOfSavingItem,
       
   670                                                    const TDesC8& /*aAppRef*/,
       
   671                                                    const TDesC8& /*aStorageIdValue*/ )
       
   672     {
       
   673     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SettingsSavedL() start" );
       
   674 
       
   675     const TInt maxPrintBufSize = 50;
       
   676     TBuf<maxPrintBufSize> buf;
       
   677     buf.Copy( aAppIdOfSavingItem.Left( maxPrintBufSize - 1 ) );
       
   678     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: aAppIdOfSavingItem = %S", &buf );
       
   679 
       
   680     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SettingsSavedL() exit" );
       
   681     }
       
   682 
       
   683 // -----------------------------------------------------------------------------
       
   684 // CIptvOmaProvisioningAdapter::SavingFinalizedL()
       
   685 // -----------------------------------------------------------------------------
       
   686 //
       
   687 void CIptvOmaProvisioningAdapter::SavingFinalizedL()
       
   688     {
       
   689     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SavingFinalizedL() start" );
       
   690     
       
   691     if ( iServices )
       
   692         {
       
   693         if ( iServices->Count() > 0 )
       
   694             {
       
   695             CIptvServiceManagementClient* smClient = CIptvServiceManagementClient::NewL( *this );
       
   696             CleanupStack::PushL( smClient ); // 1->
       
   697             CIptvServices* existingServices = CIptvServices::NewL();
       
   698             CleanupStack::PushL( existingServices ); // 2->  
       
   699             
       
   700             TInt i;
       
   701             MIptvServiceManagementClientObserver::TRespStatus respStatus(
       
   702                 MIptvServiceManagementClientObserver::ESucceeded );
       
   703 
       
   704             for ( i = 0; i < iServices->Count(); i++ )
       
   705                 {            
       
   706                 //check if there is already a service with this provider id
       
   707                 TBool serviceExists;
       
   708                 TInt err = smClient->GetServicesL( iServices->GetServiceRefL(i).GetProviderId(),
       
   709                                                    *existingServices );
       
   710                 if ( err == KErrNone )
       
   711                     {
       
   712                     if ( existingServices->Count() > 0 )
       
   713                         {
       
   714                         serviceExists = ETrue;
       
   715                         }
       
   716                     else
       
   717                         {
       
   718                         serviceExists = EFalse;
       
   719                         }
       
   720                     }
       
   721                 else
       
   722                     {
       
   723                     serviceExists = EFalse;
       
   724                     }
       
   725 
       
   726                 CIptvService& service = iServices->GetServiceRefL( i ); //creates service from binary data and returns ref to it
       
   727 
       
   728  
       
   729                 if ( service.GetType() != CIptvService::ELiveTv )
       
   730                     {
       
   731  
       
   732                     service.SetFlags( service.GetFlags() | CIptvService::ESelected ); //a new call to iServices->GetServiceRefL() will destroy this change, be careful out there...
       
   733                             
       
   734                     if ( serviceExists )
       
   735                         {
       
   736                         TUint32 existingServiceId = existingServices->GetServiceRefL( 0 ).GetId();
       
   737                         service.SetId( existingServiceId ); //modify the new service instance
       
   738                         IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: service (%d) existed, updating old service", existingServiceId );
       
   739                         TRAP( err, smClient->UpdateServiceL( service, respStatus ) );
       
   740                         }
       
   741                     else
       
   742                         {                       
       
   743                         IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding a new service" );
       
   744                         TRAP( err, smClient->AddServiceL( service, respStatus ) );
       
   745                         }
       
   746                     
       
   747                     if ( respStatus != MIptvServiceManagementClientObserver::ESucceeded ||
       
   748                          err != KErrNone )
       
   749                         {
       
   750                         IPTVLOGSTRING3_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding service to database failed (%d,%d)!", respStatus, err );
       
   751                         }
       
   752                     else
       
   753                         {
       
   754                         IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding iServices(%d) succeeded.", i );                
       
   755                         }
       
   756  
       
   757                     }
       
   758  
       
   759                 } //for
       
   760             CleanupStack::PopAndDestroy( existingServices ); // <-2
       
   761             CleanupStack::PopAndDestroy( smClient ); // <-1
       
   762             } // if ( iServices->Count() > 0 )
       
   763         } // if ( iServices )
       
   764 
       
   765     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: deleting iServices" );
       
   766     delete iServices;
       
   767     iServices = NULL;
       
   768 
       
   769     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: creating iServices" );
       
   770     iServices = CIptvServices::NewL();
       
   771     
       
   772     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SavingFinalizedL() exit" );
       
   773     }
       
   774 
       
   775 // -----------------------------------------------------------------------------
       
   776 // CIptvOmaProvisioningAdapter::LoadResourceTextL
       
   777 // -----------------------------------------------------------------------------
       
   778 //
       
   779 HBufC* CIptvOmaProvisioningAdapter::LoadResourceTextL( TInt aResourceId ) const
       
   780     {        
       
   781     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::LoadResourceTextL() start" );
       
   782 
       
   783     // Open a file server session
       
   784     RFs fs;
       
   785     User::LeaveIfError( fs.Connect() );
       
   786     CleanupClosePushL( fs ); // 1->
       
   787 
       
   788     // Get the drive from DLL file name
       
   789     TFileName dllName;
       
   790     Dll::FileName( dllName );
       
   791 
       
   792     TFileName fileName;
       
   793     TParsePtrC parse( dllName );
       
   794     fileName = parse.Drive();
       
   795 
       
   796     _LIT(KIptvOcpResourcePath, "\\Resource\\Plugins\\");
       
   797     fileName.Append( KIptvOcpResourcePath );
       
   798 
       
   799     _LIT(KIptvOcpResourceFileName, "IptvOmaProvisioningAdapter.rsc");    
       
   800     fileName.Append( KIptvOcpResourceFileName );
       
   801 
       
   802     //Retrieve the correct suffix
       
   803     BaflUtils::NearestLanguageFile( fs, fileName );
       
   804 
       
   805     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: resource file = %S", &fileName );
       
   806 
       
   807     //Open the file
       
   808     RResourceFile resourceFile;
       
   809     resourceFile.OpenL( fs, fileName );
       
   810     CleanupClosePushL( resourceFile ); // 2->
       
   811  
       
   812     //Read data from resource file
       
   813     HBufC8* resourceData = resourceFile.AllocReadLC( aResourceId ); // 3->
       
   814     
       
   815     //Extract text from data    
       
   816     TResourceReader resReader;
       
   817     resReader.SetBuffer( resourceData );    
       
   818     HBufC* text = resReader.ReadHBufCL();
       
   819     CleanupStack::PushL( text ); // 4->
       
   820     
       
   821     TPtr textPtr( text->Des() );
       
   822     
       
   823     IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: resource text = %S", &textPtr );
       
   824 
       
   825     CleanupStack::Pop( text );                    // <-4
       
   826     CleanupStack::PopAndDestroy( resourceData );  // <-3
       
   827     CleanupStack::PopAndDestroy( &resourceFile ); // <-2    
       
   828     CleanupStack::PopAndDestroy( &fs );           // <-1
       
   829 
       
   830     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::LoadResourceTextL() exit" );    
       
   831     return text;
       
   832     }
       
   833 
       
   834 // -----------------------------------------------------------------------------
       
   835 // CIptvOmaProvisioningAdapter::AddServiceResp
       
   836 // -----------------------------------------------------------------------------
       
   837 //
       
   838 void CIptvOmaProvisioningAdapter::AddServiceResp( TRespStatus /*aRespStatus*/ )
       
   839     {
       
   840     }
       
   841 // -----------------------------------------------------------------------------
       
   842 // CIptvOmaProvisioningAdapter::UpdateServiceResp
       
   843 // -----------------------------------------------------------------------------
       
   844 //
       
   845 void CIptvOmaProvisioningAdapter::UpdateServiceResp( TRespStatus /*aRespStatus*/ )
       
   846     {
       
   847     }
       
   848     
       
   849 // -----------------------------------------------------------------------------
       
   850 // CIptvOmaProvisioningAdapter::DeleteServiceResp
       
   851 // -----------------------------------------------------------------------------
       
   852 //
       
   853 void CIptvOmaProvisioningAdapter::DeleteServiceResp( TRespStatus /*aRespStatus*/ )
       
   854     {
       
   855     }
       
   856     
       
   857 // -----------------------------------------------------------------------------
       
   858 // CIptvOmaProvisioningAdapter::GetServicesResp
       
   859 // -----------------------------------------------------------------------------
       
   860 //
       
   861 void CIptvOmaProvisioningAdapter::GetServicesResp( TRespStatus /*aRespStatus*/, 
       
   862                                                    CDesC8ArraySeg* /*aServicesArray*/ ) 
       
   863     {
       
   864     }
       
   865     
       
   866 // -----------------------------------------------------------------------------
       
   867 // CIptvOmaProvisioningAdapter::GetUsedIapResp
       
   868 // -----------------------------------------------------------------------------
       
   869 //
       
   870 void CIptvOmaProvisioningAdapter::GetUsedIapResp( TUint32 /*aIapId*/,
       
   871                                                   const TDesC& /*aIapName*/,
       
   872                                                   CIptvNetworkSelection::TConnectionPermission /*aConnectionPermission*/,
       
   873                                                   TBool /*aWlanWhenGPRS*/,
       
   874                                                   CIptvNetworkSelection::TRespStatus /*aRespStatus*/ )
       
   875     {
       
   876     }
       
   877     
       
   878 // -----------------------------------------------------------------------------
       
   879 // CIptvOmaProvisioningAdapter::ServerShutdownResp
       
   880 // -----------------------------------------------------------------------------
       
   881 //
       
   882 void CIptvOmaProvisioningAdapter::ServerShutdownResp( TRespStatus /*aRespStatus*/ )
       
   883     {
       
   884     }
       
   885     
       
   886 // -----------------------------------------------------------------------------
       
   887 // CIptvOmaProvisioningAdapter::HandleSmEvent
       
   888 // -----------------------------------------------------------------------------
       
   889 //
       
   890 void CIptvOmaProvisioningAdapter::HandleSmEvent( CIptvSmEvent& /*aEvent*/ )
       
   891     {
       
   892     }
       
   893 
       
   894 // ---------------------------------------------------------------------------
       
   895 // CIptvOmaProvisioningAdapter::SetIconPathL()
       
   896 // ---------------------------------------------------------------------------
       
   897 //
       
   898 void CIptvOmaProvisioningAdapter::SetIconPathL( const TDesC& aIconPath )
       
   899     {
       
   900     IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SetIconPathL" );
       
   901 
       
   902     // Check for a file name without drive letter.
       
   903     if ( ( aIconPath.Length() > 0 ) && ( aIconPath[0] == '\\' ) )
       
   904         {
       
   905         TBool accept( EFalse );
       
   906         TDriveList driveList;
       
   907         TDriveInfo driveInfo;
       
   908 
       
   909         if ( KErrNone == iFs.DriveList( driveList ) )
       
   910             {
       
   911             HBufC* tempName =
       
   912                 HBufC::NewLC( aIconPath.Length() + KIptvDriveLetterSpace );
       
   913             TChar character;
       
   914 
       
   915             for ( TInt i = EDriveA; i <= EDriveZ && !accept; i++ )
       
   916                 {
       
   917                 if ( driveList[i] &&
       
   918                      ( KErrNone == iFs.Drive( driveInfo, i ) ) &&
       
   919                      ( KErrNone == RFs::DriveToChar( i, character ) ) )
       
   920                     {
       
   921                     tempName->Des().Zero();
       
   922                     tempName->Des().Append( character );
       
   923                     tempName->Des().Append( ':' );
       
   924                     tempName->Des().Append( aIconPath );
       
   925 
       
   926                     IPTVLOGSTRING2_LOW_LEVEL(
       
   927                         "Scanning icon from %S", tempName );
       
   928                     if ( BaflUtils::FileExists( iFs, *tempName ) )
       
   929                         {
       
   930                         IPTVLOGSTRING_LOW_LEVEL( " ---- Icon found" );
       
   931                         accept = ETrue;
       
   932                         }
       
   933                     }
       
   934                 }
       
   935 
       
   936             if ( accept && iCurrentService )
       
   937                 {
       
   938                 iCurrentService->SetIconPath( tempName->Des() );
       
   939                 }
       
   940 
       
   941             CleanupStack::PopAndDestroy( tempName );
       
   942             }
       
   943         }
       
   944     else if ( iCurrentService )
       
   945         {
       
   946         iCurrentService->SetIconPath( aIconPath );
       
   947         }
       
   948     }