smsprotocols/smsstack/gsmu/inc/gsmusar.h
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smsprotocols/smsstack/gsmu/inc/gsmusar.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,133 @@
+// Copyright (c) 2000-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:
+// Segmentation and reassembly utility classes
+// 
+//
+
+/**
+ @file
+*/
+
+#ifndef __GSMUSAR_H__
+#define __GSMUSAR_H__
+
+#include <charconv.h>
+#include <gsmubuf.h>
+#include <gsmuelem.h>
+
+/**
+ *  @internalComponent
+ */
+_LIT8(KMOSES,"\x40\x4d\x64\xd3\x50\x00");
+/**
+ *  @internalComponent
+ */
+_LIT16(KNETWORK,"NETWORK");
+
+
+// Constants
+/**
+ *  @internalComponent
+ */
+const TUint8 KSms7BitAlphabetEscapeChar=0x1b;
+
+
+/**
+ *  Segments unpacked data from a CsmsBufferBase
+ *  @internalComponent
+ */
+class CSmsBufferSegmenter : public CBase
+	{
+friend class CSmsUserData;
+public:
+// Construction / destruction methods
+	IMPORT_C static CSmsBufferSegmenter* NewLC(CSmsAlphabetConverter& aAlphabetConverter,const CSmsBufferBase& aBuffer,TInt aSegmentSize=0);
+	IMPORT_C ~CSmsBufferSegmenter();
+
+// Segmentation methods
+	void Reset();
+	IMPORT_C TBool SegmentNextL(TDes8& aSegmentBuffer, TInt& aUnconvertedChars,
+			                    TInt& aDowngradedChars,
+			                    TSmsEncoding aEncoding);
+	IMPORT_C TInt TotalConvertedLengthL(TSmsEncoding aEncoding);
+	TBool MoreL();
+
+	TSmsEncoding FindBestAlternativeEncodingL(TSmsEncoding aSuggestedEncoding,
+									          TInt aMaxBodyLength) const;
+
+protected:
+// Protected construction methods
+	CSmsBufferSegmenter(CSmsAlphabetConverter& aAlphabetConverter,const CSmsBufferBase& aBuffer,TInt aSegmentSize);
+	void ConstructL();
+
+// Protected helper methods
+	virtual TBool DoSegmentNextL(TDes8& aSegmentBuffer,TInt aSegmentSize,
+			                     TInt& aUnconvertedChars, TInt& aDowngradedChars,
+			                     TSmsEncoding aEncoding);
+	void CheckConvertedBufferAllocL(TInt aMaxLength);
+	TInt ElementsToReturnFromConvertedBufferL(TInt aSegmentSize);
+
+protected:
+// Private data
+	CSmsAlphabetConverter& iAlphabetConverter;
+	const CSmsBufferBase& iSmsBuffer;
+	TInt iElementsExtracted;
+	TInt iSegmentSize;
+	HBufC8* iConvertedBuffer;
+	TPtr8 iConvertedBufferPtr;
+	};
+
+
+/**
+ *  @internalComponent
+ */
+class CSmsEMSBufferSegmenter : public CSmsBufferSegmenter
+	{
+public:
+	IMPORT_C static CSmsEMSBufferSegmenter* NewLC(CSmsAlphabetConverter& aAlphabetConverter,const CSmsBufferBase& aBuffer, TInt aSegmentSize=0);
+
+	IMPORT_C TBool SegmentNextL(TDes8& aSegmentBuffer,TInt aSegmentSize,
+	                            TInt& aUnconvertedChars, TInt& aDowngradedChars,
+	                            TSmsEncoding aEncoding);
+
+	TInt SegmentL(TDes8& aSegmentBuffer, TInt aNativeChars, TInt aSegmentMax,
+			      TInt& aUnconvertedChars, TInt& aDowngradedChars,
+			      TSmsEncoding aEncoding);
+
+protected:
+	CSmsEMSBufferSegmenter(CSmsAlphabetConverter& aAlphabetConverter,const CSmsBufferBase& aBuffer,TInt aSegmentSize);
+
+	};
+
+
+/**
+ *  TSmsBufferReassembler - reassembles (unpacked) data to CSmsBufferBase
+ *  @internalComponent
+ */
+class TSmsBufferReassembler
+	{
+public:
+// Construction / destruction methods
+	IMPORT_C TSmsBufferReassembler(CSmsAlphabetConverter& aAlphabetConverter,CSmsBufferBase& aBuffer);
+
+// Reassembly methods
+	IMPORT_C void ReassembleNextL(const TDesC8& aSegmentBuffer,
+			                      TSmsEncoding aEncoding, TBool aIsLast);
+
+private:
+	CSmsAlphabetConverter& iAlphabetConverter;
+	CSmsBufferBase& iSmsBuffer;
+	};
+
+#endif // __GSMUSAR_H__