diff -r 4096754ee773 -r 52a167391590 localconnectivityservice/obexsendservices/obexservicesendutils/src/BTSUCapabilityResolver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/obexsendservices/obexservicesendutils/src/BTSUCapabilityResolver.cpp Wed Sep 01 12:20:40 2010 +0100 @@ -0,0 +1,377 @@ +/* +* Copyright (c) 2002 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: Capability resolver implementation +* +*/ + + +// INCLUDE FILES +#include "BTServiceUtils.h" +#include "BTSUCapabilityResolver.h" +#include "BTSUDebug.h" +#include + + +// CONSTANTS + +_LIT8( KBTSUImageTag, "image-formats" ); +_LIT8( KBTSUAttributeEncoding, "encoding" ); +_LIT8( KBTSUAttributePixel, "pixel" ); +_LIT8( KBTSUAttributeMaxSize,"maxsize"); +_LIT(minus,"-"); +_LIT(star,"*"); + + + + +#define INVALIDVALUE -1 +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CBTSBIPController::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CBTSUCapabilityResolver* CBTSUCapabilityResolver::NewL(CDesCArrayFlat* aCapabilityList) + { + CBTSUCapabilityResolver* self = new( ELeave ) CBTSUCapabilityResolver( aCapabilityList ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CBTSBIPController::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CBTSUCapabilityResolver* CBTSUCapabilityResolver::NewL(RArray* aCapabilityList) + { + CBTSUCapabilityResolver* self = new( ELeave ) CBTSUCapabilityResolver( aCapabilityList ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(self); + return self; + } +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::CBTSUCapabilityResolver +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CBTSUCapabilityResolver::CBTSUCapabilityResolver( CDesCArrayFlat* aCapabilityList ) + { + aCapabilityList=aCapabilityList; + } +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::CBTSUCapabilityResolver +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CBTSUCapabilityResolver::CBTSUCapabilityResolver( + RArray* aCapabilityList ) : iCapabilityList( aCapabilityList ) + { + } + +// ----------------------------------------------------------------------------- +// CBTSBIPController::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::ConstructL () + { + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CBTSUCapabilityResolver::~CBTSUCapabilityResolver() + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::StartDocument +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnStartDocumentL(const Xml::RDocumentParameters& /*aDocParam*/, TInt aErrorCode) + { + FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::OnStartDocumentL()")); + if(aErrorCode!=KErrNone) + { + FLOG(_L("[BTSU]\t Error OnStartDocument")); + } + iCompleted=EFalse; + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::EndDocument +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnEndDocumentL(TInt aErrorCode) + { + FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::OnEndDocumentL()")); + if(aErrorCode!=KErrNone) + { + FLOG(_L("[BTSU]\t Error EndDocument")); + } + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::StartElement +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnStartElementL(const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, + TInt /*aErrorCode*/) + { + + TBool status = EFalse; + TBTSUImageCap param; + TLex lex; + TPtrC sizemaxwidth; + TPtrC sizemaxheight; + TPtrC sizeminwidth; + TPtrC sizeminheight; + TPtrC sizemin; + TPtrC sizemax; + TInt index; + HBufC* enc; + param.iMaxByteSize=0; + + TBuf conversionBuf; + + if( aElement.LocalName().DesC() != KBTSUImageTag ) + { + return; + } + + + if(aAttributes.Count()>0) + { + + param.iEncoding=NULL; + param.iMaxByteSize=-1; + param.iMinPixelSize.iHeight=INVALIDVALUE; + param.iMinPixelSize.iWidth=INVALIDVALUE; + param.iMaxPixelSize.iWidth=INVALIDVALUE; + param.iMaxPixelSize.iHeight=INVALIDVALUE; + + //Check and add to attribute list if there is encoding + for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ ) + { + if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeEncoding ) + { + User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC())); + + if (conversionBuf.Length()>0) + { + enc=conversionBuf.Alloc(); + TPtr rwdata(enc->Des()); + rwdata.Copy(conversionBuf); + param.iEncoding=enc; + if (param.iEncoding!=NULL) + { + status=ETrue; + } + } + } + } + conversionBuf = KNullDesC; + for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ ) + { + if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributePixel ) + { ; + User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC())); + } + } + + if(conversionBuf.Length()>1) + { + index=conversionBuf.Find(minus); + if(index!=KErrNotFound) //max size is given + { + sizemin.Set(conversionBuf.Left(index)); + sizemax.Set(conversionBuf.Right(conversionBuf.Length()-index-1)); + //solve min size + index=sizemin.Find(star); + if(index!=KErrNotFound) + { + sizeminwidth.Set(sizemin.Left(index)); + sizeminheight.Set(sizemin.Right(sizemin.Length()-index-1)); + + lex.Assign(sizeminwidth); + lex.Val(param.iMinPixelSize.iHeight); + + lex.Assign(sizeminheight); + lex.Val(param.iMinPixelSize.iWidth); + } + //solve max size + index=sizemax.Find(star); + if(index!=KErrNotFound) + { + sizemaxwidth.Set(sizemax.Left(index)); + sizemaxheight.Set(sizemax.Right(sizemax.Length()-index-1)); + + lex.Assign(sizemaxwidth); + lex.Val(param.iMaxPixelSize.iWidth); + + lex.Assign(sizemaxheight); + lex.Val(param.iMaxPixelSize.iHeight); + status=ETrue; + } + } + else //if max size not given + { + index=conversionBuf.Find(star); + if(index!=KErrNotFound) + { + //solve min size + TPtrC sizeminwidth=conversionBuf.Left( index ); + TPtrC sizeminheight=conversionBuf.Right( conversionBuf.Length() - index-1); + + lex.Assign(sizeminwidth); + lex.Val(param.iMinPixelSize.iWidth); + + lex.Assign(sizeminheight); + lex.Val(param.iMinPixelSize.iHeight); + //set max size + param.iMaxPixelSize.iWidth=param.iMinPixelSize.iWidth; + param.iMaxPixelSize.iHeight=param.iMinPixelSize.iHeight; + status=ETrue; + } + } + } + + + //Check and add to attribute list if there is maxsize + TPtrC maxsizevalue; + conversionBuf = KNullDesC; + for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ ) + { + if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeMaxSize ) + { + User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC())); + } + } + + + if (conversionBuf.Length()>0) + { + lex.Assign(conversionBuf); + lex.Val(param.iMaxByteSize); + } + + if(status) + { + iCapabilityList->Append(param); //add to list + } + + } + + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnEndElementL +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnEndElementL(const Xml::RTagInfo& /*aElement*/, TInt aErrorCode) + { + FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::EndElement()")); + if(aErrorCode==KErrNone) + { + iCompleted=ETrue; + } + FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::EndElement()")); + + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnContentL +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnContentL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/) + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnStartPrefixMappingL +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnStartPrefixMappingL(const RString& /*aPrefix*/, const RString& /*aUri*/, + TInt /*aErrorCode*/) + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnEndPrefixMappingL +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnEndPrefixMappingL(const RString& /*aPrefix*/, TInt /*aErrorCode*/) + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnIgnorableWhiteSpaceL +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnIgnorableWhiteSpaceL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/) + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnSkippedEntityL +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnSkippedEntityL(const RString& /*aName*/, TInt /*aErrorCode*/) + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnProcessingInstructionL +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnProcessingInstructionL(const TDesC8& /*aTarget*/, const TDesC8& /*aData*/, + TInt /*aErrorCode*/) + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::OnError +// ----------------------------------------------------------------------------- +// +void CBTSUCapabilityResolver::OnError(TInt /*aErrorCode*/) + { + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::GetExtendedInterface +// ----------------------------------------------------------------------------- +// +TAny* CBTSUCapabilityResolver::GetExtendedInterface(const TInt32 /*aUid*/) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CBTSUCapabilityResolver::IsCompleted +// ----------------------------------------------------------------------------- + +TBool CBTSUCapabilityResolver::IsCompleted() + { + return iCompleted; + } + +// End of File