diff -r 000000000000 -r 3553901f7fa8 smsprotocols/smsstack/wapprot/Inc/WAPDGRM.H --- /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 +#include +#include +#include +#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 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& aSmsMessageArray); + + void DecodeConcatenatedMessagesL(CArrayPtr& 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 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__