diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/multimodetsy/hayes/ATCONNCT.CPP --- a/telephonyserverplugins/multimodetsy/hayes/ATCONNCT.CPP Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/multimodetsy/hayes/ATCONNCT.CPP Thu May 06 15:10:38 2010 +0100 @@ -1,247 +1,247 @@ -// 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 -#include "ATCONNCT.H" -#include "mSLOGGER.H" -#include "PHONE.H" -#include "CALL.H" -#include "ATNOCARR.H" -#include "NOTIFY.H" -#include "ATIO.H" - -// -// Connect to already dialled call -// -CATConnectData* CATConnectData::NewL(CATIO* aIo, CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals) - { - CATConnectData* connect=new(ELeave) CATConnectData(aIo, aTelObject, aInit,aPhoneGlobals); - CleanupStack::PushL(connect); - connect->ConstructL(); - CleanupStack::Pop(); - return connect; - } - -CATConnectData::CATConnectData(CATIO* aIo, CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals) - : CATDataCallConnectCommands(aIo,aTelObject,aInit,aPhoneGlobals) - {} - -CATConnectData::~CATConnectData() - {} - -void CATConnectData::Start(TTsyReqHandle aTsyReqHandle, TAny* aParams) - { - LOGTEXT(_L8("Starting Connect Command")); - iState=EATInitialising; - CATDataCallConnectCommands::Start(aTsyReqHandle,aParams); - } - -void CATConnectData::Stop(TTsyReqHandle aTsyReqHandle) -// -// Send a carriage return to cancel Connect -// - { - __ASSERT_ALWAYS(aTsyReqHandle == iReqHandle,Panic(EIllegalTsyReqHandle)); - __ASSERT_ALWAYS(iState!=EATNotInProgress,Panic(EATCommand_NotInProgress)); - LOGTEXT(_L8("Cancelling Connect Command")); - RemoveConnectExpectStrings(); - iIo->WriteAndTimerCancel(this); - if (iState!=EATInitialising) - { - Write(KCarriageReturn(),1); - iState = EATCancellingWaitForWriteComplete; - iPreConnectState=CATCallConnectCommands::ENotInProgress; - } - else - { - AddStdExpectStrings(); - iPreConnectState=CATCallConnectCommands::ECancelling; - iState = EATNotInProgress; - } - } - -TInt CATConnectData::AddConnectExpectStrings() - { - TInt ret=AddCommonExpectStrings(); - if(ret!=KErrNone) - return ret; - - if (!iNoDialToneExpectString) - { - ret=iPhoneGlobals->iConfiguration->ConfigModemString(TPtrC(KCDTypeNameNoDialTone),iNoDialToneString); - if(ret!=KErrNone) - return ret; - iNoDialToneExpectString=iIo->AddExpectString(this,iNoDialToneString); - } - - return KErrNone; - } - -void CATConnectData::RemoveConnectExpectStrings() - { - RemoveCommonExpectStrings(); - iIo->RemoveExpectString(iNoDialToneExpectString); - iNoDialToneExpectString=NULL; - } - -TInt CATConnectData::ValidateConnectExpectString() - { - const CCommChatString* foundChatString = iIo->FoundChatString(); - - if (foundChatString == iConnectExpectString) - return KErrNone; - - if (foundChatString == iNoCarrierExpectString) - return KErrEtelNoCarrier; - - if (foundChatString == iNoDialToneExpectString) - { - LOGTEXT(_L8("Modem returned NO DIALTONE in response to dial command")); - return KErrEtelNoDialTone; - } - - LOGTEXT(_L8("Modem returned unknown response to connect command")); - return KErrGeneral; - } - -void CATConnectData::CompleteWithIOError(TEventSource aSource,TInt aStatus) - { - if (iState!=EATNotInProgress) - { - iState = EATNotInProgress; - CATCallConnectCommands::CompleteWithIOError(aSource,aStatus); - } - } - -void CATConnectData::EventSignal(TEventSource aSource) - { - if ((aSource==ETimeOutCompletion)&&(iState!=EATSpeedReadComplete) - &&(iState!=EATCancellingReadCompleted)&&(iState!=EATNotInProgress) - &&(iPreConnectState!=EATWaitForATCheckOK)) - { - LOGTEXT(_L8("Timeout Error during Connect")); - iState = EATNotInProgress; - Complete(KErrTimedOut,aSource); - return; - } - - if (iPreConnectState!=CATCallConnectCommands::EATInitCompleted - && iPreConnectState!=CATCallConnectCommands::ENotInProgress) - { - CATCallConnectCommands::PreConnectEventSignal(aSource); - if (iPreConnectState==CATCallConnectCommands::ENotInProgress) // cancelled - iState=EATNotInProgress; - if (iPreConnectState!=CATCallConnectCommands::EATInitCompleted) - return; - else - iState=EATSendConnectCommand; - } - - switch(iState) - { - case EATSendConnectCommand: - { - ChangeLineStatus(RCall::EStatusConnecting); - // EStatusConnecting always results in KErrNone return - (void)ChangeCallStatus(RMobileCall::EStatusConnecting); - iPhoneGlobals->iNotificationStore->CheckNotification(REINTERPRET_CAST(CCallBase*,iTelObject),EBegunConnecting); - Write(KDialCommand,3); - iState=EATConnectWaitForWriteComplete; - } - break; - - case EATConnectWaitForWriteComplete: - { - __ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected)); - TInt ret=AddConnectExpectStrings(); - if (ret) - { - Complete(ret,aSource); - break; - } - iIo->SetTimeOut(this,(iPhoneGlobals->iPhoneStatus.iWaitForCarrierTime*1000)+KExtraWaitTime); - iState=EATConnectReadCompleted; - break; - } - - case EATConnectReadCompleted: - __ASSERT_ALWAYS(aSource==EReadCompletion,Panic(EATCommand_IllegalCompletionReadExpected)); - { - TInt ret=ValidateConnectExpectString(); - RemoveConnectExpectStrings(); - if (ret!=KErrNone) - { - iState = EATNotInProgress; - Complete(ret,aSource); - } - iIo->SetTimeOut(this,KTimeForExtraRxData); - iState=EATSpeedReadComplete; - } - break; - - case EATSpeedReadComplete: - { - __ASSERT_ALWAYS(aSource==ETimeOutCompletion,Panic(EATCommand_IllegalCompletionWaitExpected)); - iIo->WriteAndTimerCancel(this); - TInt ret=ParseForBearerCapsResponse(); - iState = EATNotInProgress; - if (ret!=KErrNone) - { - Complete(ret,aSource); - break; - } - ret=ParseForBearerSpeedResponse(); - Complete(ret,aSource); - } - break; - - case EATCancellingWaitForWriteComplete: - { - __ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected)); - TInt ret=AddConnectExpectStrings(); - if (ret) - { - Complete(ret,aSource); - break; - } - iIo->SetTimeOut(this); - iState=EATCancellingReadCompleted; - } - break; - - case EATCancellingReadCompleted: - { - iState = EATNotInProgress; - if (aSource==EReadCompletion) - { - TInt ret=ValidateConnectExpectString(); - RemoveConnectExpectStrings(); - if (ret==KErrNone) - { - Complete(KErrNone,aSource); // Has connected despite sending CR - return; - } - } - RemoveConnectExpectStrings(); - Complete(KErrCancel,aSource); - } - break; - - default: - ; - } - } - - +// 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 +#include "ATCONNCT.H" +#include "mSLOGGER.H" +#include "PHONE.H" +#include "CALL.H" +#include "ATNOCARR.H" +#include "NOTIFY.H" +#include "ATIO.H" + +// +// Connect to already dialled call +// +CATConnectData* CATConnectData::NewL(CATIO* aIo, CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals) + { + CATConnectData* connect=new(ELeave) CATConnectData(aIo, aTelObject, aInit,aPhoneGlobals); + CleanupStack::PushL(connect); + connect->ConstructL(); + CleanupStack::Pop(); + return connect; + } + +CATConnectData::CATConnectData(CATIO* aIo, CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals) + : CATDataCallConnectCommands(aIo,aTelObject,aInit,aPhoneGlobals) + {} + +CATConnectData::~CATConnectData() + {} + +void CATConnectData::Start(TTsyReqHandle aTsyReqHandle, TAny* aParams) + { + LOGTEXT(_L8("Starting Connect Command")); + iState=EATInitialising; + CATDataCallConnectCommands::Start(aTsyReqHandle,aParams); + } + +void CATConnectData::Stop(TTsyReqHandle aTsyReqHandle) +// +// Send a carriage return to cancel Connect +// + { + __ASSERT_ALWAYS(aTsyReqHandle == iReqHandle,Panic(EIllegalTsyReqHandle)); + __ASSERT_ALWAYS(iState!=EATNotInProgress,Panic(EATCommand_NotInProgress)); + LOGTEXT(_L8("Cancelling Connect Command")); + RemoveConnectExpectStrings(); + iIo->WriteAndTimerCancel(this); + if (iState!=EATInitialising) + { + Write(KCarriageReturn(),1); + iState = EATCancellingWaitForWriteComplete; + iPreConnectState=CATCallConnectCommands::ENotInProgress; + } + else + { + AddStdExpectStrings(); + iPreConnectState=CATCallConnectCommands::ECancelling; + iState = EATNotInProgress; + } + } + +TInt CATConnectData::AddConnectExpectStrings() + { + TInt ret=AddCommonExpectStrings(); + if(ret!=KErrNone) + return ret; + + if (!iNoDialToneExpectString) + { + ret=iPhoneGlobals->iConfiguration->ConfigModemString(TPtrC(KCDTypeNameNoDialTone),iNoDialToneString); + if(ret!=KErrNone) + return ret; + iNoDialToneExpectString=iIo->AddExpectString(this,iNoDialToneString); + } + + return KErrNone; + } + +void CATConnectData::RemoveConnectExpectStrings() + { + RemoveCommonExpectStrings(); + iIo->RemoveExpectString(iNoDialToneExpectString); + iNoDialToneExpectString=NULL; + } + +TInt CATConnectData::ValidateConnectExpectString() + { + const CCommChatString* foundChatString = iIo->FoundChatString(); + + if (foundChatString == iConnectExpectString) + return KErrNone; + + if (foundChatString == iNoCarrierExpectString) + return KErrEtelNoCarrier; + + if (foundChatString == iNoDialToneExpectString) + { + LOGTEXT(_L8("Modem returned NO DIALTONE in response to dial command")); + return KErrEtelNoDialTone; + } + + LOGTEXT(_L8("Modem returned unknown response to connect command")); + return KErrGeneral; + } + +void CATConnectData::CompleteWithIOError(TEventSource aSource,TInt aStatus) + { + if (iState!=EATNotInProgress) + { + iState = EATNotInProgress; + CATCallConnectCommands::CompleteWithIOError(aSource,aStatus); + } + } + +void CATConnectData::EventSignal(TEventSource aSource) + { + if ((aSource==ETimeOutCompletion)&&(iState!=EATSpeedReadComplete) + &&(iState!=EATCancellingReadCompleted)&&(iState!=EATNotInProgress) + &&(iPreConnectState!=EATWaitForATCheckOK)) + { + LOGTEXT(_L8("Timeout Error during Connect")); + iState = EATNotInProgress; + Complete(KErrTimedOut,aSource); + return; + } + + if (iPreConnectState!=CATCallConnectCommands::EATInitCompleted + && iPreConnectState!=CATCallConnectCommands::ENotInProgress) + { + CATCallConnectCommands::PreConnectEventSignal(aSource); + if (iPreConnectState==CATCallConnectCommands::ENotInProgress) // cancelled + iState=EATNotInProgress; + if (iPreConnectState!=CATCallConnectCommands::EATInitCompleted) + return; + else + iState=EATSendConnectCommand; + } + + switch(iState) + { + case EATSendConnectCommand: + { + ChangeLineStatus(RCall::EStatusConnecting); + // EStatusConnecting always results in KErrNone return + (void)ChangeCallStatus(RMobileCall::EStatusConnecting); + iPhoneGlobals->iNotificationStore->CheckNotification(REINTERPRET_CAST(CCallBase*,iTelObject),EBegunConnecting); + Write(KDialCommand,3); + iState=EATConnectWaitForWriteComplete; + } + break; + + case EATConnectWaitForWriteComplete: + { + __ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected)); + TInt ret=AddConnectExpectStrings(); + if (ret) + { + Complete(ret,aSource); + break; + } + iIo->SetTimeOut(this,(iPhoneGlobals->iPhoneStatus.iWaitForCarrierTime*1000)+KExtraWaitTime); + iState=EATConnectReadCompleted; + break; + } + + case EATConnectReadCompleted: + __ASSERT_ALWAYS(aSource==EReadCompletion,Panic(EATCommand_IllegalCompletionReadExpected)); + { + TInt ret=ValidateConnectExpectString(); + RemoveConnectExpectStrings(); + if (ret!=KErrNone) + { + iState = EATNotInProgress; + Complete(ret,aSource); + } + iIo->SetTimeOut(this,KTimeForExtraRxData); + iState=EATSpeedReadComplete; + } + break; + + case EATSpeedReadComplete: + { + __ASSERT_ALWAYS(aSource==ETimeOutCompletion,Panic(EATCommand_IllegalCompletionWaitExpected)); + iIo->WriteAndTimerCancel(this); + TInt ret=ParseForBearerCapsResponse(); + iState = EATNotInProgress; + if (ret!=KErrNone) + { + Complete(ret,aSource); + break; + } + ret=ParseForBearerSpeedResponse(); + Complete(ret,aSource); + } + break; + + case EATCancellingWaitForWriteComplete: + { + __ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected)); + TInt ret=AddConnectExpectStrings(); + if (ret) + { + Complete(ret,aSource); + break; + } + iIo->SetTimeOut(this); + iState=EATCancellingReadCompleted; + } + break; + + case EATCancellingReadCompleted: + { + iState = EATNotInProgress; + if (aSource==EReadCompletion) + { + TInt ret=ValidateConnectExpectString(); + RemoveConnectExpectStrings(); + if (ret==KErrNone) + { + Complete(KErrNone,aSource); // Has connected despite sending CR + return; + } + } + RemoveConnectExpectStrings(); + Complete(KErrCancel,aSource); + } + break; + + default: + ; + } + } + +