upnpmediaserver/avobjects/src/upnpprotocolinfolocal.cpp
author hgs
Mon, 04 Oct 2010 13:32:20 +0300
changeset 34 eab116a48b80
parent 0 7f85d04be362
permissions -rw-r--r--
201039_02

/** @file
* Copyright (c) 2005-2008 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 ProtocolInfo field wrapper. 
*
*/


#include "upnpprotocolinfolocal.h"
#include "upnpdlnaprotocolinfocons.h"

#include <e32base.h>
#include <e32cons.h>

using namespace UpnpDlnaProtocolInfo;

//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::CUpnpProtocolInfoLocal()
//  Constructor of the class
//-----------------------------------------------------------------
CUpnpProtocolInfoLocal::CUpnpProtocolInfoLocal(): CUpnpDlnaProtocolInfo()
    {
    }

//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::~CUpnpProtocolInfoLocal()
//  Destructor of the class
//-----------------------------------------------------------------
CUpnpProtocolInfoLocal::~CUpnpProtocolInfoLocal()
    {
    }

//-----------------------------------------------------------------
// CUpnpProtocolInfoLocal::NewL
// Method for creating instance of class. aInputString has to contain protocolInfo string.
//-----------------------------------------------------------------
EXPORT_C CUpnpProtocolInfoLocal* CUpnpProtocolInfoLocal::NewL(const TDesC8& aInputString)
    {
    CUpnpProtocolInfoLocal* newElement = new (ELeave) CUpnpProtocolInfoLocal();
    CleanupStack::PushL( newElement );
    newElement->ConstructL( aInputString ); 
    newElement->SetDefaultFourthField();      
    CleanupStack::Pop( newElement );
    return newElement; 
    }
    
//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::NewL
//  Method for creating instance of class. 
//  aMimeType - mime type for file.
//  aAdditionalInfo - additional information about what DLNA.ORG_PN type should be used
//-----------------------------------------------------------------
EXPORT_C CUpnpProtocolInfoLocal* CUpnpProtocolInfoLocal::NewL(const TDesC8& aMimeType, TInt aAdditionalInfo)
    {
    CUpnpProtocolInfoLocal* newElement = new (ELeave) CUpnpProtocolInfoLocal();
    CleanupStack::PushL( newElement );
    newElement->ConstructL( aMimeType, aAdditionalInfo ); 
    CleanupStack::Pop( newElement );
    return newElement;   
    }
//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::NewL
//  Method for creating instance of class.
//  aMimeType - mime type for file.
//-----------------------------------------------------------------
EXPORT_C CUpnpProtocolInfoLocal* CUpnpProtocolInfoLocal::NewL(const TDesC8& aMimeType, const TDesC8& aDlnaPn)
    {
    CUpnpProtocolInfoLocal* self = new (ELeave) CUpnpProtocolInfoLocal();
    CleanupStack::PushL( self );
    self->ConstructFromDlnaPnL( aMimeType, aDlnaPn ); 
    CleanupStack::Pop( self );
    return self;   
    }

//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::ConstructFromDlnaPnL(const TDesC8& aMimeType, const TDesC8& aDlnaPn)
//  Method for creating instance of class. aInputString has to contain protocolInfo string.
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::ConstructFromDlnaPnL(const TDesC8& aMimeType, const TDesC8& aDlnaPn)
    {
    SetFirstFieldL(KDEFAULT_1ST_PARAM);
    SetSecondFieldL(KDEFAULT_STAR_PARAM);
    SetThirdFieldL(aMimeType);
    
    /*
    * Requirements:
    * 1)  7.3.28.3 MM CMS:GetProtocolInfo Rules: Formatting options for Connection Manager Service 
    * 2)  7.3.134.3 MM/CM General Rules for CDS:CreateObject Errors: Bad Class or ProtoInfo 
    *
    * This concerns the following protocolInfo's:
    *
    *       http-get:*:image/jpeg:*
    *       http-get:*:image/gif:*
    *       http-get:*:audio/mpeg:*
    *       http-get:*:audio/mp4:*
    *       http-get:*:*:*
    */
    if ( aDlnaPn == KDEFAULT_STAR_PARAM )
        {
        SetFourthFieldL(aDlnaPn);
        }
    else
        {
        SetPnParameterL(aDlnaPn);
        SetDefaultFourthField();
        }            
    }

