localconnectivityservice/obexreceiveservices/bip/src/BIPCapabilityHandler.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:  Implementation of CBIPCapabilityHandler
*
*/


// INCLUDE FILES
#include "BIPCapabilityHandler.h"
#include "BIPXMLWriter.h"
#include <imageconversion.h>

// CONSTANTS
_LIT8( KBIPXmlImagePixel, "\" pixel=\"0*0-65535*65535\"");
_LIT8( KBIPXmlImageMaxSize, " maxsize=\"50000000\"");

const TInt KBIPMaxTypeLenght = 256;
const TInt KBIPMaxAttrLength = 32;

// MODULE DATA STRUCTURES

// ================= MEMBER FUNCTIONS =======================

// -----------------------------------------------------------------------------
// NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CBIPCapabilityHandler* CBIPCapabilityHandler::NewL()
    {
    TRACE_FUNC_ENTRY
    CBIPCapabilityHandler* self = new ( ELeave ) CBIPCapabilityHandler();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop(self);
    return( self );
    }

// ---------------------------------------------------------
// CBIPCapabilityHandler()
// ---------------------------------------------------------
//
CBIPCapabilityHandler::CBIPCapabilityHandler()
    {
    TRACE_FUNC_ENTRY
    }

// ---------------------------------------------------------
// CreateCapabilityObjectL()
// ---------------------------------------------------------
//
void CBIPCapabilityHandler::CreateCapabilityObjectL( TFileName& aFileName )
    {
    TRACE_FUNC_ENTRY
    iBIPXmlWriter = CBIPXmlWriter::NewL();
    iBIPXmlWriter->OpenXmlDocumentL( aFileName );
    SupportedImageTypesL();
    TBufC8<KBIPMaxAttrLength> pixelRange( KBIPXmlImagePixel );
    TBufC8<KBIPMaxAttrLength> maxSize( KBIPXmlImageMaxSize );
    TBufC8<KBIPMaxAttrLength> encoding;
    for( TInt index = 0; index < iImageTypeArray->Count(); index++ )
        {
        encoding = iImageTypeArray->MdcaPoint( index );
        iBIPXmlWriter->OpenXmlElementL( EImageFormats );
        iBIPXmlWriter->AddXmlAttributeL( EEncoding, encoding );
        iBIPXmlWriter->AddXmlAttributeL( EPixel, pixelRange );
        iBIPXmlWriter->AddXmlAttributeL( EMaxSize, maxSize );
        iBIPXmlWriter->CloseXmlElementL();
        }
    iBIPXmlWriter->CloseXmlDocumentL();
    TRACE_FUNC_EXIT
    }    

// ---------------------------------------------------------
// SupportedImageTypesL()
// ---------------------------------------------------------
//
void CBIPCapabilityHandler::SupportedImageTypesL( )
    {   
    TRACE_FUNC_ENTRY
    TInt retVal = KErrNone;
	RFileExtensionMIMETypeArray theFileExtensionArray;
	iImageTypeArray->Reset();

    TRAP( retVal, CImageDecoder::GetFileTypesL( theFileExtensionArray ) );	
	if( retVal != KErrNone )
		{
		theFileExtensionArray.ResetAndDestroy();
        User::Leave( retVal );
		}
    
    HBufC8* name = HBufC8::NewLC( KBIPMaxTypeLenght );
	for( TInt index = 0; index < theFileExtensionArray.Count(); index++ )
		{
		CFileExtensionMIMEType& fileExtAndMIMEType = *theFileExtensionArray[index];
        name->Des().Copy( fileExtAndMIMEType.DisplayName() );

        TInt dummy;
        retVal = iImageTypeArray->Find( name->Des(), dummy );
        if( retVal != KErrNone )
            {
            iImageTypeArray->AppendL( name->Des() );
            }
        name->Des().Zero();
        }
    CleanupStack::PopAndDestroy(name);  

	theFileExtensionArray.ResetAndDestroy();
    TRACE_FUNC_EXIT
    }

// ---------------------------------------------------------
// ConstructL()
// ---------------------------------------------------------
//
void CBIPCapabilityHandler::ConstructL()
    {
    TRACE_FUNC_ENTRY
    iImageTypeArray = new (ELeave) CDesC8ArrayFlat(1);
    }

// ---------------------------------------------------------
// ~CBIPCapabilityHandler()
// ---------------------------------------------------------
//
CBIPCapabilityHandler::~CBIPCapabilityHandler()
    {
    TRACE_FUNC
    delete iBIPXmlWriter;
    delete iImageTypeArray;
    }

//  End of File