cbs/CbsServer/ServerSrc/CCbsMessageFactory.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 22:26:11 +0300
branchRCL_3
changeset 21 0a6dd2dc9970
parent 0 ff3b6d0fd310
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2004-2009 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 CCbsMessageFactory class.
*
*/


// INCLUDE FILES
#include <featmgr.h>

#include "CCbsMessageFactory.h"
#include "CCbsRecMessage.h"
#include "CCbsRecWcdmaMessage.h"
#include "CCbsRecEtel.h"
#include "CbsLogger.h"

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

// -----------------------------------------------------------------------------
// CCbsMessageFactory::CCbsMessageFactory
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CCbsMessageFactory::CCbsMessageFactory( CCbsRecEtel& aRecEtel )
: iRecEtel( aRecEtel )
    {    
    }

// Destructor    
CCbsMessageFactory::~CCbsMessageFactory()
    {
    CBSLOGSTRING("CBSSERVER: >>> CCbsMessageFactory::~CCbsMessageFactory()");
    CBSLOGSTRING("CBSSERVER: <<< CCbsMessageFactory::~CCbsMessageFactory()");
    }

// -----------------------------------------------------------------------------
// CCbsMessageFactory::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CCbsMessageFactory* CCbsMessageFactory::NewL( CCbsRecEtel& aRecEtel )
    {
    CBSLOGSTRING("CBSSERVER: >>> CCbsMessageFactory::NewL()");

    CCbsMessageFactory* self = new ( ELeave ) CCbsMessageFactory( aRecEtel );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop();

    CBSLOGSTRING("CBSSERVER: <<< CCbsMessageFactory::NewL()");
    return self;
    }

// -----------------------------------------------------------------------------
// CCbsMessageFactory::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CCbsMessageFactory::ConstructL()
    {
    }

// -----------------------------------------------------------------------------
// CCbsMessageFactory::CreateMessageL
// Creates a CB message.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
// 
CCbsMessage* CCbsMessageFactory::CreateMessageL( const TDes8& aMessagePage,
    const RMobileBroadcastMessaging::TMobileBroadcastAttributesV2& aAttributes,
    TCbsMessageType& aMsgType )
    {
    CBSLOGSTRING("CBSSERVER: >>> CCbsMessageFactory::CreateMessageL()");

    CCbsMessage* currentMessage;
    currentMessage = NULL;
    
    if ( aAttributes.iFormat == RMobileBroadcastMessaging::EFormatWcdmaTpdu )
        {
        // Accept WCDMA messages only if the feature is supported.
        FeatureManager::InitializeLibL();
        
        if ( FeatureManager::FeatureSupported( KFeatureIdFf3gCellbroadcast ) )
            {
            CBSLOGSTRING("CBSSERVER: CCbsMessageFactory::CreateMessageL(): WCDMA msg...");
            currentMessage = CCbsRecWcdmaMessage::NewL( 
                aMessagePage, aAttributes );        
            CBSLOGSTRING("CBSSERVER: CCbsMessageFactory::CreateMessageL(): WCDMA msg created OK.");

            iAttributes = aAttributes;

            // Set the message type
            aMsgType = ECbsMessageWcdma;
            }
        else
            {
            CBSLOGSTRING("CBSSERVER: CCbsMessageFactory::CreateMessageL(): WCDMA messages not supported, currentMessage set to NULL.");
            currentMessage = NULL;
            }
        FeatureManager::UnInitializeLib();
        }
    else if ( aAttributes.iFormat == RMobileBroadcastMessaging::EFormatGsmTpdu ||
        aAttributes.iFormat == RMobileBroadcastMessaging::EFormatUnspecified )
        {        
        CBSLOGSTRING("CBSSERVER: CCbsMessageFactory::CreateMessageL(): GSM msg...");
        currentMessage = CCbsRecMessage::NewL( aMessagePage );        
        CBSLOGSTRING("CBSSERVER: CCbsMessageFactory::CreateMessageL(): GSM msg created OK.");

        // Set the message type
        aMsgType = ECbsMessageGsm;
        }
    else
        {        
        CBSLOGSTRING("CBSSERVER: CCbsMessageFactory::CreateMessageL(): Unknown msg type, currentMessage set to NULL.");
        currentMessage = NULL;
        }

    if ( currentMessage )
        {
        // Livecast messages are handled separately
        if ( currentMessage->IsLivecastMessage() )
            {        
            CBSLOGSTRING("CBSSERVER: CCbsMessageFactory::CreateMessageL(): This is a LC msg, setting type to ECbsMessageLivecast.");
            // Set the message type
            aMsgType = ECbsMessageLivecast;    
            }
        }
    
    CBSLOGSTRING("CBSSERVER: <<< CCbsMessageFactory::CreateMessageL(), returning currentMessage");
    return currentMessage;    
    }

// -----------------------------------------------------------------------------
// CCbsMessageFactory::CreateMessageL
// Creates a CB message.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
// 
CCbsMessage* CCbsMessageFactory::CreateMessageL( const CCbsMessage& aMessage )
    {
    CCbsMessage* message;
    message = NULL;
    
    if ( iAttributes.iFormat == RMobileBroadcastMessaging::EFormatWcdmaTpdu )
        {
        message = CCbsRecWcdmaMessage::NewL( aMessage );
        }
    else if ( iAttributes.iFormat == RMobileBroadcastMessaging::EFormatGsmTpdu ||
        iAttributes.iFormat == RMobileBroadcastMessaging::EFormatUnspecified )
        {
        message = CCbsRecMessage::NewL( aMessage );
        }

    return message;
    }

// ========================== OTHER EXPORTED FUNCTIONS =========================

//  End of File