wvuing/wvuieng/EngSrc/CCALoggerMessageHeader.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuieng/EngSrc/CCALoggerMessageHeader.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2003-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:  Implementation for header information of history file
+*
+*/
+
+
+//  Include Files
+
+#include "CCALoggerMessageHeader.h"
+#include "PrivateEngineDefinitions.h"
+#include "PrivateEngineDefinitions.h"
+#include "CAUtils.h"
+
+#include <s32strm.h>
+#include <badesca.h>
+#include <StringLoader.h>
+#include <caengineNG.rsg>
+
+// Header information of buffers. 4 bytes per buffer. 3 buffers. 3*4 = 12
+const TInt KHeaderInformationLength = 12;
+
+// CONSTRUCTION
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::NewL
+// Static constructor
+// -----------------------------------------------------------------------------
+//
+CCALoggerMessageHeader* CCALoggerMessageHeader::NewL(	const TDesC &aName,
+                                                      const TDesC &aId,
+                                                      TChatType aChatType )
+    {
+    CCALoggerMessageHeader* self = new ( ELeave ) CCALoggerMessageHeader;
+    CleanupStack::PushL( self );
+    self->ConstructL( aName, aId, aChatType );
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::NewL
+// Static constructor for empty messageheader.
+// -----------------------------------------------------------------------------
+//
+CCALoggerMessageHeader* CCALoggerMessageHeader::NewL()
+    {
+    CCALoggerMessageHeader* self = new ( ELeave ) CCALoggerMessageHeader;
+    CleanupStack::PushL( self );
+    self->ConstructL( KNullDesC, KNullDesC );
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::~CCALoggerMessageHeader
+// Destructor (virtual by CBase)
+// -----------------------------------------------------------------------------
+//
+CCALoggerMessageHeader::~CCALoggerMessageHeader()
+    {
+    delete iName;
+    delete iGroupId;
+    delete iFilename;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::ConstructL
+// Second phase construct
+// -----------------------------------------------------------------------------
+//
+void CCALoggerMessageHeader::ConstructL( const TDesC& aName, const TDesC& aId,
+                                         TChatType aChatType )
+    {
+    iName = aName.AllocL();
+
+    iGroupId = aId.AllocL();
+
+    iChatType = aChatType;
+
+    // Time of creation of header or footer
+    iStartTime.HomeTime();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::CCALoggerMessageHeader
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CCALoggerMessageHeader::CCALoggerMessageHeader()
+    {
+    }
+
+//---------------------------------------------------------------
+//----------------------- OWN METHODS ---------------------------
+//---------------------------------------------------------------
+
+//---------------------------------------------------------------
+//----------------- INHERITED METHODS ---------------------------
+//---------------------------------------------------------------
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::InternalizeL
+// Internalize message header
+// -----------------------------------------------------------------------------
+//
+void CCALoggerMessageHeader::InternalizeL( RReadStream& aStream )
+    {
+    HBufC* filename = CAUtils::InternalizeBufferFromStreamL( aStream );
+    delete iFilename;
+    iFilename = filename;
+
+    HBufC* groupid = CAUtils::InternalizeBufferFromStreamL( aStream );
+    delete iGroupId;
+    iGroupId = groupid;
+
+    HBufC* name = CAUtils::InternalizeBufferFromStreamL( aStream );
+    delete iName;
+    iName = name;
+
+    //Use help variables high and low, because if we use
+    //MAKE_TINT64( aStream.ReadUint32L, aStream.ReadUint32L ) directly
+    //they are read in wrong order. First the low one and second the high.
+    TUint32 high = aStream.ReadUint32L();
+    TUint32 low = aStream.ReadUint32L();
+
+    iStartTime = MAKE_TINT64( high, low );
+
+    high = aStream.ReadUint32L();
+    low = aStream.ReadUint32L();
+
+    iEndTime = MAKE_TINT64( high, low );
+
+    iChatType = static_cast< TChatType >( aStream.ReadUint8L() );
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::ExternalizeL
+// Externalize message header
+// -----------------------------------------------------------------------------
+//
+void CCALoggerMessageHeader::ExternalizeL( RWriteStream& aStream ) const
+    {
+    CAUtils::ExternalizeBufferToStreamL( *iFilename, aStream );
+    TPtrC id = CAUtils::DisplayId( *iGroupId );
+    CAUtils::ExternalizeBufferToStreamL( id, aStream );
+    CAUtils::ExternalizeBufferToStreamL( *iName, aStream );
+    aStream.WriteUint32L( I64HIGH( iStartTime.Int64() ) );
+    aStream.WriteUint32L( I64LOW( iStartTime.Int64() ) );
+    aStream.WriteUint32L( I64HIGH( iEndTime.Int64() ) );
+    aStream.WriteUint32L( I64LOW( iEndTime.Int64() ) );
+    aStream.WriteUint8L( iChatType );
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::MessageSizeInBytesL
+// Size of message header in bytes
+// -----------------------------------------------------------------------------
+//
+TInt CCALoggerMessageHeader::MessageSizeInBytesL() const
+    {
+    if ( !iFilename || !iGroupId || !iName )
+        {
+        User::Leave( KErrNotReady );
+        }
+
+    // Data count by bytes and header information of buffers. 4 bytes per buffer.
+    // If header information changes, remember to update KHeaderInformationLength
+    return (	iFilename->Size() +
+             CAUtils::DisplayId( *iGroupId ).Size() +
+             iName->Size() ) * KCharacterLengthInBytes +
+           KHeaderInformationLength;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::FilenameL
+// Real file name of history file
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCALoggerMessageHeader::FilenameL()
+    {
+    if ( !iFilename )
+        {
+        User::Leave( KErrNotReady );
+        }
+    return *iFilename;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::SetFilenameL
+// Set real filename of history file.
+// -----------------------------------------------------------------------------
+//
+void CCALoggerMessageHeader::SetFilenameL( const TDesC& aFilename )
+    {
+    HBufC* filename = aFilename.AllocL();
+    delete iFilename;
+    iFilename = filename;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::EndLogging
+// Get time when logging ends
+// -----------------------------------------------------------------------------
+//
+void CCALoggerMessageHeader::EndLogging()
+    {
+    iEndTime.HomeTime();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::ChatType
+// ChatType of logged data
+// -----------------------------------------------------------------------------
+//
+TChatType CCALoggerMessageHeader::ChatType() const
+    {
+    return iChatType;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::Name
+// name of history data
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCALoggerMessageHeader::Name() const
+    {
+    return *iName;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::StartTime
+// startime of history data
+// -----------------------------------------------------------------------------
+//
+const TTime& CCALoggerMessageHeader::StartTime() const
+    {
+    return iStartTime;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::EndTime
+// end time of history data
+// -----------------------------------------------------------------------------
+//
+const TTime& CCALoggerMessageHeader::EndTime() const
+    {
+    return iEndTime;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerMessageHeader::Identification
+// identification
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCALoggerMessageHeader::Identification() const
+    {
+    return *iGroupId;
+    }
+
+//  End of File