diff -r 000000000000 -r af10295192d8 networkingtestandutils/networkingintegrationtest/NTRas/RASCON.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkingtestandutils/networkingintegrationtest/NTRas/RASCON.CPP Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,266 @@ +// 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 "rasdef.h" +#include + +CRasConnect::CRasConnect(CNtRas* aNtRas) + : iNtRas(aNtRas) + { + __DECLARE_NAME(_S("CRasConnect")); + } + +CRasConnect::~CRasConnect() + { + + if(iCommOpen) + { + Disconnect(); + CommClose(); + } + CommDelete(); + TimerDelete(); + delete iChat; + } + +CRasConnect* CRasConnect::NewL(CNtRas* aRas) + { + CRasConnect* p = new (ELeave) CRasConnect(aRas); + CleanupStack::PushL(p); + p->ConstructL(); + CleanupStack::Pop(); + return p; + } + +void CRasConnect::ConstructL() + { + + CommConstructL(KCommReadPriority,KCommWritePriority); + TimerConstructL(KCommTimerPrioiry); + iState = ERasConClosed; + iChat = new (ELeave) CCommChatter(this, KChatterPriority); + iChat->CreateL(KChatBufferSize); + iNtRas->ReadInt(NIF_IFSERVERMODE, iServerMode); + + if(iServerMode) + iString=CCommChatString::NewL(_L8("CLIENT"), EFalse); + else + iString=CCommChatString::NewL(_L8("SERVER"), EFalse); + + iChat->AddString(iString); + TFileName csy; + TName port; + + TBuf columnName=TPtrC(MODEM); + columnName.Append(TChar(KSlashChar)); + columnName.Append(TPtrC(MODEM_CSY_NAME)); + User::LeaveIfError(iNtRas->ReadDes(columnName, csy)); + + columnName.SetLength(0); + columnName=TPtrC(MODEM); + columnName.Append(TChar(KSlashChar)); + columnName.Append(TPtrC(MODEM_PORT_NAME)); + User::LeaveIfError(iNtRas->ReadDes(columnName, port)); + + TInt err; + err = CommOpen(csy, port, ECommShared); + if (err==KErrNotFound) + { + Util::CommInit(); + err = CommOpen(csy, port, ECommShared); + } + User::LeaveIfError(err); + iCommOpen=ETrue; + StartL(); + } + +void CRasConnect::StartL() + { + User::LeaveIfError(InitComm()); + iCommPort.ResetBuffers(); + Disconnect(); // Will drop the lines + TimerAfter(KCommLineDropTime); + iState = ERasConDropLines; + } + +TPtrC8 CRasConnect::ExcessData() + { + return TPtrC8(iRxBuf.Ptr()+iRxBufOffset, iRxBuf.Length()-iRxBufOffset); + } + +void CRasConnect::CommReadComplete(TInt aStatus) + { + if (aStatus!=KErrNone) + { + Complete(aStatus); + return; + } + for (iRxBufOffset=0; iRxBufOffsetAddChar(iRxBuf[iRxBufOffset]); + if (iState==ERasConConnected) + { + Complete(KErrNone); + } + else + { + CommReadOneOrMore(iRxBuf); + iRxBufOffset = 0; + } + } + +void CRasConnect::CommWriteComplete(TInt aStatus) + { + if (aStatus!=KErrNone) + { + Complete(aStatus); + return; + } + else if (iState==ERasConConnecting) + { + iTries = 0; + SendToken(); + } + } + +void CRasConnect::TimerComplete(TInt /*aStatus */) + { + if (iState == ERasConDropLines) + { + TInt ret; + if (ret = InitComm(), ret!=KErrNone) + { + Complete(ret); + return; + } + + iCommPort.SetSignalsToMark(KSignalRTS | KSignalDTR); + + if(iServerMode) + { + CommReadOneOrMore(iRxBuf); + } + else + { + CommWriteReady(); + TimerAfter(KCommTimeout); + } + iState = ERasConConnecting; + } + else + { + Complete(KErrTimedOut); + } + } + +void CRasConnect::ChatStringMatch(CCommChatString* /*aString */) + { + if(iState==ERasConTokenSent) + { + iState = ERasConConnected; + if(iServerMode) + iRxBufOffset=0; + } + else if(iServerMode && iState!=ERasConTokenSent && !CommIsWriting()) + { + iChat->RemoveString(iString); + delete iString; + TRAPD(res, iString=CCommChatString::NewL(_L8("~"), EFalse);) + if(res!=KErrNone) // Comment out here + { + Complete(res); + return; + } + CommWriteReady(); + } + } + +void CRasConnect::ChatTimeout() + { + SendToken(); + } + +void CRasConnect::SendToken() + { + + // Changed to work on PPPD machines, comment line below and uncomment block for + // NTRas to work + //iNtRas->ConnectComplete(KErrNone); + + iState = ERasConTokenSent; + if (iTries++>=KChatMaxTries) + { + Complete(KErrCouldNotConnect); + return; + } + if(iServerMode) + CommWrite(_L8("SERVER")); + else + CommWrite(_L8("CLIENT")); + + if(!CommIsReading()) + CommReadOneOrMore(iRxBuf); + iChat->StartTimer(KChatTimeout); + //*/ + } + +void CRasConnect::Complete(TInt aStatus) + { + CommCancel(); + TimerCancel(); + iChat->StopTimer(); + iNtRas->ConnectComplete(aStatus); + } + +void CRasConnect::Disconnect() + { + + CommCancel(); + + //TInt ret; + TCommConfig cbuf; + TCommConfigV01 &cfg=cbuf(); + iCommPort.Config(cbuf); + cfg.iHandshake = KConfigFreeRTS | KConfigFreeDTR; + iCommPort.SetConfig(cbuf); + iCommPort.SetSignalsToSpace(KSignalRTS | KSignalDTR); + } + +TInt CRasConnect::InitComm() + { + TInt ret; + TCommConfig cbuf; + TCommConfigV01 &cfg=cbuf(); + iCommPort.Config(cbuf); + + TUint32 spd; + iNtRas->ReadInt(RAS_COMMSPEED, spd); + ret = Util::GetCommSpeed(spd, cfg.iRate); + + TBuf<32> buf; + buf.SetMax(); + iNtRas->ReadDes(RAS_COMMDATA, buf); + if (ret = Util::GetCommFormat(buf, cfg.iDataBits, cfg.iStopBits, cfg.iParity), ret!=KErrNone) + return ret; + + buf.SetMax(); + iNtRas->ReadDes(RAS_COMMHANDSHAKE, buf); + if (ret = Util::GetCommHandshake(buf, cfg.iHandshake), ret!=KErrNone) + return ret; + + if (ret = iCommPort.SetConfig(cbuf), ret!=KErrNone) + return ret; + + return KErrNone; + }