diff -r 17af172ffa5f -r 630d2f34d719 cbsref/telephonyrefplugins/atltsy/handler/src/cltsypacketserviceshandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbsref/telephonyrefplugins/atltsy/handler/src/cltsypacketserviceshandler.cpp Tue Aug 31 16:23:08 2010 +0300 @@ -0,0 +1,995 @@ +// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// CLtsyPacketServicesHandler + +#include +#include +#include +#include + +#include "commengine.h" +#include "tsyconfg.h" +#include "cltsypacketserviceshandler.h" +#include "ltsymacros.h" +#include "tsyconfg.h" +#include "mslogger.h" +#include "atgprsattach.h" +#include "atgprsdetach.h" +#include "atgprsntwkregstatus.h" +#include "atgprsconfig.h" +#include "initialisepdpcontext.h" +#include "atgprscontextactivate.h" +#include "activatecontextandgetaddr.h" +#include "atgprscontextdeactivate.h" +#include "atgprscontextdelete.h" +#include "atgprsqosprofile.h" +#include "asynchelperrequest.h" +#include "atgprsntwkregstatuschange.h" + +CLtsyPacketServicesHandler::CLtsyPacketServicesHandler( + CCtsyDispatcherCallback& aCtsyDispatcherCallback, + CGlobalPhonemanager* aGloblePhone) + : iCtsyDispatcherCallback(aCtsyDispatcherCallback), + iGloblePhone(aGloblePhone) + { + } + +CLtsyPacketServicesHandler::~CLtsyPacketServicesHandler() + { + if(iAsyncHelperRequest) + { + delete iAsyncHelperRequest; + iAsyncHelperRequest = NULL; + } + if(iNtwkRegStatusChange) + { + delete iNtwkRegStatusChange; + iNtwkRegStatusChange = NULL; + } + } + +CLtsyPacketServicesHandler* CLtsyPacketServicesHandler::NewLC( + CCtsyDispatcherCallback& aCtsyDispatcherCallback, + CGlobalPhonemanager* aGloblePhone) + { + TSYLOGENTRYEXIT; + CLtsyPacketServicesHandler* self = new (ELeave) CLtsyPacketServicesHandler(aCtsyDispatcherCallback,aGloblePhone); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CLtsyPacketServicesHandler* CLtsyPacketServicesHandler::NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback, + CGlobalPhonemanager* aGloblePhone) + { + TSYLOGENTRYEXIT; + CLtsyPacketServicesHandler* self= + CLtsyPacketServicesHandler::NewLC(aCtsyDispatcherCallback,aGloblePhone); + CleanupStack::Pop(self); + return self; + } + +void CLtsyPacketServicesHandler::ConstructL() +/** + * Second phase constructor. + */ + { + TSYLOGENTRYEXIT; + iAsyncHelperRequest = CAsyncHelperRequest::NewL((*iGloblePhone), iCtsyDispatcherCallback); + iInitialisePdpContext = CInitialisePdpContext::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iNtwkRegStatusChange = CATGprsNtwkRegStatusChange::NewL((*iGloblePhone), iCtsyDispatcherCallback); + } // CLtsyPacketServicesHandler::ConstructL + +TBool CLtsyPacketServicesHandler::IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId) +/** + * Returns whether a Dispatch Interface APi is supported or not. + * + * @param aDispatchApiId Id of Dispatch interface being queried + * @return indication whether interface is supported or not + */ + { + switch(aDispatchApiId) + { + // Insert ApiIds when support is provided in LTSY e.g. + case KLtsyDispatchPacketServicesPacketAttachApiId: + return ETrue; + case KLtsyDispatchPacketServicesGetPacketAttachModeApiId: + return ETrue; + case KLtsyDispatchPacketServicesGetPacketNetworkRegistrationStatusApiId: + return ETrue; + case KLtsyDispatchPacketServicesPacketDetachApiId: + return ETrue; + case KLtsyDispatchPacketServicesSetPdpContextConfigApiId: + return ETrue; + case KLtsyDispatchPacketServicesModifyActivePdpContextApiId: + return EFalse; + case KLtsyDispatchPacketServicesInitialisePdpContextApiId: + return ETrue; + case KLtsyDispatchPacketServicesDeletePdpContextApiId: + return ETrue; + case KLtsyDispatchPacketServicesSetPacketAttachModeApiId: + return EFalse; + case KLtsyDispatchPacketServicesNotifyPacketStatusChangeApiId: + return ETrue; + case KLtsyDispatchPacketServicesSetDefaultPdpContextGprsParamsApiId: + return ETrue; + case KLtsyDispatchPacketServicesSetDefaultPdpContextR99R4ParamsApiId: + return ETrue; + case KLtsyDispatchPacketServicesActivatePdpContextApiId: + return ETrue; + case KLtsyDispatchPacketServicesSetPdpContextQosGprsApiId: + return ETrue; + case KLtsyDispatchPacketServicesSetPdpContextQosR99R4ApiId: + return ETrue; + case KLtsyDispatchPacketServicesSetPdpContextQosR5ApiId: + return ETrue; + case KLtsyDispatchPacketServicesRejectNetworkInitiatedContextActivationRequestApiId: + return ETrue; + case KLtsyDispatchPacketServicesDeactivatePdpContextApiId: + return ETrue; + case KLtsyDispatchPacketServicesAddPacketFilterApiId: + return EFalse; + case KLtsyDispatchPacketServicesGetStatusApiId: + return ETrue; + case KLtsyDispatchPacketServicesGetStaticCapabilitiesApiId: + return EFalse; + case KLtsyDispatchPacketServicesGetMaxNoMonitoredServiceListsApiId: + return EFalse; + case KLtsyDispatchPacketServicesGetMaxNoActiveServicesApiId: + return EFalse; + case KLtsyDispatchPacketServicesInitialiseMbmsContextApiId: + return EFalse; + case KLtsyDispatchPacketServicesGetMbmsNetworkServiceStatusApiId: + return EFalse; + case KLtsyDispatchPacketServicesUpdateMbmsMonitorServiceListApiId: + return EFalse; + case KLtsyDispatchPacketServicesUpdateMbmsSessionListApiId: + return EFalse; + case KLtsyDispatchPacketServicesRemovePacketFilterApiId: + return EFalse; + default: + return EFalse; + } + } + +void CLtsyPacketServicesHandler::IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask) +/** + * Returns the set of callback indicators that are supported. + * + * @param aIdGroup ID of group that is being queried e.g. aIdGroup=EIndIdGroup1 + * @param aIndIdBitMask [out] argument that should return a bitmask indicating which indicator callbacks are supported. + */ + { + //Create bitmask with bitset for each indicator ID that is supported. E.g. + if(aIdGroup == EIndIdGroup1) + aIndIdBitMask = KLtsyDispatchPacketServicesNotifyQosProfileChangedIndId | + KLtsyDispatchPacketServicesNotifyRatTransferCapsChangeIndId | + KLtsyDispatchPacketServicesNotifyPacketDynamicCapsChangeIndId | + KLtsyDispatchPacketServicesNotifyPdpContextAddedIndId | + KLtsyDispatchPacketServicesNotifyNetworkInitiatedContextActivationRequestIndId | + KLtsyDispatchPacketServicesNotifyPdpContextConfigChangedIndId | + KLtsyDispatchPacketServicesNotifyPdpContextStatusChangeIndId | + KLtsyDispatchPacketServicesNotifyPacketNetworkRegistrationStatusIndId; + else + aIndIdBitMask = 0; //no indicators from other groups supported + } + + +TInt CLtsyPacketServicesHandler::HandlePacketAttachReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesPacketAttachComp() + * + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + LOGTEXTREL(_L8("pkt:attach")); + + TInt ret = KErrNotSupported; + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + CATGprsAttach* ATGprsAttach = CATGprsAttach::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iGloblePhone->iEventSignalActive = ETrue; + iGloblePhone->SetActiveRequest(ATGprsAttach); + ATGprsAttach->StartRequest(); + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in attach"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandlePacketAttachReqL + + +TInt CLtsyPacketServicesHandler::HandleGetPacketAttachModeReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesGetPacketAttachModeComp() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + TInt ret = KErrNone; + iAsyncHelperRequest->SetRequestId(MLtsyDispatchPacketServicesGetPacketAttachMode::KLtsyDispatchPacketServicesGetPacketAttachModeApiId); + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleGetPacketAttachModeReqL + + +TInt CLtsyPacketServicesHandler::HandleGetPacketNetworkRegistrationStatusReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesGetPacketNetworkRegistrationStatusComp() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + CATGprsNtwkRegStatus* ATGprsNtwkRegStatus = CATGprsNtwkRegStatus::NewL(*iGloblePhone, + iCtsyDispatcherCallback, + *iNtwkRegStatusChange); + iGloblePhone->iEventSignalActive = ETrue; + iGloblePhone->SetActiveRequest(ATGprsNtwkRegStatus); + ATGprsNtwkRegStatus->StartRequest(); + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in GetPacketNetworkRegistrationStatus"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleGetPacketNetworkRegistrationStatusReqL + + +TInt CLtsyPacketServicesHandler::HandlePacketDetachReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesPacketDetachComp() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + LOGTEXTREL(_L8("pkt:detach")); + + TInt ret = KErrNotSupported; + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + CATGprsDetach* ATGprsDetach = CATGprsDetach::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iGloblePhone->iEventSignalActive = ETrue; + iGloblePhone->SetActiveRequest(ATGprsDetach); + ATGprsDetach->StartRequest(); + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in detach"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandlePacketDetachReqL + + +TInt CLtsyPacketServicesHandler::HandleSetPdpContextConfigReqL(const TDesC& aContextId, + const TDesC8& aAccessPointName, + const RPacketContext::TProtocolType aPdpType, + const TDesC8& aPdpAddress, + const TDesC8& aPcoBuffer) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextConfigComp() + * + * @param contextId The context name, the descriptor should be TBuf<10> + * @param iAccessPointName The access name which identifies the GGSN to be used + * @param iPdpType The protocol type + * @param iPdpAddress The PDP address for this context + * @param aPcoBuffer The pco buffer + * + * The purpose of the protocol configuration options (PCO) is to transfer external network protocol options + * associated with a PDP context activation, and transfer additional (protocol) data + * (e.g. configuration parameters, error codes or messages/events) associated with an external protocol + * or an application. + * The protocol configuration options (PCO) is a type 4 information element with a minimum length of 3 + * octets and a maximum length of 253 octets + * In order to generate the PCO buffer a TTlvStruct object is being used. The TTlvStruct wraps the buffers + * inserted to the PCO and identifies the buffers with given IDs. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + LOGTEXTREL2(_L8("pkt:setconfig,APN>%S<"), &aAccessPointName); + TInt ret = KErrNotSupported; + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + TInt tmp = GetContext(aContextId); + if(tmp >= 0) + { + iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iAccessPointName = aAccessPointName; + iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iPdpType = aPdpType; + iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iPdpAddress = aPdpAddress; + iGloblePhone->iContextList[tmp]->iDefContextConfigGPRS.iProtocolConfigOption.iMiscBuffer = aPcoBuffer; + + + CATGPRSSetConfig* ATGPRSSetConfig = CATGPRSSetConfig::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iGloblePhone->iEventSignalActive = ETrue; + ATGPRSSetConfig->SetContext(iGloblePhone->iContextList[tmp]->iContextID); + iGloblePhone->SetActiveRequest(ATGPRSSetConfig); + ATGPRSSetConfig->StartRequest(); + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in setconfig, not found"), tmp); + } + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in setconfig"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleSetPdpContextConfigReqL + + +TInt CLtsyPacketServicesHandler::HandleModifyActivePdpContextReqL(const TDesC& /*aContextName*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesModifyActivePdpContextComp() + * + * @param aContextName Context name for which the modification is intended + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleModifyActivePdpContextReqL + + +TInt CLtsyPacketServicesHandler::HandleInitialisePdpContextReqL(const TDesC& aPrimaryContextName, const TDesC& /*aSecondaryContextName*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesInitialisePdpContextComp() + * + * @param aPrimaryContextName Primary context name in the form of a character string, the descriptor should be TBuf<10> + * @param aSecondaryContextName Optional secondary context name in the form of a character string, the descriptor should be TBuf<10> + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + LOGTEXT2(_L8("aPrimaryContextName >%S<"), &aPrimaryContextName); + LOGTEXTREL2(_L8("pkt:initctxt>%S<"), &aPrimaryContextName); + TInt ret = KErrNone; + TInt cid = 0; + TInt contextCount = iGloblePhone->iContextList.Count(); + if(contextCount > 0) + { + for(TInt i = 0;i < contextCount;i++) + { + if(iGloblePhone->iContextList[i]->iInfo.iName == aPrimaryContextName) + { + LOGTEXTREL2(_L8("pkt:err(%d) in initctxt, already existed"), ret); + return KErrNotSupported; + } + } + } + + cid = GenerateNewContextCid(aPrimaryContextName); + LOGTEXT2(_L8("newcid=%d"),cid); + if(cid > MaxNumberOfContexts()) + { + LOGTEXTREL2(_L8("pkt:err(%d) in initctxt, context number overflow"), ret); + return KErrNotSupported; + } + + TContextInfomation *tmpContext = new TContextInfomation; + tmpContext->iInfo.iName = aPrimaryContextName; + tmpContext->iContextID = cid; + iGloblePhone->iContextList.Append(tmpContext); + LOGTEXT2(_L8("iGloblePhone->iContextList[0]->iContextID=%d"),iGloblePhone->iContextList[0]->iContextID); + + iInitialisePdpContext->SetContext(cid); + iInitialisePdpContext->StartRequest(); + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleInitialisePdpContextReqL + + +TInt CLtsyPacketServicesHandler::HandleDeletePdpContextReqL(const TDesC& aContextName) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesDeletePdpContextComp() + * + * @param aContextName the context name to be deleted, , the descriptor should be TBuf<10> + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + LOGTEXTREL2(_L8("pkt:delete aContextName:\t%S"),&aContextName); + + TInt ret = KErrNotSupported; + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + TInt tmp = -1; + tmp = GetContext(aContextName); + if(tmp >= 0) + { + CATGprsContextDelete* ATGprsContextDelete = CATGprsContextDelete::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iGloblePhone->iEventSignalActive = ETrue; + ATGprsContextDelete->SetContext(iGloblePhone->iContextList[tmp]->iContextID); + iGloblePhone->SetActiveRequest(ATGprsContextDelete); + ATGprsContextDelete->StartRequest(); + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in deletectxt, not found"), tmp); + ret = KErrNotFound; + } + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in deletectxt"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleDeletePdpContextReqL + + +TInt CLtsyPacketServicesHandler::HandleSetPacketAttachModeReqL(RPacketService::TAttachMode /*aAttachMode*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetPacketAttachModeComp() + * + * @param aAttachMode the attach mode due to be set. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + TInt ret = KErrNotSupported; + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleSetPacketAttachModeReqL + + +TInt CLtsyPacketServicesHandler::HandleNotifyPacketStatusChangeReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesNotifyPacketStatusChangeComp() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleNotifyPacketStatusChangeReqL + + +TInt CLtsyPacketServicesHandler::HandleSetDefaultPdpContextGprsParamsReqL(const RPacketContext::TContextConfigGPRS& aContextConfigGprs) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetDefaultPdpContextParamsComp() + * + * @param aContextConfigGprs Default GPRS parameters + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + TInt ret = 0; + SetDefaultContextConfigGPRS(&aContextConfigGprs); + iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesSetDefaultPdpContextGprsParamsApiId); + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleSetDefaultPdpContextGprsParamsReqL + +TInt CLtsyPacketServicesHandler::HandleSetDefaultPdpContextR99R4ParamsReqL(const RPacketContext::TContextConfigR99_R4& /*aContextConfigR99R4*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetDefaultPdpContextParamsComp() + * + * @param aContextConfigR99R4 Default R99/R4 parameters + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + TInt ret = KErrNotSupported; + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleSetDefaultPdpContextR99R4ParamsReqL + + + +TInt CLtsyPacketServicesHandler::HandleActivatePdpContextReqL(const TDesC& aContextName) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesActivatePdpContextComp() + * + * @param aContextName The context name. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + LOGTEXTREL(_L8("pkt:activatectxt")); + TInt ret = KErrNotSupported; + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + TInt tmp = GetContext(aContextName); + if(tmp >= 0) + { + CActivatContextAndGetAddr* ActivatContextAndGetAddr = CActivatContextAndGetAddr::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iGloblePhone->iEventSignalActive = ETrue; + ActivatContextAndGetAddr->SetContext(iGloblePhone->iContextList[tmp]->iContextID); + iGloblePhone->SetActiveRequest(ActivatContextAndGetAddr); + ActivatContextAndGetAddr->StartRequest(); + } + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in activatectxt"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleActivatePdpContextReqL + + +TInt CLtsyPacketServicesHandler::HandleSetPdpContextQosGprsReqL(const TDesC& aContextName, const RPacketQoS::TQoSGPRSRequested& aQoSConfig) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextQosComp() + * + * @param aContextName the name of the context. + * @param aQoSConfig the QoS configuration parameters. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + LOGTEXTREL(_L8("pkt:setctxtQos")); + TInt ret = KErrNotSupported; + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + TInt tmp = GetContext(aContextName); + if(tmp >= 0) + { + CATGprsSetProfileReq* ATGprsSetProfileReq = CATGprsSetProfileReq::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iGloblePhone->iEventSignalActive = ETrue; + iGloblePhone->iContextList[tmp]->iQoSConfig = aQoSConfig; + ATGprsSetProfileReq->SetContext(iGloblePhone->iContextList[tmp]->iContextID); + iGloblePhone->SetActiveRequest(ATGprsSetProfileReq); + ATGprsSetProfileReq->StartRequest(); + } + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in setctxtQos"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleSetPdpContextQosGprsReqL + +TInt CLtsyPacketServicesHandler::HandleSetPdpContextQosR99R4ReqL(const TDesC& aContextName, const RPacketQoS::TQoSR99_R4Requested& /*aQoSConfig*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextQosComp() + * + * @param aContextName The name of the context. + * @param aQoSConfig The QoS configuration parameters. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + RPacketQoS::TQoSGPRSRequested qosGprsReq; + qosGprsReq.iReqPrecedence = RPacketQoS::EPriorityMediumPrecedence; + qosGprsReq.iMinPrecedence = RPacketQoS::EPriorityMediumPrecedence; + qosGprsReq.iReqDelay = RPacketQoS::EUnspecifiedDelayClass; + qosGprsReq.iMinDelay = RPacketQoS::EUnspecifiedDelayClass; + qosGprsReq.iReqReliability = RPacketQoS::EUnspecifiedReliabilityClass; + qosGprsReq.iMinReliability = RPacketQoS::EUnspecifiedReliabilityClass; + qosGprsReq.iReqPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput; + qosGprsReq.iMinPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput; + qosGprsReq.iReqMeanThroughput = RPacketQoS::EMeanThroughputBestEffort; + qosGprsReq.iMinMeanThroughput = RPacketQoS::EMeanThroughputBestEffort; + + return HandleSetPdpContextQosGprsReqL(aContextName, qosGprsReq); + } // CLtsyPacketServicesHandler::HandleSetPdpContextQosR99R4ReqL + +TInt CLtsyPacketServicesHandler::HandleSetPdpContextQosR5ReqL(const TDesC& aContextName, const RPacketQoS::TQoSR5Requested& /*aQoSConfig*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextQosComp() + * + * @param aContextName The name of the context. + * @param aQoSConfig The QoS configuration parameters. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + RPacketQoS::TQoSGPRSRequested qosGprsReq; + qosGprsReq.iReqPrecedence = RPacketQoS::EPriorityMediumPrecedence; + qosGprsReq.iMinPrecedence = RPacketQoS::EPriorityMediumPrecedence; + qosGprsReq.iReqDelay = RPacketQoS::EUnspecifiedDelayClass; + qosGprsReq.iMinDelay = RPacketQoS::EUnspecifiedDelayClass; + qosGprsReq.iReqReliability = RPacketQoS::EUnspecifiedReliabilityClass; + qosGprsReq.iMinReliability = RPacketQoS::EUnspecifiedReliabilityClass; + qosGprsReq.iReqPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput; + qosGprsReq.iMinPeakThroughput = RPacketQoS::EUnspecifiedPeakThroughput; + qosGprsReq.iReqMeanThroughput = RPacketQoS::EMeanThroughputBestEffort; + qosGprsReq.iMinMeanThroughput = RPacketQoS::EMeanThroughputBestEffort; + + return HandleSetPdpContextQosGprsReqL(aContextName, qosGprsReq); + } // CLtsyPacketServicesHandler::HandleSetPdpContextQosR5ReqL + + + +TInt CLtsyPacketServicesHandler::HandleRejectNetworkInitiatedContextActivationRequestReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesRejectNetworkInitiatedContextActivationRequestComp() + * + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleRejectNetworkInitiatedContextActivationRequestReqL + + +TInt CLtsyPacketServicesHandler::HandleDeactivatePdpContextReqL(const TDesC& aContextName) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesDeactivatePdpContextComp() + * + * @param aContextName The context name that is to be deactivated. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + LOGTEXTREL2(_L8("pkt:deact ctxt>%S<"),&aContextName); + TInt ret = KErrNotSupported; + + ret = iGloblePhone->CheckGlobalPhoneStatus(); + if(KErrNone == ret) + { + TInt tmp = GetContext(aContextName); + if(tmp >= 0) + { + CATGprsContextDeactivate* ATGprsContextDeactivate = CATGprsContextDeactivate::NewL(*iGloblePhone, iCtsyDispatcherCallback); + iGloblePhone->iEventSignalActive = ETrue; + ATGprsContextDeactivate->SetContext(iGloblePhone->iContextList[tmp]->iContextID); + iGloblePhone->SetActiveRequest(ATGprsContextDeactivate); + ATGprsContextDeactivate->StartRequest(); + ret = KErrNone; + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in deact ctxt, not found"), tmp); + ret = KErrNotFound; + } + } + else + { + LOGTEXTREL2(_L8("pkt:err(%d) in deact ctxt"), ret); + } + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleDeactivatePdpContextReqL + +TInt CLtsyPacketServicesHandler::HandleAddPacketFilterSyncL(const TDesC& /*aContextName*/, CArrayFixFlat& /*aContextFilter*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextConfigComp + * + * @param aContextName The name of the context. + * @param aContextFilter An array contains up to eight filters to be used + * for configuring the secondary context. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleAddPacketFilterSyncL + + +TInt CLtsyPacketServicesHandler::HandleGetStatusReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesGetStatus() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + TInt ret = 0; + iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetStatusApiId); + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleGetStatusReqL + +TInt CLtsyPacketServicesHandler::HandleGetStaticCapabilitiesReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesGetStaticCapabilitiesComp() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + TInt ret = 0; + iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetStaticCapabilitiesApiId); + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleGetStaticCapabilitiesReqL + +TInt CLtsyPacketServicesHandler::HandleGetMaxNoMonitoredServiceListsReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesGetMaxNoMonitoredServiceListsComp() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = 0; + iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetMaxNoMonitoredServiceListsApiId); + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleGetMaxNoMonitoredServiceListsReqL + +TInt CLtsyPacketServicesHandler::HandleGetMaxNoActiveServicesReqL() +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesGetMaxNoActiveServicesComp() + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + TInt ret = 0; + iAsyncHelperRequest->SetRequestId(KLtsyDispatchPacketServicesGetMaxNoActiveServicesApiId); + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleGetMaxNoActiveServicesReqL + +TInt CLtsyPacketServicesHandler::HandleInitialiseMbmsContextReqL(const TDesC& /*aContextName*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesInitialiseMbmsContextComp() + * + * @param aContextName The context name in the form of a character string + * the maximum length of the descriptor should not exceed KMaxInfoName. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleInitialiseMbmsContextReqL + +TInt CLtsyPacketServicesHandler::HandleGetMbmsNetworkServiceStatusReqL(TBool /*aAttemptAttach*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesGetMbmsNetworkServiceStatusComp() + * + * @param aAttemptAttach If a GMM attached is to be perfomed. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleGetMbmsNetworkServiceStatusReqL + +TInt CLtsyPacketServicesHandler::HandleUpdateMbmsMonitorServiceListsReqL(TMbmsAction /*aAction*/, const CPcktMbmsMonitoredServiceList& /*aServiceList*/, const CPcktMbmsMonitoredServiceList& /*aChangeList*/) +/** + * It is a request call that is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesUpdateMbmsMonitorServiceListComp() + * + * @param aAction The MBMS action (add, remove or remove all). + * @param aServiceList The current MBMS monitor service availability list as held by the CTSY. + * @param aChangeList The list of entries to be changed as per the action. (e.g. the action = Add, + * the change list will contain entries to be added to the MBMS monitor service availability list) + * + * @return KErrNone on success, otherwise another error code indicating the + * failure. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleUpdateMbmsMonitorServiceListsReqL + + +TInt CLtsyPacketServicesHandler::HandleUpdateMbmsSessionListReqL(const TDesC& /*aContextName*/, TMbmsAction /*aAction*/, TMbmsSessionId /*aSessionId*/, const TMbmsSessionIdList& /*aServiceList*/) +/** + * It is a request call that is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesUpdateMbmsSessionListComp() + * + * @param aContextName The MBMS context name in the form of a character string. + * @param aAction The action to be performed (add, remove or remove all). + * @param aSessionId The MBMS session identifier which needs to be received or removed. + * @param aServiceList The MBMS services table as held by the CTSY. + * + * @return KErrNone on success, otherwise another error code indicating the + * failure. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleUpdateMbmsSessionListReqL + + +TInt CLtsyPacketServicesHandler::HandleRemovePacketFilterSyncL(const TDesC& /*aContextName*/, TInt /*aFilterId*/) +/** + * This request is completed by invoking + * CCtsyDispatcherCallback::CallbackPacketServicesSetPdpContextConfigComp + * + * @param aContextName The name of the context. + * @param aFilterId The filter Id to be removed. + * + * @return KErrNone on success, KErrNotSupported if this request is not supported, + * or another error code to indicate the failure otherwise. + */ + { + TSYLOGENTRYEXIT; + + TInt ret = KErrNotSupported; + + return TSYLOGSETEXITERR(ret); + } // CLtsyPacketServicesHandler::HandleRemovePacketFilterSyncL + +TInt CLtsyPacketServicesHandler::MaxNumberOfContexts() +/** + * This function returns the maximum number of contexts that the phone supports. + */ + { + return iGloblePhone->iPhoneStatus.iGprsMaxNumContexts; + } +TInt CLtsyPacketServicesHandler::GetContext(const TDesC& aName) +/** + * This function returns a specific context + * @param aCount context to Retrieve in linked list. + */ + { + TInt index = -1; + TInt count = iGloblePhone->iContextList.Count(); + for(TInt i = 0; i < count; i++) + { + if(0 ==(iGloblePhone->iContextList[i]->iInfo.iName.Compare(aName))) + { + index = i; + } + } + + LOGTEXT3(_L8("[Ltsy Pkt] iContext->ContextName() >%S<, index=%d"), &aName, index); + return index; + } + +TInt CLtsyPacketServicesHandler::GenerateNewContextCid(const TDesC& /*aName*/) +/** + * This function generates a unique context name and the first not taken cid number. + * There is a 1 to 1 mapping between this Cid and the one in the phone. + * In order to do this we need to check all existing Cids, since they may not + * be in conical order and there can be holes in the list(3,1,4,6,5) we need + * to loop around and find the lowest that we can use to create a name and a new + * Cid. + * @param aName New name that is generated. + * @param aCid New context id. + */ + { + TInt lowestAvailableCid = 1; + TInt count = iGloblePhone->iContextList.Count(); + if(count != 0 ) + { + // There can be gaps between the Cids that the tsy has, so get the + // Cid number between them, if any. This nested for loop will find + // the lowest available cid there is. + for(TInt k = 0; k < count;k++) + { + for(TInt i = 0; i < count;i++) + { + if(iGloblePhone->iContextList[i]->iContextID == lowestAvailableCid) + ++lowestAvailableCid; + } + } + } + return lowestAvailableCid; + } + +void CLtsyPacketServicesHandler::SetDefaultContextConfigGPRS(const RPacketContext::TContextConfigGPRS* aContextConfig) +/** + * This function sets the default context configuration. + * + * @param aContextConfigV01 Set default context configuration. + */ + { + iDefContextConfigGPRS.iPdpType = aContextConfig->iPdpType; + iDefContextConfigGPRS.iAccessPointName.Copy(aContextConfig->iAccessPointName); + iDefContextConfigGPRS.iPdpAddress.Copy(aContextConfig->iPdpAddress); + iDefContextConfigGPRS.iPdpCompression = aContextConfig->iPdpCompression; + iDefContextConfigGPRS.iAnonymousAccessReqd = aContextConfig->iAnonymousAccessReqd; + } +// +// End of file