//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::ConstructL(TDesC8& aInputString)
//  Method for creating instance of class. aInputString has to contain protocolInfo string.
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::ConstructL(const TDesC8& aInputString)
    {
    CUpnpDlnaProtocolInfo::ConstructL(aInputString);
    }

//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::ConstructL(TDesC8& aInputString)
//  Method for creating instance of class.
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::ConstructL(const TDesC8& aMimeType, TInt aAdditionalInfo)
    {
    DefaultValuesL();
    ChooseDlnaL(aMimeType, aAdditionalInfo);
    }

//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::ChooseDlnaL(TDesC8& aMimeType, TInt aAdditionalInfo)
//  Main function for creating from mime type.
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::ChooseDlnaL(const TDesC8& aMimeType, TInt aAdditionalInfo)
    {
    switch(aAdditionalInfo)
        {
        case NO_DLNA_DATA: 
            break; 
        case NO_ADDITIONAL_INFO: 
            FillAccordingToMimeL(aMimeType);
            break;
            
        default: 
            FillAccordingToAddInfoL(aAdditionalInfo);
            break; 
        }
    }
    
//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::DefaultValuesL()
//  Fills up default values to create protocolInfo in form: "http-get:*:*:*"
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::DefaultValuesL()
    {
    SetFirstFieldL(KDEFAULT_1ST_PARAM());
    SetSecondFieldL(KDEFAULT_STAR_PARAM());
    SetThirdFieldL(KDEFAULT_STAR_PARAM());
    SetFourthFieldL( KDEFAULT_STAR_PARAM() );
    }    

//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::FillAccordingToAddInfoL(TInt aAdditionalInfo)
//  Fills dlna parameters according only to additionalInfo which is TInt value.
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::FillAccordingToAddInfoL(TInt aAdditionalInfo)
    {
    switch(aAdditionalInfo)
        {
        case JPEG_SM: 
            SetPnParameterL( KDLNA_PN_JPEG_SM() );
            break; 
        case JPEG_MED:
            SetPnParameterL( KDLNA_PN_JPEG_MED() );
            break; 
        case JPEG_LRG:
            SetPnParameterL( KDLNA_PN_JPEG_LRG() );
            break; 
        case JPEG_TN:
            SetPnParameterL( KDLNA_PN_JPEG_TN() );
            break;
        case JPEG_SM_ICO:
            SetPnParameterL( KDLNA_PN_JPEG_SM_ICO() );
            break;
        case JPEG_LRG_ICO:
            SetPnParameterL( KDLNA_PN_JPEG_LRG_ICO() );
            break;
        case PNG_TN:
            SetPnParameterL( KDLNA_PN_PNG_TN() );
            break;
        case PNG_SM_ICO:
            SetPnParameterL( KDLNA_PN_PNG_SM_ICO() );
            break;
        case PNG_LRG_ICO:
            SetPnParameterL( KDLNA_PN_PNG_LRG_ICO() );
            break;
        case PNG_LRG:
            SetPnParameterL(  KDLNA_PN_PNG_LRG() );
            break;
        case MP3:
            SetPnParameterL( KDLNA_PN_MP3() );
            break;
        default:
            break;
        }
        SetFourthFieldL( KNullDesC8() );        
    }
    
//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::FillAccordingToMimeL(TDesC8& aMimeType)
//  Fills dlna parameters according only to info in mime type.
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::FillAccordingToMimeL(const TDesC8& aMimeType)
    {
    HBufC8* mimeTypeH = aMimeType.AllocLC();
    TPtr8 mimeType(mimeTypeH->Des());
    mimeType.LowerCase();
    if ( mimeType.Compare( KMT_IMAGE_JPEG ) == 0 )
        {
        SetPnParameterL(KDLNA_PN_JPEG_LRG() );
        }
    else if (mimeType.Compare( KMT_IMAGE_PNG ) == 0 )
        {
        SetPnParameterL( KDLNA_PN_PNG_LRG() );    
        }
    else if ( mimeType.Compare( KMT_AUDIO_MP3 ) == 0 )
        {
        SetPnParameterL( KDLNA_PN_MP3() );
        }
    else
        {
        CleanupStack::PopAndDestroy(mimeTypeH);
        return;
        }
    CleanupStack::PopAndDestroy(mimeTypeH);
    SetFourthFieldL( KNullDesC8() );
    }        
    
