diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserver/etelmultimode/DTsy/mmtsyline.cpp --- a/telephonyserver/etelmultimode/DTsy/mmtsyline.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserver/etelmultimode/DTsy/mmtsyline.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,276 +1,276 @@ -// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// - -#include "mmtsy.h" -#include "testdef.h" -#include "ETELMM.H" -#include -#include "Dmmlog.h" - - -// -// CLineDMmTsy -// -CLineDMmTsy* CLineDMmTsy::NewL(CPhoneDMmTsy *aPhone,CPhoneFactoryDummyBase* aFac) - { - - CLineDMmTsy* line=new(ELeave) CLineDMmTsy(aPhone,aFac); - CleanupStack::PushL(line); - line->ConstructL(); - CleanupStack::Pop(); - return line; - } - -CLineDMmTsy::CLineDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac) - :CLineDummyBase(aFac), iPhone(aPhone) - {} - -void CLineDMmTsy::ConstructL() - { - CLineDummyBase::ConstructL(); - LOGTEXT(_L8("CLineDMmTsy created")); - } - - -CLineDMmTsy::~CLineDMmTsy() - { - LOGTEXT(_L8("CLineDMmTsy destroyed")); - } - - -CTelObject* CLineDMmTsy::OpenNewObjectByNameL(const TDesC& aName) - { - // An existing call opened by a client - client provides name of call to open - if((aName.Compare(DMMTSY_CALL_NAME1)==KErrNone) || - (aName.Compare(DMMTSY_CALL_NAME2)==KErrNone) || - (aName.Compare(DMMTSY_CALL_NAME3)==KErrNone)) - - return REINTERPRET_CAST(CTelObject*,CCallDMmTsy::NewL(iPhone,FacPtr())); - - return NULL; - } - -CTelObject* CLineDMmTsy::OpenNewObjectL(TDes& aNewName) - { - // A new call opened by a client will have its name allocated by the TSY - aNewName.Append(_L("Call")); - aNewName.AppendNum(++iCallObjectCount); - - return CCallDMmTsy::NewL(iPhone,FacPtr()); - } - - -CTelObject::TReqMode CLineDMmTsy::ReqModeL(const TInt aIpc) - { - // ReqModeL is called from the server's CTelObject::ReqAnalyserL - // in order to check the type of request it has - - // The following are example request types for this dummy TSY - // All TSYs do not have to have these request types but they have been given - // "sensible" values in this test code - - CTelObject::TReqMode ret=0; - switch (aIpc) - { -// -// Non-flow control requests -// - case EMobileLineGetMobileLineStatus: - break; -// -// Notification Requests -// - case EMobileLineNotifyMobileLineStatusChange: - ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately; - break; -// -// Cancel Requests -// - case EMobileLineNotifyMobileLineStatusChangeCancel: - User::Leave(KErrNotSupported); - break; - - default: - ret=CLineBase::ReqModeL(aIpc); - break; - } - return ret; - } - - -TInt CLineDMmTsy::RegisterNotification(const TInt aIpc) - { - // RegisterNotification is called when the server recognises that this notification - // is being posted for the first time on this sub-session object. - - // It enables the TSY to "turn on" any regular notification messages that it may - // receive from the phone - - switch (aIpc) - { - case EMobileLineNotifyMobileLineStatusChange: - LOGTEXT(_L8("CLineDMmTsy: RegisterNotification - Line Status Change ")); - return KErrNone; - default: - // Unknown or invalid sms IPC - return KErrNotSupported; - } - } - -TInt CLineDMmTsy::DeregisterNotification(const TInt aIpc) - { - // DeregisterNotification is called when the server recognises that this notification - // will not be posted again because the last client to have a handle on this sub-session - // object has just closed the handle. - - // It enables the TSY to "turn off" any regular notification messages that it may - // receive from the phone - - switch (aIpc) - { - case EMobileLineNotifyMobileLineStatusChange: - LOGTEXT(_L8("CLineDMmTsy: DeregisterNotification - Line Status Change")); - return KErrNone; - default: - // Unknown or invalid sms IPC - return KErrNotSupported; - } - } - -TInt CLineDMmTsy::NumberOfSlotsL(const TInt aIpc) - { - // NumberOfSlotsL is called by the server when it is registering a new notification - // It enables the TSY to tell the server how many buffer slots to allocate for - // "repost immediately" notifications that may trigger before clients collect them - - TInt numberOfSlots=1; - switch (aIpc) - { - case EMobileLineNotifyMobileLineStatusChange: - LOGTEXT(_L8("CLineDMmTsy: Registered with 5 slots")); - numberOfSlots=5; - break; - default: - // Unknown or invalid Phone IPC - User::Leave(KErrNotSupported); - break; - } - return numberOfSlots; - } - -TInt CLineDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc, - const TDataPackage& aPackage) - { - // ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request - // for the TSY to process - // A request handle, request type and request data are passed to the TSY - - TAny* dataPtr=aPackage.Ptr1(); - - // The request data has to extracted from TDataPackage and the TAny* pointers have to - // be "cast" to the expected request data type - - switch (aIpc) - { -// -// Non-flow control requests -// - case EMobileLineGetMobileLineStatus: - return GetMobileLineStatus(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallStatus*, dataPtr)); - -// -// Notification Requests -// - case EMobileLineNotifyMobileLineStatusChange: - return NotifyMobileLineStatusChange(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallStatus*, dataPtr)); - -// -// Cancel Requests -// - case EMobileLineNotifyMobileLineStatusChangeCancel: - return NotifyMobileLineStatusChangeCancel(aTsyReqHandle); - - default: - return KErrNotSupported; - } - } - -TInt CLineDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle) - { - // CancelService is called by the server when it is "cleaning-up" any still outstanding - // asynchronous requests before closing a client's sub-session. - // This will happen if a client closes its R-class handle without cancelling outstanding - // asynchronous requests. - - switch (aIpc) - { -// -// Cancel Requests -// - case EMobileLineNotifyMobileLineStatusChange: - return NotifyMobileLineStatusChangeCancel(aTsyReqHandle); - default: - return CLineBase::CancelService(aIpc,aTsyReqHandle); - } - } - -TInt CLineDMmTsy::GetCaps(const TTsyReqHandle aTsyReqHandle,RLine::TCaps* aCaps) - { - //set the aux voice bit - aCaps->iFlags |= DMMTSY_MOBILE_LINE_AUX_VOICE; - - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - - -/***********************************************************************************/ -// -// The following methods are called from ExtFunc and/or CancelService. -// Each of these will process a TSY request or cancel a TSY request -// Here, example values are returned or checked within this dummy TSY in order to ensure -// that the integrity of the data passed to/from client is maintained -// -/***********************************************************************************/ - -TInt CLineDMmTsy::GetMobileLineStatus(const TTsyReqHandle aTsyReqHandle,RMobileCall::TMobileCallStatus* aStatus) - { - LOGTEXT(_L8("CLineDMmTsy::GetMobileLineStatus called")); - *aStatus=DMMTSY_CALL_STATUS1; - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CLineDMmTsy::NotifyMobileLineStatusChange(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallStatus* aStatus) - { - if (!iNotifyMobileLineStatusChange++) - { - LOGTEXT(_L8("CLineDMmTsy::NotifyMobileLineStatusChange called")); - *aStatus=DMMTSY_CALL_STATUS2; - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CLineDMmTsy::NotifyMobileLineStatusChangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CLineDMmTsy::NotifyMobileLineStatusChangeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "mmtsy.h" +#include "testdef.h" +#include "ETELMM.H" +#include +#include "Dmmlog.h" + + +// +// CLineDMmTsy +// +CLineDMmTsy* CLineDMmTsy::NewL(CPhoneDMmTsy *aPhone,CPhoneFactoryDummyBase* aFac) + { + + CLineDMmTsy* line=new(ELeave) CLineDMmTsy(aPhone,aFac); + CleanupStack::PushL(line); + line->ConstructL(); + CleanupStack::Pop(); + return line; + } + +CLineDMmTsy::CLineDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac) + :CLineDummyBase(aFac), iPhone(aPhone) + {} + +void CLineDMmTsy::ConstructL() + { + CLineDummyBase::ConstructL(); + LOGTEXT(_L8("CLineDMmTsy created")); + } + + +CLineDMmTsy::~CLineDMmTsy() + { + LOGTEXT(_L8("CLineDMmTsy destroyed")); + } + + +CTelObject* CLineDMmTsy::OpenNewObjectByNameL(const TDesC& aName) + { + // An existing call opened by a client - client provides name of call to open + if((aName.Compare(DMMTSY_CALL_NAME1)==KErrNone) || + (aName.Compare(DMMTSY_CALL_NAME2)==KErrNone) || + (aName.Compare(DMMTSY_CALL_NAME3)==KErrNone)) + + return REINTERPRET_CAST(CTelObject*,CCallDMmTsy::NewL(iPhone,FacPtr())); + + return NULL; + } + +CTelObject* CLineDMmTsy::OpenNewObjectL(TDes& aNewName) + { + // A new call opened by a client will have its name allocated by the TSY + aNewName.Append(_L("Call")); + aNewName.AppendNum(++iCallObjectCount); + + return CCallDMmTsy::NewL(iPhone,FacPtr()); + } + + +CTelObject::TReqMode CLineDMmTsy::ReqModeL(const TInt aIpc) + { + // ReqModeL is called from the server's CTelObject::ReqAnalyserL + // in order to check the type of request it has + + // The following are example request types for this dummy TSY + // All TSYs do not have to have these request types but they have been given + // "sensible" values in this test code + + CTelObject::TReqMode ret=0; + switch (aIpc) + { +// +// Non-flow control requests +// + case EMobileLineGetMobileLineStatus: + break; +// +// Notification Requests +// + case EMobileLineNotifyMobileLineStatusChange: + ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately; + break; +// +// Cancel Requests +// + case EMobileLineNotifyMobileLineStatusChangeCancel: + User::Leave(KErrNotSupported); + break; + + default: + ret=CLineBase::ReqModeL(aIpc); + break; + } + return ret; + } + + +TInt CLineDMmTsy::RegisterNotification(const TInt aIpc) + { + // RegisterNotification is called when the server recognises that this notification + // is being posted for the first time on this sub-session object. + + // It enables the TSY to "turn on" any regular notification messages that it may + // receive from the phone + + switch (aIpc) + { + case EMobileLineNotifyMobileLineStatusChange: + LOGTEXT(_L8("CLineDMmTsy: RegisterNotification - Line Status Change ")); + return KErrNone; + default: + // Unknown or invalid sms IPC + return KErrNotSupported; + } + } + +TInt CLineDMmTsy::DeregisterNotification(const TInt aIpc) + { + // DeregisterNotification is called when the server recognises that this notification + // will not be posted again because the last client to have a handle on this sub-session + // object has just closed the handle. + + // It enables the TSY to "turn off" any regular notification messages that it may + // receive from the phone + + switch (aIpc) + { + case EMobileLineNotifyMobileLineStatusChange: + LOGTEXT(_L8("CLineDMmTsy: DeregisterNotification - Line Status Change")); + return KErrNone; + default: + // Unknown or invalid sms IPC + return KErrNotSupported; + } + } + +TInt CLineDMmTsy::NumberOfSlotsL(const TInt aIpc) + { + // NumberOfSlotsL is called by the server when it is registering a new notification + // It enables the TSY to tell the server how many buffer slots to allocate for + // "repost immediately" notifications that may trigger before clients collect them + + TInt numberOfSlots=1; + switch (aIpc) + { + case EMobileLineNotifyMobileLineStatusChange: + LOGTEXT(_L8("CLineDMmTsy: Registered with 5 slots")); + numberOfSlots=5; + break; + default: + // Unknown or invalid Phone IPC + User::Leave(KErrNotSupported); + break; + } + return numberOfSlots; + } + +TInt CLineDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc, + const TDataPackage& aPackage) + { + // ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request + // for the TSY to process + // A request handle, request type and request data are passed to the TSY + + TAny* dataPtr=aPackage.Ptr1(); + + // The request data has to extracted from TDataPackage and the TAny* pointers have to + // be "cast" to the expected request data type + + switch (aIpc) + { +// +// Non-flow control requests +// + case EMobileLineGetMobileLineStatus: + return GetMobileLineStatus(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallStatus*, dataPtr)); + +// +// Notification Requests +// + case EMobileLineNotifyMobileLineStatusChange: + return NotifyMobileLineStatusChange(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallStatus*, dataPtr)); + +// +// Cancel Requests +// + case EMobileLineNotifyMobileLineStatusChangeCancel: + return NotifyMobileLineStatusChangeCancel(aTsyReqHandle); + + default: + return KErrNotSupported; + } + } + +TInt CLineDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle) + { + // CancelService is called by the server when it is "cleaning-up" any still outstanding + // asynchronous requests before closing a client's sub-session. + // This will happen if a client closes its R-class handle without cancelling outstanding + // asynchronous requests. + + switch (aIpc) + { +// +// Cancel Requests +// + case EMobileLineNotifyMobileLineStatusChange: + return NotifyMobileLineStatusChangeCancel(aTsyReqHandle); + default: + return CLineBase::CancelService(aIpc,aTsyReqHandle); + } + } + +TInt CLineDMmTsy::GetCaps(const TTsyReqHandle aTsyReqHandle,RLine::TCaps* aCaps) + { + //set the aux voice bit + aCaps->iFlags |= DMMTSY_MOBILE_LINE_AUX_VOICE; + + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + + +/***********************************************************************************/ +// +// The following methods are called from ExtFunc and/or CancelService. +// Each of these will process a TSY request or cancel a TSY request +// Here, example values are returned or checked within this dummy TSY in order to ensure +// that the integrity of the data passed to/from client is maintained +// +/***********************************************************************************/ + +TInt CLineDMmTsy::GetMobileLineStatus(const TTsyReqHandle aTsyReqHandle,RMobileCall::TMobileCallStatus* aStatus) + { + LOGTEXT(_L8("CLineDMmTsy::GetMobileLineStatus called")); + *aStatus=DMMTSY_CALL_STATUS1; + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CLineDMmTsy::NotifyMobileLineStatusChange(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallStatus* aStatus) + { + if (!iNotifyMobileLineStatusChange++) + { + LOGTEXT(_L8("CLineDMmTsy::NotifyMobileLineStatusChange called")); + *aStatus=DMMTSY_CALL_STATUS2; + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CLineDMmTsy::NotifyMobileLineStatusChangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CLineDMmTsy::NotifyMobileLineStatusChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } +