diff -r 7fdc9a71d314 -r 8ad140f3dd41 hti/PC_Tools/HTIGateway/HtiGateway/inc/HtiMessage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hti/PC_Tools/HTIGateway/HtiGateway/inc/HtiMessage.h Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,132 @@ +/* +* Copyright (c) 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 file contains headers of HtiMessage class. +*/ +#ifndef __HTI_MSG__ +#define __HTI_MSG__ + +#include + +static const DWORD HTI_SYSTEM_SERVICE_UID = 0x1020DEB6; + +const int KMsgServiceNameOffset = 0; +const int KHtiMsgServiceUidLen = 4; +const int KMsgBodySizeLen = 4; +const int KMsgBodySizeOffset = KMsgServiceNameOffset + KHtiMsgServiceUidLen; +const int KMsgVersionOffset = KMsgBodySizeOffset+KMsgBodySizeLen; +const int KMsgPriorityOffset = KMsgVersionOffset+1; +const int KMsgWrapFlagOffset = KMsgPriorityOffset+1; +const int KMsgExtSizeOffset = KMsgWrapFlagOffset+1; +const int KMsgCrcOffset = KMsgExtSizeOffset+1; //two bytes field +const int KMsgExtOffset = KMsgCrcOffset+2; +const int KMsgHeaderMinSize = KMsgExtOffset; + +const BYTE KDefaultVersion = 1; + +//error message +const int HtiErrCodeOffset = 1; +const int HtiServiceErrCodeOffset = HtiErrCodeOffset + 1; +const int HtiErrServiceUidOffset = HtiServiceErrCodeOffset + 4; +const int HtiErrDescrOffset = HtiErrServiceUidOffset + 4; + +class HtiMessage +{ +public: + /** + * Creates HTIMessage using given parameters and message body + */ + HtiMessage(DWORD serviceId, void* body, DWORD len, BYTE priority=0); + + /** + * Creates HTIMessage parsing ready HTI message (with header) + * message may contain only message beginning but should include valid + * HTI header (see CheckValidHtiHeader()) + * The rest of message can be added using AddToBody() + */ + HtiMessage(void* message, DWORD len); + + /** + * Destructor + */ + ~HtiMessage(); + + /** + * Add body parts if HTIMessage was constructed with incomplete data + * Returns number of added bytes. + */ + DWORD AddToBody(void* data, DWORD len); + + inline bool IsMessageComplete(); + inline int Reminder(); + + /** + * Returns whole HTI message including header + */ + void* HtiData(); + + /** + * + */ + DWORD HtiDataSize(); + + DWORD GetBodySize(); + DWORD GetExtSize(); + void* GetBody(); + DWORD GetServiceUID(); + + /** + * Attemt to read HTI header in provided data. + * Pointer should reference to data at least MinHeaderSize() size. + */ + static bool CheckValidHtiHeader(void* header); + + /** + * + */ + static DWORD ExtractMsgSizeFromHeader(void* header); + + /** + * Returns minimal HTI message header + */ + static int MinHeaderSize(); + + //buit-in support for default error messages + static HtiMessage* CreateErrorMessage(int errorCode, const char* errDescr); + + bool IsErrorMessage(); + int HtiErrorCode(); + int ServiceErrorCode(); + char* ErrorDescription(); + int ErrorServiceUid(); + +protected: + int GetBodyStart(); + + DWORD m_Size; //size of whole message (inc. header) + BYTE* m_Message; //whole message (inc. header) + + /** + * Number of bytes left to copy to m_Message + * Used when constructing message from data packages + */ + DWORD m_MessageReminderSize; + //temp string for err descr with 0-ending + char* m_ErrDescr; +}; + +inline bool HtiMessage::IsMessageComplete(){return m_MessageReminderSize==0;} +inline int HtiMessage::Reminder(){return m_MessageReminderSize;} + +#endif // \ No newline at end of file