diff -r 000000000000 -r dd21522fd290 browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrDefAttrib.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrDefAttrib.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,618 @@ +/* +* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: This file contains the declaration of the default attrib of Download Mgr Server. +* +*/ + + + +// INCLUDE FILES +#include "DownloadMgrDefAttrib.h" +#include "DownloadMgrLogger.h" + +// ============================= LOCAL FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// TDMgrUtils::TDMgrUtils +// ----------------------------------------------------------------------------- +// +TDMgrUtils::TDMgrUtils() + { + } + +// --------------------------------------------------------- +// TDMgrUtils::NextAttribL +// --------------------------------------------------------- +// +TBool TDMgrUtils::NextAttribL( CDefaultAttrib* aAttrib, + const TDesC8& aPackedAttribs ) + { + CLOG_ENTERFN_NULL( "TDMgrUtils::NextDefaultAttribL" ) + // ||: type;attribute;length;value :|| + if( iCurrent >= aPackedAttribs.Length() ) + { + return EFalse; + } + + TInt current( 0 ); + THttpDownloadMgrIntegerBuf intBuf( 0 ); + + //CLOG_WRITE( "TDMgrUtils::NextDefaultAttrib - start" ); + // type info length + TPtrC8 type( iPtr.Mid( current, intBuf.Size() ) ); + //CLOG_WRITE( "type info length" ); + // + (type info length) + current = current + intBuf.Size(); + //CLOG_WRITE( "+ (type info length)" ); + // attribute info length + TPtrC8 attribute( iPtr.Mid( current, intBuf.Size() ) ); + //CLOG_WRITE( "attribute info length" ); + // + (attribute info length) + current = current + intBuf.Size(); + //CLOG_WRITE( "+ (attribute info length)" ); + // data length info length + TPtrC8 data_length( iPtr.Mid( current, intBuf.Size() ) ); + //CLOG_WRITE( "data length info length" ); + // + (data length info length) + current = current + intBuf.Size(); + intBuf.Copy( data_length ); + TPtrC8 value( iPtr.Mid( current, intBuf() ) ); + //CLOG_WRITE( "+ (data length info length)" ); + // + (data length) + current = current + intBuf(); + //CLOG_WRITE( "+ (data length)" ); + // = next item + iCurrent = iCurrent + current; + iPtr.Set( aPackedAttribs.Mid( iCurrent, ( aPackedAttribs.Length() - iCurrent ) ) ); + //CLOG_WRITE( "= next item" ); + // set aAttrib + aAttrib->Reset(); + //CLOG_WRITE( "reset atrib" ); + aAttrib->SetL( type, attribute, value ); + //CLOG_WRITE( "set aAttrib" ); + + return ETrue; + } + +// --------------------------------------------------------- +// TDMgrUtils::AllocDefAttribBufLC +// --------------------------------------------------------- +// +HBufC8* TDMgrUtils::AllocDefAttribBufLC( CArrayPtrFlat< CDefaultAttrib >* aAttribs ) + { + //__ASSERT_DEBUG( ( aAttribs != NULL ), User::Panic( KErrArgument ) ); + + CLOG_ENTERFN_NULL( "TDMgrUtils::AllocDefAttribBufLC" ) + TInt length( 0 ); + + for( TInt i = 0; i < aAttribs->Count(); i++ ) + { + CDefaultAttrib* attrib = (*aAttribs)[i]; + length = length + attrib->PackedAttribSize(); + } + + //CLOG_WRITE_FORMAT( "length %d", length ); + return HBufC8::NewLC( length ); + } + +// --------------------------------------------------------- +// TDMgrUtils::PackedAttributesL +// --------------------------------------------------------- +// +HBufC8* TDMgrUtils::PackedAttributesL( CArrayPtrFlat< CDefaultAttrib >* aAttribs ) + { + //__ASSERT_DEBUG( aAttribs, User::Panic( KErrArgument ) ); + + CLOG_WRITE_NULL( "TDMgrUtils::PackedDefaultAttributesLC" ) + HBufC8* buf = AllocDefAttribBufLC( aAttribs ); + TPtr8 ptr( buf->Des() ); + + for( TInt i = 0; i < aAttribs->Count(); i++ ) + { + CDefaultAttrib* attrib = (*aAttribs)[i]; + attrib->PackAttribute( ptr ); + } + + CleanupStack::Pop( buf ); + return buf; + } + +// --------------------------------------------------------- +// TDMgrUtils::PackEventAttribL +// --------------------------------------------------------- +// +HBufC8* TDMgrUtils::PackEventAttribL( TInt32 aUserData, TInt32 aMODownloadedSize,TInt32 aDownloadedSize, TInt32 aMOAttrLength, TInt32 aAttrLength ) + { + THttpDownloadMgrIntegerBuf intBuf( 0 ); + HBufC8* buf = HBufC8::NewL( 6 * intBuf.Size() ); + TPtr8 package = buf->Des(); + + //EDlAttrUserData + intBuf() = aUserData; + package.Append( intBuf ); + + //EDlAttrMODownloadedSize + intBuf() = aMODownloadedSize; + package.Append( intBuf ); + + //EDlAttrDownloadedSize + intBuf() = aDownloadedSize; + package.Append( intBuf ); + + //EDlAttrMOLength + intBuf() = aMOAttrLength; + package.Append( intBuf ); + + //EDlAttrLength + intBuf() = aAttrLength; + package.Append( intBuf ); + + return buf; + } + +// --------------------------------------------------------- +// TDMgrUtils::UnPackEventAttribL +// --------------------------------------------------------- +// +void TDMgrUtils::UnPackEventAttribL( const TDesC8& aPack, + TInt32& aUserData, + TInt32& aMODownloadedSize, + TInt32& aDownloadedSize, + TInt32& aMOAttrLength, + TInt32& aAttrLength, + TInt32& aMoIndex ) + { + THttpDownloadMgrIntegerBuf intBuf( 0 ); + TInt current( 0 ); + TInt32 maskedData = 0; + + //EDlAttrUserData + intBuf.Copy( aPack.Mid( current, intBuf.Size() ) ); + maskedData = intBuf(); + current = current + intBuf.Size(); + + //EDlAttrMultipleMODownloadedSize + intBuf.Copy( aPack.Mid( current, intBuf.Size() ) ); + aMODownloadedSize= intBuf(); + current = current + intBuf.Size(); + + //EDlAttrDownloadedSize + intBuf.Copy( aPack.Mid( current, intBuf.Size() ) ); + aDownloadedSize= intBuf(); + current = current + intBuf.Size(); + + //EDlAttrLength + intBuf.Copy( aPack.Mid( current, intBuf.Size() ) ); + aMOAttrLength= intBuf(); + current = current + intBuf.Size(); + + //EDlAttrMultipleMOLength + intBuf.Copy( aPack.Mid( current, intBuf.Size() ) ); + aAttrLength= intBuf(); + current = current + intBuf.Size(); + + // Unmask maskedData to get UserData and MoIndex + aUserData = (maskedData & 0x0000FFFF); + aMoIndex = (maskedData >> 16); + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::CDefaultAttrib +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CDefaultAttrib::CDefaultAttrib() + { + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::CDefaultAttrib +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CDefaultAttrib::CDefaultAttrib( THttpDownloadAttrib aAttribute, TAttribType aType ) + { + iAttribute = aAttribute; + iType = aType; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::ConstructL( TInt32 aValue ) + { + iInt32 = aValue; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::ConstructL( TBool aValue ) + { + iBool = aValue; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::ConstructL( const TDesC8& aValue ) + { + iBufC8 = aValue.AllocL(); + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::ConstructL( const TDesC16& aValue ) + { + iBufC16 = aValue.AllocL(); + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CDefaultAttrib* CDefaultAttrib::NewL() + { + CDefaultAttrib* self = new( ELeave ) CDefaultAttrib(); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CDefaultAttrib* CDefaultAttrib::NewL( THttpDownloadAttrib aAttribute, + TInt32 aValue ) + { + CDefaultAttrib* self = new( ELeave ) CDefaultAttrib( aAttribute, EInt ); + + CleanupStack::PushL( self ); + self->ConstructL( aValue ); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CDefaultAttrib* CDefaultAttrib::NewL( THttpDownloadAttrib aAttribute, + TBool aValue ) + { + CDefaultAttrib* self = new( ELeave ) CDefaultAttrib( aAttribute, EBool ); + + CleanupStack::PushL( self ); + self->ConstructL( aValue ); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CDefaultAttrib* CDefaultAttrib::NewL( THttpDownloadAttrib aAttribute, + const TDesC8& aValue ) + { + CDefaultAttrib* self = new( ELeave ) CDefaultAttrib( aAttribute, EString8 ); + + CleanupStack::PushL( self ); + self->ConstructL( aValue ); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CDefaultAttrib* CDefaultAttrib::NewL( THttpDownloadAttrib aAttribute, + const TDesC16& aValue ) + { + CDefaultAttrib* self = new( ELeave ) CDefaultAttrib( aAttribute, EString16 ); + + CleanupStack::PushL( self ); + self->ConstructL( aValue ); + CleanupStack::Pop(); + + return self; + } + +// Destructor +CDefaultAttrib::~CDefaultAttrib() + { + delete iBufC16; + iBufC16 = NULL; + + delete iBufC8; + iBufC8 = NULL; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::AsTInt32L +// ----------------------------------------------------------------------------- +// +TInt32 CDefaultAttrib::AsTInt32L() const + { + if( iType == EInt ) + { + return iInt32; + } + else + { + User::Leave( KErrNotFound ); + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::AsTBoolL +// ----------------------------------------------------------------------------- +// +TBool CDefaultAttrib::AsTBoolL() const + { + if( iType == EBool ) + { + return iBool; + } + else + { + User::Leave( KErrNotFound ); + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::AsTPtrC8L +// ----------------------------------------------------------------------------- +// +TPtrC8 CDefaultAttrib::AsTPtrC8L() const + { + if( iType == EString8 ) + { + return iBufC8->Des(); + } + else + { + User::Leave( KErrNotFound ); + return KNullDesC8(); + } + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::AsTPtrC16L +// ----------------------------------------------------------------------------- +// +TPtrC16 CDefaultAttrib::AsTPtrC16L() const + { + if( iType == EString16 ) + { + return iBufC16->Des(); + } + else + { + User::Leave( KErrNotFound ); + return KNullDesC16(); + } + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::PackAttribute +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::PackAttribute( TDes8& aPackage ) + { + THttpDownloadMgrIntegerBuf intBuf( 0 ); + intBuf() = iType; + aPackage.Append( intBuf ); + intBuf() = (TInt32)iAttribute; + aPackage.Append( intBuf ); + + switch( iType ) + { + case EString8: + { + intBuf() = iBufC8->Length(); + aPackage.Append( intBuf ); + aPackage.Append( iBufC8->Des() ); + } + break; + case EString16: + { + intBuf() = iBufC16->Size(); + aPackage.Append( intBuf ); + TUint8* ptr8 = &(aPackage[0]) + aPackage.Size(); + // Here we use the padding byte because we can + // cast to even memory address only + if( (TInt)ptr8%2 == 1 ) + { + ptr8 = ptr8 + 1; + } + TPtr16 ptr( (TUint16*)(ptr8), iBufC16->Length() ); + ptr.Copy( *iBufC16 ); + aPackage.SetLength( aPackage.Size() + iBufC16->Size() ); + } + break; + case EInt: + { + intBuf() = intBuf.Size(); + aPackage.Append( intBuf ); + intBuf() = iInt32; + aPackage.Append( intBuf ); + } + break; + case EBool: + { + intBuf() = intBuf.Size(); + aPackage.Append( intBuf ); + intBuf() = iBool; + aPackage.Append( intBuf ); + } + break; + default: + break; + } + + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::PackedAttribLength +// ----------------------------------------------------------------------------- +// +TInt CDefaultAttrib::PackedAttribSize() + { + TInt length( 0 ); + + THttpDownloadMgrIntegerBuf intBuf( 0 ); + // length of type info + length = length + intBuf.Size(); + // length of attribute info + length = length + intBuf.Size(); + // length of size info + length = length + intBuf.Size(); + + switch( iType ) + { + case EString8: + { + // data length + length = length + iBufC8->Size(); + } + break; + case EString16: + { + // data length + // We must add 1 padding byte, in case of odd memory address + // when the 16 bits descipror is copied to the 8 bits buffer. + length = length + iBufC16->Size() + 1; + } + break; + case EInt: + case EBool: + { + // data length + length = length + intBuf.Size(); + } + break; + default: + break; + } + + return length; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::Reset +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::Reset() + { + delete iBufC16; + iBufC16 = NULL; + + delete iBufC8; + iBufC8 = NULL; + } + +// ----------------------------------------------------------------------------- +// CDefaultAttrib::SetL +// ----------------------------------------------------------------------------- +// +void CDefaultAttrib::SetL( const TDesC8& aType, + const TDesC8& aAttribute, + const TDesC8& aValue ) + { + THttpDownloadMgrIntegerBuf intBuf( 0 ); + intBuf.Copy( aType ); + iType = (TAttribType)intBuf(); + intBuf.Copy( aAttribute ); + iAttribute = (THttpDownloadAttrib)intBuf(); + + delete iBufC16; + iBufC16 = NULL; + + delete iBufC8; + iBufC8 = NULL; + + switch( iType ) + { + case EString8: + { + iBufC8 = aValue.AllocL(); + } + break; + case EString16: + { + iBufC16 = HBufC16::NewL( aValue.Size() / 2 ); + const TUint8* ptr8 = &(aValue[0]); + // Here we use the padding byte because we can + // cast to even memory address only + if( (TInt)ptr8%2 == 1 ) + { + ptr8 = ptr8 + 1; + } + TPtrC16 ptr( (TUint16*)ptr8, aValue.Size() / 2 ); + iBufC16->Des().Copy( ptr ); + } + break; + case EInt: + { + intBuf.Copy( aValue ); + iInt32 = intBuf(); + } + break; + case EBool: + { + intBuf.Copy( aValue ); + iBool = intBuf(); + } + break; + default: + break; + } + } + +// End of File