smsprotocols/smsstack/wapprot/Inc/WAPDGRM.H
changeset 0 3553901f7fa8
child 14 7ef16719d8cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smsprotocols/smsstack/wapprot/Inc/WAPDGRM.H	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,245 @@
+// Copyright (c) 1997-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:
+// Contains the header file of the CWapDatagram
+// 
+//
+
+/**
+ @file
+ @internalAll
+*/
+
+#if !defined (WAPDGRM_H__)
+#define WAPDGRM_H__
+
+#include <e32def.h>
+#include <e32std.h>
+#include <s32buf.h>
+#include <s32mem.h>
+#include "gsmubuf.h"
+#include "gsmuset.h"
+#include "Gsmuelem.h"
+#include "Gsmumsg.h"
+#include "wapthdr.h"
+
+class RMBufChain;
+
+const TInt KSmsBufferExpansion=0x100;
+
+// Notes !
+// - Character sets
+//   Incoming (up stack):
+//      This class converts Unicode characters of a CSmsMessage object
+//      to either 7 or 8 bit.
+//   Outgoing (down stack): This class converts 7 or 8 bit input data to Unicode.
+//
+// - Text based headers
+//   Concerning 7 bit characters:
+//      port information is ALWAYS encoded in //SCK style.
+
+/**
+ *  @internalComponent
+ */
+class CWapDatagram : public CBase
+    {
+public:
+	
+	enum TWapDatagramVersion
+		{
+		EBaseVersion=0,
+		EFirstVersion=1,
+		};
+	
+    struct TSegmentData
+        {
+        TInt       iSegmentNumber;
+        TBuf8<KMaxSmsChars> iData; //< application data
+        };
+
+        // Contructor for incoming short messages
+        // Set the character width 7- or 8-bit in the parameter aAlphabet,
+        // which you expect to get through WapDatagram().
+        // UNICODE is not supported.
+        // If the WAP datagram is complete (IsComplete()),
+        // call the  WapDatagram() to retrieve the data.
+
+        // If the datagram is not complete, concatenate
+        // the WAP datagram, when all the segments are available
+        // through DecodeConcatenatedMessagesL().
+    static CWapDatagram* NewL( const CSmsMessage&      aSms);
+
+        // for outgoing short messages
+    static CWapDatagram* NewL( const TDesC8&   aBuffer);
+
+    ~CWapDatagram();
+
+        // Only 7-bit text mode socket header may return false
+        // when the datagram is not complete.
+    inline TBool IsComplete() const;
+
+        // Get the length of the datagram
+    inline TInt WapDatagramLength() const;
+
+        // Copies the user data of incoming WAP datagram to the aBufChain
+        // Prior to calling this method IsComplete() should return true
+        // and/or DecodeConcatenatedMessagesL() should have been called.
+		// aMaxLength indicates largest size that will be passed atomically
+		// to the client: generally the whole datagram should be returned
+		// but this can be used for truncation if required.
+        // Returns error code
+    inline TInt WapDatagram(RMBufChain& aBufChain, TUint aMaxLength) const;
+
+        // if CWapDatagram object is incomplete, get the
+        // TSegmentData information of the short message
+    inline void SegmentData(TSegmentData& aSegmentData) const;
+
+        // from WAP spec: destination address
+    inline TPtrC ToAddress() const;
+    inline void SetToAddress(const TDesC& aToAddress);
+
+        // from WAP spec: source address
+    inline TPtrC FromAddress() const;
+    inline void SetFromAddress(const TDesC& aFromAddress);
+
+        // from WAP spec: destination port
+        // 16bit width port addressing is used automatically, if
+        // the port value is > 255
+    inline void Ports(TInt& aFromPort,TInt& aToPort,TBool* aIs16Bit = NULL) const;
+    inline void SetPorts(TInt aFromPort, TInt aToPort,TBool aIs16BIt = EFalse);
+
+        // from WAP spec: other header support by text header only
+        // no idea what it is used for
+    inline void OtherHeader(TDes8& aOtherHeader) const;
+    inline void SetOtherHeader(const TDesC8& aOtherHeader);
+
+        // from GSM SMS spec
+        // NT: time of first CSmsMessage received
+        // MO: validity period
+    inline const TTime& Time() const;
+    //inline void SetTime(const TTime& aTime);
+
+    inline TTimeIntervalSeconds UTCOffset() const;
+    TBool SetUTCOffset(const TTimeIntervalSeconds& aUTCOffset);
+
+        // May return > 1, if the socket text headers are used
+        // TODO: to be removed ?
+    inline TInt NumConcatenatedMessages() const;
+
+    inline TInt ConcatenatedMessageReference(TBool* aIs16BIt = NULL) const;
+        // concerns socket text headers only
+        // otherwise ignored
+    inline void SetConcatenatedMessageReference(TInt    aReference);
+
+        // what about service centre address ?
+        // aSmsMessageArray contains CSmsMessage objects
+        // aSmsBufferArray contains respective CSmsMessage objects
+    void EncodeConcatenatedMessagesL(RFs& aFs, CArrayPtr<CSmsMessage>& aSmsMessageArray);
+
+    void DecodeConcatenatedMessagesL(CArrayPtr<TSegmentData>& aSmsMessageArray);
+
+        // from GSM spec: Alphabet setting of outgoing datagram only
+        // set the alphabet on incoming datagrams in the contructor
+    inline TSmsDataCodingScheme::TSmsAlphabet Alphabet() const;
+    inline void SetAlphabet(TSmsDataCodingScheme::TSmsAlphabet aAlphabet);
+
+    void InternalizeL(RReadStream& aStream);
+	void ExternalizeL(RWriteStream& aStream) const;
+
+	// for 8-bit datagrams. Reads/writes iSmsBuffer from/to stream
+	void InternalizeBufferL(RReadStream& aStream);
+	void ExternalizeBufferL(RWriteStream& aStream) const;
+
+	inline TInt LogServerId() const;
+    inline void SetLogServerId(TInt aId);
+    
+    inline TSmsStatusReportScheme	Scheme() const;
+    inline void SetStatusReportScheme(TSmsStatusReportScheme aScheme);
+    
+    CBufFlat* SmsExternalisedStream() const;
+private:
+    CWapDatagram();
+
+        // incoming
+    void ConstructL(const CSmsMessage& aSms);
+
+        // outgoing
+    void Construct(const TDesC8&   aSendBuffer);
+
+        // Set underlying CWapDatagram private member variables
+        // from CSmsMessage object + any common settings
+    void GetDatagramSettings(const CSmsMessage& aSms);
+
+        // Sets underlying WAP datagram private member variables
+        // from a text header short message
+    void GetDatagramSettingsL();
+
+        // converts from const type variable to other type
+    void ConvertL(const TDesC8&         aNarrowChars,
+                  CSmsBufferBase&       aSmsBufferBase) const;
+
+    void ConvertL(const CSmsBufferBase& aSmsBufferBase,
+                  HBufC8**				aNarrowChars) const;
+
+    void SetSmsMessageSettingsL(CSmsMessage& aSmsMessage,
+                                TBool  aSetPorts);
+private:
+
+	// WAP datagram specific settings
+    TSmsUserDataSettings iUserDataSettings;
+    TBuf<32>         iToAddress;
+    TBuf<32>         iFromAddress;
+    TBool             i16BitPorts;
+        // Port numbers are initialized to (-1)
+    TInt              iFromPort;
+    TInt              iToPort;
+    TTime             iTime;
+    TTimeIntervalSeconds iUTCOffset;
+        // SAR information
+    TBool             iIsComplete;
+    TInt              iReference;
+    TInt              iTotalSegments;
+    TInt              iSegmentNumber;
+
+    TBool             iIsTextHeader;
+                        // member iSegment contains a reference
+                        // - Incoming messages: iSmsBuffer
+                        // - Outgoing messages:
+    TWapTextMessage*  iSegment;
+                        // for storing text based concatenated message segment
+    TBuf8<KMaxSmsChars> iSmsBuffer;
+                        // Incoming: complete wap datagram
+    HBufC8*           iBuffer;
+
+                        // Outgoing:
+    TPtrC8            iSendBuffer;
+    TPtrC8            iOtherHeader;
+
+    TInt              iLogServerId;
+    TInt              iVersionNumber;
+    TInt              iSpare1; // spare fields
+    TInt              iSpare2; // spare fields
+    TInt              iSpare3; // spare fields
+    TSmsStatusReportScheme iScheme;
+    
+    CBufFlat* iRecvbuf;
+
+public:
+	static TInt LinkOffset();
+private:
+	TSglQueLink iLink;
+    };
+
+#include "wapdgrm.inl"
+
+#endif // WAPDGRM_H__