localconnectivityservice/obexsendservices/obexservicesendutils/src/BTSUCapabilityResolver.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:40 +0100
branchRCL_3
changeset 40 52a167391590
parent 0 c3e98f10fcf4
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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 <utf.h>


// 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<TBTSUImageCap>* 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<TBTSUImageCap>* 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<KBTSUMaxStringLength> 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