diff -r 3785f754ee62 -r 5360b7ddc251 upnpframework/upnputilities/src/upnpcdsreselementutility.cpp --- a/upnpframework/upnputilities/src/upnpcdsreselementutility.cpp Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpframework/upnputilities/src/upnpcdsreselementutility.cpp Mon Nov 01 12:37:49 2010 +0200 @@ -1,218 +1,225 @@ -/* -* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Utility class for meta data gathering for audio files -* -*/ - - -// INCLUDE FILES -// System -#include -#include - -// upnp stack api -#include // CUpnpItem -#include -#include -#include -#include - -// upnpframework / avcontroller helper api -#include // for upnp class defs - -// upnpframework internal api's -#include "upnpresresolver.h" // CUpnpResResolver -#include "upnpresparameters.h" - -// utilities internal -#include "upnpcommonutils.h" -#include "upnpcdsreselementutility.h" - -_LIT( KHttp, "http://" ); -const TInt KColon = 58; -const TInt KIpAddLen = 25; - -// ============================ MEMBER FUNCTIONS ============================ - -// -------------------------------------------------------------------------- -// CUpnpCdsResElementUtility::AddResElementL -// -// (other items were commented in a header). -// -------------------------------------------------------------------------- -// -EXPORT_C void UpnpCdsResElementUtility::AddResElementL( - CUpnpItem& aItem, - const TDesC& aFilename ) - { - - // Create CUpnpElement for res - CUpnpElement* elRes = CUpnpElement::NewL( KElementRes() ); - CleanupStack::PushL( elRes ); - elRes->SetFilePathL( aFilename ); - - // Create res resolver component and put it to CleanupStack - CUpnpResResolver* resolver = CUpnpResResolver::NewLC(); - - // Obtain res element parameters using res resolver component. - CUpnpResParameters* resParameters = NULL; - TRAPD(err, resParameters = resolver->GetResParametersL( aFilename ) ); - - if (err == KErrGeneral) - { - // File not recognized, handling it manually by adding - // following res-item: 'http-get:*:MIMETYPE:*' - - _LIT8( KProtInfo1, "http-get:"); - _LIT8( KStar8, "*"); - _LIT8( KColon8, ":"); - HBufC8* mimetype = UPnPCommonUtils::ResolveMimeTypeL(aFilename); - mimetype->Des().Trim(); // needs to be trimmed - - TInt resultLen = KProtInfo1().Length() + KStar8().Length() + - KColon8().Length() + mimetype->Des().Length() + KColon8().Length() + - KStar8().Length(); - HBufC8* resValue = HBufC8::NewLC( resultLen ); - - // construct final value - resValue->Des().Append( KProtInfo1 ); - resValue->Des().Append( KStar8 ); - resValue->Des().Append( KColon8 ); - resValue->Des().Append( *mimetype ); - resValue->Des().Append( KColon8 ); - resValue->Des().Append( KStar8 ); - - CUpnpProtocolInfo* pInfo = CUpnpProtocolInfo::NewL(*resValue); - CUpnpAttribute* attribute = CUpnpAttribute::NewLC( KAttributeProtocolInfo() ); - attribute->SetValueL( pInfo->ProtocolInfoL() ); - elRes->AddAttributeL( attribute ); - aItem.AddElementL(elRes); - - CleanupStack::Pop( attribute ); - CleanupStack::PopAndDestroy( resValue ); - CleanupStack::PopAndDestroy( resolver ); - CleanupStack::Pop( elRes ); - resValue = NULL; - mimetype = NULL; - - return; - } - // Fixes ESLX-7B7HBL - else if( err ) - { - User::Leave( err ); - } - - CleanupStack::PushL( resParameters ); - - // Add protocolInfo parameter to res element. - if ( resParameters->ProtocolInfo().Length() > 0 ) - { - CUpnpAttribute* prInfo = CUpnpAttribute::NewLC( KAttributeProtocolInfo() ); - prInfo->SetValueL( resParameters->ProtocolInfo() ); - elRes->AddAttributeL( prInfo ); //transfer ownership - CleanupStack::Pop( prInfo ); - } - - // Add size parameter to res element. - - HBufC8* sizeString = resParameters->FileSizeL(); - if ( sizeString ) - { - CleanupStack::PushL( sizeString ); - CUpnpAttribute* size = - CUpnpAttribute::NewLC( KAttributeSize() ); - size->SetValueL( *sizeString ); - - elRes->AddAttributeL( size ); //transfer ownership - CleanupStack::Pop( size ); - CleanupStack::PopAndDestroy( sizeString ); - sizeString = NULL; - } - - if ( resParameters->IsImageFile() ) - { - // In image case, add resolution parameter to res element. - HBufC8* resolutionString = resParameters->ResolutionL(); - if ( resolutionString ) - { - CleanupStack::PushL( resolutionString ); - CUpnpAttribute* resolution = - CUpnpAttribute::NewLC( KAttributeResolution() ); - resolution->SetValueL( *resolutionString ); - elRes->AddAttributeL( resolution ); //transfer ownership - CleanupStack::Pop( resolution ); - CleanupStack::PopAndDestroy( resolutionString ); - resolutionString = NULL; - } - } - else if ( resParameters->IsAudioOrVideoFile() ) - { - // In music or video case, add duration parameter to res element. - HBufC8* durationString = resParameters->DurationL(); - if ( durationString ) - { - CleanupStack::PushL( durationString ); - CUpnpAttribute* duration = - CUpnpAttribute::NewLC( KAttributeDuration() ); - duration->SetValueL( *durationString ); - elRes->AddAttributeL( duration ); //transfer ownership - CleanupStack::Pop( duration ); - CleanupStack::PopAndDestroy( durationString ); - durationString = NULL; - } - } - - CleanupStack::PopAndDestroy( resParameters ); - CleanupStack::PopAndDestroy( resolver ); - - // Attach res element to aItem. - aItem.AddElementL( elRes ); //transfer ownership - CleanupStack::Pop( elRes ); - } - -// -------------------------------------------------------------------------- -// CUpnpCdsResElementUtility::IsUriAbsolute -// -// (other items were commented in a header). -// -------------------------------------------------------------------------- -EXPORT_C TBool UpnpCdsResElementUtility::IsUriAbsolute( const TDesC8& aUri ) - { - TInetAddr addr; - TBool retVal = EFalse; - TBuf ipAddrBuf; - // if aUri.Length is less than KHttp().Length(),aUri is invalid - if ( aUri.Length() >= KHttp().Length() ) - { - TPtrC8 right = aUri.Right( aUri.Length() - KHttp().Length() ); - - TInt posit = right.Locate( TChar( KColon ) ); - if( posit != KErrNotFound ) - { - TPtrC8 ipAddr = right.Left( posit ); - if( ipAddr.Length() <= KIpAddLen ) - { - ipAddrBuf.Copy( ipAddr ); - } - } - - if( addr.Input( ipAddrBuf ) == KErrNone ) - { - retVal = ETrue; - } - } - - return retVal; - } - -// End of File +/* +* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Utility class for meta data gathering for audio files +* +*/ + + +// INCLUDE FILES +// System +#include +#include + +// upnp stack api +#include // CUpnpItem +#include +#include +#include +#include + +// upnpframework / avcontroller helper api +#include "upnpconstantdefs.h" // for upnp class defs + +// upnpframework internal api's +#include "upnpresresolver.h" // CUpnpResResolver +#include "upnpresparameters.h" + +// utilities internal +#include "upnpcommonutils.h" +#include "upnpcdsreselementutility.h" + +_LIT( KHttp, "http://" ); +const TInt KColon = 58; +const TInt KIpAddLen = 25; + +// ============================ MEMBER FUNCTIONS ============================ + +// -------------------------------------------------------------------------- +// CUpnpCdsResElementUtility::AddResElementL +// +// (other items were commented in a header). +// -------------------------------------------------------------------------- +// +EXPORT_C void UpnpCdsResElementUtility::AddResElementL( + CUpnpItem& aItem, + const TDesC& aFilename ) + { + + // Create CUpnpElement for res + CUpnpElement* elRes = CUpnpElement::NewL( KElementRes() ); + CleanupStack::PushL( elRes ); + elRes->SetFilePathL( aFilename ); + + // Create res resolver component and put it to CleanupStack + CUpnpResResolver* resolver = CUpnpResResolver::NewLC(); + + // Obtain res element parameters using res resolver component. + CUpnpResParameters* resParameters = NULL; + TRAPD(err, resParameters = resolver->GetResParametersL( aFilename ) ); + + if (err == KErrGeneral) + { + // File not recognized, handling it manually by adding + // following res-item: 'http-get:*:MIMETYPE:*' + + _LIT8( KProtInfo1, "http-get:"); + _LIT8( KStar8, "*"); + _LIT8( KColon8, ":"); + HBufC8* mimetype = UPnPCommonUtils::ResolveMimeTypeL(aFilename); + CleanupStack::PushL( mimetype ); + mimetype->Des().Trim(); // needs to be trimmed + + TInt resultLen = KProtInfo1().Length() + KStar8().Length() + + KColon8().Length() + mimetype->Des().Length() + KColon8().Length() + + KStar8().Length(); + HBufC8* resValue = HBufC8::NewLC( resultLen ); + CleanupStack::Pop( resValue ); // temporarily pop so that mimetype can be destroyed + + // construct final value + resValue->Des().Append( KProtInfo1 ); + resValue->Des().Append( KStar8 ); + resValue->Des().Append( KColon8 ); + resValue->Des().Append( *mimetype ); + resValue->Des().Append( KColon8 ); + resValue->Des().Append( KStar8 ); + + CleanupStack::PopAndDestroy( mimetype ); + mimetype = NULL; + CleanupStack::PushL( resValue ); + + CUpnpProtocolInfo* pInfo = CUpnpProtocolInfo::NewL(*resValue); + CleanupStack::PushL( pInfo ); + CUpnpAttribute* attribute = CUpnpAttribute::NewLC( KAttributeProtocolInfo() ); + attribute->SetValueL( pInfo->ProtocolInfoL() ); + elRes->AddAttributeL( attribute ); + aItem.AddElementL(elRes); + + CleanupStack::Pop( attribute ); + CleanupStack::PopAndDestroy( pInfo ); + CleanupStack::PopAndDestroy( resValue ); + CleanupStack::PopAndDestroy( resolver ); + CleanupStack::Pop( elRes ); + resValue = NULL; + + return; + } + // Fixes ESLX-7B7HBL + else if( err ) + { + User::Leave( err ); + } + + CleanupStack::PushL( resParameters ); + + // Add protocolInfo parameter to res element. + if ( resParameters->ProtocolInfo().Length() > 0 ) + { + CUpnpAttribute* prInfo = CUpnpAttribute::NewLC( KAttributeProtocolInfo() ); + prInfo->SetValueL( resParameters->ProtocolInfo() ); + elRes->AddAttributeL( prInfo ); //transfer ownership + CleanupStack::Pop( prInfo ); + } + + // Add size parameter to res element. + + HBufC8* sizeString = resParameters->FileSizeL(); + if ( sizeString ) + { + CleanupStack::PushL( sizeString ); + CUpnpAttribute* size = + CUpnpAttribute::NewLC( KAttributeSize() ); + size->SetValueL( *sizeString ); + + elRes->AddAttributeL( size ); //transfer ownership + CleanupStack::Pop( size ); + CleanupStack::PopAndDestroy( sizeString ); + sizeString = NULL; + } + + if ( resParameters->IsImageFile() ) + { + // In image case, add resolution parameter to res element. + HBufC8* resolutionString = resParameters->ResolutionL(); + if ( resolutionString ) + { + CleanupStack::PushL( resolutionString ); + CUpnpAttribute* resolution = + CUpnpAttribute::NewLC( KAttributeResolution() ); + resolution->SetValueL( *resolutionString ); + elRes->AddAttributeL( resolution ); //transfer ownership + CleanupStack::Pop( resolution ); + CleanupStack::PopAndDestroy( resolutionString ); + resolutionString = NULL; + } + } + else if ( resParameters->IsAudioOrVideoFile() ) + { + // In music or video case, add duration parameter to res element. + HBufC8* durationString = resParameters->DurationL(); + if ( durationString ) + { + CleanupStack::PushL( durationString ); + CUpnpAttribute* duration = + CUpnpAttribute::NewLC( KAttributeDuration() ); + duration->SetValueL( *durationString ); + elRes->AddAttributeL( duration ); //transfer ownership + CleanupStack::Pop( duration ); + CleanupStack::PopAndDestroy( durationString ); + durationString = NULL; + } + } + + CleanupStack::PopAndDestroy( resParameters ); + CleanupStack::PopAndDestroy( resolver ); + + // Attach res element to aItem. + aItem.AddElementL( elRes ); //transfer ownership + CleanupStack::Pop( elRes ); + } + +// -------------------------------------------------------------------------- +// CUpnpCdsResElementUtility::IsUriAbsolute +// +// (other items were commented in a header). +// -------------------------------------------------------------------------- +EXPORT_C TBool UpnpCdsResElementUtility::IsUriAbsolute( const TDesC8& aUri ) + { + TInetAddr addr; + TBool retVal = EFalse; + TBuf ipAddrBuf; + // if aUri.Length is less than KHttp().Length(),aUri is invalid + if ( aUri.Length() >= KHttp().Length() ) + { + TPtrC8 right = aUri.Right( aUri.Length() - KHttp().Length() ); + + TInt posit = right.Locate( TChar( KColon ) ); + if( posit != KErrNotFound ) + { + TPtrC8 ipAddr = right.Left( posit ); + if( ipAddr.Length() <= KIpAddLen ) + { + ipAddrBuf.Copy( ipAddr ); + } + } + + if( addr.Input( ipAddrBuf ) == KErrNone ) + { + retVal = ETrue; + } + } + + return retVal; + } + +// End of File