--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cbs/CbsServer/ServerSrc/CCbsRecWcdmaMessage.cpp Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,250 @@
+/*
+* 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: This module contains the implementation of CCbsRecWcdmaMessage
+* class member functions.
+*
+* CCbsRecWcdmaMessage represents a WCDMA message page generated
+* by CCbsRecEtelMonitor. CCbsRecWcdmaMessage is constructed from a
+* CB message page received from ETel server.
+*
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <e32svr.h>
+#include "CCbsRecWcdmaMessage.h"
+#include "CbsServerPanic.h"
+#include "CbsLogger.h"
+
+// The empty message length. 1 octet is for page parameter
+const TInt KCbsRecWcdmaMessageMinLength = 1;
+// The maximum message length
+const TInt KCbsRecWcdmaMessageMaxLength = 82;
+// The value that use for parse the page parameter octet.
+const TInt KCbsRecWcdmaPageOfNumberMaskForLow4 = 0x000f;
+
+
+// ================= MEMBER FUNCTIONS =======================================
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::CCbsRecWcdmaMessage
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCbsRecWcdmaMessage::CCbsRecWcdmaMessage(
+ const RMobileBroadcastMessaging::TMobileBroadcastAttributesV2& aAttributes )
+ : iWcdmaAttributes( aAttributes )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::CCbsRecWcdmaMessage
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCbsRecWcdmaMessage::CCbsRecWcdmaMessage()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCbsRecWcdmaMessage::ConstructL(
+ const TDes8& aMessagePage, // ETel received msg page
+ const RMobileBroadcastMessaging::TMobileBroadcastAttributesV2& aAttributes )
+ {
+ // Message attributes
+ iTotalNumberOfPages =
+ ( aAttributes.iNumberOfPages & KCbsRecWcdmaPageOfNumberMaskForLow4 ) ?
+ ( aAttributes.iNumberOfPages & KCbsRecWcdmaPageOfNumberMaskForLow4 ) : 1;
+
+ iMessageType = aAttributes.iMessageType;
+ iMessageIdentifier = aAttributes.iMessageId;
+ iSerialNumber = aAttributes.iSerialNum;
+ iDCS = aAttributes.iDCS;
+
+ // 16-bit representation not prepared.
+ iMessage = NULL;
+ // A buffer for the message contents.
+ iMessage8 = HBufC8::NewL( RMobileBroadcastMessaging::KWCdmaBroadcastPageSize );
+ TPtr8 messagePtr = iMessage8->Des();
+ messagePtr.Trim();
+
+ TPtrC8 sourceMessagePtr;
+ TInt msgLength = aMessagePage.Length();
+ CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::\
+ ConstructL(): msgLength: %d", msgLength );
+
+ // Message from ETel for 3G has no header and CTSY will append the page
+ // parameter to the last of message. So the non-empty message's length
+ // must more than 1 octet. The max length for one message page must
+ // less than 82 octets. Additional octets will be omitted.
+ if ( msgLength > KCbsRecWcdmaMessageMinLength )
+ {
+ // Number of this page. Taken form the last byte of the message.
+ // Max 15, therefore masked with 0xF
+ iPageParameter =
+ ( aMessagePage[ msgLength - KCbsRecWcdmaMessageMinLength ]
+ & KCbsRecWcdmaPageOfNumberMaskForLow4 ) ?
+ ( aMessagePage[ msgLength - KCbsRecWcdmaMessageMinLength ]
+ & KCbsRecWcdmaPageOfNumberMaskForLow4 ) : 1;
+
+ sourceMessagePtr.Set( aMessagePage.Left( msgLength -
+ KCbsRecWcdmaMessageMinLength) );
+
+ if ( KCbsRecWcdmaMessageMaxLength < sourceMessagePtr.Length() )
+ {
+ sourceMessagePtr.Set( aMessagePage.Left(
+ KCbsRecWcdmaMessageMaxLength ) );
+ }
+ }
+
+ // 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 = ECbsNetworkWcdma;
+
+ CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
+ iTotalNumberOfPages: %d", iTotalNumberOfPages );
+ CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
+ iSerialNumber: %d", iSerialNumber );
+ CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
+ iMessageIdentifier: %d", iMessageIdentifier );
+ CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
+ iDCS: %d", iDCS );
+ CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
+ iPageParameter: %d", iPageParameter );
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCbsRecWcdmaMessage::ConstructL( const CCbsMessage& aMessage )
+ {
+ // Message attributes
+ iTotalNumberOfPages = aMessage.TotalPages();
+ iMessageType = (TUint8) aMessage.MessageType();
+ iMessageIdentifier = aMessage.TopicNumber();
+ iSerialNumber = aMessage.Key();
+ iDCS = aMessage.DCS();
+ // Number of this page, extracted from last octet of the message data
+ iPageParameter = aMessage.PageParameter();
+
+ iLanguage = aMessage.Language();
+
+ // A buffer for the message contents.
+ if ( aMessage.Message() )
+ {
+ iMessage = HBufC::NewL( aMessage.Contents().Length() );
+ iMessage->Des().Copy( aMessage.Contents() );
+ }
+
+ if ( aMessage.Message8() )
+ {
+ iMessage8 = HBufC8::NewL( aMessage.Contents8().Length() );
+ TPtr8 messagePtr = iMessage8->Des();
+ messagePtr.Copy( aMessage.Contents8() );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::NewL
+// Two-phased constructor.
+// Constructs a new CCbsRecWcdmaMessage based on TDes8& and message attributes
+// (which is a descriptor) received from EPOC Telephony Server.
+// -----------------------------------------------------------------------------
+//
+CCbsRecWcdmaMessage* CCbsRecWcdmaMessage::NewL(
+ const TDes8& aMessagePage, // page received from EPOC Telephony Server
+ const RMobileBroadcastMessaging::TMobileBroadcastAttributesV2& aAttributes )
+ {
+ CCbsRecWcdmaMessage* self = new ( ELeave ) CCbsRecWcdmaMessage( aAttributes );
+ CleanupStack::PushL( self );
+ self->ConstructL( aMessagePage, aAttributes );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::NewL
+// Two-phased constructor.
+// Constructs a new CCbsRecWcdmaMessage based on an existing message.
+// -----------------------------------------------------------------------------
+//
+CCbsRecWcdmaMessage* CCbsRecWcdmaMessage::NewL( const CCbsMessage& aMessage )
+ {
+ CCbsRecWcdmaMessage* self = new ( ELeave ) CCbsRecWcdmaMessage();
+ CleanupStack::PushL( self );
+ self->ConstructL( aMessage );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// Destructor
+CCbsRecWcdmaMessage::~CCbsRecWcdmaMessage()
+ {
+ CBSLOGSTRING("CBSSERVER: >>> CCbsRecWcdmaMessage::~CCbsRecWcdmaMessage()");
+ delete iMessage;
+ delete iMessage8;
+ CBSLOGSTRING("CBSSERVER: <<< CCbsRecWcdmaMessage::~CCbsRecWcdmaMessage()");
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::ThisPage
+// Returns the page number of this page in the message page sequence
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TUint CCbsRecWcdmaMessage::ThisPage() const
+ {
+ return PageParameter();
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::TotalPages
+// Returns the total number of pages in this page's message.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TUint CCbsRecWcdmaMessage::TotalPages() const
+ {
+ return iTotalNumberOfPages;
+ }
+
+// -----------------------------------------------------------------------------
+// CCbsRecWcdmaMessage::MessageType
+// Returns the message type of this message.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCbsRecWcdmaMessage::MessageType() const
+ {
+ return iMessageType;
+ }
+
+// End of File