cbs/cbsserver/ServerSrc/CCbsRecWcdmaMessage.cpp
author hgs
Tue, 10 Aug 2010 13:19:41 +0300
changeset 38 bc103bfb69cf
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201031_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  This module contains the implementation of CCbsRecWcdmaMessage 
hgs
parents:
diff changeset
    15
*                class member functions.
hgs
parents:
diff changeset
    16
*    
hgs
parents:
diff changeset
    17
*                CCbsRecWcdmaMessage represents a WCDMA message page generated 
hgs
parents:
diff changeset
    18
*                by CCbsRecEtelMonitor. CCbsRecWcdmaMessage is constructed from a
hgs
parents:
diff changeset
    19
*                CB message page received from ETel server.   
hgs
parents:
diff changeset
    20
*
hgs
parents:
diff changeset
    21
*
hgs
parents:
diff changeset
    22
*/
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
// INCLUDE FILES
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
#include <e32svr.h>
hgs
parents:
diff changeset
    29
#include "CCbsRecWcdmaMessage.h"
hgs
parents:
diff changeset
    30
#include "CbsServerPanic.h"
hgs
parents:
diff changeset
    31
#include "CbsLogger.h"
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// The empty message length. 1 octet is for page parameter 
hgs
parents:
diff changeset
    34
const TInt KCbsRecWcdmaMessageMinLength = 1;
hgs
parents:
diff changeset
    35
// The maximum message length
hgs
parents:
diff changeset
    36
const TInt KCbsRecWcdmaMessageMaxLength = 82;
hgs
parents:
diff changeset
    37
// The value that use for parse the page parameter octet.
hgs
parents:
diff changeset
    38
const TInt KCbsRecWcdmaPageOfNumberMaskForLow4 = 0x000f;
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// ================= MEMBER FUNCTIONS =======================================
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    44
// CCbsRecWcdmaMessage::CCbsRecWcdmaMessage
hgs
parents:
diff changeset
    45
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    46
// might leave.
hgs
parents:
diff changeset
    47
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
//
hgs
parents:
diff changeset
    49
CCbsRecWcdmaMessage::CCbsRecWcdmaMessage( 
hgs
parents:
diff changeset
    50
    const RMobileBroadcastMessaging::TMobileBroadcastAttributesV2& aAttributes )    
hgs
parents:
diff changeset
    51
    : iWcdmaAttributes( aAttributes )
hgs
parents:
diff changeset
    52
    {
hgs
parents:
diff changeset
    53
    }
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
// CCbsRecWcdmaMessage::CCbsRecWcdmaMessage
hgs
parents:
diff changeset
    57
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    58
// might leave.
hgs
parents:
diff changeset
    59
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    60
//
hgs
parents:
diff changeset
    61
CCbsRecWcdmaMessage::CCbsRecWcdmaMessage()
hgs
parents:
diff changeset
    62
    {
hgs
parents:
diff changeset
    63
    }
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    66
// CCbsRecWcdmaMessage::ConstructL
hgs
parents:
diff changeset
    67
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    68
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    69
//
hgs
parents:
diff changeset
    70
void CCbsRecWcdmaMessage::ConstructL( 
hgs
parents:
diff changeset
    71
    const TDes8& aMessagePage,    // ETel received msg page
hgs
parents:
diff changeset
    72
    const RMobileBroadcastMessaging::TMobileBroadcastAttributesV2& aAttributes )