//-----------------------------------------------------------------
//  CUpnpProtocolInfoLocal::SetDefaultForthParameter()
//  This member function sets defult values for optional parameters of 4th field
//-----------------------------------------------------------------
void CUpnpProtocolInfoLocal::SetDefaultFourthField()
    {
    
    if ( iThirdParameter -> FindC( KMimeImage() ) != 0 && 
        iThirdParameter -> FindC( KMimeAudio() ) != 0 &&
        iThirdParameter -> FindC( KMimeVideo() ) != 0 )
        {
        return;
        }
        
    SetOpTimeParam(EFalse);
    SetOpRangeParam(ETrue);
    
    iDlnaFlags[0] = 0;
    iDlnaFlags[1] = 0;
    iDlnaFlags[2] = 0;
    iDlnaFlags[3] = 0;
    
    if ( iThirdParameter -> FindC( KMimeImage() ) == 0 ) 
        {
        SetDlnaFlag( ETrue, TM_I_FLAG);
        SetDlnaFlag( ETrue, TM_B_FLAG);
        }

    if ( iThirdParameter -> FindC( KMimeAudio() ) == 0 ) 
        {
        SetDlnaFlag( ETrue, TM_S_FLAG);
        SetDlnaFlag( ETrue, TM_B_FLAG);
        }
    
    if ( iThirdParameter -> FindC( KMimeVideo() ) == 0 ) 
        {
        SetDlnaFlag( ETrue, TM_S_FLAG);
        SetDlnaFlag( ETrue, TM_B_FLAG);
        }    
    SetDlnaFlag( ETrue, DLNA_V1_5_FLAG );
    }        
    
void CUpnpProtocolInfoLocal::GetFourthParameterInternalL(TDes8& aBuffer)    
    {
    _LIT8( KTempAsterix, "*");
    if (iFourthParameter)
        {
        if ( iFourthParameter->Des() == KTempAsterix())
            {
            aBuffer.Append(iFourthParameter->Des());                
            }        
            else
            {
            CUpnpDlnaProtocolInfo::GetFourthParameterInternalL(aBuffer);                
            }
        }
     else
        {  
        if ( PnParameter() == KNullDesC8 )        
            {
            aBuffer.Append(KDlnaAllStar);
            return;
            }
        aBuffer.Append( KDLNA_PN );
        aBuffer.Append( KDlnaTokenizer ); 
        aBuffer.Append( *iDlnaPn );
        if ( GetDlnaOpRangeParam() || GetDlnaOpTimeParam() )
            {
            aBuffer.Append( KDlnaDelimeter ); 
            aBuffer.Append( KDLNA_OP );
            aBuffer.Append( KDlnaTokenizer ); 
            aBuffer.Append( GetDlnaOpTimeParam() ? KDLNA_BOOLEAN_TRUE:KDLNA_BOOLEAN_FALSE); //Time value 0,1
            aBuffer.Append( GetDlnaOpRangeParam() ? KDLNA_BOOLEAN_TRUE:KDLNA_BOOLEAN_FALSE); //Range value 0,1
            }
        if ( PsParameter() != KNullDesC8 )
            {
        //    aBuffer.Append( KDlnaDelimeter ); 
        //    aBuffer.Append( KDLNA_PS );
        //    aBuffer.Append( KDlnaTokenizer ); 
        //    aBuffer.Append( *iDlnaPs );
            }
        if ( iDlnaCi != KErrNotFound )
            {
            aBuffer.Append( KDlnaDelimeter ); 
            aBuffer.Append( KDLNA_CI );
            aBuffer.Append( KDlnaTokenizer ); 
            aBuffer.Append( iDlnaCi ? KOneChar() : KZeroChar() ); 
            }
        
        TBool saveDlnaFlags = IsDlnaFlagsSet();
        
        if ( saveDlnaFlags )
            {
            aBuffer.Append( KDlnaDelimeter ); 
            aBuffer.Append( KDLNA_FLAGS );
            aBuffer.Append( KDlnaTokenizer ); 
            SerializeDlnaFlagsL( aBuffer );
            }
        if ( GetOtherParams() != KNullDesC8) 
            {
            aBuffer.Append( KDlnaDelimeter ); 
            aBuffer.Append( *iOtherParams );
            }
        }           
    }
    
    
//end of file