--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/PC_Tools/HTIGateway/HtiGateway/inc/HtiMessage.h Tue Feb 02 01:57:15 2010 +0200
@@ -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 <windows.h>
+
+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