diff -r 000000000000 -r 3553901f7fa8 smsprotocols/smsstack/gsmu/inc/gsmusar.h --- /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 +#include +#include + +/** + * @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__