diff -r 000000000000 -r 3553901f7fa8 smsprotocols/smsstack/gsmu/inc/gsmumsgadditionalattributes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/smsprotocols/smsstack/gsmu/inc/gsmumsgadditionalattributes.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,167 @@ +// Copyright (c) 1999-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 defines the container class CSmsMessageAdditionalAttributes. +// +// + +/** + @file +*/ + + +#ifndef __GSMUMSGADDITIONALATTRIBUTES_ +#define __GSMUMSGADDITIONALATTRIBUTES_ + +#include +#include +#include "Gsmuelem.h" +#include "gsmuieoperations.h" +#include "gsmunonieoperations.h" + +/** + * @internalComponent + * + * CSmsMessageAdditionalAttributes + * + * This class contains additional attributes that would normally be + * stored in CSmsMessage. + * + * The class contains a collections of control information elements. + * These elements will either be copied into the working PDU for encoding + * or have been copied from the working pdu for decoding. + */ +class CSmsMessageAdditionalAttributes : public CBase +{ +public: + typedef TSmsInformationElementCategories::TInformationElementCategory TCategory; + typedef CSmsInformationElement::TSmsInformationElementIdentifier TInformationElementId; + typedef CSmsInformationElement* CSmsInformationElementPtr; + +public: + static CSmsMessageAdditionalAttributes* NewL(); + + // client side accessors (intended to be used by CSmsMessage) + void AddControlInformationElementL(CSmsInformationElement* aIE); + TBool Find1stInstanceOfControlInformationElement(TInformationElementId aId, TUint& index) const; + TBool FindNextInstanceOfControlInformationElement(TInformationElementId aId, TUint aStartIndex, TUint& aIndex) const; + CSmsInformationElement& GetControlInformationElementL(TInformationElementId aId, TUint aIndex) const; + TBool RemoveControlInformationElement(TInformationElementId aId, TUint aIndex, CSmsInformationElementPtr& aIE); + + // stack side interface / encoding / decoding + void AddControlInformationElementL(TCategory aCategory, CSmsInformationElement* aIE); + CSmsInformationElement& GetControlInformationElementL(TCategory aCategory, TUint aIndex) const; + TBool RemoveNextControlInformationElement(TCategory aCategory, CSmsInformationElementPtr& aIE); + void DeleteControlInformationElement(TCategory aCategory, TUint8 index); + TUint NumberOfControlInformationElements(TCategory aCategory) const; + + CSmsIEOperation& GetIEOperationL(TInformationElementId aId) const; + CSmsNonIEOperation& GetNonIEOperationL(TSmsNonIEIdentifier aId) const; + void SetIEOperationL(CSmsIEOperation* aOperation); + void SetNonIEOperationL(CSmsNonIEOperation* aOperation); + + void InternalizeL(RReadStream& aStream, TInt aVersion); + void ExternalizeL(RWriteStream& aStream, TInt aVersion) const; + + void ResetAttributesL(); + + ~CSmsMessageAdditionalAttributes(); + + class CSmsStatusReportScheme + { + public: + virtual TSmsStatusReportScheme Id() = 0; + virtual ~CSmsStatusReportScheme() {}; + }; + + class CControlParametersScheme : public CSmsStatusReportScheme + { + public: + CControlParametersScheme(); + ~CControlParametersScheme(); + TSmsStatusReportScheme Id(); + public: + struct TSmsSMSCCtrlParameterStatus + { + /** Message reference. */ + TUint iSegmentSequenceNum; + /** Selective Status Report */ + TUint8 iSelectiveStatus; + }; + RArray iControlParametersStatusReport; + TUint8 iDefaultStatusReport; + TInt iNumOfPDUs; + }; + + class CTPSRRScheme : public CSmsStatusReportScheme + { + public: + CTPSRRScheme(); + ~CTPSRRScheme(); + TSmsStatusReportScheme Id(); + public: + struct TSmsTPSRRStatus + { + /** Message reference. */ + TUint iSegmentSequenceNum; + /** TP-SRR Bit. */ + TSmsFirstOctet::TSmsStatusReportRequest iTPSRRStatus; + }; + RArray iTPSRRStatusReport; + TSmsFirstOctet::TSmsStatusReportRequest iDefaultStatusReport; + TInt iNumOfPDUs; + }; + + class CDefaultScheme : public CSmsStatusReportScheme + { + public: + CDefaultScheme(); + ~CDefaultScheme(); + TSmsStatusReportScheme Id(); + }; + + CSmsStatusReportScheme& GetStatusReportScheme() const; + void SetStatusReportSchemeL(TSmsStatusReportScheme aId); + + RPointerArray& SmsPDUArray() { return iSmsPDUArray; }; + + TSmsEncoding Alternative7bitEncoding() const; + void SetAlternative7bitEncoding(TSmsEncoding aEncoding); + +private: + void ConstructL(); + CSmsMessageAdditionalAttributes(); + +private: + typedef CArrayPtrFlat CArrayOfPointersToControlInformationElements; + // comment, not intending to store all categories in additional attributes, some categories will be stored in the working PDU + // The following categories will be stored here: + // ECtrlMandatoryIn1stPDUOnly, e.g Reply Address + // ECtrlSingleInstanceOnly, e.g. Enhanced Voice Mail + // ECtrlMultipleInstancesAllowed, e.g. Hyperlink format + + CArrayOfPointersToControlInformationElements* iCollectionOfPointersToIEArrays[TSmsInformationElementCategories::ENumberOfCategories]; + + CSmsHyperLinkOperations* iHyperLinkOperations; + CSmsReplyAddressOperations* iReplyAddressOperations; + CSmsSpecialSMSMessageOperations* iSpecialSMSMessageOperations; + CSmsEnhancedVoiceMailOperations* iEnhancedVoiceMailOperations; + CSmsSMSCCtrlParameterOperations* iSMSCCtrlParameterOperations; + CSmsTPSRROperations* iTPSRROperations; + CSmsStatusReportScheme* iStatusReportScheme; + CIncompleteClass0MessageInfo* iIncompleteClass0MessageInfo; + RPointerArray iSmsPDUArray; + TSmsEncoding iAlternative7bitEncoding; +}; + +#endif // __GSMUMSGADDITIONALATTRIBUTES_