--- 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 <e32std.h>
-#include <e32base.h>
-
-// upnp stack api
-#include <upnpitem.h> // CUpnpItem
-#include <upnpstring.h>
-#include <upnpelement.h>
-#include <upnpdlnaprotocolinfo.h>
-#include <upnpprotocolinfo.h>
-
-// 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);
- 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<KIpAddLen> 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 <e32std.h>
+#include <e32base.h>
+
+// upnp stack api
+#include <upnpitem.h> // CUpnpItem
+#include <upnpstring.h>
+#include <upnpelement.h>
+#include <upnpdlnaprotocolinfo.h>
+#include <upnpprotocolinfo.h>
+
+// 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<KIpAddLen> 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