--- /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__