hgs
parents:
diff changeset
    73
    {
hgs
parents:
diff changeset
    74
    // Message attributes
hgs
parents:
diff changeset
    75
    iTotalNumberOfPages = 
hgs
parents:
diff changeset
    76
     ( aAttributes.iNumberOfPages & KCbsRecWcdmaPageOfNumberMaskForLow4 ) ?
hgs
parents:
diff changeset
    77
     ( aAttributes.iNumberOfPages & KCbsRecWcdmaPageOfNumberMaskForLow4 ) : 1;
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
    iMessageType = aAttributes.iMessageType;
hgs
parents:
diff changeset
    80
    iMessageIdentifier = aAttributes.iMessageId;
hgs
parents:
diff changeset
    81
    iSerialNumber = aAttributes.iSerialNum;
hgs
parents:
diff changeset
    82
    iDCS = aAttributes.iDCS;
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    // 16-bit representation not prepared.
hgs
parents:
diff changeset
    85
    iMessage = NULL;
hgs
parents:
diff changeset
    86
    // A buffer for the message contents.
hgs
parents:
diff changeset
    87
    iMessage8 = HBufC8::NewL( RMobileBroadcastMessaging::KWCdmaBroadcastPageSize );    
hgs
parents:
diff changeset
    88
    TPtr8 messagePtr = iMessage8->Des();
hgs
parents:
diff changeset
    89
    messagePtr.Trim();
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
    TPtrC8 sourceMessagePtr;
hgs
parents:
diff changeset
    92
    TInt msgLength = aMessagePage.Length();
hgs
parents:
diff changeset
    93
    CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::\
hgs
parents:
diff changeset
    94
                   ConstructL(): msgLength: %d", msgLength );
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    // Message from ETel for 3G has no header and CTSY will append the page 
hgs
parents:
diff changeset
    97
    // parameter to the last of message. So the non-empty message's length
hgs
parents:
diff changeset
    98
    // must more than 1 octet. The max length for one message page must
hgs
parents:
diff changeset
    99
    // less than 82 octets. Additional octets will be omitted.
hgs
parents:
diff changeset
   100
    if ( msgLength > KCbsRecWcdmaMessageMinLength )
hgs
parents:
diff changeset
   101
        {
hgs
parents:
diff changeset
   102
        // Number of this page. Taken form the last byte of the message. 
hgs
parents:
diff changeset
   103
        // Max 15, therefore masked with 0xF
hgs
parents:
diff changeset
   104
        iPageParameter = 
hgs
parents:
diff changeset
   105
            ( aMessagePage[ msgLength - KCbsRecWcdmaMessageMinLength ] 
hgs
parents:
diff changeset
   106
            & KCbsRecWcdmaPageOfNumberMaskForLow4 ) ?
hgs
parents:
diff changeset
   107
            ( aMessagePage[ msgLength - KCbsRecWcdmaMessageMinLength ] 
hgs
parents:
diff changeset
   108
              & KCbsRecWcdmaPageOfNumberMaskForLow4 ) : 1;
hgs
parents:
diff changeset
   109
        
hgs
parents:
diff changeset
   110
        sourceMessagePtr.Set( aMessagePage.Left( msgLength - 
hgs
parents:
diff changeset
   111
                    KCbsRecWcdmaMessageMinLength) );
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
        if ( KCbsRecWcdmaMessageMaxLength < sourceMessagePtr.Length() )
hgs
parents:
diff changeset
   114
            {
hgs
parents:
diff changeset
   115
            sourceMessagePtr.Set( aMessagePage.Left( 
hgs
parents:
diff changeset
   116
                        KCbsRecWcdmaMessageMaxLength ) );
hgs
parents:
diff changeset
   117
            }
hgs
parents:
diff changeset
   118
        }
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
    // Copy the TCbs page contents into this buffer.
hgs
parents:
diff changeset
   121
    messagePtr.Copy( sourceMessagePtr );
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    // Indicate that we have no network info available
hgs
parents:
diff changeset
   124
    iNetworkInfo.iCountryCode = KRecMessageNoNetworkInfo;
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
    // Set network mode
hgs
parents:
diff changeset
   127
    iNetworkMode = ECbsNetworkWcdma;
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
hgs
parents:
diff changeset
   130
                   iTotalNumberOfPages: %d", iTotalNumberOfPages );
hgs
parents:
diff changeset
   131
    CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
hgs
parents:
diff changeset
   132
                   iSerialNumber: %d", iSerialNumber );
hgs
parents:
diff changeset
   133
    CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
hgs
parents:
diff changeset
   134
                   iMessageIdentifier: %d", iMessageIdentifier );
hgs
parents:
diff changeset
   135
    CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
hgs
parents:
diff changeset
   136
                   iDCS: %d", iDCS );
hgs
parents:
diff changeset
   137
    CBSLOGSTRING2("CBSSERVER: CCbsRecWcdmaMessage::ConstructL(): \
hgs
parents:
diff changeset
   138
                   iPageParameter: %d", iPageParameter );
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   142
// CCbsRecWcdmaMessage::ConstructL
hgs
parents:
diff changeset
   143
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
   144
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   145
//
hgs
parents:
diff changeset
   146
void CCbsRecWcdmaMessage::ConstructL( const CCbsMessage& aMessage )
hgs
parents:
diff changeset
   147
    {
hgs
parents:
diff changeset
   148
    // Message attributes
hgs
parents:
diff changeset
   149
    iTotalNumberOfPages = aMessage.TotalPages();
hgs
parents:
diff changeset
   150
    iMessageType = (TUint8) aMessage.MessageType();
hgs
parents:
diff changeset
   151
    iMessageIdentifier = aMessage.TopicNumber();
hgs
parents:
diff changeset
   152
    iSerialNumber = aMessage.Key();
hgs
parents:
diff changeset
   153
    iDCS = aMessage.DCS();
hgs
parents:
diff changeset
   154
    // Number of this page, extracted from last octet of the message data
hgs
parents:
diff changeset
   155
    iPageParameter = aMessage.PageParameter();
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
    iLanguage = aMessage.Language();
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
    // A buffer for the message contents.
hgs
parents:
diff changeset
   160
    if ( aMessage.Message() )
hgs
parents:
diff changeset
   161
        {
hgs
parents:
diff changeset
   162
        iMessage = HBufC::NewL( aMessage.Contents().Length() );
hgs
parents:
diff changeset
   163
        iMessage->Des().Copy( aMessage.Contents() );
hgs
parents:
diff changeset
   164
        }
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
    if ( aMessage.Message8() )
hgs
parents:
diff changeset
   167
        {
hgs
parents:
diff changeset
   168
        iMessage8 = HBufC8::NewL( aMessage.Contents8().Length() );
hgs
parents:
diff changeset
   169
        TPtr8 messagePtr = iMessage8->Des();
hgs
parents:
diff changeset
   170
        messagePtr.Copy( aMessage.Contents8() );
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
    }
hgs
parents:
diff changeset
   173
   
hgs
parents:
diff changeset
   174
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   175
// CCbsRecWcdmaMessage::NewL
hgs
parents:
diff changeset
   176
// Two-phased constructor.
hgs
parents:
diff changeset
   177
// Constructs a new CCbsRecWcdmaMessage based on TDes8& and message attributes
hgs
parents:
diff changeset
   178
// (which is a descriptor) received from EPOC Telephony Server.
hgs
parents:
diff changeset
   179
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   180
//
hgs
parents:
diff changeset
   181
CCbsRecWcdmaMessage* CCbsRecWcdmaMessage::NewL( 
hgs
parents:
diff changeset
   182
    const TDes8& aMessagePage,  // page received from EPOC Telephony Server 
hgs
parents:
diff changeset
   183
    const RMobileBroadcastMessaging::TMobileBroadcastAttributesV2& aAttributes ) 
hgs
parents:
diff changeset
   184
    {
hgs
parents:
diff changeset
   185
    CCbsRecWcdmaMessage* self = new ( ELeave ) CCbsRecWcdmaMessage( aAttributes );
hgs
parents:
diff changeset
   186
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   187
    self->ConstructL( aMessagePage, aAttributes );
hgs
parents:
diff changeset
   188
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   189
    return self;
hgs
parents:
diff changeset
   190
    } 
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   193
// CCbsRecWcdmaMessage::NewL
hgs
parents:
diff changeset
   194
// Two-phased constructor.
hgs
parents:
diff changeset
   195
// Constructs a new CCbsRecWcdmaMessage based on an existing message.
hgs
parents:
diff changeset
   196
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   197
//
hgs
parents:
diff changeset
   198
CCbsRecWcdmaMessage* CCbsRecWcdmaMessage::NewL( const CCbsMessage& aMessage )
hgs
parents:
diff changeset
   199
    {
hgs
parents:
diff changeset
   200
    CCbsRecWcdmaMessage* self = new ( ELeave ) CCbsRecWcdmaMessage();
hgs
parents:
diff changeset
   201
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   202
    self->ConstructL( aMessage );
hgs
parents:
diff changeset
   203
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   204
    return self;
hgs
parents:
diff changeset
   205
    }
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
   
hgs
parents:
diff changeset
   208
// Destructor
hgs
parents:
diff changeset
   209
CCbsRecWcdmaMessage::~CCbsRecWcdmaMessage()
hgs
parents:
diff changeset
   210
    {
hgs
parents:
diff changeset
   211
    CBSLOGSTRING("CBSSERVER: >>> CCbsRecWcdmaMessage::~CCbsRecWcdmaMessage()");
hgs
parents:
diff changeset
   212
    delete iMessage;
hgs
parents:
diff changeset
   213
    delete iMessage8;
hgs
parents:
diff changeset
   214
    CBSLOGSTRING("CBSSERVER: <<< CCbsRecWcdmaMessage::~CCbsRecWcdmaMessage()");
hgs
parents:
diff changeset
   215
    }
hgs
parents:
diff changeset
   216
    
hgs
parents:
diff changeset
   217
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   218
// CCbsRecWcdmaMessage::ThisPage
hgs
parents:
diff changeset
   219
// Returns the page number of this page in the message page sequence
hgs
parents:
diff changeset
   220
// (other items were commented in a header).
hgs
parents:
diff changeset
   221
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   222
// 
hgs
parents:
diff changeset
   223
TUint CCbsRecWcdmaMessage::ThisPage() const
hgs
parents:
diff changeset
   224
    {
hgs
parents:
diff changeset
   225
    return PageParameter();    
hgs
parents:
diff changeset
   226
    }
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   229
// CCbsRecWcdmaMessage::TotalPages
hgs
parents:
diff changeset
   230
// Returns the total number of pages in this page's message.
hgs
parents:
diff changeset
   231
// (other items were commented in a header).
hgs
parents:
diff changeset
   232
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   233
// 
hgs
parents:
diff changeset
   234
TUint CCbsRecWcdmaMessage::TotalPages() const
hgs
parents:
diff changeset
   235
    {
hgs
parents:
diff changeset
   236
    return iTotalNumberOfPages;
hgs
parents:
diff changeset
   237
    }
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   240
// CCbsRecWcdmaMessage::MessageType
hgs
parents:
diff changeset
   241
// Returns the message type of this message.
hgs
parents:
diff changeset
   242
// (other items were commented in a header).
hgs
parents:
diff changeset
   243
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   244
//
hgs
parents:
diff changeset
   245
TInt CCbsRecWcdmaMessage::MessageType() const
hgs
parents:
diff changeset
   246
    {
hgs
parents:
diff changeset
   247
    return iMessageType;
hgs
parents:
diff changeset
   248
    }
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
//  End of File