cbs/CbsServer/ServerSrc/CCbsRecMessage.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
equal deleted inserted replaced
42:35488577e233 46:2fa1fa551b0b
     1 /*
       
     2 * Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This module contains the implementation of CCbsRecMessage class 
       
    15 *                member functions.
       
    16 *    
       
    17 *                CCbsRecMessage represents a message page generated by CCbsRecEtelMonitor.
       
    18 *                CCbsRecMessage is constructed from a CB message page received from 
       
    19 *                ETel server.   
       
    20 *
       
    21 */
       
    22 
       
    23 
       
    24 
       
    25 // INCLUDE FILES
       
    26 #include "CCbsRecMessage.h"
       
    27 #include "CbsServerPanic.h"
       
    28 #include "CbsLogger.h"
       
    29 
       
    30 // CONSTANTS
       
    31 
       
    32 // ================= MEMBER FUNCTIONS =======================================
       
    33 
       
    34 // -----------------------------------------------------------------------------
       
    35 // CCbsRecMessage::CCbsRecMessage
       
    36 // C++ default constructor can NOT contain any code, that
       
    37 // might leave.
       
    38 // -----------------------------------------------------------------------------
       
    39 //
       
    40 CCbsRecMessage::CCbsRecMessage()
       
    41     {
       
    42     }
       
    43 
       
    44 // -----------------------------------------------------------------------------
       
    45 // CCbsRecMessage::ConstructL
       
    46 // Symbian 2nd phase constructor can leave.
       
    47 // -----------------------------------------------------------------------------
       
    48 //
       
    49 void CCbsRecMessage::ConstructL( 
       
    50     const TDes8& aMessagePage )    // ETel received msg page
       
    51     {
       
    52     CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::ConstructL() (TDes8 from ETel)");
       
    53 
       
    54     // Retrieve values for message header information.
       
    55     iSerialNumber = TUint16( ( aMessagePage[ 0 ] << 8 ) | aMessagePage [ 1 ] );
       
    56     iMessageIdentifier = TUint16( ( aMessagePage[ 2 ] << 8 ) | aMessagePage[ 3 ] );
       
    57     iDCS = aMessagePage[ 4 ];    
       
    58     iPageParameter = aMessagePage[ 5 ];
       
    59 
       
    60     if ( ThisPage() == 0 || TotalPages() == 0 )
       
    61         {
       
    62         iPageParameter = KPageParameterSingle;
       
    63         }
       
    64 
       
    65     CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iSerialNumber: %d", iSerialNumber );
       
    66     CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iMessageIdentifier: %d", iMessageIdentifier );
       
    67     CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iDCS: %d", iDCS );
       
    68     CBSLOGSTRING2("CBSSERVER: CCbsRecMessage::ConstructL(): iPageParameter: %d", iPageParameter );
       
    69 
       
    70     // 16-bit representation not prepared.
       
    71     iMessage = NULL;
       
    72 
       
    73     // A buffer for the message contents.
       
    74     iMessage8 = HBufC8::NewL( RMobileBroadcastMessaging::KGsmBroadcastDataSize );
       
    75     TPtr8 messagePtr = iMessage8->Des();
       
    76 	TPtrC8 sourceMessagePtr;
       
    77 
       
    78 	if ( ThisPage() == 1 && IsLivecastMessage () ) 
       
    79 		{
       
    80 		sourceMessagePtr.Set( aMessagePage.Right( aMessagePage.Length() ) );
       
    81 		}
       
    82 	else
       
    83 		{
       
    84 		sourceMessagePtr.Set( aMessagePage.Right( aMessagePage.Length() - KHeaderLength ) );
       
    85 		}
       
    86 
       
    87     // Copy the TCbs page contents into this buffer.
       
    88     messagePtr.Copy( sourceMessagePtr );
       
    89 
       
    90     // Indicate that we have no network info available
       
    91     iNetworkInfo.iCountryCode = KRecMessageNoNetworkInfo;
       
    92 
       
    93     // Set network mode
       
    94     iNetworkMode = ECbsNetworkGsm;
       
    95 
       
    96     CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::ConstructL() (TDes8 from ETel)");
       
    97     }
       
    98     
       
    99 // -----------------------------------------------------------------------------
       
   100 // CCbsRecMessage::ConstructL
       
   101 // Symbian 2nd phase copyconstructor can leave.
       
   102 // -----------------------------------------------------------------------------
       
   103 //
       
   104 void CCbsRecMessage::ConstructL( 
       
   105     const CCbsMessage& aMessagePage )
       
   106     {
       
   107     iSerialNumber = aMessagePage.Key();
       
   108     iMessageIdentifier = aMessagePage.TopicNumber();
       
   109     iDCS = aMessagePage.DCS();
       
   110     iPageParameter = aMessagePage.PageParameter();
       
   111 
       
   112     iLanguage = aMessagePage.Language();
       
   113 
       
   114     // A buffer for the message contents.
       
   115     if ( aMessagePage.Message() != NULL )
       
   116         {
       
   117         iMessage = HBufC::NewL( aMessagePage.Contents().Length() );
       
   118         iMessage->Des().Copy( aMessagePage.Contents() );
       
   119         }
       
   120 
       
   121     if ( aMessagePage.Message8() != NULL )
       
   122         {
       
   123         iMessage8 = HBufC8::NewL( aMessagePage.Contents8().Length() );
       
   124         TPtr8 messagePtr = iMessage8->Des();
       
   125         messagePtr.Copy( aMessagePage.Contents8() );
       
   126         }
       
   127     }
       
   128     
       
   129 // -----------------------------------------------------------------------------
       
   130 // CCbsRecMessage::NewL
       
   131 // Two-phased constructor.
       
   132 // Constructs a new CCbsRecMessage based on TDes8&
       
   133 // (which is a descriptor) received from EPOC Telephony Server.
       
   134 // -----------------------------------------------------------------------------
       
   135 //
       
   136 CCbsRecMessage* CCbsRecMessage::NewL( 
       
   137     const TDes8& aMessagePage ) // page received from EPOC Telephony Server 
       
   138     {
       
   139     CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::NewL() (TDes8 from ETel)");
       
   140 
       
   141     CCbsRecMessage* self = new ( ELeave ) CCbsRecMessage();
       
   142     CleanupStack::PushL( self );
       
   143     self->ConstructL( aMessagePage );
       
   144     CleanupStack::Pop();
       
   145 
       
   146     CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::NewL() (TDes8 from ETel)");
       
   147     return self;
       
   148     } 
       
   149 
       
   150 // -----------------------------------------------------------------------------
       
   151 // CCbsRecMessage::NewL
       
   152 // Constructs a copy of the message given as parameter.
       
   153 // -----------------------------------------------------------------------------
       
   154 //
       
   155 CCbsRecMessage* CCbsRecMessage::NewL( 
       
   156     const CCbsMessage& aMessagePage )
       
   157     {
       
   158     CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::NewL() (copy CCbsMessage)");
       
   159 
       
   160     CCbsRecMessage* self = new ( ELeave ) CCbsRecMessage;
       
   161     CleanupStack::PushL( self );
       
   162     self->ConstructL( aMessagePage );
       
   163     CleanupStack::Pop();
       
   164     
       
   165     CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::NewL() (copy CCbsMessage)");
       
   166     return self;
       
   167     }
       
   168     
       
   169 // Destructor
       
   170 CCbsRecMessage::~CCbsRecMessage()
       
   171     {
       
   172     CBSLOGSTRING("CBSSERVER: >>> CCbsRecMessage::~CCbsRecMessage()");
       
   173     delete iMessage;
       
   174     delete iMessage8;
       
   175     CBSLOGSTRING("CBSSERVER: <<< CCbsRecMessage::~CCbsRecMessage()");
       
   176     }
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 // CCbsRecMessage::ThisPage
       
   180 // Returns the page number of this page in the message page sequence
       
   181 // (other items were commented in a header).
       
   182 // -----------------------------------------------------------------------------
       
   183 // 
       
   184 TUint CCbsRecMessage::ThisPage() const
       
   185     {
       
   186     return PageParameter() >> 4;
       
   187     }
       
   188 
       
   189 // -----------------------------------------------------------------------------
       
   190 // CCbsRecMessage::TotalPages
       
   191 // Returns the total number of pages in this page's message.
       
   192 // (other items were commented in a header).
       
   193 // -----------------------------------------------------------------------------
       
   194 // 
       
   195 TUint CCbsRecMessage::TotalPages() const
       
   196     {
       
   197     return PageParameter() & 0xF;    // 1111b
       
   198     }
       
   199 
       
   200 
       
   201 // ============ PRIVATE FUNCTIONS ==========================
       
   202 
       
   203 // -----------------------------------------------------------------------------
       
   204 // CCbsRecMessage::MessageType
       
   205 // Returns the message type of this message.
       
   206 // (other items were commented in a header).
       
   207 // -----------------------------------------------------------------------------
       
   208 //
       
   209 TInt CCbsRecMessage::MessageType() const
       
   210     {
       
   211     return KErrNotSupported;
       
   212     }
       
   213 
       
   214 // ================= OTHER EXPORTED FUNCTIONS ==============
       
   215 //  End of File