--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmpacketservicemesshandler.cpp Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,2242 @@
+/*
+* 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:
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "cmmpacketservicemesshandler.h"
+#include "cmmnetmesshandler.h"
+#include "cmmmessagerouter.h"
+#include "cmmstaticutility.h"
+#include "tsylogger.h"
+
+#include <in_sock.h>
+#include <tisi.h>
+#include <ctsy/pluginapi/cmmdatapackage.h>
+#include <gpdsisi.h>
+#include <pcktcs.h>
+#include <gpds_sharedisi.h>
+#include <ctsy/serviceapi/gsmerror.h>
+
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmmpacketservicemesshandlertraces.h"
+#endif
+
+// EXTERNAL DATA STRUCTURES
+ //None
+
+// EXTERNAL FUNCTION PROTOTYPES
+ //None
+
+// CONSTANTS
+const TUint8 KSetAlwaysOnMode = 0x12;
+
+// MACROS
+ //None
+
+// LOCAL CONSTANTS AND MACROS
+ //None
+
+// MODULE DATA STRUCTURES
+ //None
+
+// LOCAL FUNCTION PROTOTYPES
+ //None
+
+// FORWARD DECLARATIONS
+ //None
+
+// ==================== LOCAL FUNCTIONS =======================================
+ //None
+
+// ================= MEMBER FUNCTIONS =========================================
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::CMmPacketServiceMessHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+//
+CMmPacketServiceMessHandler::CMmPacketServiceMessHandler()
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::C++ constructor");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_CMMPACKETSERVICEMESSHANDLER, "CMmPacketServiceMessHandler::CMmPacketServiceMessHandler" );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::~CMmPacketServiceMessHandler
+// Destructor, deletes all allocated resources.
+// -----------------------------------------------------------------------------
+//
+CMmPacketServiceMessHandler::~CMmPacketServiceMessHandler()
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::~CMmPacketServiceMessHandler.\n" );
+OstTrace0( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_CMMPACKETSERVICEMESSHANDLER, "CMmPacketServiceMessHandler::~CMmPacketServiceMessHandler" );
+
+ // Delete iPacketMesshandlerContextList object
+ if ( iPacketMesshandlerContextList )
+ {
+ delete iPacketMesshandlerContextList;
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CMmPacketServiceMessHandler* CMmPacketServiceMessHandler::NewL(
+ CMmPhoNetSender* aPhoNetSender,
+ CMmPhoNetReceiver* aPhoNetReceiver,
+ CMmMessageRouter* aMessageRouter )
+ {
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::NewL" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_NEWL, "CMmPacketServiceMessHandler::NewL" );
+
+ CMmPacketServiceMessHandler* packetServiceMessHandler =
+ new( ELeave ) CMmPacketServiceMessHandler();
+
+ CleanupStack::PushL( packetServiceMessHandler );
+ packetServiceMessHandler->iPhoNetSender = aPhoNetSender;
+ packetServiceMessHandler->iMessageRouter = aMessageRouter;
+
+ packetServiceMessHandler->ConstructL();
+
+ aPhoNetReceiver->RegisterL(
+ packetServiceMessHandler,
+ PN_GPDS );
+ aPhoNetReceiver->RegisterL(
+ packetServiceMessHandler,
+ PN_MODEM_NETWORK,
+ NET_MODEM_REG_STATUS_GET_RESP );
+ aPhoNetReceiver->RegisterL(
+ packetServiceMessHandler,
+ PN_MODEM_NETWORK,
+ NET_MODEM_REG_STATUS_IND );
+ aPhoNetReceiver->RegisterL(
+ packetServiceMessHandler,
+ PN_MODEM_NETWORK,
+ NET_RAT_IND );
+ aPhoNetReceiver->RegisterL(
+ packetServiceMessHandler,
+ PN_MODEM_NETWORK,
+ NET_RAT_RESP );
+ aPhoNetReceiver->RegisterL(
+ packetServiceMessHandler,
+ PN_MODEM_NETWORK,
+ NET_RADIO_INFO_IND );
+
+ CleanupStack::Pop( packetServiceMessHandler );
+
+ return packetServiceMessHandler;
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::ConstructL()
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::ConstructL");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_CONSTRUCTL, "CMmPacketServiceMessHandler::ConstructL" );
+
+ iAlwaysOnMode = RMmCustomAPI::EAlwaysModeNeither;
+
+ iPacketMesshandlerContextList = CMmPacketContextMesshandlerList::NewL();
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::ExtFuncL
+// Entry point for messages received from Symbian OS layer (Message manager)
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::ExtFuncL(
+ TInt aIpc,
+ const CMmDataPackage* aDataPackage )
+ {
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::ExtFuncL. IPC: %d", aIpc );
+OstTrace1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_EXTFUNCL, "CMmPacketServiceMessHandler::ExtFuncL;aIpc=%d", aIpc );
+
+ TInt ret( KErrNotSupported );
+ CMmDataPackage dataPackage;
+
+ switch ( aIpc )
+ {
+ case EPacketNotifyContextAdded:
+ {
+ // DO NOTHING
+ break;
+ }
+ case EPacketAttach:
+ {
+ ret = GpdsAttachReq();
+ break;
+ }
+ case EPacketDetach:
+ {
+ ret = GpdsDetachReq();
+ break;
+ }
+ case EPacketRejectActivationRequest:
+ {
+ ret = GpdsContextNwiActRejectReq();
+ break;
+ }
+ case EPacketGetNtwkRegStatus:
+ {
+ ret = NetModemRegStatusGetReq();
+ break;
+ }
+ case EPacketSetPrefBearer:
+ {
+ ret = SetPreferredBearer( *aDataPackage );
+ break;
+ }
+ case EPacketSetAttachMode:
+ {
+ RPacketService::TAttachMode* dataPtr = NULL;
+ aDataPackage->UnPackData ( &dataPtr );
+ ret = SetAttachMode( dataPtr );
+ break;
+ }
+ case EPacketGetAttachMode:
+ {
+ TBool calledOnInitPhase;
+ aDataPackage->UnPackData( calledOnInitPhase );
+ ret = GpdsConfigurationInfoReq( calledOnInitPhase );
+ break;
+ }
+ case EPacketSetDefaultContextParams:
+ {
+ ret = SetDefaultContextParams( *aDataPackage );
+ break;
+ }
+ case EPacketNotifyStatusChange:
+ {
+ ret = GpdsStatusReq();
+ break;
+ }
+ case EPacketInitProxiesIPC:
+ {
+ ret = KMmPacketContextProxy1_DOS;
+ break;
+ }
+ case ECustomSetAlwaysOnMode:
+ {
+ RMmCustomAPI::TSetAlwaysOnMode alwaysOnMode;
+ aDataPackage->UnPackData( alwaysOnMode );
+
+ ret = GpdsConfigureReq(
+ KSetAlwaysOnMode,
+ GPDS_ATTACH_MODE_DEFAULT,
+ GPDS_MT_ACT_MODE_ACCEPT,
+ GPDS_CLASSC_MODE_DEFAULT,
+ alwaysOnMode );
+ break;
+ }
+ default:
+ {
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::ExtFuncL - Unknown IPC: %d", aIpc);
+OstTrace1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_EXTFUNCL, "CMmPacketServiceMessHandler::ExtFuncL;Unknown aIpc=%d", aIpc );
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::ReceiveMessageL
+// Entry point for messages received from Domestic OS.
+// Switches the message to the correct method.
+// -----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::ReceiveMessageL(
+ const TIsiReceiveC &aIsiMessage )
+ {
+ TInt resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
+ TInt messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
+
+TFLOGSTRING3("TSY: CMmPacketServiceMessHandler::ReceiveMessageL. resource:%d, msgId:%d", resource, messageId);
+OstTraceExt2( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_RECEIVEMESSAGEL, "CMmPacketServiceMessHandler::ReceiveMessageL;resource=%d;messageId=%d", resource, messageId );
+
+ switch ( resource )
+ {
+ case PN_MODEM_NETWORK:
+ {
+ switch ( messageId )
+ {
+ case NET_MODEM_REG_STATUS_GET_RESP:
+ case NET_MODEM_REG_STATUS_IND:
+ {
+ NetModemRegStatusGetRespOrInd( aIsiMessage );
+ break;
+ }
+ case NET_RAT_IND:
+ case NET_RAT_RESP:
+ {
+ NetRatIndOrResp( aIsiMessage );
+ break;
+ }
+ case NET_RADIO_INFO_IND:
+ {
+ NetRadioInfoInd( aIsiMessage );
+ break;
+ }
+ default:
+ {
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::ReceiveMessageL. default in case PN_MODEM_NETWORK");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_RECEIVEMESSAGEL, "CMmPacketServiceMessHandler::ReceiveMessageL, default in case PN_MODEM_NETWORK" );
+ break;
+ }
+ }
+ break;
+ }
+ case PN_GPDS:
+ {
+ switch ( messageId )
+ {
+ case GPDS_CONTEXT_ID_CREATE_IND:
+ {
+ GpdsContextIdCreateInd( aIsiMessage );
+ break;
+ }
+ case GPDS_CONFIGURATION_INFO_RESP:
+ {
+ GpdsConfigurationInfoResp( aIsiMessage );
+ break;
+ }
+ case GPDS_CONFIGURATION_INFO_IND:
+ {
+ GpdsConfigurationInfoInd( aIsiMessage );
+ break;
+ }
+ case GPDS_TRANSFER_STATUS_IND:
+ {
+ GpdsTransferStatusInd( aIsiMessage );
+ break;
+ }
+ case GPDS_CONFIGURE_RESP:
+ {
+ GpdsConfigureResp( aIsiMessage );
+ break;
+ }
+ case GPDS_STATUS_RESP:
+ {
+ GpdsStatusResp( aIsiMessage );
+ break;
+ }
+ case GPDS_ATTACH_RESP:
+ {
+ GpdsAttachResp( aIsiMessage );
+ break;
+ }
+ case GPDS_ATTACH_IND:
+ {
+ GpdsAttachInd();
+ break;
+ }
+ case GPDS_DETACH_RESP:
+ {
+ GpdsDetachResp( aIsiMessage );
+ break;
+ }
+ case GPDS_DETACH_IND:
+ {
+ GpdsDetachInd();
+ break;
+ }
+ case GPDS_CONTEXT_NWI_ACT_REQUEST_IND:
+ {
+ GpdsContextNwiActRequestInd( aIsiMessage );
+ break;
+ }
+ case GPDS_CONTEXT_NWI_ACT_REJECT_RESP:
+ {
+ GpdsContextNwiActRejectResp( aIsiMessage );
+ break;
+ }
+ case GPDS_CONTEXT_CONFIGURE_RESP:
+ {
+ GpdsContextConfigureResp( aIsiMessage );
+ break;
+ }
+ default:
+ {
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::SpecificPacketServiceMessageReceived: KErrNotFound");
+OstTrace0( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_RECEIVEMESSAGEL, "CMmPacketServiceMessHandler::ReceiveMessageL, KErrNotFound" );
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ // No appropriate handler methods for ISI-message found.
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::SpecificPacketServiceMessageReceived no handler for the message id");
+OstTrace0( TRACE_NORMAL, DUP3_CMMPACKETSERVICEMESSHANDLER_RECEIVEMESSAGEL, "CMmPacketServiceMessHandler::ReceiveMessageL, SpecificPacketServiceMessageReceived no handler for the message id" );
+ // server not known
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsStatusReq
+// Constructs GPDS_STATUS_REQ ISI message and sends it to Phonet
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::GpdsStatusReq() const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsStatusReq.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSSTATUSREQ, "CMmPacketServiceMessHandler::GpdsStatusReq" );
+
+ // Append data for ISI message
+ TBuf8<KBuffSizeOneByte> data;
+
+ // Message sent via Phonet
+ // Transaction id ( 0xDD - KDummyTrIdDD ) is not needed to store, dummy is enough
+ // create gpds status request
+ return iPhoNetSender->Send( PN_GPDS, KDummyTrIdDD, GPDS_STATUS_REQ, data );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsStatusResp
+// Breaks a GPDS_STATUS_RESP ISI message
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsStatusResp(
+ const TIsiReceiveC& aIsiMessage )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsStatusResp.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSSTATUSRESP, "CMmPacketServiceMessHandler::GpdsStatusResp" );
+
+ const TUint8 attachStatus( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_STATUS_RESP_OFFSET_ATTACHSTATUS ) );
+ const TUint8 transfStatus( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_STATUS_RESP_OFFSET_TRANSFERSTATUS ) );
+
+ TFLOGSTRING3("TSY: CMmPacketServiceMessHandler::GpdsStatusResp.\n \t Attach Status:%d\n\t Transfer Status:%d\n", attachStatus, transfStatus );
+OstTraceExt2( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_GPDSSTATUSRESP, "CMmPacketServiceMessHandler::GpdsStatusResp;attachStatus=%hhu;transfStatus=%hhu", attachStatus, transfStatus );
+
+ CompleteGpdsStatusRequest( attachStatus, transfStatus );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsAttachReq
+// Constructs GPDS_ATTACH_REQ ISI message and sends it to Phonet.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::GpdsAttachReq() const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsAttachReq.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSATTACHREQ, "CMmPacketServiceMessHandler::GpdsAttachReq" );
+
+ // Append data for ISI message
+ TBuf8<1> data;
+ data.Append( GPDS_FOLLOW_OFF );
+
+ // Message sent via Phonet
+ return iPhoNetSender->Send(
+ PN_GPDS, GPDS_ATTACH_REQ, GPDS_ATTACH_REQ, data );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsAttachResp
+// Breaks a GPDS_ATTACH_RESP ISI message
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsAttachResp(
+ const TIsiReceiveC& aIsiMessage ) const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsAttachResp.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSATTACHRESP, "CMmPacketServiceMessHandler::GpdsAttachResp" );
+
+ if ( GPDS_ATTACH_REQ == aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_ATTACH_RESP_OFFSET_UTID ) )
+ {
+ const TUint8 status( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_ATTACH_RESP_OFFSET_STATUS ) );
+ const TUint8 cause( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_ATTACH_RESP_OFFSET_CAUSE ) );
+ TInt errorValue( KErrNone );
+
+ if ( GPDS_OK != status )
+ {
+ // Map CS error code to EPOC error code
+ errorValue = CMmStaticUtility::PacketDataCSCauseToEpocError(
+ cause );
+ }
+ //no else
+
+ TFLOGSTRING3("TSY: CMmPacketServiceMessHandler::GpdsAttachResp.\n \t Status:%d\n\t Cause:%d\n", status, cause );
+OstTraceExt2( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_GPDSATTACHRESP, "CMmPacketServiceMessHandler::GpdsAttachResp;status=%hhu;cause=%hhu", status, cause );
+
+ //Complete Attach
+ iMessageRouter->Complete(
+ EPacketAttach,
+ errorValue );
+ }
+ //no else
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsAttachInd
+// Breaks a GPDS_ATTACH_IND ISI message
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsAttachInd() const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsAttachInd.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSATTACHIND, "CMmPacketServiceMessHandler::GpdsAttachInd" );
+
+ RPacketService::TStatus status( RPacketService::EStatusAttached );
+ TBool isResumed( EFalse );
+
+ CMmDataPackage data;
+ data.PackData( &status, &isResumed );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsAttachInd. Complete\n\t Status:%d\n", status );
+
+ iMessageRouter->Complete(
+ EPacketNotifyStatusChange,
+ &data,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsDetachReq
+// Constructs GPDS_DETACH_REQ ISI message and sends it to Phonet.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::GpdsDetachReq() const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsDetachReq.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSDETACHREQ, "CMmPacketServiceMessHandler::GpdsDetachReq" );
+
+ // Create isi message
+ TBuf8<SIZE_GPDS_DETACH_REQ + SIZE_GPDS_CONDITIONAL_DETACH_INFO>
+ messageData;
+
+ // Add filler
+ messageData.Append( KGpdsPadding );
+ // Add number of subblocks (GPDS_CONDITIONAL_DETACH_INFO)
+ TUint8 subBlockCount( 1 );
+ messageData.Append( subBlockCount );
+
+ // Add conditional detach info sub block
+ TIsiSubBlock gpdsConditionalDetachinfoSb(
+ messageData,
+ GPDS_CONDITIONAL_DETACH_INFO,
+ EIsiSubBlockTypeId8Len8 );
+
+ // Add fillers
+ messageData.Append( KGpdsPadding );
+ messageData.Append( KGpdsPadding );
+ // Complete subblock
+ gpdsConditionalDetachinfoSb.CompleteSubBlock();
+
+ // Message sent via Phonet
+ return iPhoNetSender->Send(
+ PN_GPDS, GPDS_DETACH_REQ, GPDS_DETACH_REQ, messageData );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsDetachResp
+// Breaks a GPDS_DETACH_RESP ISI message
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsDetachResp(
+ const TIsiReceiveC& aIsiMessage ) const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsDetachResp.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSDETACHRESP, "CMmPacketServiceMessHandler::GpdsDetachResp" );
+
+ if ( GPDS_DETACH_REQ == aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_DETACH_RESP_OFFSET_UTID ) )
+ {
+ TInt errorValue( KErrNone );
+ const TUint8 status( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_DETACH_RESP_OFFSET_STATUS ) );
+
+ if ( GPDS_OK != status )
+ {
+ // Error is network failure
+ errorValue = CMmStaticUtility::EpocErrorCode(
+ KErrGeneral, KErrGsmMMNetworkFailure );
+ }
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsDetachResp.\n\t Status:%d\n", status );
+OstTraceExt1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_GPDSDETACHRESP, "CMmPacketServiceMessHandler::GpdsDetachResp;status=%hhu", status );
+
+ //Complete
+ iMessageRouter->Complete(
+ EPacketDetach,
+ errorValue );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsDetachInd
+// Breaks a GPDS_DETACH_IND ISI message
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsDetachInd() const
+ {
+
+ // Params for completion
+ RPacketService::TStatus status = RPacketService::EStatusUnattached;
+
+ // is resumed from suspend
+ TBool isResumed( EFalse );
+
+ CMmDataPackage data;
+ data.PackData( &status, &isResumed );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsDetachInd. Complete\n\t status:%d\n", status );
+
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSDETACHIND, "CMmPacketServiceMessHandler::GpdsDetachInd;status=%hhu", status );
+ iMessageRouter->Complete(
+ EPacketNotifyStatusChange,
+ &data,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::NetModemRegStatusGetReq
+// Constructs and sends NET_MODEM_REG_STATUS_GET_REQ ISI message.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::NetModemRegStatusGetReq() const
+ {
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::NetModemRegStatusGetReq" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_NETMODEMREGSTATUSGETREQ, "CMmPacketServiceMessHandler::NetModemRegStatusGetReq" );
+
+ // Data buffer for transactionId and Message Id.
+ TBuf8<2> data;
+ data.Append( NET_MODEM_REG_STATUS_GET_REQ );
+ data.Append( NET_MODEM_REG_STATUS_GET_REQ );
+
+ TIsiSend isimsg( iPhoNetSender->SendBufferDes() );
+ isimsg.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_MODEM_NETWORK );
+ isimsg.CopyData( ISI_HEADER_SIZE, data );
+
+ return ( iPhoNetSender->Send( isimsg.Complete() ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd
+// Breaks an ISI message. NET_MODEM_REG_STATUS_GET_RESP or
+// NET_MODEM_REG_STATUS_IND -ISI message
+// ----------------------------------------------------------------------------
+void CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd(
+ const TIsiReceiveC &aIsiMessage )
+ {
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_NETMODEMREGSTATUSGETRESPORIND, "CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd" );
+
+ TUint sbStartOffSet( 0 );
+ TInt ret( 0 );
+ TBool isNetModemRegStatusInd( NET_MODEM_REG_STATUS_IND ==
+ aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
+
+ TUint8 regStatus( 0 );
+ ret = iMessageRouter->GetNetMessHandler()->ExtractNetworkRegistrationStatus(
+ aIsiMessage,
+ regStatus
+ );
+
+ if ( KErrNone == ret )
+ {
+ if ( !isNetModemRegStatusInd )
+ {
+ CMmDataPackage data;
+ const TUint8 successCode( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE +
+ NET_MODEM_REG_STATUS_GET_RESP_OFFSET_SUCCESSCODE ) );
+
+TFLOGSTRING3("TSY: CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - NetModemRegStatusGetResp, Registration Status:%d Success Code:%d", regStatus, successCode);
+OstTraceExt2( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_NETMODEMREGSTATUSGETRESPORIND, "CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - NetModemRegStatusGetResp, Registration Status=%hhu Success Code=%hhu", regStatus, successCode );
+
+ // Map registration status mapping
+ RPacketService::TRegistrationStatus regStatusClient(
+ MapNtwkRegStatus( regStatus, successCode ) );
+
+ data.PackData( ®StatusClient );
+
+ // Complete
+ iMessageRouter->Complete(
+ EPacketGetNtwkRegStatus,
+ &data,
+ KErrNone );
+ }
+ else
+ {
+TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - NetModemRegStatusInd, Registration Status:%d", regStatus);
+OstTraceExt1( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_NETMODEMREGSTATUSGETRESPORIND, "CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - NetModemRegStatusInd, Registration Status=%hhu", regStatus );
+
+ CMmDataPackage data;
+
+ // Map Status
+ RPacketService::TRegistrationStatus regstatus(
+ MapNtwkRegStatus( regStatus ) );
+
+ // Pack data for completion
+ data.PackData( ®status );
+
+ // Complete
+ iMessageRouter->Complete(
+ EPacketNotifyChangeOfNtwkRegStatus,
+ &data,
+ KErrNone );
+ }
+ }
+ // No else
+
+ sbStartOffSet = 0;
+
+ // NET_MODEM_GSM_REG_INFO sub block
+ if( isNetModemRegStatusInd )
+ {
+ ret = aIsiMessage.FindSubBlockOffsetById(
+ ISI_HEADER_SIZE + SIZE_NET_MODEM_REG_STATUS_IND,
+ NET_MODEM_GSM_REG_INFO,
+ EIsiSubBlockTypeId8Len8,
+ sbStartOffSet );
+ }
+ else
+ {
+ ret = aIsiMessage.FindSubBlockOffsetById(
+ ISI_HEADER_SIZE + SIZE_NET_MODEM_REG_STATUS_GET_RESP,
+ NET_MODEM_GSM_REG_INFO,
+ EIsiSubBlockTypeId8Len8,
+ sbStartOffSet );
+ }
+
+ // Check that NET_MODEM_GSM_REG_INFO sub block is present
+ if ( KErrNone == ret )
+ {
+ // Get cs services
+ const TBool csServices( aIsiMessage.Get8bit(
+ sbStartOffSet +
+ NET_MODEM_GSM_REG_INFO_OFFSET_CSSERVICES ) );
+ // Get gprs support in cell
+ const TBool gprsSupported( aIsiMessage.Get8bit(
+ sbStartOffSet +
+ NET_MODEM_GSM_REG_INFO_OFFSET_GPRSSUPPORTINCELL ) );
+ // Get edge gprs support
+ const TBool edgeGprsSupport( aIsiMessage.Get8bit(
+ sbStartOffSet +
+ NET_MODEM_GSM_REG_INFO_OFFSET_EGPRSSUPPORTINCELL ) );
+
+ const TBool dtmSupportInCell( aIsiMessage.Get8bit(
+ sbStartOffSet +
+ NET_MODEM_GSM_REG_INFO_OFFSET_DTMSUPPORTINCELL ) );
+
+ // save last DTM support
+ iLastDtmSupportInCell = dtmSupportInCell;
+
+TFLOGSTRING3("TSY: CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - CS Services:%d GPRS support in cell:%d", csServices, gprsSupported);
+TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - EdgeGprsSupport:%d", edgeGprsSupport);
+TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - DtmSupport:%d", dtmSupportInCell);
+OstTraceExt2( TRACE_NORMAL, DUP3_CMMPACKETSERVICEMESSHANDLER_NETMODEMREGSTATUSGETRESPORIND, "CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - CS Services=%hhu GPRS support in cell=%hhu", csServices, gprsSupported );
+OstTraceExt1( TRACE_NORMAL, DUP4_CMMPACKETSERVICEMESSHANDLER_NETMODEMREGSTATUSGETRESPORIND, "CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - EdgeGprsSupport=%hhu", edgeGprsSupport );
+OstTraceExt1( TRACE_NORMAL, DUP5_CMMPACKETSERVICEMESSHANDLER_NETMODEMREGSTATUSGETRESPORIND, "CMmPacketServiceMessHandler::NetModemRegStatusGetRespOrInd - DtmSupport=%hhu", dtmSupportInCell );
+
+ // Complete notification to the active extension
+ CompleteGsmRegistrationInfo(
+ csServices,
+ gprsSupported,
+ edgeGprsSupport );
+
+ // Complete EPacketNotifyTransferCapsIPC
+ CompletePacketNotifyTransferCaps(
+ edgeGprsSupport );
+
+ // Get gprs network mode
+ const TUint8 gprsNetworkMode( aIsiMessage.Get8bit(
+ sbStartOffSet +
+ NET_MODEM_GSM_REG_INFO_OFFSET_GPRSNETWORKMODE ) );
+
+ CompleteNotifyMSClassChange( gprsNetworkMode );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsConfigureReq
+// Constructs and sends GPDS_CONFIGURE_REQ ISI message.
+// This request is used to set attach mode, class C mode or/and MT context
+// activation mode. Mode to be change should be set to other value than default
+// ( GPDS_ATTACH_MODE_DEFAULT, GPDS_MT_ACT_MODE_DEFAULT or GPDS_CLASSC_MODE_DEFAULT )
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::GpdsConfigureReq(
+ const TUint8 aTransactionId,
+ const TUint8 aAttachMode,
+ const TUint8 aMtContextActivationMode,
+ const TUint8 aClassCMode,
+ RMmCustomAPI::TSetAlwaysOnMode alwaysOnMode )
+ {
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsConfigureReq.\n\t Attach Mode:%d\n", aAttachMode );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGUREREQ, "CMmPacketServiceMessHandler::GpdsConfigureReq;aAttachMode=%hhu", aAttachMode );
+
+ TUint8 aAolContext = GPDS_AOL_CTX_NOT_ACTIVE;
+ iAlwaysOnMode = alwaysOnMode;
+
+ TFLOGSTRING3("TSY: CMmPacketServiceMessHandler::GpdsConfigureReq.\n \t Mt Context Activation Mode:%d\n\t Class C Mode:%d\n", aMtContextActivationMode, aClassCMode );
+OstTraceExt2( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGUREREQ, "CMmPacketServiceMessHandler::GpdsConfigureReq;aMtContextActivationMode=%hhu;aClassCMode=%hhu", aMtContextActivationMode, aClassCMode );
+
+ switch ( iAlwaysOnMode )
+ {
+ case RMmCustomAPI::EAlwaysModeHPLMN :
+ {
+ aAolContext = GPDS_AOL_CTX_HPLMN_ACTIVE;
+ break;
+ }
+ case RMmCustomAPI::EAlwaysModeVPLMN:
+ {
+ aAolContext = GPDS_AOL_CTX_VPLMN_ACTIVE;
+ break;
+ }
+ case RMmCustomAPI::EAlwaysModeBoth:
+ {
+ aAolContext = GPDS_AOL_CTX_ACTIVE;
+ break;
+ }
+ case RMmCustomAPI::EAlwaysModeNeither:
+ {
+ aAolContext = GPDS_AOL_CTX_NOT_ACTIVE;
+ break;
+ }
+ default:
+ {
+
+ TFLOGSTRING2("CMmPacketServiceMessHandler::GpdsConfigureReq.\n\t AOL Context Mode:%d\n", aAolContext);
+OstTraceExt1( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGUREREQ, "CMmPacketServiceMessHandler::GpdsConfigureReq;aAolContext=%hhu", aAolContext );
+
+ break;
+ }
+ }
+
+ // Introduce data buffer for needed Gpds Configure Request data
+ TBuf8<KBuffSizeFourBytes> data;
+ data.Append( aAttachMode );
+ data.Append( aMtContextActivationMode );
+ data.Append( aClassCMode );
+ data.Append( aAolContext );
+
+ TUint8 transactionId( 0 );
+
+ // Create gpds configure request, 0xDC - KDummyTrIdDC is dummy for identifying calling method
+ if ( KDummyTrIdDC == aTransactionId )
+ {
+ transactionId = KDummyTrIdDC;
+ }
+ else if ( KSetAlwaysOnMode == aTransactionId )
+ {
+ transactionId = KSetAlwaysOnMode;
+ }
+ else
+ {
+ transactionId = GPDS_CONFIGURE_REQ;
+ }
+
+ // Message sent via Phonet
+ return iPhoNetSender->Send(
+ PN_GPDS, transactionId, GPDS_CONFIGURE_REQ, data );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsConfigureResp
+// Breaks a GPDS_CONFIGURE_RESP ISI message.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsConfigureResp(
+ const TIsiReceiveC& aIsiMessage ) const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsConfigureResp.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGURERESP, "CMmPacketServiceMessHandler::GpdsConfigureResp" );
+
+ TInt errorValue( KErrNone );
+ TBool called( EFalse );
+
+ const TUint8 transactionId( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONFIGURE_RESP_OFFSET_UTID ) );
+
+ // Is this request called
+ if ( GPDS_CONFIGURE_REQ == transactionId
+ || KDummyTrIdDC == transactionId
+ || KSetAlwaysOnMode == transactionId)
+ // 0xDC is dummy for identifying calling method
+ {
+ called = ETrue;
+ }
+ //no else
+
+ if ( called )
+ {
+ // Get status
+ const TUint8 status( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONFIGURE_RESP_OFFSET_STATUS ) );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsConfigureResp.\n\t Status:%d\n", status );
+OstTraceExt1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGURERESP, "CMmPacketServiceMessHandler::GpdsConfigureResp;status=%hhu", status );
+
+ if ( GPDS_CONFIGURE_REQ == transactionId )
+ {
+ if ( GPDS_OK != status )
+ {
+ errorValue = KErrGeneral;
+ }
+ //no else
+
+ // Complete
+ iMessageRouter->Complete(
+ EPacketSetAttachMode,
+ errorValue );
+ }
+ // if called SetPrefBearer 0xDC is dummy for identifying calling method
+ else if ( KDummyTrIdDC == transactionId )
+ {
+ // error mapping
+ if ( GPDS_OK != status )
+ {
+ errorValue = KErrGeneral;
+ }
+ //no else
+
+ // Complete
+ iMessageRouter->Complete(
+ EPacketSetPrefBearer,
+ errorValue );
+ }
+
+ else if ( KSetAlwaysOnMode == transactionId )
+ {
+
+ if ( GPDS_OK != status )
+ {
+ errorValue = KErrWrite;
+ }
+
+ // Complete
+ iMessageRouter->Complete(
+ ECustomSetAlwaysOnMode,
+ errorValue );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsTransferStatusInd
+// Breaks a GPDS_TRANSFER_STATUS_IND ISI message
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsTransferStatusInd(
+ const TIsiReceiveC& aIsiMessage )
+ {
+
+ const TUint8 transferCause( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_TRANSFER_STATUS_IND_OFFSET_TRANSFERCAUSE) );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsTransferStatusInd.\n \t Transfer cause:%d\n", transferCause );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSTRANSFERSTATUSIND, "CMmPacketServiceMessHandler::GpdsTransferStatusInd;transferCause=%hhu", transferCause );
+
+ CompleteTransferStatusIndication( transferCause );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsContextIdCreateInd
+// Breaks a GPDS_CONTEXT_ID_CREATE_IND ISI-message.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsContextIdCreateInd(
+ const TIsiReceiveC& aIsiMessage ) const
+ {
+ // Get context id from message
+ const TUint8 contextId( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONTEXT_ID_CREATE_IND_OFFSET_CID ) );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsContextIdCreateInd.\n\t Context Id:%d\n", contextId );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONTEXTIDCREATEIND, "CMmPacketServiceMessHandler::GpdsContextIdCreateInd;contextId=%hhu", contextId );
+
+ // initial variables
+ CMmDataPackage data;
+ TInfoName contextName;
+ contextName.Zero();
+
+ // Get Contextname from CMmPacketMesshandlerContextList
+ TInt ret( iPacketMesshandlerContextList->
+ GetContextNameByContextId( contextId, contextName ) );
+
+ // Dialup context
+ if( KErrArgument == ret )
+ {
+ iPacketMesshandlerContextList->SetDialUpContextId( contextId );
+ }
+ //no else
+
+ data.PackData( &contextName, &ret );
+
+ iMessageRouter->Complete(
+ EPacketNotifyContextAdded,
+ &data,
+ KErrNone);
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsConfigurationInfoInd
+// Breaks a GPDS_CONFIGURATION_INFO_IND ISI-message.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsConfigurationInfoInd(
+ const TIsiReceiveC& aIsiMessage ) const
+ {
+
+ CMmDataPackage data;
+
+ // Get class C mode
+ const TUint8 classC( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONFIGURATION_INFO_IND_OFFSET_CLASSCMODE) );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsConfigurationInfoInd.\n\t Class C Mode:%d\n", classC );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGURATIONINFOIND, "CMmPacketServiceMessHandler::GpdsConfigurationInfoInd;classC=%hhu", classC );
+
+ RPacketService::TPreferredBearer bearer(
+ RPacketService::EBearerPacketSwitched );
+
+ // set bearer
+ if ( GPDS_CLASSC_MODE_GSM == classC )
+ {
+ bearer = RPacketService::EBearerCircuitSwitched;
+ }
+
+ // Pack data
+ data.PackData( &bearer );
+
+ // Complete
+ iMessageRouter->Complete(
+ EPacketNotifyAttachModeChange,
+ &data,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsContextNwiActRejectReq
+// Creates GPDS_CONTEXT_NWI_ACT_REJECT_REQ ISI message.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::GpdsContextNwiActRejectReq() const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsContextNwiActRejectReq.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONTEXTNWIACTREJECTREQ, "CMmPacketServiceMessHandler::GpdsContextNwiActRejectReq" );
+
+ // Introduce data buffer for needed GpdsContextNwiActRejectReq data
+ // Needed length is 1
+ TBuf8<1> data;
+ data.Append( GPDS_CAUSE_ACT_REJECT );
+
+ // Message sent via Phonet
+ return iPhoNetSender->Send(
+ PN_GPDS,
+ GPDS_CONTEXT_NWI_ACT_REJECT_REQ,
+ GPDS_CONTEXT_NWI_ACT_REJECT_REQ,
+ data );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsContextNwiActRejectResp
+// Breaks a GPDS_CONTEXT_NWI_ACT_REJECT_RESP ISI-message.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsContextNwiActRejectResp(
+ const TIsiReceiveC& /*aIsiMessage*/) const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsContextNwiActRejectResp.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONTEXTNWIACTREJECTRESP, "CMmPacketServiceMessHandler::GpdsContextNwiActRejectResp" );
+
+ iMessageRouter->Complete(
+ EPacketRejectActivationRequest,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsContextNwiActRequestInd
+// Breaks a GPDS_CONTEXT_NWI_ACT_REQUEST_IND ISI-message.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsContextNwiActRequestInd(
+ const TIsiReceiveC& aIsiMessage )
+ {
+
+ RPacketContext::TContextConfigGPRS completeNotifyContextActivationReq;
+ // DataPackage
+ CMmDataPackage data;
+
+ // Read pdp type from isi message
+ const TUint8 pdpType( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONTEXT_NWI_ACT_REQUEST_IND_OFFSET_PDPTYPE ) );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsContextNwiActRequestInd. PdpType:%d", pdpType );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONTEXTNWIACTREQUESTIND, "CMmPacketServiceMessHandler::GpdsContextNwiActRequestInd;pdpType=%hhu", pdpType );
+
+ TPtrC8 pdpAddress;
+ TPtrC8 accessPointName;
+ TUint sbStartOffSet( 0 );
+
+ // GPDS_PDP_ADDRESS_INFO sub block
+ TInt retValue ( aIsiMessage.FindSubBlockOffsetById(
+ ISI_HEADER_SIZE + SIZE_GPDS_CONTEXT_NWI_ACT_REQUEST_IND,
+ GPDS_PDP_ADDRESS_INFO,
+ EIsiSubBlockTypeId8Len8,
+ sbStartOffSet ) );
+
+ if ( KErrNone == retValue )
+ {
+ TUint8 addressLen( aIsiMessage.Get8bit(
+ sbStartOffSet + GPDS_PDP_ADDRESS_INFO_OFFSET_ADDRLENGTH ) );
+ // Read pdp address from GPDS_PDP_ADDRESS_INFO sub block
+ pdpAddress.Set( aIsiMessage.GetData(
+ sbStartOffSet + GPDS_PDP_ADDRESS_INFO_OFFSET_ADDRESS,
+ addressLen ) );
+ }
+ //no else
+
+ if ( 0 < pdpAddress.Length() )
+ {
+ CMmStaticUtility::ConvertIPAddressToClient(
+ pdpAddress,
+ completeNotifyContextActivationReq.iPdpAddress );
+ }
+ //no else
+
+ // GPDS_APN_INFO sub block
+ retValue = aIsiMessage.FindSubBlockOffsetById(
+ ISI_HEADER_SIZE + SIZE_GPDS_CONTEXT_NWI_ACT_REQUEST_IND,
+ GPDS_APN_INFO,
+ EIsiSubBlockTypeId8Len8,
+ sbStartOffSet );
+
+ if ( KErrNone == retValue )
+ {
+ TUint8 apnSize( aIsiMessage.Get8bit(
+ sbStartOffSet + GPDS_APN_INFO_OFFSET_ADDRLENGTH ) );
+ // Read access point name from GPDS_APN_INFO sub block
+ accessPointName.Set( aIsiMessage.GetData(
+ sbStartOffSet + GPDS_APN_INFO_OFFSET_APNNAME, apnSize ) );
+ }
+ //no else
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsContextNwiActRequestInd.\n \t Pdp Type:%d\n", pdpType );
+OstTraceExt1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_GPDSCONTEXTNWIACTREQUESTIND, "CMmPacketServiceMessHandler::GpdsContextNwiActRequestInd;pdpType=%hhu", pdpType );
+
+ // Map server pdp type to client pdp type
+ CMmStaticUtility::MapPdpTypeToClient(
+ completeNotifyContextActivationReq.iPdpType, pdpType );
+
+ // Copy aAccessPointName from TDesC8& to RPacketContext::TGSNAddress
+ completeNotifyContextActivationReq.iAccessPointName.Copy(
+ accessPointName );
+
+ // Packdata for completion
+ data.PackData( &completeNotifyContextActivationReq );
+
+ // Complete indication
+ iMessageRouter->Complete(
+ EPacketNotifyContextActivationRequested,
+ &data,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsConfigurationInfoReq
+// Constructs and sends GPDS_CONFIGURATION_INFO_REQ ISI message.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::GpdsConfigurationInfoReq(
+ TBool aCalledOnInitPhase ) const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsConfigurationInfoReq.\n\t" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGURATIONINFOREQ, "CMmPacketServiceMessHandler::GpdsConfigurationInfoReq" );
+
+ TBuf8<1> data;
+ TUint8 transactionId( 0 );
+
+ // Create gpds configuration info request
+ if ( aCalledOnInitPhase )
+ {
+ //0xDF -KDummyTrIdDF is dummy transaction id
+ transactionId = KDummyTrIdDF;
+ }
+ else
+ {
+ transactionId = GPDS_CONFIGURATION_INFO_REQ;
+ }
+
+ // Message sent via Phonet
+ return iPhoNetSender->Send(
+ PN_GPDS, transactionId, GPDS_CONFIGURATION_INFO_REQ, data );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsConfigurationInfoResp
+// Breaks a GPDS_CONFIGURATION_INFO_RERESP ISI-message.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsConfigurationInfoResp(
+ const TIsiReceiveC& aIsiMessage ) const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsConfigurationInfoResp.\n\t" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGURATIONINFORESP, "CMmPacketServiceMessHandler::GpdsConfigurationInfoResp" );
+
+ CMmDataPackage data;
+ TBool ret( EFalse );
+
+ // Is this request called
+ if ( GPDS_CONFIGURATION_INFO_REQ == aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONFIGURATION_INFO_RESP_OFFSET_UTID ) )
+ {
+ ret = ETrue;
+ }
+ //no else
+
+ if ( ret )
+ {
+ // Get attach mode
+ const TUint8 attachMode( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONFIGURATION_INFO_RESP_OFFSET_ATTACHMODE ) );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::GpdsConfigurationInfoResp.\n\t Attach mode:%d\n", attachMode );
+OstTraceExt1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_GPDSCONFIGURATIONINFORESP, "CMmPacketServiceMessHandler::GpdsConfigurationInfoResp;attachMode=%hhu", attachMode );
+
+ RPacketService::TAttachMode attachModeForCompletion(
+ RPacketService::EAttachWhenNeeded );
+
+ if ( GPDS_ATTACH_MODE_AUTOMATIC == attachMode )
+ {
+ attachModeForCompletion = RPacketService::EAttachWhenPossible;
+ }
+ //no else
+
+ data.PackData( &attachModeForCompletion );
+ iMessageRouter->Complete(
+ EPacketGetAttachMode,
+ &data,
+ KErrNone );
+ }
+ // If transaction id is 0xDF - KDummyTrIdDF, this is response to the request made during
+ // initialisation
+ else if ( KDummyTrIdDF == aIsiMessage.Get8bit( ISI_HEADER_SIZE +
+ GPDS_CONFIGURATION_INFO_RESP_OFFSET_UTID) )
+ {
+ // Get class c mode
+ const TUint8 classCMode ( aIsiMessage.Get8bit( ISI_HEADER_SIZE +
+ GPDS_CONFIGURATION_INFO_RESP_OFFSET_CLASSCMODE ) );
+
+ RPacketService::TPreferredBearer bearer(
+ RPacketService::EBearerPacketSwitched );
+
+ if ( GPDS_CLASSC_MODE_GSM == classCMode )
+ {
+ bearer = RPacketService::EBearerCircuitSwitched;
+ }
+ //no else
+
+ // Pack data
+ data.PackData( &bearer );
+ // Complete
+ iMessageRouter->Complete(
+ EPacketNotifyAttachModeChange,
+ &data,
+ KErrNone );
+ }
+ //no else
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsContextConfigureResp
+// Response for default dial-up context configuration.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::GpdsContextConfigureResp(
+ const TIsiReceiveC& aIsiMessage ) const
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsContextConfigureResp.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONTEXTCONFIGURERESP, "CMmPacketServiceMessHandler::GpdsContextConfigureResp" );
+
+ TBool called( EFalse );
+
+ if ( GPDS_CONTEXT_CONFIGURE_REQ == aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONTEXT_CONFIGURE_RESP_OFFSET_UTID ) )
+ {
+ called = ETrue;
+ }
+ //no else
+
+ if ( called )
+ {
+ const TUint8 status ( aIsiMessage.Get8bit(
+ ISI_HEADER_SIZE + GPDS_CONTEXT_CONFIGURE_RESP_OFFSET_STATUS ) );
+
+ TInt errorCause ( KErrGeneral );
+
+ if ( GPDS_OK == status )
+ {
+ errorCause = KErrNone;
+ }
+ //no else
+
+ iMessageRouter->Complete(
+ EPacketSetDefaultContextParams,
+ errorCause );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GpdsContextConfigureReq
+// Request for default dial-up context configuration.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::GpdsContextConfigureReq(
+ TUint8 aDataCompression,
+ TUint8 aHeaderCompression,
+ TBuf8<KAccessPointBuffer256> aAccessPointName,
+ TUint8 aPdpType )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GpdsContextConfigureReq.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GPDSCONTEXTCONFIGUREREQ, "CMmPacketServiceMessHandler::GpdsContextConfigureReq" );
+
+ // Append data for ISI message
+ TBuf8<SIZE_GPDS_CONTEXT_CONFIGURE_REQ + SIZE_GPDS_COMP_INFO +
+ SIZE_GPDS_APN_INFO + GPDS_MAX_APN_STRING_SIZE +
+ SIZE_GPDS_SHARED_RADIO_ACTIVITY_REQ_INFO> messageData;
+
+ messageData.Append( GPDS_CID_ALL );
+ messageData.Append( aPdpType );
+ messageData.Append( GPDS_CONT_TYPE_NORMAL );
+ messageData.Append( KGpdsPadding ); //primary CID
+ messageData.Append( KGpdsPadding ); //filler
+ // number of subblocks
+ // GPDS_APN_INFO, GPDS_COM_INFO and GPDS_SHARED_RADIO_ACTIVITY_REQ_INFO
+ TUint8 subBlockCount( 3 );
+ messageData.Append( subBlockCount );
+
+ // Set the APN info
+ TInt apnLength( aAccessPointName.Length() );
+
+ // Add GPDS_APN_INFO subblock
+ TIsiSubBlock gpdsApnInfoSb(
+ messageData,
+ GPDS_APN_INFO,
+ EIsiSubBlockTypeId8Len8 );
+
+ messageData.Append( static_cast<TUint8>( apnLength ) );
+ messageData.Append( aAccessPointName );
+ gpdsApnInfoSb.CompleteSubBlock();
+
+ // Add GPDS_COMP_INFO subblock
+ TIsiSubBlock gpdsCompInfoSb(
+ messageData,
+ GPDS_COMP_INFO,
+ EIsiSubBlockTypeId8Len8 );
+
+ messageData.Append( aDataCompression );
+ messageData.Append( aHeaderCompression );
+ gpdsCompInfoSb.CompleteSubBlock();
+
+ // Add GPDS_SHARED_RADIO_ACTIVITY_REQ_INFO sub block
+ TIsiSubBlock radioActivitySubBlock(
+ messageData,
+ GPDS_SHARED_RADIO_ACTIVITY_REQ_INFO,
+ EIsiSubBlockTypeId8Len8 );
+
+ // contains no parameters
+ messageData.Append( KGpdsPadding );
+ messageData.Append( KGpdsPadding );
+ radioActivitySubBlock.CompleteSubBlock();
+
+ // Send Isi message via Phonet
+ return iPhoNetSender->Send(
+ PN_GPDS, GPDS_CONTEXT_CONFIGURE_REQ,
+ GPDS_CONTEXT_CONFIGURE_REQ,
+ messageData );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::MapNtwkRegStatus
+// Maps network reg status to Packet Data reg status.
+// ----------------------------------------------------------------------------
+//
+RPacketService::TRegistrationStatus CMmPacketServiceMessHandler::MapNtwkRegStatus(
+ const TUint8 aRegistrationStatus,
+ const TUint8 aSuccessCode ) const
+ {
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::MapNtwkRegStatus. aRegistrationStatus: %d", aRegistrationStatus);
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_MAPNTWKREGSTATUS, "CMmPacketServiceMessHandler::MapNtwkRegStatus;aRegistrationStatus=%hhu", aRegistrationStatus );
+
+ RPacketService::TRegistrationStatus registrationStatus(
+ RPacketService::EUnknown );
+
+ switch ( aRegistrationStatus )
+ {
+ case NET_REG_STATUS_HOME:
+ {
+ // Registration status is ERegisteredOnHomeNetwork
+ registrationStatus = RPacketService::ERegisteredOnHomeNetwork;
+ break;
+ }
+ case NET_REG_STATUS_ROAM:
+ {
+ // Registration status is ERegisteredRoaming
+ registrationStatus = RPacketService::ERegisteredRoaming;
+ break;
+ }
+ case NET_REG_STATUS_NOSERV:
+ {
+ // if aSuccessCode is KNetCauseNetNotFound or
+ // KNetCauseNoSelectedNetwork
+ if ( NET_CAUSE_NET_NOT_FOUND == aSuccessCode ||
+ NET_CAUSE_NO_SELECTED_NETWORK == aSuccessCode )
+ {
+ // Registration status is ENotRegisteredAndNotAvailable
+ registrationStatus =
+ RPacketService::ENotRegisteredAndNotAvailable;
+ }
+ else
+ {
+ // Registration status is ENotRegisteredButAvailable
+ registrationStatus =
+ RPacketService::ENotRegisteredButAvailable;
+ }
+ break;
+ }
+ case NET_REG_STATUS_NOSERV_SEARCHING:
+ {
+ // Registration status is ENotRegisteredSearching
+ registrationStatus = RPacketService::ENotRegisteredSearching;
+ break;
+ }
+ case NET_REG_STATUS_NOSERV_NOTSEARCHING:
+ {
+ // Registration status is ENotRegisteredNotSearching
+ registrationStatus = RPacketService::ENotRegisteredNotSearching;
+ break;
+ }
+ case NET_REG_STATUS_NOSERV_NOSIM:
+ case NET_REG_STATUS_NOSERV_SIM_REJECTED_BY_NW:
+ {
+ // Registration status is ERegistrationDenied
+ registrationStatus = RPacketService::ERegistrationDenied;
+ break;
+ }
+ case NET_REG_STATUS_POWER_OFF:
+ case NET_REG_STATUS_NSPS:
+ {
+ // Registration status is ENotRegisteredAndNotAvailable
+ registrationStatus = RPacketService::ENotRegisteredAndNotAvailable;
+ break;
+ }
+ default:
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::MapNtwkRegStatus: Default, DO NOTHING\n" );
+OstTrace0( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_MAPNTWKREGSTATUS, "CMmPacketServiceMessHandler::MapNtwkRegStatus, Default, DO NOTHING" );
+ // Do nothing
+ break;
+ }
+ }
+
+ TFLOGSTRING3("TSY: CMmPacketServiceMessHandler::MapNtwkRegStatus.\n \t Registration Status Server:%d\n\t Registration Status Client:%d\n", aRegistrationStatus, registrationStatus );
+OstTraceExt2( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_MAPNTWKREGSTATUS, "CMmPacketServiceMessHandler::MapNtwkRegStatus;aRegistrationStatus=%hhu;registrationStatus=%d", aRegistrationStatus, registrationStatus );
+
+ return registrationStatus;
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::CompleteGsmRegistrationInfo
+// Completes GSM Registration Info from GPDS Server.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::CompleteGsmRegistrationInfo(
+ const TBool aCsServices,
+ const TBool aGprsSupportInCell,
+ const TBool aEdgeGprsSupport )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::CompleteGsmRegistrationInfo.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_COMPLETEGSMREGISTRATIONINFO, "CMmPacketServiceMessHandler::CompleteGsmRegistrationInfo" );
+
+ CMmDataPackage data;
+ // save aCsServices internally
+ iLastCsServices = aCsServices;
+ // save aGprsSupportInCell internally
+ iLastGprsSupportInCell = aGprsSupportInCell;
+
+ // check that value is changed
+ if ( iLastEdgeGprsSupport != aEdgeGprsSupport )
+ {
+ iLastEdgeGprsSupport = aEdgeGprsSupport;
+
+ // Pack data for completion
+ data.PackData( &iLastEdgeGprsSupport );
+
+ // EMmTsyNotifyEGprsInfoChangeIPC is internal IPC
+ iMessageRouter->Complete(
+ EMmTsyNotifyEGprsInfoChangeIPC,
+ &data,
+ KErrNone );
+ }
+ //no else
+
+ // call CompleteDynamicCapsChange()
+ CompleteDynamicCapsChange();
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps
+// Completes EPacketNotifyTransferCapsIPC.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps(
+ const TBool aEdgeGprsSupport )
+ {
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps.\n" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_COMPLETEPACKETNOTIFYTRANSFERCAPS, "CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps" );
+
+ TDynamicTransferCapsFlags transferCaps ( 0 );
+
+ if ( aEdgeGprsSupport )
+ {
+ transferCaps |= KCapsEGPRS;
+
+ TFLOGSTRING2( "TSY: CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps, Transfer Caps = %d.", transferCaps );
+OstTrace1( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_COMPLETEPACKETNOTIFYTRANSFERCAPS, "CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps;transferCaps=%d", transferCaps );
+ }
+
+ if ( iLastHsdpaAllocationStatus )
+ {
+ transferCaps |= KCapsHSDPA;
+
+ TFLOGSTRING2( "TSY: CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps, Transfer Caps = %d.", transferCaps );
+OstTrace1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_COMPLETEPACKETNOTIFYTRANSFERCAPS, "CMmPacketServiceMessHandler::CompletePacketNotifyTransferCaps;transferCaps=%d", transferCaps );
+ }
+
+ CMmDataPackage dataPackage;
+ dataPackage.PackData( &transferCaps );
+
+ // Complete transfer caps
+ iMessageRouter->Complete (
+ EPacketNotifyTransferCapsIPC,
+ &dataPackage,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::CompleteDynamicCapsChange
+// Completes dynamic capabilities change through Message manager
+// Packs changed parameters
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::CompleteDynamicCapsChange()
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::CompleteDynamicCapsChange.");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_COMPLETEDYNAMICCAPSCHANGE, "CMmPacketServiceMessHandler::CompleteDynamicCapsChange" );
+
+ CMmDataPackage data;
+ data.PackData( &iLastGprsSupportInCell, &iLastCsServices );
+
+ iMessageRouter->Complete (
+ EPacketNotifyDynamicCapsChange,
+ &data,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::SetAttachMode
+// Sets attach mode to the GPDS server.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::SetAttachMode(
+ RPacketService::TAttachMode* const aMode )
+ {
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::SetAttachMode.\n\t Attach Mode:%d\n", *aMode );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_SETATTACHMODE, "CMmPacketServiceMessHandler::SetAttachMode;aMode=%hhu", *aMode );
+
+ TInt ret( KErrNone );
+ TUint8 attachMode( GPDS_ATTACH_MODE_DEFAULT );
+
+ if ( RPacketService::EAttachWhenPossible == *aMode )
+ {
+ attachMode = GPDS_ATTACH_MODE_AUTOMATIC;
+ }
+ else if ( RPacketService::EAttachWhenNeeded == *aMode )
+ {
+ attachMode = GPDS_ATTACH_MODE_MANUAL;
+ }
+ else
+ {
+ ret = KErrArgument;
+ }
+
+ if ( KErrNone == ret )
+ {
+ // GPDS_CONFIGURE_REQ is for identifying calling method
+ ret = GpdsConfigureReq(
+ GPDS_CONFIGURE_REQ,
+ attachMode,
+ GPDS_MT_ACT_MODE_DEFAULT,
+ GPDS_CLASSC_MODE_DEFAULT,
+ iAlwaysOnMode );
+ }
+ //no else
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::PacketContextList
+// Returns poineter to CMmPacketMesshandlerContextList
+// ----------------------------------------------------------------------------
+//
+CMmPacketContextMesshandlerList* CMmPacketServiceMessHandler::PacketContextList()
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::PacketContextList.");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_PACKETCONTEXTLIST, "CMmPacketServiceMessHandler::PacketContextList" );
+
+ return iPacketMesshandlerContextList;
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::GetMessageRouter
+// Returns pointer to MessageRouter
+// ----------------------------------------------------------------------------
+//
+CMmMessageRouter* CMmPacketServiceMessHandler::GetMessageRouter()
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::GetMessageRouter");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_GETMESSAGEROUTER, "CMmPacketServiceMessHandler::GetMessageRouter" );
+
+ return iMessageRouter;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::SetPreferredBearer
+// Sets preferrer bearer to the GPDS server.
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::SetPreferredBearer(
+ const CMmDataPackage& aDataPackage )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::SetPreferredBearer");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_SETPREFERREDBEARER, "CMmPacketServiceMessHandler::SetPreferredBearer" );
+
+ RPacketService::TPreferredBearer* abearer = NULL;
+ TInt ret( KErrNone );
+
+ aDataPackage.UnPackData( &abearer );
+
+ TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::SetPreferredBearer.\n\t Preferred Bearer:%d\n", &abearer );
+OstTraceExt1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_SETPREFERREDBEARER, "CMmPacketServiceMessHandler::SetPreferredBearer;abearer=%hhu", *abearer );
+
+ TUint8 bearer( GPDS_CLASSC_MODE_DEFAULT );
+
+ if ( RPacketService::EBearerCircuitSwitched == *abearer )
+ {
+ bearer = GPDS_CLASSC_MODE_GSM;
+ }
+ else if ( RPacketService::EBearerPacketSwitched == *abearer )
+ {
+ bearer = GPDS_CLASSC_MODE_GPRS;
+ }
+ else
+ {
+ ret = KErrArgument;
+ }
+
+ if ( KErrNone == ret )
+ {
+ // 0xDC - KDummyTrIdDC is dummy for indentifying calling method
+ ret = GpdsConfigureReq(
+ KDummyTrIdDC,
+ GPDS_ATTACH_MODE_DEFAULT,
+ GPDS_MT_ACT_MODE_ACCEPT,
+ bearer,
+ iAlwaysOnMode );
+ }
+ //no else
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::SetDefaultContextParams
+// Set default context parameters
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::SetDefaultContextParams(
+ const CMmDataPackage& aPackage )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::SetDefaultContextParams");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_SETDEFAULTCONTEXTPARAMS, "CMmPacketServiceMessHandler::SetDefaultContextParams" );
+
+ TInt ret( KErrNotSupported );
+ TUint8 dataCompression( GPDS_PDP_HCOMP_DEFAULT );
+ TUint8 headerCompression( GPDS_PDP_HCOMP_DEFAULT );
+ // temporary access point name
+ RPacketContext::TGSNAddress tempAccessPointName;
+ // temporary Pdp Type
+ RPacketContext::TProtocolType tempPdpType( RPacketContext::EPdpTypeCDPD );
+
+ TPacketDataConfigBase* aconfig = NULL;
+ aPackage.UnPackData ( &aconfig );
+
+ // Check that the mode given in aconfig is GPRS
+ if ( TPacketDataConfigBase::KConfigGPRS == aconfig->ExtensionId() )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::SetDefaultContextParams. ExtensionId: KConfigGPRS");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_SETDEFAULTCONTEXTPARAMS, "CMmPacketServiceMessHandler::SetDefaultContextParams, ExtensionId: KConfigGPRS" );
+
+ RPacketContext::TContextConfigGPRS& configGPRS =
+ *reinterpret_cast<RPacketContext::TContextConfigGPRS*>( aconfig );
+
+ // Set data compression
+ dataCompression = GPDS_PDP_HCOMP_OFF;
+
+ if ( configGPRS.iPdpCompression &
+ RPacketContext::KPdpDataCompression )
+ {
+ dataCompression = GPDS_PDP_HCOMP_ON;
+ }
+ //no else
+
+ // Set header compression
+ headerCompression = GPDS_PDP_HCOMP_OFF;
+
+ if ( configGPRS.iPdpCompression &
+ RPacketContext::KPdpHeaderCompression )
+ {
+ headerCompression = GPDS_PDP_HCOMP_ON;
+ }
+ //no else
+
+ tempAccessPointName = configGPRS.iAccessPointName;
+ tempPdpType = configGPRS.iPdpType;
+ }
+
+ // Check that the mode given in aconfig is R99_R4
+ else if ( TPacketDataConfigBase::KConfigRel99Rel4 ==
+ aconfig->ExtensionId() )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::SetDefaultContextParams. ExtensionId: KConfigRel99Rel4");
+OstTrace0( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_SETDEFAULTCONTEXTPARAMS, "CMmPacketServiceMessHandler::SetDefaultContextParams, ExtensionId: KConfigRel99Rel4" );
+
+ RPacketContext::TContextConfigR99_R4& configR99_R4 =
+ *reinterpret_cast<RPacketContext::TContextConfigR99_R4*>(
+ aconfig );
+
+ tempAccessPointName = configR99_R4.iAccessPointName;
+ tempPdpType = configR99_R4.iPdpType;
+ }
+ //no else
+
+ TUint8 pdpType( GPDS_PDP_TYPE_DEFAULT );
+
+ // This part is for pdp type mapping
+ if ( RPacketContext::EPdpTypeIPv4 == tempPdpType )
+ {
+ pdpType = GPDS_PDP_TYPE_IPV4;
+ }
+ else if ( RPacketContext::EPdpTypeIPv6 == tempPdpType )
+ {
+ pdpType = GPDS_PDP_TYPE_IPV6;
+ }
+ else if ( RPacketContext::EPdpTypePPP == tempPdpType )
+ {
+ pdpType = GPDS_PDP_TYPE_PPP;
+ }
+ else
+ {
+ pdpType = GPDS_PDP_TYPE_DEFAULT;
+ }
+
+ if ( GPDS_PDP_TYPE_DEFAULT != pdpType )
+ {
+ // Call GpdsContextConfigureReq
+ ret = GpdsContextConfigureReq(
+ dataCompression,
+ headerCompression,
+ tempAccessPointName,
+ pdpType );
+ }
+ //no else
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::CompleteTransferStatusIndication
+// Completes Transfer Status Indication.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::CompleteTransferStatusIndication(
+ const TUint8 aTransferCause )
+ {
+TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::CompleteTransferStatusIndication.\n \t Transfer Cause:%d\n", aTransferCause );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_COMPLETETRANSFERSTATUSINDICATION, "CMmPacketServiceMessHandler::CompleteTransferStatusIndication;aTransferCause=%hhu", aTransferCause );
+
+ RPacketService::TStatus packetStatus( RPacketService::EStatusAttached );
+ RMmCustomAPI::TRauEventStatus rauindication( RMmCustomAPI::ERauEventActive );
+
+ TInt error( KErrNone );
+ TBool resumed( EFalse );
+ TBool completeToTsy( ETrue );
+ // Pack and complete
+ CMmDataPackage data;
+
+ switch ( aTransferCause )
+ {
+ case GPDS_TRANSFER_CAUSE_RESUMED:
+ {
+ resumed = ETrue;
+ rauindication = RMmCustomAPI::ERauEventResumed;
+ data.PackData( &rauindication );
+ iMessageRouter->Complete( ECustomNotifyRauEventIPC, &data, error );
+TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::CompleteTransferStatusIndicationResumed.\n \t Rau indication:%d\n", rauindication );
+OstTraceExt1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_COMPLETETRANSFERSTATUSINDICATION, "CMmPacketServiceMessHandler::CompleteTransferStatusIndication;rauindication=%hhu", rauindication );
+ break;
+ }
+ case GPDS_TRANSFER_CAUSE_ATTACHED:
+ {
+ // packetStatus is 'RPacketService::EStatusAttached' by default, do nothing
+ break;
+ }
+ case GPDS_TRANSFER_CAUSE_DETACHED:
+ {
+ packetStatus = RPacketService::EStatusUnattached;
+ break;
+ }
+ case GPDS_TRANSFER_CAUSE_SUSPENDED_NO_COVERAGE:
+ case GPDS_TRANSFER_CAUSE_SUSPENDED_CALL_SMS:
+ case GPDS_TRANSFER_CAUSE_SUSPENDED_CALL:
+ {
+ packetStatus = RPacketService::EStatusSuspended;
+ break;
+ }
+ case GPDS_TRANSFER_CAUSE_SUSPENDED_RAU :
+ {
+TFLOGSTRING2("TSY: CMmPacketServiceMessHandler::CompleteTransferStatusIndicationActivated.\n \t Rau indication:%d\n", rauindication );
+OstTraceExt1( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_COMPLETETRANSFERSTATUSINDICATION, "CMmPacketServiceMessHandler::CompleteTransferStatusIndication;rauindication=%hhu", rauindication );
+ // rauindication is 'RMmCustomAPI::ERauEventActive' by default, no need to set here
+ data.PackData( &rauindication );
+ iMessageRouter->Complete( ECustomNotifyRauEventIPC, &data, error );
+ completeToTsy = EFalse;
+ break;
+ }
+ case GPDS_TRANSFER_CAUSE_SUSPENDED_LU :
+ {
+ completeToTsy = EFalse;
+ break;
+ }
+#if ( NCP_COMMON_CELLMO_BRANCH_SUPPORT == NCP_COMMON_CELLMO_BRANCH_0711 )
+ case GPDS_TRANSFER_CAUSE_DSAC_RESTRICTION:
+ {
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::CompleteTransferStatusIndication. DSAC: connection failed because of barred PS \n");
+OstTrace0( TRACE_NORMAL, DUP4_CMMPACKETSERVICEMESSHANDLER_COMPLETETRANSFERSTATUSINDICATION, "CMmPacketServiceMessHandler::CompleteTransferStatusIndication, DSAC: connection failed because of barred PS \n" );
+ // Core error and extended error are completed to CTSY
+ error = ( KErrGeneral & 0x0000FFFF ) |
+ ( KErrGsmPSConnectionBarred << 16 );
+ break;
+ }
+#endif // NCP_COMMON_CELLMO_BRANCH_SUPPORT == NCP_COMMON_CELLMO_BRANCH_0711
+ default:
+ {
+
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::CompleteTransferStatusIndication.Default case: DO NOTHING\n");
+OstTrace0( TRACE_NORMAL, DUP3_CMMPACKETSERVICEMESSHANDLER_COMPLETETRANSFERSTATUSINDICATION, "CMmPacketServiceMessHandler::CompleteTransferStatusIndication, Default case: DO NOTHING" );
+ break;
+ }
+ }
+
+ if ( completeToTsy )
+ {
+ //Pack and complete
+ CMmDataPackage data;
+ data.PackData( &packetStatus, &resumed );
+ iMessageRouter->Complete(
+ EPacketNotifyStatusChange, &data, error );
+
+ CompleteDynamicCapsChange();
+ }
+ //no else
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::CompleteNotifyMSClassChange
+// Completes MS Class change notification to the Service Tsy.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::CompleteNotifyMSClassChange(
+ const TUint8 aGprsNetworkMode )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::CompleteNotifyMSClassChange");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_COMPLETENOTIFYMSCLASSCHANGE, "CMmPacketServiceMessHandler::CompleteNotifyMSClassChange" );
+
+ CMmDataPackage data;
+ RPacketService::TMSClass msClass( RPacketService::EMSClassUnknown );
+
+ // If Gprs supported in current cell
+ if ( iLastGprsSupportInCell )
+ {
+ if ( RMobilePhone::ENetworkModeWcdma == iCurrentMode ||
+ iLastDtmSupportInCell )
+ {
+ // MS Class is Class A
+ msClass = RPacketService::EMSClassDualMode;
+ }
+ else if ( NET_GPRS_MODE_II == aGprsNetworkMode ||
+ NET_GPRS_MODE_I == aGprsNetworkMode )
+ {
+ // MS Class is Class B
+ msClass = RPacketService::EMSClassSuspensionRequired;
+ }
+ else if ( NET_GPRS_MODE_III == aGprsNetworkMode )
+ {
+ if ( iLastCsServices )
+ {
+ // MS Class is Class C where cs and gprs both are supported
+ msClass = RPacketService::EMSClassAlternateMode;
+ }
+ else
+ {
+ // MS Class is Class C where only gprs is supported
+ msClass = RPacketService::EMSClassPacketSwitchedOnly;
+ }
+ }
+ //no else
+ }
+ else if ( iLastCsServices )
+ {
+ // MS Class is Class C where only cs is supported
+ msClass = RPacketService::EMSClassCircuitSwitchedOnly;
+ }
+ //no else
+
+ // Pack and complete
+ data.PackData( &msClass );
+ iMessageRouter->Complete(
+ EPacketNotifyMSClassChange,
+ &data,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::CompleteGpdsStatusRequest
+// Completes Gpds Status Request.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::CompleteGpdsStatusRequest(
+ const TUint8 aAttachStatus,
+ const TUint8 aTransferStatus )
+ {
+
+ TFLOGSTRING3("TSY: CMmPacketService::CompleteGpdsStatusRequest.\n\t Attach Status:%d\n\t Transfer Status:%d\n", aAttachStatus, aTransferStatus );
+OstTraceExt1( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_COMPLETEGPDSSTATUSREQUEST, "CMmPacketServiceMessHandler::CompleteGpdsStatusRequest;aAttachStatus=%hhu", aAttachStatus );
+
+ // Initiate EStatusAttached to packet status
+ RPacketService::TStatus packetStatus( RPacketService::EStatusAttached );
+
+ if ( GPDS_DETACHED == aAttachStatus )
+ {
+ // If attach status is detached, packet status is unattached
+ packetStatus = RPacketService::EStatusUnattached;
+ }
+ else if ( GPDS_TRANSFER_NOT_AVAIL == aTransferStatus )
+ {
+ // If attach status is attached and transfer status is not available,
+ // packet status is suspended
+ packetStatus = RPacketService::EStatusSuspended;
+ }
+
+ TBool resumed( EFalse );
+ CMmDataPackage data;
+ data.PackData( &packetStatus, &resumed );
+
+ // Complete
+ iMessageRouter->Complete(
+ EPacketNotifyStatusChange,
+ &data,
+ KErrNone );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler:NetRatReq
+// Current Network Radio Access Technology Request
+// ----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceMessHandler::NetRatReq()
+ {
+TFLOGSTRING("TSY: CMmPacketServiceMessHandler::NetRatReq");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_NETRATREQ, "CMmPacketServiceMessHandler::NetRatReq" );
+
+ // Set the message data that consists of one parameters
+ TBuf8<KBuffSizeOneByte> messageData;
+ // Ask information of current network radio access technology
+ messageData.Append( NET_CURRENT_RAT );
+
+ // Send Isi message via Phonet
+ return( iPhoNetSender->Send(
+ PN_MODEM_NETWORK,
+ KDummyTrIdDC,
+ NET_RAT_REQ,
+ messageData ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::NetRatIndOrResp
+// Breaks NET_RAT_IND and NET_RAT_RESP ISI-messages.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::NetRatIndOrResp(
+ const TIsiReceiveC &aIsiMessage )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::NetRatIndOrResp");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_NETRATINDORRESP, "CMmPacketServiceMessHandler::NetRatIndOrResp" );
+
+ TBool readSubBlock( ETrue );
+ TBool isNetRatResp( NET_RAT_RESP == aIsiMessage.
+ Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
+
+ // If received message is response then transaction id must be dummy 0xDC
+ // and success code must ok.
+ if ( isNetRatResp )
+ {
+ // 0xDC - KDummyTrIdDC is dummy transaction id
+ if ( NET_CAUSE_INVALID_PARAMETER == aIsiMessage.Get8bit( ISI_HEADER_SIZE +
+ NET_RAT_RESP_OFFSET_SUCCESSCODE ) || KDummyTrIdDC != aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) )
+ {
+ readSubBlock = EFalse;
+ }
+ //no else
+ }
+ //no else
+
+ if ( readSubBlock )
+ {
+ TUint sbStartOffSet( 0 );
+ TInt ret( 0 );
+
+ // Get network registration info common sub block
+ if ( isNetRatResp )
+ {
+ ret = aIsiMessage.FindSubBlockOffsetById( ISI_HEADER_SIZE +
+ SIZE_NET_RAT_RESP ,NET_RAT_INFO, EIsiSubBlockTypeId8Len8, sbStartOffSet );
+ }
+ else
+ {
+ ret = aIsiMessage.FindSubBlockOffsetById( ISI_HEADER_SIZE +
+ SIZE_NET_RAT_IND ,NET_RAT_INFO, EIsiSubBlockTypeId8Len8, sbStartOffSet );
+ }
+
+ if ( KErrNone == ret )
+ {
+ // Get Rat Name
+ TUint8 ratName( aIsiMessage.Get8bit( sbStartOffSet +
+ NET_RAT_INFO_OFFSET_RATNAME ) );
+
+ RMobilePhone::TMobilePhoneNetworkMode ntwkMode(
+ RMobilePhone::ENetworkModeUnknown );
+
+ // If Gsm Rat is supported
+ if ( NET_GSM_RAT == ratName )
+ {
+ // GSM currently not supported.
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::NetRatIndOrResp. RMobilePhone::ENetworkModeGsm");
+
+ ntwkMode = RMobilePhone::ENetworkModeGsm;
+OstTrace0( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_NETRATINDORRESP, "CMmPacketServiceMessHandler::NetRatIndOrResp, RMobilePhone::ENetworkModeGsm" );
+ }
+ // Else if Wcdma Rat is supported
+ else if ( NET_UMTS_RAT == ratName )
+ {
+ // WCDMA currently not supported.
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::NetRatIndOrResp. RMobilePhone::ENetworkModeWcdma");
+OstTrace0( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_NETRATINDORRESP, "CMmPacketServiceMessHandler::NetRatIndOrResp, RMobilePhone::ENetworkModeWcdma" );
+ ntwkMode = RMobilePhone::ENetworkModeWcdma;
+ }
+
+ // Store networkmode internally
+ iCurrentMode = ntwkMode;
+
+ CMmDataPackage data;
+ data.PackData( &ntwkMode );
+
+ // Complete EPacketNotifyReleaseModeChange IPC is used for this request
+ iMessageRouter->Complete(
+ EPacketNotifyReleaseModeChange,
+ &data,
+ KErrNone );
+ }
+ //no else
+ }
+ //no else
+ }
+
+// ----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::HandleError
+// Handles CMmPacketServiceMessHandler's errors
+// that comes via PhoNetReceiver RunError method.
+// ----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::HandleError(
+ const TIsiReceiveC& /*aIsiMessage*/,
+ TInt /*aError*/ )
+ {
+
+ TFLOGSTRING("TSY: CMmPacketServiceMessHandler::HandleError DO NOTHING");
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_HANDLEERROR, "CMmPacketServiceMessHandler::HandleError DO NOTHING" );
+ //none
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPacketServiceMessHandler::NetRadioInfoInd
+// Breaks a NET_RADIO_INFO_IND ISI message. Check the HSDPA allocated status
+// and completes with EPacketNotifyTransferCapsIPC.
+// -----------------------------------------------------------------------------
+//
+void CMmPacketServiceMessHandler::NetRadioInfoInd(
+ const TIsiReceiveC& aIsiMessage ) // received ISI message
+ {
+
+ TFLOGSTRING( "TSY: CMmPacketServiceMessHandler::NetRadioInfoInd" );
+OstTrace0( TRACE_NORMAL, CMMPACKETSERVICEMESSHANDLER_NETRADIOINFOIND, "CMmPacketServiceMessHandler::NetRadioInfoInd" );
+
+ TDynamicTransferCapsFlags transferCaps ( 0 );
+ TBool hsdpaAllocated ( EFalse );
+
+ // Find NET_UTRAN_RADIO_INFO sub block
+ TUint sbStartOffSet = 0;
+ TInt retValue = aIsiMessage.FindSubBlockOffsetById( ISI_HEADER_SIZE +
+ SIZE_NET_RADIO_INFO_IND, NET_UTRAN_RADIO_INFO,
+ EIsiSubBlockTypeId8Len8, sbStartOffSet );
+
+ if ( KErrNone == retValue )
+ {
+ // Get HSDPA allocation status
+ hsdpaAllocated = aIsiMessage.Get8bit( sbStartOffSet +
+ NET_UTRAN_RADIO_INFO_OFFSET_HSDPAALLOCATED );
+
+ // Save HSDPA allocation status
+ iLastHsdpaAllocationStatus = hsdpaAllocated;
+
+ TFLOGSTRING2( "TSY: CMmPacketServiceMessHandler::NetRadioInfoInd, HSDPA Allocated = %d.", hsdpaAllocated );
+OstTraceExt1( TRACE_NORMAL, DUP1_CMMPACKETSERVICEMESSHANDLER_NETRADIOINFOIND, "CMmPacketServiceMessHandler::NetRadioInfoInd;hsdpaAllocated=%hhu", hsdpaAllocated );
+ }
+
+ // Dynamic transfer caps
+ if ( hsdpaAllocated )
+ {
+ transferCaps |= KCapsHSDPA;
+
+ TFLOGSTRING2( "TSY: CMmPacketServiceMessHandler::NetRadioInfoInd, Transfer Caps = %d.", transferCaps );
+OstTrace1( TRACE_NORMAL, DUP3_CMMPACKETSERVICEMESSHANDLER_NETRADIOINFOIND, "CMmPacketServiceMessHandler::NetRadioInfoInd;transferCaps=%d", transferCaps );
+ }
+
+// This is done for SUB 403-7200: NokiaTSY: HSUPA Cell Indicator for S60 (S60 3.2.2 / S_CPR8.1).
+// This can be removed when actual implementation for HSUPA Cell Indicator is done.
+// CASW_HSXPA_INDICATOR_SUPPORTED flag.
+#if defined ( CASW_HSXPA_INDICATOR_SUPPORTED ) || defined ( INTERNAL_TESTING_CASW_HSXPA_INDICATOR_SUPPORT )
+
+ TBool hsupaAllocated ( EFalse );
+
+ if ( KErrNone == retValue )
+ {
+ // Get HSUPA allocation status
+ hsupaAllocated = aIsiMessage.Get8bit( sbStartOffSet +
+ NET_UTRAN_RADIO_INFO_OFFSET_HSUPAALLOCATED );
+
+ TFLOGSTRING2( "TSY: CMmPacketServiceMessHandler::NetRadioInfoInd, HSUPA Allocated = %d.", hsupaAllocated );
+OstTraceExt1( TRACE_NORMAL, DUP2_CMMPACKETSERVICEMESSHANDLER_NETRADIOINFOIND, "CMmPacketServiceMessHandler::NetRadioInfoInd;hsupaAllocated=%hhu", hsupaAllocated );
+ }
+
+ if ( hsdpaAllocated || hsupaAllocated )
+ {
+ transferCaps |= KCapsHSDPA;
+
+ // Save HSDPA allocation status
+ iLastHsdpaAllocationStatus = ETrue;
+
+ TFLOGSTRING2( "TSY: CMmPacketServiceMessHandler::NetRadioInfoInd, Transfer Caps (HSDPA or HSUPA) = %d.", transferCaps );
+OstTrace1( TRACE_NORMAL, DUP4_CMMPACKETSERVICEMESSHANDLER_NETRADIOINFOIND, "CMmPacketServiceMessHandler::NetRadioInfoInd;transferCaps=%d", transferCaps );
+
+ }
+#endif // defined ( CASW_HSXPA_INDICATOR_SUPPORTED ) || defined ( INTERNAL_TESTING_CASW_HSXPA_INDICATOR_SUPPORT )
+
+ if ( iLastEdgeGprsSupport )
+ {
+ transferCaps |= KCapsEGPRS;
+
+ TFLOGSTRING2( "TSY: CMmPacketServiceMessHandler::NetRadioInfoInd, Transfer Caps = %d.", transferCaps );
+OstTrace1( TRACE_NORMAL, DUP5_CMMPACKETSERVICEMESSHANDLER_NETRADIOINFOIND, "CMmPacketServiceMessHandler::NetRadioInfoInd;transferCaps=%d", transferCaps );
+ }
+
+ // Pack the data
+ CMmDataPackage dataPackage;
+ dataPackage.PackData( &transferCaps );
+ // Complete transfer caps
+ iMessageRouter->Complete (
+ EPacketNotifyTransferCapsIPC,
+ &dataPackage,
+ KErrNone );
+ }
+
+// End of File
+