cbs/CbsServer/ServerSrc/CCbsRecMessage.cpp
changeset 0 ff3b6d0fd310
--- /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