IMPSengine/datautils/src/impsutils.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 11:50:09 +0200
changeset 2 7b3b89e6be20
parent 0 094583676ce7
permissions -rw-r--r--
Revision: 201001 Kit: 201004

/*
* Copyright (c) 2002-2005 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: 
* logger for imps client.
*
*/


// INCLUDE FILES
#include    <e32std.h>
#ifdef _DEBUG
#include    <flogger.h>
#endif
#include    "impsutils.h"
#include    "impsservercommon.h"
#include    "impsservices.h"
#include    "ImpsVariantAPI.h"


// ================= MEMBER FUNCTIONS =======================



//**********************************
// CImpsClientLogger
//**********************************
const TInt KLogBufferLength = 356;
//_LIT(KLogDir, "impsc");
//_LIT(KLogFile, "impsc.txt");

EXPORT_C void CImpsClientLogger::Log(TRefByValue<const TDesC> aFmt,...)
    {
    VA_LIST list;
    VA_START(list, aFmt);

    // Print to log file
    TBuf<KLogBufferLength> buf;
    buf.FormatList(aFmt, list);

#ifdef _DEBUG
    _LIT(KLogDir, "impsc");
    _LIT(KLogFile, "impsc.txt");
    // Write to log file
    RFileLogger::Write(KLogDir, KLogFile, EFileLoggingModeAppend, buf);
    RDebug::RawPrint( buf );    
#endif

    }


//**********************************
// CImpsSettingFile
//**********************************

EXPORT_C CImpsSettingFile* CImpsSettingFile::NewL( 
    RFs& aFs )
    {
    CImpsSettingFile* self = new (ELeave) CImpsSettingFile( aFs );
    return self;
    }

EXPORT_C CImpsSettingFile::~CImpsSettingFile()
    {
    if ( iOpen )
        {
        iReader.Close();
        }
    iOpen = EFalse;
    }

CImpsSettingFile::CImpsSettingFile( RFs& aFs)
: iFs( aFs ),
  iOpen( EFalse )
    {

    }

EXPORT_C void CImpsSettingFile::OpenL(TDesC& aResFile)
    {
    // open a file
    iFileName = aResFile;

    TInt myError = iReader.Open( iFs, 
                             iFileName, 
                             EFileShareReadersOnly );

    User::LeaveIfError( myError );
    iOpen = ETrue;
    
    }

EXPORT_C TPtrC8 CImpsSettingFile::KeyValueL( const TDesC8& aKey )
    {

    TPtrC8 myKey;
    TPtrC8 myValue;
    TBool getIt(EFalse);
    TInt err = 0;

    // Reset the reader
    OpenL( iFileName );

    // Start to search
    while ( !getIt) 
        {
        TRAP ( err, ReadRowL( myKey, myValue ));
        if ( err != KErrNone )
            {
            User::Leave( KErrNotFound );
            }
        if ( !myKey.CompareF( aKey ))
            {
            return myValue;
            }
        }
    return TPtrC8();
    }

void CImpsSettingFile::ReadRowL( TPtrC8& aKey, TPtrC8& aValue )
    {
    // READ ONE ROW
    TChar delim( 10 );
    iReader.ReadL( iRowBuffer, delim);
    TInt length = iRowBuffer.Length();
    if ( length > 2 )
        {
        // DROP CR+LF FROM THE END OF LINE
        iRowBuffer.Delete( length - 2, 2 );

        TInt pos = 0;
        pos = iRowBuffer.Find( _L8("=") );
        if ( pos > 0 )
            {
            aKey.Set( iRowBuffer.Left( pos ) );
            // Cut off separator
            aValue.Set( iRowBuffer.Mid( pos + 1 ) );
            }
        }
    }

//**********************************
// impsService
//**********************************

EXPORT_C GLDEF_C TImpsEventType impsService( const CImpsVariant* /*aVariant*/,
    TImpsMessageType aMessage )
    {
    TImpsEventType event(EImpsEventNone);
    // Notice: update this table when new methods supported


    switch ( aMessage )
        {
        case EImpsLoginReq:
        case EImpsLoginRes:
        case EImpsLogoutReq:
        case EImpsDisconnect:
        case EImpsClientCapabilityReq:   // this is not mistake,
                                         // part of login procedure
        case EImpsServiceReq:            // Same here.
            event = EImpsEventServerLogin;
            break;
        // IM
        case EImpsSendMessageReq:
        case EImpsSendMessageRes:
        case EImpsGetMessageReq:
        case EImpsNewMessage:
        case EImpsMessageDelivered:
        case EImpsGetBlockedListReq:
        case EImpsGetBlockedListRes:
        case EImpsBlockEntityReq:
        case EImpsDeliveryReportReq:
            event = EImpsEventMessage;
            break;
        // Presence
        case EImpsSubscribePresenceReq:
        case EImpsUnsubscribePresenceReq:
        case EImpsGetPresenceReq:
        case EImpsGetPresenceRes:
        case EImpsUpdatePresenceReq:
        case EImpsPresenceNotification:
        case EImpsCreateAttrListReq:
        case EImpsPureData:
        case EImpsGetWatcherListReq:
        case EImpsGetWatcherListRes:
        case EImpsPresenceAuthReq:
        case EImpsPresenceAuthUser:
        case EImpsCancelAuthReq:
        case EImpsGetListReq:
        case EImpsGetListRes:
        case EImpsCreateListReq:
        case EImpsDeleteListReq:
        case EImpsListManageReq:
        case EImpsListManageRes:
        case EImpsDeleteAttrListReq:
        case EImpsGetAttrListReq:
        case EImpsGetAttrListRes:
            event = EImpsEventPresence;
            break;
        // Group
        case EImpsCreateGroupReq:
        case EImpsDeleteGroupReq:
        case EImpsJoinGroupReq:
        case EImpsJoinGroupRes:
        case EImpsLeaveGroupReq:
        case EImpsLeaveGroupRes:
        case EImpsGroupMembersReq:
        case EImpsGroupMembersRes:
        case EImpsAddGroupMembersReq:
        case EImpsRemoveGroupMembersReq:
        case EImpsGroupMemberAccessReq:
        case EImpsGroupPropertiesReq:
        case EImpsGroupPropertiesRes:
        case EImpsSetGroupPropertiesReq:
        case EImpsGroupRejectListReq:
        case EImpsGroupRejectListRes:
        case EImpsSubsGroupNoticeReq:
        case EImpsSubsGroupNoticeRes:
        case EImpsGroupChangeNotice:
        case EImpsSubsGroupNoticeUnset:  
        case EImpsSubsGroupNoticeGet: 
        case EImpsSubsGroupNoticeSet:   
        case EImpsNewUsers:
        case EImpsLeftUsers:    
            event = EImpsEventGroup;
            break;
        // Fundamental
        case EImpsSearchReq:
        case EImpsStopSearchReq:
        case EImpsSearchRes:
        case EImpsInviteReq:
        case EImpsInviteRes:
        case EImpsInviteUserReq:
        case EImpsInviteUserRes:
        case EImpsCancelInviteReq:
        case EImpsCancelInviteUserReq:
            event = EImpsEventCommon;
            break;
        default:
            event = EImpsEventNone;
        }
    return event;
    }
  
//  End of File