cbs/cbsserver/ServerSrc/Ccbsrecetelmonitor.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) 2003 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 CCbsRecEtelMonitor class 
hgs
parents:
diff changeset
    15
*                member functions.    
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// INCLUDE FILES
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include <e32math.h>
hgs
parents:
diff changeset
    24
#include "CbsServerConstants.h"
hgs
parents:
diff changeset
    25
#include "CCbsRecEtel.h"
hgs
parents:
diff changeset
    26
#include "CCbsRecEtelMonitor.h"
hgs
parents:
diff changeset
    27
#include "CCbsRecMessage.h"
hgs
parents:
diff changeset
    28
#include "CCbsRecWcdmaMessage.h"
hgs
parents:
diff changeset
    29
#include "CCbsMessageFactory.h"
hgs
parents:
diff changeset
    30
#include "CbsServerPanic.h"
hgs
parents:
diff changeset
    31
#include "CCbsLivecastHandler.h"
hgs
parents:
diff changeset
    32
#include <featmgr.h>
hgs
parents:
diff changeset
    33
#include <bldvariant.hrh> // for feature definitions
hgs
parents:
diff changeset
    34
#include "CbsLogger.h"
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
// CCbsRecEtelMonitor::CCbsRecEtelMonitor
hgs
parents:
diff changeset
    40
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    41
// might leave.
hgs
parents:
diff changeset
    42
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    43
//
hgs
parents:
diff changeset
    44
CCbsRecEtelMonitor::CCbsRecEtelMonitor( 
hgs
parents:
diff changeset
    45
    CCbsRecEtel& aEtel, 
hgs
parents:
diff changeset
    46
    MCbsEtelMessaging& aMessaging,
hgs
parents:
diff changeset
    47
    CCbsMessageFactory& aFactory,
hgs
parents:
diff changeset
    48
    CCbsLivecastHandler& aLivecastHandler )
hgs
parents:
diff changeset
    49
    : CActive( EPriorityStandard ),
hgs
parents:
diff changeset
    50
    iEtel( aEtel ), 
hgs
parents:
diff changeset
    51
    iSmsMessaging( aMessaging ),        
hgs
parents:
diff changeset
    52
    iMsgAttributesPckg( iAttributes ),   // Message attributes
hgs
parents:
diff changeset
    53
    iFactory( aFactory ),
hgs
parents:
diff changeset
    54
    iLivecastHandler( aLivecastHandler ),
hgs
parents:
diff changeset
    55
    iNewstickerSupported( EFalse )
hgs
parents:
diff changeset
    56
    {
hgs
parents:
diff changeset
    57
    }
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    60
// CCbsRecEtelMonitor::ConstructL
hgs
parents:
diff changeset
    61
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    62
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    63
//
hgs
parents:
diff changeset
    64
void CCbsRecEtelMonitor::ConstructL()
hgs
parents:
diff changeset
    65
    {
hgs
parents:
diff changeset
    66
    CBSLOGSTRING("CBSSERVER: >>> CCbsRecEtelMonitor::ConstructL()");
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
    CActiveScheduler::Add( this );    
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    // Sets up TLS, must be done before FeatureManager is used.
hgs
parents:
diff changeset
    71
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
    // Check if Newsticker feature is supported
hgs
parents:
diff changeset
    74
    if ( FeatureManager::FeatureSupported( KFeatureIdNewsticker ) )
hgs
parents:
diff changeset
    75
        {
hgs
parents:
diff changeset
    76
        iNewstickerSupported = ETrue;
hgs
parents:
diff changeset
    77
        CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::ConstructL(): Newsticker supported.");
hgs
parents:
diff changeset
    78
        }
hgs
parents:
diff changeset
    79
    else
hgs
parents:
diff changeset
    80
        {
hgs
parents:
diff changeset
    81
        CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::ConstructL(): Newsticker NOT supported.");
hgs
parents:
diff changeset
    82
        }
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    // Frees the TLS! Must be done after FeatureManager is used.
hgs
parents:
diff changeset
    85
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
    86
    
hgs
parents:
diff changeset
    87
    CBSLOGSTRING("CBSSERVER: <<< CCbsRecEtelMonitor::ConstructL()");
hgs
parents:
diff changeset
    88
    }
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    91
// CCbsRecEtelMonitor::NewL
hgs
parents:
diff changeset
    92
// Two-phased constructor.
hgs
parents:
diff changeset
    93
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    94
//
hgs
parents:
diff changeset
    95
CCbsRecEtelMonitor* CCbsRecEtelMonitor::NewL( 
hgs
parents:
diff changeset
    96
    CCbsRecEtel& aEtel, 
hgs
parents:
diff changeset
    97
    MCbsEtelMessaging& aSmsMessaging,
hgs
parents:
diff changeset
    98
    CCbsMessageFactory& aFactory,
hgs
parents:
diff changeset
    99
    CCbsLivecastHandler& aLivecastHandler )
hgs
parents:
diff changeset
   100
    {
hgs
parents:
diff changeset
   101
    CBSLOGSTRING("CBSSERVER: >>> CCbsRecEtelMonitor::NewL()");
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    CCbsRecEtelMonitor* self = 
hgs
parents:
diff changeset
   104
        new ( ELeave ) CCbsRecEtelMonitor( aEtel, aSmsMessaging, aFactory, aLivecastHandler );
hgs
parents:
diff changeset
   105
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   106
    self->ConstructL();
hgs
parents:
diff changeset
   107
    CleanupStack::Pop();
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
    CBSLOGSTRING("CBSSERVER: <<< CCbsRecEtelMonitor::NewL()");
hgs
parents:
diff changeset
   110
    return self;
hgs
parents:
diff changeset
   111
    }
hgs
parents:
diff changeset
   112
    
hgs
parents:
diff changeset
   113
// Destructor
hgs
parents:
diff changeset
   114
