--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/serviceframework/src/upnpicon.cpp Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,606 @@
+/** @file
+* Copyright (c) 2005-2006 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: Declares CUpnpIcon class
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "upnpicon.h"
+#include "upnpstring.h"
+#include "upnpargument.h"
+#include "upnpserviceimplementation.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::CUpnpIcon
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CUpnpIcon::CUpnpIcon():iSendBufferPtr(0,0)
+{
+
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::ConstructL( )
+{
+ iFilename.Zero();
+
+ iSendBuffer = ToDes8L();
+ iSendBufferPtr.Set(iSendBuffer->Des());
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::ConstructL(const TDesC16& aPath, const TDesC8& aUrl, const TInt aWidth, const TInt aHeight, const TInt aDepth, const TDesC8& aMimeType)
+{
+ iFilename.Zero();
+ SetBitmapFilename(aPath);
+ SetUrlL(aUrl);
+ SetWidthL(aWidth);
+ SetHeightL(aHeight);
+ SetDepthL(aDepth);
+ SetMimeTypeL(aMimeType);
+
+ iSendBuffer = ToDes8L();
+ iSendBufferPtr.Set(iSendBuffer->Des());
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::ConstructL(const TDesC16& aPath, const TInt aWidth, const TInt aHeight, const TInt aDepth, const TDesC8& aMimeType)
+{
+ iFilename.Zero();
+ SetBitmapFilename(aPath);
+ SetWidthL(aWidth);
+ SetHeightL(aHeight);
+ SetDepthL(aDepth);
+ SetMimeTypeL(aMimeType);
+
+ iSendBuffer = ToDes8L();
+ iSendBufferPtr.Set(iSendBuffer->Des());
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpIcon* CUpnpIcon::NewL( )
+{
+ CUpnpIcon* self = new (ELeave) CUpnpIcon();
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+ return self;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpIcon* CUpnpIcon::NewL(const TDesC16& aPath, const TDesC8& aUrl, const TInt aWidth, const TInt aHeight, const TInt aDepth, const TDesC8& aMimeType)
+{
+ CUpnpIcon* self = new (ELeave) CUpnpIcon();
+ CleanupStack::PushL( self );
+ self->ConstructL( aPath, aUrl, aWidth, aHeight, aDepth, aMimeType );
+ CleanupStack::Pop( self );
+ return self;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpIcon* CUpnpIcon::NewL(const TDesC16& aPath, const TInt aWidth, const TInt aHeight, const TInt aDepth, const TDesC8& aMimeType)
+{
+ CUpnpIcon* self = new (ELeave) CUpnpIcon();
+ CleanupStack::PushL( self );
+ self->ConstructL( aPath, aWidth, aHeight, aDepth, aMimeType );
+ CleanupStack::Pop( self );
+ return self;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::~CUpnpIcon
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpIcon::~CUpnpIcon()
+{
+ iProperties.ResetAndDestroy();
+ iProperties.Close();
+
+ if(iSendBuffer)
+ {
+ delete iSendBuffer;
+ }
+ //TRAP_IGNORE( DeleteIconFromFsL());
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::Url
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TPtrC8 CUpnpIcon::Url() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KUrl().Compare( var->Name() ) == KErrNone )
+ {
+ return var->Value();
+ }
+
+ index++;
+ }
+
+ return KNullDesC8();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::SetUrlL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpIcon::SetUrlL(const TDesC8& aUrl)
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KUrl().Compare( var->Name() ) == KErrNone )
+ {
+ var->SetValueL(aUrl);
+ return;
+ }
+
+ index++;
+ }
+ CUpnpDescriptionProperty* prop = CUpnpDescriptionProperty::NewL(KUrl, aUrl);
+ iProperties.AppendL(prop);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::GetIconBufferPtr
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TPtr8& CUpnpIcon::GetIconBufferPtr() const
+{
+ return iSendBufferPtr;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::BitmapFilename
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TFileName CUpnpIcon::BitmapFilename() const
+{
+ return iFilename;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::SetBitmapFilename
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpIcon::SetBitmapFilename( const TDesC& aName )
+{
+ iFilename.Zero();
+ iFilename.Append( aName );
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::Width
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CUpnpIcon::Width() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KWidth().Compare( var->Name() ) == KErrNone )
+ {
+ TLex8 val(var->Value());
+ TInt ret(0);
+ TInt err = val.Val( ret );
+ if(err == KErrNone)
+ return ret;
+ else
+ return err;
+ }
+
+ index++;
+ }
+
+ return KErrNotFound;
+}
+
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::WidthTPtrC8
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CUpnpIcon::WidthTPtrC8() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KWidth().Compare( var->Name() ) == KErrNone )
+ {
+ return var->Value();
+ }
+
+ index++;
+ }
+
+ return KNullDesC8();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::SetWidthL
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::SetWidthL(TInt aWidth)
+{
+ TInt index = 0;
+ TBuf8<KMaxNumberPropertySize> nbuf;
+ nbuf.Num(aWidth);
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KWidth().Compare( var->Name() ) == KErrNone )
+ {
+ var->SetValueL(nbuf);
+ return;
+ }
+
+ index++;
+ }
+ CUpnpDescriptionProperty* prop = CUpnpDescriptionProperty::NewL(KWidth, nbuf);
+ iProperties.AppendL(prop);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::Depth
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CUpnpIcon::Depth() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KDepth().Compare( var->Name() ) == KErrNone )
+ {
+ TLex8 val(var->Value());
+ TInt ret(0);
+ TInt err = val.Val( ret );
+ if(err == KErrNone)
+ return ret;
+ else
+ return err;
+ }
+
+ index++;
+ }
+
+ return KErrNotFound;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::DepthTPtrC8
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CUpnpIcon::DepthTPtrC8() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KDepth().Compare( var->Name() ) == KErrNone )
+ {
+ return var->Value();
+ }
+
+ index++;
+ }
+
+ return KNullDesC8();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::SetDepthL
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::SetDepthL(TInt aDepth)
+{
+ TInt index = 0;
+ TBuf8<KMaxNumberPropertySize> nbuf;
+ nbuf.Num(aDepth);
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KDepth().Compare( var->Name() ) == KErrNone )
+ {
+ var->SetValueL(nbuf);
+ return;
+ }
+
+ index++;
+ }
+ CUpnpDescriptionProperty* prop = CUpnpDescriptionProperty::NewL(KDepth, nbuf);
+ iProperties.AppendL(prop);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::Height
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CUpnpIcon::Height() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KHeight().Compare( var->Name() ) == KErrNone )
+ {
+ TLex8 val(var->Value());
+ TInt ret(0);
+ TInt err = val.Val( ret );
+ if(err == KErrNone)
+ return ret;
+ else
+ return err;
+ }
+
+ index++;
+ }
+
+ return KErrNotFound;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::HeightTPtrC8
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC8 CUpnpIcon::HeightTPtrC8() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KHeight().Compare( var->Name() ) == KErrNone )
+ {
+ return var->Value();
+ }
+
+ index++;
+ }
+
+ return KNullDesC8();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::SetHeightL
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::SetHeightL(TInt aHeight)
+{
+ TInt index = 0;
+ TBuf8<KMaxNumberPropertySize> nbuf;
+ nbuf.Num(aHeight);
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KHeight().Compare( var->Name() ) == KErrNone )
+ {
+ var->SetValueL(nbuf);
+ return;
+ }
+
+ index++;
+ }
+ CUpnpDescriptionProperty* prop = CUpnpDescriptionProperty::NewL(KHeight, nbuf);
+ iProperties.AppendL(prop);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::MimeType
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TPtrC8 CUpnpIcon::MimeType() const
+{
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KMimeType().Compare( var->Name() ) == KErrNone )
+ {
+ return var->Value();
+ }
+
+ index++;
+ }
+
+ return KNullDesC8();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::SetMimeTypeL
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::SetMimeTypeL(const TDesC8& aMimeType)
+{
+
+ TInt index = 0;
+
+ while ( index < iProperties.Count() )
+ {
+ CUpnpDescriptionProperty* var = iProperties[index];
+
+ if ( KMimeType().Compare( var->Name() ) == KErrNone )
+ {
+ var->SetValueL(aMimeType);
+ return;
+ }
+
+ index++;
+ }
+ CUpnpDescriptionProperty* prop = CUpnpDescriptionProperty::NewL(KMimeType, aMimeType);
+ iProperties.AppendL(prop);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::DeleteIconFromFsL
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::DeleteIconFromFsL()
+{
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ fs.Delete(iFilename);
+ fs.Close();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::AddPropertyL
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::AddPropertyL( CUpnpDescriptionProperty* aProperty )
+ {
+ iProperties.AppendL( aProperty);
+ }
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::ExternalizeL
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpIcon::ExternalizeL( RWriteStream& aStream ) const
+{
+ aStream << BitmapFilename();
+ aStream << Url();
+ aStream.WriteInt8L(Width());
+ aStream.WriteInt8L(Height());
+ aStream.WriteInt8L(Depth());
+ aStream << MimeType();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::InternalizeL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpIcon::InternalizeL( RReadStream& aStream )
+{
+ SetBitmapFilename(HBufC16::NewLC( aStream, KMaxFileName)->Des());
+ SetUrlL(HBufC8::NewLC( aStream, KMaxFileName)->Des());
+ SetWidthL(aStream.ReadInt8L());
+ SetHeightL(aStream.ReadInt8L());
+ SetDepthL(aStream.ReadInt8L());
+ SetMimeTypeL(HBufC8::NewLC( aStream, KMaxMimeTypeSize)->Des());
+
+ CleanupStack::PopAndDestroy(3);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpIcon::ToDes8L
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* CUpnpIcon::ToDes8L() const
+{
+ // serialize object
+ CBufFlat* buf = CBufFlat::NewL(KDefBuffer);
+ CleanupStack::PushL(buf);
+ RBufWriteStream stream(*buf);
+ CleanupClosePushL(stream);
+
+ stream << *this;
+
+ // create heap descriptor
+ HBufC8* hbuf = HBufC8::NewLC(buf->Size());
+ TPtr8 ptr(hbuf->Des());
+ buf->Read(0, ptr, buf->Size());
+
+ // clean up
+ CleanupStack::Pop(hbuf);
+ CleanupStack::PopAndDestroy(&stream);
+ CleanupStack::PopAndDestroy(buf);
+
+ return hbuf;
+
+}
+// End of File