diff -r 000000000000 -r ff3b6d0fd310 cbs/CbsServer/ServerSrc/CCbsRecMessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbs/CbsServer/ServerSrc/CCbsRecMessage.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2003 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: This module contains the implementation of CCbsRecMessage class +* member functions. +* +* CCbsRecMessage represents a message page generated by CCbsRecEtelMonitor. +* CCbsRecMessage is constructed from a CB message page received from +* ETel server. +* +*/ + + + +// INCLUDE FILES +#include "CCbsRecMessage.h" +#include "CbsServerPanic.h" +#include "CbsLogger.h" + +// CONSTANTS + +// ================= MEMBER FUNCTIONS ======================================= + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::CCbsRecMessage +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCbsRecMessage::CCbsRecMessage() + { + } + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCbsRecMessage::ConstructL( + const TDes8& aMessagePage ) // ETel received msg page + { + CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::ConstructL() (TDes8 from ETel)"); + + // Retrieve values for message header information. + iSerialNumber = TUint16( ( aMessagePage[ 0 ] << 8 ) | aMessagePage [ 1 ] ); + iMessageIdentifier = TUint16( ( aMessagePage[ 2 ] << 8 ) | aMessagePage[ 3 ] ); + iDCS = aMessagePage[ 4 ]; + iPageParameter = aMessagePage[ 5 ]; + + if ( ThisPage() == 0 || TotalPages() == 0 ) + { + iPageParameter = KPageParameterSingle; + } + + CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iSerialNumber: %d", iSerialNumber ); + CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iMessageIdentifier: %d", iMessageIdentifier ); + CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iDCS: %d", iDCS ); + CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iPageParameter: %d", iPageParameter ); + + // 16-bit representation not prepared. + iMessage = NULL; + + // A buffer for the message contents. + iMessage8 = HBufC8::NewL( RMobileBroadcastMessaging::KGsmBroadcastDataSize ); + TPtr8 messagePtr = iMessage8->Des(); + TPtrC8 sourceMessagePtr; + + if ( ThisPage() == 1 && IsLivecastMessage () ) + { + sourceMessagePtr.Set( aMessagePage.Right( aMessagePage.Length() ) ); + } + else + { + sourceMessagePtr.Set( aMessagePage.Right( aMessagePage.Length() - KHeaderLength ) ); + } + + // Copy the TCbs page contents into this buffer. + messagePtr.Copy( sourceMessagePtr ); + + // Indicate that we have no network info available + iNetworkInfo.iCountryCode = KRecMessageNoNetworkInfo; + + // Set network mode + iNetworkMode = ECbsNetworkGsm; + + CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::ConstructL() (TDes8 from ETel)"); + } + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::ConstructL +// Symbian 2nd phase copyconstructor can leave. +// ----------------------------------------------------------------------------- +// +void CCbsRecMessage::ConstructL( + const CCbsMessage& aMessagePage ) + { + iSerialNumber = aMessagePage.Key(); + iMessageIdentifier = aMessagePage.TopicNumber(); + iDCS = aMessagePage.DCS(); + iPageParameter = aMessagePage.PageParameter(); + + iLanguage = aMessagePage.Language(); + + // A buffer for the message contents. + if ( aMessagePage.Message() != NULL ) + { + iMessage = HBufC::NewL( aMessagePage.Contents().Length() ); + iMessage->Des().Copy( aMessagePage.Contents() ); + } + + if ( aMessagePage.Message8() != NULL ) + { + iMessage8 = HBufC8::NewL( aMessagePage.Contents8().Length() ); + TPtr8 messagePtr = iMessage8->Des(); + messagePtr.Copy( aMessagePage.Contents8() ); + } + } + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::NewL +// Two-phased constructor. +// Constructs a new CCbsRecMessage based on TDes8& +// (which is a descriptor) received from EPOC Telephony Server. +// ----------------------------------------------------------------------------- +// +CCbsRecMessage* CCbsRecMessage::NewL( + const TDes8& aMessagePage ) // page received from EPOC Telephony Server + { + CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::NewL() (TDes8 from ETel)"); + + CCbsRecMessage* self = new ( ELeave ) CCbsRecMessage(); + CleanupStack::PushL( self ); + self->ConstructL( aMessagePage ); + CleanupStack::Pop(); + + CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::NewL() (TDes8 from ETel)"); + return self; + } + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::NewL +// Constructs a copy of the message given as parameter. +// ----------------------------------------------------------------------------- +// +CCbsRecMessage* CCbsRecMessage::NewL( + const CCbsMessage& aMessagePage ) + { + CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::NewL() (copy CCbsMessage)"); + + CCbsRecMessage* self = new ( ELeave ) CCbsRecMessage; + CleanupStack::PushL( self ); + self->ConstructL( aMessagePage ); + CleanupStack::Pop(); + + CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::NewL() (copy CCbsMessage)"); + return self; + } + +// Destructor +CCbsRecMessage::~CCbsRecMessage() + { + CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::~CCbsRecMessage()"); + delete iMessage; + delete iMessage8; + CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::~CCbsRecMessage()"); + } + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::ThisPage +// Returns the page number of this page in the message page sequence +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TUint CCbsRecMessage::ThisPage() const + { + return PageParameter() >> 4; + } + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::TotalPages +// Returns the total number of pages in this page's message. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TUint CCbsRecMessage::TotalPages() const + { + return PageParameter() & 0xF; // 1111b + } + + +// ============ PRIVATE FUNCTIONS ========================== + +// ----------------------------------------------------------------------------- +// CCbsRecMessage::MessageType +// Returns the message type of this message. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCbsRecMessage::MessageType() const + { + return KErrNotSupported; + } + +// ================= OTHER EXPORTED FUNCTIONS ============== +// End of File