phoneengine/loghandling/src/cpelogevent.cpp
changeset 36 2eacb6118286
parent 30 ebdbd102c78a
child 37 ba76fc04e6c2
--- a/phoneengine/loghandling/src/cpelogevent.cpp	Fri May 14 15:51:57 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,692 +0,0 @@
-/*
-* Copyright (c) 2002-2009 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 CPELogEvent class
-*
-*/
-
-
-//  INCLUDE FILES
-#include "cpelogevent.h"
-#include "cpeloginfo.h"
-#include "cpeloghandling.h"
-#include "cpeloghandlingcommand.h"
-#include <talogger.h>
-#include <logcli.h>
-#include <LogsApiConsts.h>
-
-
-// EXTERNAL DATA STRUCTURES
-//None
-
-// EXTERNAL FUNCTION PROTOTYPES  
-//None
-
-// CONSTANTS
-const TInt KPhonebookTypeIdLength = 11;
-
-// Defined in \s60\app\contacts\logsui\EngineIncLogsEngConsts.h as KLogEventALS
-const TLogFlags KPELogEventALS = 0x4;
-
-const TInt KOneChar = 1;
-
-// MACROS
-//None
-
-// LOCAL CONSTANTS AND MACROS
-//None
-
-// MODULE DATA STRUCTURES
-//None
-
-// LOCAL FUNCTION PROTOTYPES
-//None
-
-// FORWARD DECLARATIONS
-//None
-
-
-// ==================== LOCAL FUNCTIONS =====================================
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPELogEvent* CPELogEvent::NewL
-        ( 
-        CPELogHandling& aOwner,  // Owner of the object
-        CPELogHandlingCommand& aLogHandlingCommand
-        )
-    {
-    TEFLOGSTRING(KTAOBJECT, "LOG CPELogEvent::NewL start.");
-    CPELogEvent* self = new ( ELeave ) CPELogEvent( aOwner, aLogHandlingCommand );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    TEFLOGSTRING(KTAOBJECT, "LOG CPELogEvent::NewL complete.");
-    return self;
-    }
-  
-// Destructor
-/*****************************************************
-*    Series 60 Customer / LOGENG
-*    Series 60  LOGENG API
-*****************************************************/
-CPELogEvent::~CPELogEvent
-        (
-        // None
-        )
-    {
-    TEFLOGSTRING( KTAOBJECT, "LOG CPELogEvent::~CPELogEvent()" );
-    delete iEvent;
-    delete iLogInfo;
-    }
-
-
-// ================= MEMBER FUNCTIONS =======================================
-// -----------------------------------------------------------------------------
-// CPELogEvent::CPELogEvent
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CPELogEvent::CPELogEvent
-        ( 
-        CPELogHandling& aOwner,
-        CPELogHandlingCommand& aLogHandlingCommand
-        ) : iOwner( aOwner ),
-            iLogHandlingCommand( aLogHandlingCommand ),
-            iCompleted( EFalse ),
-            iAdded( EFalse ),
-            iSaveLeave( EFalse )
-    {
-    }
-// -----------------------------------------------------------------------------
-// CPELogEvent::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-/*****************************************************
-*    Series 60 Customer / LOGENG
-*    Series 60  LOGENG API
-*****************************************************/
-void CPELogEvent::ConstructL
-        (
-        // None
-        )
-    {
-    iEvent = CLogEvent::NewL();
-    ResetEvent( );
-    iLogInfo = CPELogInfo::NewL();
-    }
-    
-// -----------------------------------------------------------------------------
-// CPELogEvent::Save
-// Saves the event to the log.
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::SaveL()
-    {
-    iSaveLeave = ETrue;
-    // iCopleted flag must be set before the function leave as it is used 
-    // in log subsytem recovery procedure in case of leave.
-    if ( EPEStateIdle == iLogInfo->CallState() || iLogInfo->ForcedCompletion() )
-        {
-        iCompleted = ETrue;
-        }
-        
-    if ( !iAdded )
-        {
-        TEFLOGSTRING2( KTAINT, "LOG CPELogEvent::SaveL() > CPELogHandlingCommand::AddEvent(), callId=%d", iLogInfo->CallId() );  
-        SetPhoneNumberId();
-        SetEventTypeL();
-        SetLogEvent();
-        SetDuration();
-        SetServiceIdL();
-        
-        if ( &iLogInfo->ContactLink() )
-            {
-            SetContactLinkL();
-            }
-        // event under processing will always be of index 0 in the queued array
-        User::LeaveIfError( iLogHandlingCommand.AddEvent( *iEvent ) );
-        }
-    else
-        { 
-        TEFLOGSTRING2( KTAINT, "LOG CPELogEvent::SaveL() > CPELogHandlingCommand::ChangeEvent(), callId=%d", iLogInfo->CallId() );            
-        SetLogEvent();
-        SetDuration();
-        User::LeaveIfError( iLogHandlingCommand.ChangeEvent( *iEvent ) );
-        }
-    // indicates no leave happened in Save function
-    iSaveLeave = EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::UpdateLogInfo
-// Update log database entry.
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::UpdateLogInfoL
-        ( 
-        const CPELogInfo& aLogInfo // Call information
-        ) 
-    {
-    // CPELogHandling generic loginfo must be replicated to this event
-    iLogInfo->CopyL( aLogInfo );
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::ResetLogInfo
-// Reset log info.
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::ResetLogInfo() 
-    {
-    TEFLOGSTRING( KTAINT, "LOG CPELogEvent::ResetLogInfo: start" );  
-    iLogInfo->Reset();
-    TEFLOGSTRING( KTAINT, "LOG CPELogEvent::ResetLogInfo: complete" ); 
-    }
-    
-// -----------------------------------------------------------------------------
-// CPELogEvent::ResetEvent
-// Reset event on the idle state.
-// -----------------------------------------------------------------------------
-//
-/*****************************************************
-*    Series 60 Customer / LOGENG
-*    Series 60  LOGENG API
-*****************************************************/
-void CPELogEvent::ResetEvent()
-    {
-    iAdded = EFalse;
-    iCompleted = EFalse;
-    iSaveLeave = EFalse;
-
-    // CLogEvent -variables
-    iEvent->SetId( KLogNullId );
-    iEvent->SetEventType( KNullUid );
-    iEvent->SetRemoteParty( KNullDesC );
-    iEvent->SetDirection( KNullDesC );
-    iEvent->SetTime( Time::NullTTime() );
-    iEvent->SetDurationType( KLogNullDurationType );
-    iEvent->SetDuration( KLogNullDuration );
-    iEvent->SetStatus( KNullDesC );
-    iEvent->SetSubject( KNullDesC );
-    iEvent->SetNumber( KNullDesC );
-    iEvent->SetContact( KNullContactId );
-    iEvent->SetLink( KLogNullLink );
-    iEvent->SetDescription( KNullDesC );
-    iEvent->ClearFlags( KLogFlagsMask );
-    TRAPD( error, iEvent->SetDataL( KNullDesC8 ) );
-    if ( error != KErrNone )
-        {
-        // SetDataL leave should not cause log subsystem to fail. Just log the error.
-        TEFLOGSTRING2( KTAERROR, "LOG CPELogEvent::Save()>CPELogHandlingCommand::ResetEvent(), error=%d", error );  
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::CallId
-// Get call id of the event.
-// -----------------------------------------------------------------------------
-//
-TInt CPELogEvent::CallId
-        (
-        // None
-        )
-    {
-    return iLogInfo->CallId();
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::IsCompleted
-// Returns flag if the entry has been completed, ie. no further updates are expected
-// -----------------------------------------------------------------------------
-//
-TBool CPELogEvent::IsCompleted
-        (
-        // None
-        )
-    {       
-    return iCompleted;
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::Added
-// iAdded flag is set to ETrue
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::SetAdded
-        (
-        // None
-        )
-    {       
-    iAdded = ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SaveLeave
-// Return value of save leave flag
-// -----------------------------------------------------------------------------
-//
-TBool CPELogEvent::SaveLeave
-        (
-        // None
-        )
-    {       
-    return iSaveLeave;
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SetPhoneNumberId
-// Set event subject.
-// -----------------------------------------------------------------------------
-//
-/*****************************************************
-*    Series 60 Customer / LOGENG
-*    Series 60  LOGENG API
-*****************************************************/
-void CPELogEvent::SetPhoneNumberId()
-    {
-    TBuf<KPhonebookTypeIdLength> subject;
-    subject.Zero();
-
-    switch ( iLogInfo->PhoneNumberId() )
-        {
-        case EPEMobileNumber:
-            subject.AppendNum( EPEUnknownNumber );
-            break;
-        case EPETelephoneNumber:
-            subject.AppendNum( EPEUnknownNumber );
-            break;
-        case EPEPager:
-            subject.AppendNum( EPEUnknownNumber );
-            break;
-        case EPEFaxNumber:
-            subject.AppendNum( EPEUnknownNumber );
-            break; 
-        case EPEAssistantNumber:
-            subject.AppendNum( EPEUnknownNumber);
-            break;
-        case EPECarNumber:
-            subject.AppendNum( EPEUnknownNumber);
-            break;
-        default:
-            subject.AppendNum( EPEUnknownNumber );
-            break;
-        }
-
-    if ( subject.Length() > 0 )
-        {
-        iEvent->SetSubject( subject );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPEGsmLogsEntry::SetEventType
-// Set event type.
-// -----------------------------------------------------------------------------
-//
-/*****************************************************
-*    Series 60 Customer / LOGENG
-*    Series 60  LOGENG API
-*****************************************************/
-void CPELogEvent::SetEventTypeL()
-    {
-    switch ( iLogInfo->EventType() )
-        {
-        case CPELogInfo::EPEVoiceEvent:
-            
-            {
-            iEvent->SetEventType( KLogCallEventTypeUid );
-            }
-            break;
-        case CPELogInfo::EPEVideoCallEvent:
-            {           
-            iEvent->SetEventType( KLogCallEventTypeUid );
-            iEvent->SetDataL( KLogsDataFldTag_VT );
-            TEFLOGSTRING( KTAINT, "LOG CPELogEvent::SetEventTypeL() video" );                
-            }
-            break;
-        case CPELogInfo::EPEEmergecyEvent:
-            {           
-            iEvent->SetEventType( KLogCallEventTypeUid );
-            iEvent->SetDataL( KLogsDataFldTag_Emergency );
-            TEFLOGSTRING( KTAINT, "LOG CPELogEvent::SetEventTypeK() Emergecy" );                
-            }
-            break;
-        case CPELogInfo::EPEVoIPEvent:
-            {
-            iEvent->SetEventType( KLogCallEventTypeUid );
-            iEvent->SetDataL( KLogsDataFldTag_IP );
-            TEFLOGSTRING( KTAINT, "LOG CPELogEvent::SetEventTypeL() VoIP" );                
-            }
-            break;
-        case CPELogInfo::EPEUnknownEvent:
-        default:
-            {
-            iEvent->SetEventType( KLogCallEventTypeUid );
-            }
-            break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SetLogEvent
-// Set the rest of event information.
-// -----------------------------------------------------------------------------
-//
-/*****************************************************
-*    Series 60 Customer / LOGENG
-*    Series 60  LOGENG API
-*****************************************************/
-void CPELogEvent::SetLogEvent()
-    {
-    if( CCCECallParameters::ECCELineTypeAux == iLogInfo->CurrentLine() )
-        {
-        iEvent->SetFlags( KPELogEventALS );             
-        }
-    if ( RMobileCall::EMobileOriginated == iLogInfo->CallDirection() )
-        {     
-        if ( CCCECallParameters::ECCELineTypeAux == iLogInfo->CurrentLine() )
-            {
-            iEvent->SetDirection( iOwner.LogStringOutAlt( ) );
-            }
-        else
-            {
-            iEvent->SetDirection( iOwner.LogStringOut( ) );    
-            }
-        }
-    else if ( RMobileCall::EMobileTerminated == iLogInfo->CallDirection() )
-        {
-        if ( iLogInfo->MissedCall() && EPEStateIdle == iLogInfo->CallState() )
-            {
-            iEvent->SetDirection( iOwner.LogStringMissed( ) );
-            }
-        else
-            //Logging on states Connected and Idle
-            {
-            if ( CCCECallParameters::ECCELineTypeAux == iLogInfo->CurrentLine() )
-                {
-                iEvent->SetDirection( iOwner.LogStringInAlt( ) );
-                }
-            else
-                {
-                iEvent->SetDirection( iOwner.LogStringIn( ) );
-                }
-            }
-        }
-
-    SetRemoteParty( *iEvent, *iLogInfo );
-    iEvent->SetStatus( iOwner.LogStringDelivery( ) );
-    
-    SetRemoteContact( *iEvent, *iLogInfo );
-    
-    if ( KNullDesC() != iLogInfo->MyAddress() )
-        {
-        TRAPD( error, SetDataFieldL( KLogsDataFldTag_MA, iLogInfo->MyAddress() ) );
-        if ( error )
-            {
-            TEFLOGSTRING2( KTAERROR, 
-                "LOG CPELogEvent::SetLogEvent()>SetDataFieldL(), error=%d", 
-                    error )
-            }
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SetDuration
-// Set the event duration
-// -----------------------------------------------------------------------------
-//
-/*****************************************************
-*    Series 60 Customer / LOGENG
-*    Series 60  LOGENG API
-*****************************************************/
-void CPELogEvent::SetDuration()
-    {
-    iEvent->SetDurationType( KLogDurationValid );
-    iEvent->SetDuration( static_cast <TLogDuration> ( iLogInfo->Duration().Int() ) );
-
-#ifdef _DEBUG
-    if ( EPEStateIdle == iLogInfo->CallState() )
-        {
-        // debug logging of the event start time.
-        TBuf<KPEESDWFormattedTimeLength> formattedTime;
-        formattedTime.Zero();
-        TRAPD( error, iEvent->Time().FormatL( formattedTime, KPEESDWTimeFormat ) );    
-        if( error == KErrNone )
-            {
-            TEFLOGSTRING2( KTAINT, "LOG CPELogEvent::SetDuration() Idle state > formattedTime: %S", &formattedTime );
-            }
-        else
-            {
-            TEFLOGSTRING( KTAERROR, "LOG CPELogEvent::SetDuration() Idle state > time conversion failed!");
-            }        
-        }
-#endif // _DEBUG
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SetServiceIdL
-// Set callers service id to log event.
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::SetServiceIdL()
-    {
-    HBufC8* eventData = NULL; 
-    if ( iEvent->Data().Length() )
-        {
-        // There are existing data logged.
-        eventData = HBufC8::NewLC( iEvent->Data().Length() 
-                   + KLogsDataFldNameDelimiter().Length() // separator
-                   + KLogsDataFldTag_ServiceId().Length()
-                   + KLogsDataFldValueDelimiter().Length()
-                   + KTUintCharLength );    
-                   
-        // Copy existing data to temp buffer.
-        eventData->Des().Copy( iEvent->Data() );
-   
-        // Append tag separator.
-        eventData->Des().Append( KLogsDataFldNameDelimiter );    
-        }
-    else
-        {
-        // No existing data logged. 
-        eventData = HBufC8::NewLC( 
-            KLogsDataFldTag_ServiceId().Length()
-            + KLogsDataFldValueDelimiter().Length()
-            + KTUintCharLength ); 
-        }
-    
-    // Append service id
-    eventData->Des().Append( KLogsDataFldTag_ServiceId );
-    eventData->Des().Append( KLogsDataFldValueDelimiter );
-    eventData->Des().AppendNum( (TInt)iLogInfo->ServiceId() );
-    
-    iEvent->SetDataL( *eventData );
-    TEFLOGSTRING( KTAINT, "LOG CPELogEvent::SetServiceIdL() Service id set ok" );  
-    CleanupStack::PopAndDestroy( eventData );
-    }
-
-// -----------------------------------------------------------------------------
-// Sets callers contact link to log event.
-// Contact link data might accidentally contain "\t"(KLogsDataFldNameDelimiter),
-// because of this, those "accidents" are stuffed with another "\t". They are
-// removed in logs handling side when data is read in.
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::SetContactLinkL()
-    {
-    HBufC8* eventData = NULL;
-    
-    TPtrC8 pDelimiter( iLogInfo->ContactLink() );
-    TInt delimiterCount = 0;
-    // Check how many "delimiters" data contains so that we can
-    // reserve space for data duplication
-    while ( KErrNotFound != pDelimiter.Find( KLogsDataFldNameDelimiter ) )
-        {
-        // Skip first \t to see if there exists another one after that 
-        pDelimiter.Set( pDelimiter.Mid( pDelimiter.Find( KLogsDataFldNameDelimiter ) + KOneChar ) );
-        ++delimiterCount;
-        }
-    if ( iEvent->Data().Length() )
-        {
-        // There is previous data logged
-        eventData = HBufC8::NewLC( 
-            iEvent->Data().Length() 
-            + KLogsDataFldNameDelimiter().Length() // separator
-            + KLogsDataFldTag_ContactLink().Length() 
-            + KLogsDataFldValueDelimiter().Length()
-            + iLogInfo->ContactLink().Length() 
-            + delimiterCount );
-                   
-        // Copy previous data to temp buffer
-        eventData->Des().Copy( iEvent->Data() );
-   
-        // Append tag separator
-        eventData->Des().Append( KLogsDataFldNameDelimiter );    
-        }
-    else
-        {
-        // No previous data logged. 
-        eventData = HBufC8::NewLC( 
-                KLogsDataFldTag_ContactLink().Length() 
-            + KLogsDataFldValueDelimiter().Length()
-            + iLogInfo->ContactLink().Length() 
-            + delimiterCount ); 
-        }
-    
-    TPtr8 eventDataPtr( eventData->Des() );
-    eventDataPtr.Append( KLogsDataFldTag_ContactLink );
-    eventDataPtr.Append( KLogsDataFldValueDelimiter );
-    
-    if ( delimiterCount )
-        {
-        // Link data contained unintended \t chars
-        TPtrC8 linkPtr( iLogInfo->ContactLink() );
-        TInt dataLength = 0;
-        // Copy link data between \t chars
-        for ( TInt i = 0; i < delimiterCount; i++ )
-            {
-            // Plus one because we need length, not offset
-            dataLength = linkPtr.Find( KLogsDataFldNameDelimiter ) + KOneChar;
-            // Append from beginning of data, including \t
-            eventDataPtr.Append( linkPtr.Left( dataLength ) );
-            // Add another \t
-            eventDataPtr.Append( KLogsDataFldNameDelimiter );
-            linkPtr.Set( linkPtr.Mid( dataLength ) );
-            }
-        // Copy rest of link data
-        eventDataPtr.Append( linkPtr );
-        }
-    else
-        {
-        // Link data didn't contain \t, so normal copy is possible
-        eventDataPtr.Append( iLogInfo->ContactLink() );
-        }
-    
-    iEvent->SetDataL( *eventData );
-    TEFLOGSTRING( KTAINT, "LOG CPELogEvent::ContactLinkL() Contact link set ok" );
-    CleanupStack::PopAndDestroy( eventData );
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SetDataFieldL
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::SetDataFieldL( const TDesC8& aTag, const TDesC& aFieldData )
-    {
-    __ASSERT_ALWAYS( aTag.Length() != 0 && aFieldData.Length() != 0 ,
-        User::Leave( KErrArgument ) );
-    
-    if ( KErrNotFound == iEvent->Data().Find( aTag ) )
-        {
-        HBufC8* eventData = NULL;
-        const TInt fieldLength = aTag.Length() 
-            + KLogsDataFldValueDelimiter().Length()
-            + aFieldData.Length();
-        const TInt oldDataFieldLength = iEvent->Data().Length();
-        
-        if ( oldDataFieldLength != 0 )
-            {
-            const TInt newDataFieldLength = oldDataFieldLength 
-                + KLogsDataFldNameDelimiter().Length()
-                + fieldLength;
-            
-            eventData = HBufC8::NewLC( newDataFieldLength );
-            
-            // Copy previous data
-            eventData->Des().Copy( iEvent->Data() );
-            eventData->Des().Append( KLogsDataFldNameDelimiter );
-            }
-        else
-            {
-            eventData = HBufC8::NewLC( fieldLength );
-            }
-        
-        // Add a new data field.
-        eventData->Des().Append( aTag );
-        eventData->Des().Append( KLogsDataFldValueDelimiter );
-        eventData->Des().Append( aFieldData );     
-        iEvent->SetDataL( *eventData );
-        
-        CleanupStack::PopAndDestroy( eventData );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SetRemoteParty
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::SetRemoteParty( CLogEvent& aEvent, 
-        const CPELogInfo& aLogInfo )
-    {
-    if ( KNullDesC() != aLogInfo.Name() )
-        {
-        aEvent.SetRemoteParty( aLogInfo.Name() );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPELogEvent::SetRemoteContact
-// -----------------------------------------------------------------------------
-//
-void CPELogEvent::SetRemoteContact( CLogEvent& aEvent, 
-        const CPELogInfo& aLogInfo )
-    {
-    if ( KNullDesC() != aLogInfo.PhoneNumber() )
-        {
-        aEvent.SetNumber( aLogInfo.PhoneNumber() );
-        }
-    
-    if ( KNullDesC() != aLogInfo.VoipAddress() )
-        {
-        TRAPD( error, SetDataFieldL( KLogsDataFldTag_URL, aLogInfo.VoipAddress() ) );
-        if ( error )
-            {
-            TEFLOGSTRING2( KTAERROR, 
-                "LOG CPELogEvent::SetLogEvent()>SetDataFieldL(), error=%d", error )
-            }
-        }
-    }
-
-
-// ================= OTHER EXPORTED FUNCTIONS ===============================
-
-//  End of File 
-