--- /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 <e32base.h>
+#include <e32std.h>
+#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<TSmsSMSCCtrlParameterStatus> 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<TSmsTPSRRStatus> iTPSRRStatusReport;
+ TSmsFirstOctet::TSmsStatusReportRequest iDefaultStatusReport;
+ TInt iNumOfPDUs;
+ };
+
+ class CDefaultScheme : public CSmsStatusReportScheme
+ {
+ public:
+ CDefaultScheme();
+ ~CDefaultScheme();
+ TSmsStatusReportScheme Id();
+ };
+
+ CSmsStatusReportScheme& GetStatusReportScheme() const;
+ void SetStatusReportSchemeL(TSmsStatusReportScheme aId);
+
+ RPointerArray<CSmsPDU>& SmsPDUArray() { return iSmsPDUArray; };
+
+ TSmsEncoding Alternative7bitEncoding() const;
+ void SetAlternative7bitEncoding(TSmsEncoding aEncoding);
+
+private:
+ void ConstructL();
+ CSmsMessageAdditionalAttributes();
+
+private:
+ typedef CArrayPtrFlat<CSmsInformationElement> 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<CSmsPDU> iSmsPDUArray;
+ TSmsEncoding iAlternative7bitEncoding;
+};
+
+#endif // __GSMUMSGADDITIONALATTRIBUTES_