adaptationlayer/tsy/nokiatsy_dll/inc/cmmpacketcontextmesshandler.h
changeset 0 63b37f68c1ce
child 8 6295dc2169f3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/inc/cmmpacketcontextmesshandler.h	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,904 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+
+#ifndef CMMPACKETCONTEXTMESSHANDLER_H
+#define CMMPACKETCONTEXTMESSHANDLER_H
+
+// INCLUDES
+#include <etelpckt.h>
+#include <etelqos.h>
+#include "mmmmesshandlerbase.h"
+#include "cmmphonetreceiver.h" // for MMmMessageReceiver
+#include "cmmpipecontrol.h"
+#include "nokiatsy_internal_variation.h"
+
+// CONSTANTS
+// Client connection speed rates between 0 and 2097152 bps
+const TInt KClientSpeeed0 = 0;
+const TInt KClientSpeeed8192 = 8192;
+const TInt KClientSpeeed16384 = 16384;
+const TInt KClientSpeeed32768 = 32768;
+const TInt KClientSpeeed65536 = 65536;
+const TInt KClientSpeeed131072 = 131072;
+const TInt KClientSpeeed262144 = 262144;
+const TInt KClientSpeeed524288 = 524288;
+const TInt KClientSpeeed1048576 = 1048576;
+const TInt KClientSpeeed2097152 = 2097152;
+
+// The maximum lengths for subblocks
+// See: ISI General Packet Data Server Message Descriptions
+const TUint16 KMaximumLengthOfGpdsTftInfo = 256;
+const TUint8 KMaximumLengthOfGpdsTftAuthTokenInfo = 248;
+const TUint8 KMaximumLengthOfGpdsTftFilterInfo = 148;
+
+// Access point buffer 256
+const TInt KAccessPointBuffer252 = 252;
+
+// Nuber of bytes to be removed from total length for auth token info
+const TInt KAuthTokenInfoChecking = 4;
+
+// Index value 2
+const TInt KIndexValue2 = 2;
+
+// GPDS_SHARED_TFT_PARAMETER_IP_FLOW_INFO value 2
+const TInt KGdpsSharedTftParamIPFlowInfo2 = 2;
+
+// GPDS_SHARED_TFT_PARAMETER_IP_FLOW_INFO value 3
+const TInt KGdpsSharedTftParamIPFlowInfo3 = 3;
+
+// Maximum length of GDPS_ACTIVATE_REQ sub block
+const TInt KMaxLengthOfGdpsActivateReqSB = 20;
+
+// Remove extraordinary bytes from RPacketContext::KMiscProtocolBufferLength
+// to get size for DNS buffer
+const TInt KRemoveOtherThanDNSBytes = 3;
+
+// DNS Buffer length
+const TInt KDNSBufferLength = 16;
+
+// CSCF Buffer length
+const TInt KCSCFBufferLength = 16;
+
+// CSCF Buffer length
+const TInt KSignallingFlagBuffer = 1;
+
+// Data Length for TLV
+const TInt KTLVDataLen = 2;
+
+// PCO Id len
+const TInt KPCOIdLen = 1;
+
+// Message data buffer size 1 byte
+const TInt KMessageDataBufSize1 = 1;
+
+// Filter array minus value
+const TInt KFilterArray = 1;
+
+// Initializing mask to 0x80 = 1000 0000 b
+const TInt KInitMask0x80 = 0x80;
+
+// Sub block count 1
+const TInt KSubBlockCount1 = 1;
+
+// Buff size for proxy id for channel
+const TInt KBuffProxyIdForChannel = 2;
+
+// Byte count for ptr to TLV data
+const TInt KPtrToTLVdata = 4;
+
+// Flow id's array index
+const TInt KFlowIdsArrayIndex1 = 1;
+
+// Call mode init value
+const TInt KCallModeInitValue = 0xFF;
+
+// Filler byte for ISI messages
+const TUint8 KCallPadding = 0x00;
+
+// Subbclock length
+const TInt KSubBlockLengthOffset1 = 1;
+
+// masks for detailed cause values.
+// see 3GPP TS 24.008 V5.16.0 spec
+const TUint8 KDiagnosticsOctet2( 0x02 ); // B0000_0100
+const TUint8 KDiagnosticsOctet3( 0xC0 ); // B1100_0000
+const TUint8 KDiagnosticsOctet4( 0x95 ); // B1001_0101
+const TUint8 KDiagnosticsOctet5( 0x82 ); // B1000_0010
+const TUint8 KDiagnosticsOctet6( 0x02 ); // B0000_0010
+
+// MACROS
+    // None
+
+// DATA TYPES
+    // None
+
+// FUNCTION PROTOTYPES
+    // None
+
+// FORWARD DECLARATIONS
+class CMmPhoNetSender;
+class CMmPacketContextMesshandlerList;
+class TIsiReceiveC;
+class CMmPacketQoSMessHandler;
+class CMmMessageRouter;
+class RPacketContext;
+class RPacketContext::CTFTMediaAuthorizationV3;
+struct RPacketContext::CTFTMediaAuthorizationV3::TFlowIdentifier;
+
+// CLASS DECLARATION
+
+/**
+*  CMmPacketContextMessHandler is used to create and send
+*  GSM-specific Packet Context ISI messages to PhoNet via PhoNetSender.
+*  It also receives GSM-specific Packet Context ISI messages from Phonet
+*  via PhoNetReceiver.
+*/
+class CMmPacketContextMessHandler : public CBase,
+    public MMmMessHandlerBase,
+    public MMmMessageReceiver
+    {
+
+    public: // Constructors and destructor
+
+        /**
+        * Creates a new packet context message handler object
+        * @param CMmPhoNetSender*: pointer to phonet sender
+        * @param CMmPhoNetReceiver*: pointer to phonet receiver
+        * @param CMmPacketContextMesshandlerList*: pointer to context list
+        * @param CMmPacketQoSMessHandler*: pointer to QoS message handler
+        * @param CMmMessageRouter*: pointer to message router
+        * @return CMmPacketContextMessHandler*: pointer to the message handler
+        */
+        static CMmPacketContextMessHandler* NewL(
+            CMmPhoNetSender* const aPhoNetSender,
+            CMmPhoNetReceiver* aPhoNetReceiver,
+            CMmPacketContextMesshandlerList* aMmPacketContextMesshandlerList,
+            CMmPacketQoSMessHandler* aMmPacketQoSMessHandler,
+            CMmMessageRouter* aMessageRouter );
+
+        /**
+        * Destructor.
+        */
+        ~CMmPacketContextMessHandler();
+
+    public: // New functions
+
+        /**
+        * Isimsg received by PhonetReceiver, interpret if GSM Packet Context
+        * specific.
+        * @param TIsiReceiveC, reference to the received message.
+        * @return void
+        */
+        void ReceiveMessageL( const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * This function handles pipe related response messages and
+        * completes operations.
+        * @param aMessageId: message id
+        * @param aTransactionId: transaction id
+        * @param aPipeHandle: pipe handle
+        * @param aErrorCause: error cause
+        */
+        void CompletePipeOperation(
+            const TInt aMessageId,
+            const TUint8 aTransactionId,
+            const TUint8 aPipeHandle,
+            const TUint8 aErrorCause );
+
+    public: // Functions from base classes
+
+        /**
+        * From MMmMessHandlerBase. This method is the single entry point for
+        * requests coming from the Symbian OS layer to this message handler.
+        * ExtFuncL is called by the MessageManager.
+        * @param aIpc: IPC number of the request
+        * @param aDataPackage: datapackage from CommonTSY
+        * @return TInt: KErrNone or error code
+        */
+        TInt ExtFuncL( TInt aIpc, const CMmDataPackage* aDataPackage );
+
+    protected: // New functions
+        // None
+
+    protected: // Functions from base classes
+        // None
+
+    private: // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        CMmPacketContextMessHandler();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+    private: // New functions
+
+        /**
+        * Create an Isi-message for creating a context id.
+        * @param aCreateContextIdTransId: create context id transaction id
+        * @return TInt: error code (return value from PhoNetSender)
+        */
+        TInt GpdsContextIdCreateReq(
+            const TUint8 aCreateContextIdTransId ) const;
+
+        /**
+        * Configure a local link between Context and Pipe.
+        * @param aTransactionId: transaction id
+        * @param aContextId: context id
+        * @param aPipeHandle: pipe handle
+        * @return TInt: Error code (return value from PhoNetSender)
+        */
+        TInt GpdsLlConfigureReq(
+            const TUint8 aTransactionId,
+            const TUint8 aContextId,
+            const TUint8 aPipeHandle ) const;
+
+        /**
+        * Create an Isi-message for context configuration.
+        * @param aTransactionId: ransaction id
+        * @param aContextId: context id
+        * @param aPdpType: Gpds server's Pdp address type
+        * @param aContextType: Context type
+        * @param aPrimaryContextId: primary context id
+        * @param aDataCompression: data compression flag
+        * @param aHeaderCompression: header compression flag
+        * @param aAccessPointName: Access point name
+        * @param aPacketFilterPtr: packet filter
+        * @param aMediaAuthorization: media authorization
+        * @param aSignallingIndication: signalling indication
+        * @param aPCFCSAddressIndication: PCFCS address request indication
+        * @param aDNSAddressRequestIndication: DNS address request indication
+        * @return TInt: Error code (return value from PhoNetSender)
+        */
+        TInt GpdsContextConfigureReq(
+            const TUint8 aTransactionId,
+            const TUint8 aContextId,
+            const TUint8 aPdpType,
+            const TUint8 aContextType,
+            const TUint8 aPrimaryContextId,
+            const TUint8 aDataCompression,
+            const TUint8 aHeaderCompression,
+            const TBuf8<KAccessPointBuffer252>& aAccessPointName,
+            CArrayFixFlat<RPacketContext::TPacketFilterV2>* aPacketFilterPtr,
+            RPacketContext::CTFTMediaAuthorizationV3* aMediaAuthorization,
+            TBool aSignallingIndication = EFalse,
+            TBool aPCFCSAddressIndication = EFalse,
+            TBool aDNSAddressRequestIndication = EFalse );
+
+        /**
+        * Create an Isi-message for context activation.
+        * @param aTransactionId: transaction id
+        * @param aContextId: context id
+        * @param aPdpAddress: PDP address
+        * @param aPdpType: type of PDP address
+        * @return TInt: Error code (return value from PhoNetSender)
+        */
+        TInt GpdsContextActivateReq(
+            const TUint8 aTransactionId,
+            const TUint8 aContextId,
+            const TDesC8& aPdpAddress,
+            const TUint8 aPdpType ) const;
+
+        /**
+        * Deactivate a Context.
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: Error code (return value from PhoNetSender)
+        */
+        TInt GpdsContextDeactivateReq(
+            const CMmDataPackage& aDataPackage );
+
+        /**
+        * Request the Context Status info.
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: Error code (return value from PhoNetSender)
+        */
+        TInt GpdsContextStatusReq(
+            const CMmDataPackage& aDataPackage );
+
+        /**
+        * Modify a Context.
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: Error code (return value from PhoNetSender)
+        */
+        TInt GpdsContextModifyReq(
+            const CMmDataPackage* aPackage );
+
+        /**
+        * Add packet filter info to GPDS Context Configure or Modify request.
+        * @param aPdpType: PDP address type
+        * @param aFilter: packet TFT filter
+        * @param aBuffer: reference to message buffer
+        * @return TUint16: length of PacketFilter
+        */
+        TUint16 AddPacketFilterInfo(
+            const TUint8 aPdpType,
+            RPacketContext::TPacketFilterV2* aFilter,
+            TDes8& aBuffer ) const;
+
+        /**
+        * This request is for compound of configuration and authentication.
+        * @param aTransactionId: transaction id
+        * @param aContextId: context id
+        * @param aAuthInfo: authentication info
+        * @param aResponse: response information
+        * @param aChallenge: challenge information
+        * @param aId: TProtocolConfig Id
+        * @return TInt: Error code (return value from PhoNetSender)
+        */
+        TInt SetAuthenticationConfigReq(
+            const TUint8 aTransactionId,
+            const TUint8 aContextId,
+            RPacketContext::TAuthInfo aAuthInfo,
+            RPacketContext::TAuthData aResponse,
+            RPacketContext::TAuthData aChallenge,
+            TUint8  aId );
+
+        /**
+        * Response for Context Id creation.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextIdCreateResp(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Gpds context id create indication.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextIdCreateInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Response for Context Local Link configuration.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsLlConfigureResp(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Response for Context Configuration.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextConfigureResp(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Response for setting the Context Authentication info.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextAuthResp(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Indicate that Context Activation has been started.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextActivatingInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Indicate that Context Activation has succeeded.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextActivateIndL(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Indication that Context Activation has failed.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextActivateFailInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Indicate the Context Modification.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextModifyInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Response for Context Deactivation.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextDeactivateRespL(
+            const TIsiReceiveC& aIsiMessageg );
+
+        /**
+        * Indicate that Context Deactivation has been started.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextDeactivatingInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Indicate that Context Deactivation has succeeded.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextDeactivateInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Response for Context Status inquiry.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextStatusResp(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Indicate the final data transferred over the airlink.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextStatusInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Indicate that Context Id has been deleted.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextIdDeleteInd(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * Response for GPDS modify request.
+        * @param aIsiMsg: received Isi message
+        */
+        void GpdsContextModifyResp(
+            const TIsiReceiveC& aIsiMessage );
+
+        /**
+        * This function starts the three phase context initialisation.
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: KErrNone or error code
+        */
+        TInt InitialiseContext(
+            const CMmDataPackage& aDataPackage );
+
+        /**
+        * This function starts the second phase of the context initialisation.
+        * @param aPipeHandle: pipe handle
+        * @return TInt: KErrNone or error code
+        */
+        TInt InitialiseContextPhase2(
+            TUint8 aPipeHandle );
+
+        /**
+        * This function starts the third phase of the context initialisation.
+        * @param aStatus: GPDS Status
+        * @param aContextId: Context Id
+        */
+        void InitialiseContextPhase3(
+            const TUint8 aStatus,
+            const TUint8 aContextId );
+
+        /**
+        * Set configuration data for context.
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: KErrNone or error code
+        */
+        TInt SetConfigL(
+            const CMmDataPackage& aDataPackage );
+
+        /**
+        * Add TFT packet filter for context.
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: KErrNone or error code
+        */
+        TInt AddPacketFilter(
+            const CMmDataPackage* aDataPackage );
+
+        /**
+        * Delete context related to the network e.g. pipe deletion.
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: KErrNone or error code
+        */
+        TInt Delete(
+            const CMmDataPackage& aDataPackage );
+
+        /**
+        * This function starts the second phase of the context activation.
+        * @param aPipeHandle: pipe handle
+        * @param aTransactionId: transaction id
+        */
+        void ActivatePhase2(
+            const TUint8 aPipeHandle,
+            const TUint8 aTransactionId );
+
+        /**
+        * Map the Packet API pdp type to the Gpds server pdp type.
+        * @param aPdpTypeServer: server pdp type
+        * @param aPdpTypeClient: client pdp type
+        * @return TInt: KErrNone or error code
+        */
+        TInt MapPdpType(
+            TUint8& aPdpTypeServer,
+            const RPacketContext::TProtocolType aPdpTypeClient );
+
+        /**
+        * Map the Gpds server speed to the Packet API connection speed.
+        * @param aConnectionSpeedServer: server connection speed rate
+        * @param aConnectionSpeedClient: client connection speed rate
+        */
+         void MapConnectionSpeed(
+            const TUint8 aConnectionSpeedServer,
+            TInt& aConnectionSpeedClient );
+
+        /**
+        * This function generates transaction id for use of current context.
+        * @param contextId
+        * @return TUint8: transaction id
+        */
+         TUint8 GenerateTraId(
+            const TUint8 aContextId );
+
+        /**
+        * Map the Client TFT operation to the Gpds server TFT operation.
+        * @param aClientTypeOperation: client operation
+        * @param aTftOperation: server operation
+        */
+        void MapTftOperation(
+            const TInt aClientTypeOperation,
+            TUint8& aTftOperation );
+
+        /*
+        * Makes request for media authorization params for specific context
+        * @param aDataPackage: data package from CommonTSY
+        * @return TInt: KErrNone or error code
+        */
+        TInt AddMediaAuthorizationL(
+            const CMmDataPackage* aDataPackage );
+
+        /*
+        * Creates subblocks to GpdsContextConfigureOrModifyReq.
+        * @param aMediaAuthorizationArray: media authorization array
+        * @param aBuffer: reference to message buffer
+        * @param aNumOfSbs: number of subblocks
+        * @return TInt: KErrNone or error code
+        */
+        TInt AddMediaAuthorizationInfo(
+            CArrayFixFlat<RPacketContext::CTFTMediaAuthorizationV3>*
+                aMediaAuthorizationArray,
+            TDes8& aBuffer,
+            TUint8& aNumOfSbs ) const;
+
+        /*
+        * Appends one media authorization unit.
+        * @param aMediaAuthorization: media authorization data
+        * @param aBuffer: reference to message buffer
+        * @param aNumOfSbs: number of subblocks appended
+        * @return TInt: KErrNone or KErrTooBig if buffer is not big enough to
+        * fit all the information
+        * @note method does not reset aNumOfSbs on entry
+        */
+        TInt AppendMediaAuthorizationUnit(
+                const RPacketContext::CTFTMediaAuthorizationV3&
+                    aMediaAuthorization,
+                TDes8& aBuffer,
+                TUint8& aNumOfSbs ) const;
+
+        /**
+        * This methods checks if secondary contexts needs to be deactivated
+        * and allows incoming call.
+        * (for allow incoming call feature).
+        */
+        void AllowIncomingCallActivationL();
+
+        /**
+        * Appends GPDS_SHARED_TFT_PARAMETER_AUTH_TOKEN_INFO to the buffer
+        * @param aAuthorizationToken: authorization token to be appended
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks appended
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if passed buffer is
+        * not big enough to fit the subblock
+        */
+        TInt AppendGpdsSharedTFTParameterAuthTokenInfo(
+             const TDesC8& aAuthorizationToken,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_SHARED_TFT_PARAMETER_IP_FLOW_INFO to the buffer
+        * @param aFlowIdentifier: data to be appended
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks appended
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if passed buffer is
+        * not big enough to fit the subblock
+        */
+        TInt AppendGpdsSharedTFTParameterIPFlowInfo(
+             const RPacketContext::CTFTMediaAuthorizationV3::TFlowIdentifier&
+             aFlowIdentifier,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Fills the buffer as GPDS_TFT_INFO complex subblock.
+        * Caller passes in buffer big enough to hold GPDS_TFT_INFO subblock
+        * @param aOperation: desired operation (constants starting with GPDS_TFT_)
+        * @param aMediaAuthorization: media authorization
+        * @note aMediaAuthorization can be NULL
+        * @param aPacketFilter: packet filters array
+        * @note aPacketFilter can be NULL
+        * @note both aMediaAuthorization and aPacketFilter can not be NULL at
+        * the same time
+        * @param aPdpType: type
+        * @param aBuffer: buffer to be filled
+        * @return TInt: KErrNone or KErrTooBig if any of the subblocks doesnt
+        * fit into the buffer
+        */
+        TInt FillGpdsTFTInfo( TUint8 aOperation,
+             RPacketContext::CTFTMediaAuthorizationV3* aMediaAuthorization,
+             CArrayFixFlat<RPacketContext::TPacketFilterV2>* aPacketFilterPtr,
+             TUint8 aPdpType,
+             TDes8& aBuffer) const;
+
+        /**
+        * Fills the buffer as GPDS_QOS99_REQ_INFO subblock.
+        * Caller passes in buffer big enough to hold GPDS_QOS99_REQ_INFO subblock
+        * @param aQos99Params: Qos99 parameters
+        * @param aBuffer: buffer to be filled
+        * @return KErrNone or system-wide error
+        */
+        TInt FillGpdsQos99ReqInfo(
+             const RPacketQoS::TQoSR99_R4Requested& aQos99Params,
+             TDes8& aBuffer );
+
+        /**
+        * Fills the buffer as GPDS_QOS_REQ_INFO subblock.
+        * Caller passes in buffer big enough to hold GPDS_QOS99_REQ_INFO subblock
+        * @param aQos97Params: Qos97 parameters
+        * @param aBuffer: buffer to be filled
+        * @return KErrNone or system-wide error
+        */
+        TInt FillGpdsQosReqInfo(
+             const RPacketQoS::TQoSGPRSRequested& aQos97Params,
+             TDes8& aBuffer );
+
+        /**
+        * Appends GPDS_FILT_FLOW_LABEL_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsFilterFlowLabelInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_FILT_TOS_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsFilterTosInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_FILT_SPI_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsFilterSpiInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_FILT_SRC_PORT_RANGE_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsFilterSrcPortRangeInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_FILT_DST_PORT_RANGE_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsFilterDstPortRangeInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_FILT_PROTOCOL_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsFilterProtocolInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_FILT_SRC_IPV4_ADDR_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsFilterSrcIPv4AddressInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS_FILT_SRC_IPV6_ADDR_INFO subblock to the passed buffer.
+        * @param aFilter: filter instance
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: number of subblocks added
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit
+        * the subblock
+        */
+        TInt AppendGpdsFilterSrcIPv6AddressInfo(
+             const RPacketContext::TPacketFilterV2& aFilter,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Appends GPDS IP source address information to the buffer.
+        * Buffer should be prepared by the caller before sending it here.
+        * Only amount of masked bits and IP address themselves are appended
+        * @param aInputIpAddress: input IP address
+        * @param aInputIpAddressMask: input IP address mask
+        * @param aBuffer: destination buffer
+        * @return TInt: KErrNone or KErrArgument in case invalid IP (black hole)
+        * is specified
+        */
+        TInt AppendIpAddressInfo(
+             const TDesC8& aInputIpAddress,
+             const TDesC8& aInputIpAddressMask,
+             TDes8& aBuffer ) const;
+
+        /**
+        * Appends GPDS_TFT_FILTER_INFO subblock.
+        * @param aFilterId: filter id
+        * @param aBuffer: destination buffer
+        * @param aNumOfSbs: destination buffer
+        * @note aNumOfSbs is not reset on entry
+        * @return TInt: KErrNone or KErrTooBig if destination cant fit the subblock
+        */
+        TInt AppendGpdsTftFilterInfo(
+             TUint8 aFilterId,
+             TDes8& aBuffer,
+             TUint8& aNumOfSbs ) const;
+
+        /**
+        * Breaks received CallModemResourceInd ISI message.
+        * @param aIsiMessage: received Isi message.
+        */
+        void CallModemResourceIndL( const TIsiReceiveC &aIsiMessage );
+
+        /**
+        * Creates CallModemResourceReq ISI message to modem call server.
+        * @param isiMessage
+        * @return None
+        */
+        void CallModemResourceReqAllowed();
+
+        /**
+        * Breaks received CallModemResourceResp ISI message.
+        * @param aIsiMessage: received Isi message.
+        */
+        void CallModemResourceResp( const TIsiReceiveC &aIsiMessage );
+        
+        /**
+        * Creates SendCallmodemResourceDenied ISI message to modem call server.
+        * @param aDatapackage
+        * @return None
+        */
+        void CallModemResourceReqDenied();
+        
+        /*
+        * This method completes drive mode functions, if drive mode flag 
+        * is enabled
+        * @param aDataPackage: data package
+        * @return TInt: KErrNone 
+        */
+        void CompleteDCMdrivemodeFunctionalityL();
+
+    public: // Data
+        // None
+
+    protected: // Data
+        // None
+
+    private: // Data
+
+        // Pointer to the PhonetSender
+        CMmPhoNetSender* iPhoNetSender;
+
+        // A pointer to the PhonetReceiver.
+        CMmPhoNetReceiver* iPhoNetReceiver;
+
+        // Pointer to list of opened contexts
+        CMmPacketContextMesshandlerList* iContextList;
+
+        // Pointer to the CMmPacketQoSMessHandler
+        CMmPacketQoSMessHandler* iMmPacketQoSMessHandler;
+
+        // Pointer to the message router
+        CMmMessageRouter* iMessageRouter;
+
+        // Pointer to the pipe controller, created and owned.
+        CMmPipeControl* iMmPipeController;
+
+        // Primary context id
+        TUint8 iPrimaryContextId;
+
+        // Context id
+        TUint8 iDialUpContextId;
+
+        // Dial-up context name
+        TInfoName iDialUpContextName;
+
+        // Error code used for context id creating
+        TInt iInitialiseError;
+
+#ifdef DUMMY_NIF_PEP_FOR_PACKET_DATA_TESTING_DOS
+        // Helps creating transaction id for pipe creation for eacf contexts
+        // before context id available
+        TInt iTransIdForProxies;
+#endif // DUMMY_NIF_PEP_FOR_PACKET_DATA_TESTING_DOS
+
+        // Call id for incoming call (for allow incoming call feature)
+        TUint8 iCallModemResourceCallId;
+
+        // List of contexts to be deactivated (for allow incoming call feature)
+        CArrayFixFlat<TUint8>* iDeactivateContextList;
+
+        // Buffer for isimessage. Used in resource control
+        HBufC8* iResourceControlMsg;
+        
+        //drive mode flag 
+        TBool iDriveModeFlag;
+
+    };
+
+#endif // CMMPACKETCONTEXTMESSHANDLER_H
+
+// End of File