CCbsRecEtelMonitor::~CCbsRecEtelMonitor()
hgs
parents:
diff changeset
   115
    {
hgs
parents:
diff changeset
   116
    CBSLOGSTRING("CBSSERVER: >>> CCbsRecEtelMonitor::~CCbsRecEtelMonitor()");
hgs
parents:
diff changeset
   117
    Cancel();
hgs
parents:
diff changeset
   118
    CBSLOGSTRING("CBSSERVER: <<< CCbsRecEtelMonitor::~CCbsRecEtelMonitor()");
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   122
// CCbsRecEtelMonitor::IssueRequest
hgs
parents:
diff changeset
   123
// Requests EPOC Telephony Server to forward next received CB message to this object.
hgs
parents:
diff changeset
   124
// (other items were commented in a header).
hgs
parents:
diff changeset
   125
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   126
//
hgs
parents:
diff changeset
   127
void CCbsRecEtelMonitor::IssueRequest() 
hgs
parents:
diff changeset
   128
    {
hgs
parents:
diff changeset
   129
    CBSLOGSTRING("CBSSERVER: >>> CCbsRecEtelMonitor::IssueRequest()");
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
    if ( !IsActive() )
hgs
parents:
diff changeset
   132
        {
hgs
parents:
diff changeset
   133
        iMsgData.FillZ();
hgs
parents:
diff changeset
   134
        iSmsMessaging.ReceiveMessage( iStatus, iMsgData, iMsgAttributesPckg );
hgs
parents:
diff changeset
   135
        SetActive(); 
hgs
parents:
diff changeset
   136
        }
hgs
parents:
diff changeset
   137
    CBSLOGSTRING("CBSSERVER: <<< CCbsRecEtelMonitor::IssueRequest()");
hgs
parents:
diff changeset
   138
    }
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   141
// CCbsRecEtelMonitor::RunL
hgs
parents:
diff changeset
   142
// Becomes active when EPOC Telephony Server has copied a CB message to 
hgs
parents:
diff changeset
   143
// iMsgData. The message is then given to CCbsRecEtel for
hgs
parents:
diff changeset
   144
// processing.
hgs
parents:
diff changeset
   145
// Finally this function re-issues the ReceiveMessage request.
hgs
parents:
diff changeset
   146
// (other items were commented in a header).
hgs
parents:
diff changeset
   147
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   148
//
hgs
parents:
diff changeset
   149
void CCbsRecEtelMonitor::RunL()
hgs
parents:
diff changeset
   150
    {
hgs
parents:
diff changeset
   151
    CBSLOGSTRING2("CBSSERVER: >>> CCbsRecEtelMonitor::RunL(), iStatus: %d", iStatus.Int() );
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
    if ( iStatus == KErrNone )
hgs
parents:
diff changeset
   154
        {
hgs
parents:
diff changeset
   155
        CCbsMessage* currentMessage = NULL;
hgs
parents:
diff changeset
   156
        TCbsMessageType msgType( ECbsMessageTypeUnspecified );
hgs
parents:
diff changeset
   157
		
hgs
parents:
diff changeset
   158
        CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::RunL(): Calling CreateMessageL()..." );
hgs
parents:
diff changeset
   159
        currentMessage = iFactory.CreateMessageL( iMsgData, iAttributes, msgType );        
hgs
parents:
diff changeset
   160
        CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::RunL(): CreateMessageL() called OK." );
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
        if ( currentMessage )
hgs
parents:
diff changeset
   163
            {            
hgs
parents:
diff changeset
   164
            if ( msgType == ECbsMessageLivecast )
hgs
parents:
diff changeset
   165
                {				
hgs
parents:
diff changeset
   166
                CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::RunL(): LC message" );
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
				if ( iNewstickerSupported )
hgs
parents:
diff changeset
   169
					{
hgs
parents:
diff changeset
   170
	                // Ownership of currentMessage transferred to iLivecastHandler
hgs
parents:
diff changeset
   171
	                CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::RunL(): Calling HandleLivecastMessageL()..." );
hgs
parents:
diff changeset
   172
	                TInt lcResult( KErrNone );
hgs
parents:
diff changeset
   173
	                TRAP( lcResult, iLivecastHandler.HandleLivecastMessageL( currentMessage ) );                
hgs
parents:
diff changeset
   174
	                CBSLOGSTRING2("CBSSERVER: CCbsRecEtelMonitor::RunL(): HandleLivecastMessageL() finished, result: %d", lcResult );
hgs
parents:
diff changeset
   175
					}
hgs
parents:
diff changeset
   176
                else 
hgs
parents:
diff changeset
   177
                	{
hgs
parents:
diff changeset
   178
                	CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::RunL(): NewsSticker is not supported" );
hgs
parents:
diff changeset
   179
                	}
hgs
parents:
diff changeset
   180
                }
hgs
parents:
diff changeset
   181
            else
hgs
parents:
diff changeset
   182
                {				
hgs
parents:
diff changeset
   183
                CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::RunL(): Normal message" );
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
                // Ownership of currentMessage transferred to iEtel
hgs
parents:
diff changeset
   186
                CBSLOGSTRING("CBSSERVER: CCbsRecEtelMonitor::RunL(): Calling HandleMessageReceivedL()..." );
hgs
parents:
diff changeset
   187
                TInt result( KErrNone );
hgs
parents:
diff changeset
   188
                TRAP( result, iEtel.HandleMessageReceivedL( currentMessage ) );                
hgs
parents:
diff changeset
   189
                CBSLOGSTRING2("CBSSERVER: CCbsRecEtelMonitor::RunL(): HandleMessageReceivedL() finished, result: %d", result );
hgs
parents:
diff changeset
   190
                }            
hgs
parents:
diff changeset
   191
            }
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
        // Renew the request
hgs
parents:
diff changeset
   194
        IssueRequest();
hgs
parents:
diff changeset
   195
        }
hgs
parents:
diff changeset
   196
	CBSLOGSTRING("CBSSERVER: <<< CCbsRecEtelMonitor::RunL()");
hgs
parents:
diff changeset
   197
    }
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   200
// CCbsRecEtelMonitor::DoCancel
hgs
parents:
diff changeset
   201
// Cancels an outstanding ReceiveMessage request.  
hgs
parents:
diff changeset
   202
// (other items were commented in a header).
hgs
parents:
diff changeset
   203
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   204
//
hgs
parents:
diff changeset
   205
void CCbsRecEtelMonitor::DoCancel()
hgs
parents:
diff changeset
   206
    {
hgs
parents:
diff changeset
   207
    CBSLOGSTRING("CBSSERVER: >>> CCbsRecEtelMonitor::DoCancel()" );
hgs
parents:
diff changeset
   208
    iSmsMessaging.ReceiveMessageCancel();
hgs
parents:
diff changeset
   209
    CBSLOGSTRING("CBSSERVER: <<< CCbsRecEtelMonitor::DoCancel()" );
hgs
parents:
diff changeset
   210
    }
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
// ========================== OTHER EXPORTED FUNCTIONS =========================
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
//  End of File