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