diff -r 14460bf2a402 -r f50f4094acd7 wapstack/wapmessageapi/te_wapstack/src/WapStackSuiteStepBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wapstack/wapmessageapi/te_wapstack/src/WapStackSuiteStepBase.cpp Tue Jul 06 15:36:38 2010 +0300 @@ -0,0 +1,410 @@ +// Copyright (c) 2002-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: +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include +#include +#include "WapStackSuiteDefs.h" +#include "WapStackSuiteStepBase.h" + +CWapStackSuiteStepBase::CWapStackSuiteStepBase() : iLenBuffer(0), iLength(iLenBuffer), iRecvBuf(0,0), iRecvHeadersBuf(0,0), iRecvBodyBuf(0,0) + { + SetTestStepName(KWapWDPStackSuiteLogFile); + iSendBuffPtr = NULL; + iRecvBuffPtr = NULL; + iRecvHeaders = NULL; + iRecvBody = NULL; + iURI = NULL; + iSendHeaders = NULL; + iSendBody = NULL; + } + +CWapStackSuiteStepBase::~CWapStackSuiteStepBase() + { + if(iSendBuffPtr) delete iSendBuffPtr; + if(iRecvBuffPtr) delete iRecvBuffPtr; + if(iRecvHeaders) delete iRecvHeaders; + if(iRecvBody) delete iRecvBody; + if(iURI) delete iURI; + if(iSendHeaders) delete iSendHeaders; + if(iSendBody) delete iSendBody; + } + +TVerdict CWapStackSuiteStepBase::doTestStepPreambleL() +/** +* @return - TVerdict +* Implementation of CTestStep base class virtual +* Load serial drivers +* Do all initialisation common to derived classes in here. +*/ + { + __UHEAP_MARK; + TInt err = KErrNone; + CActiveScheduler* sheduler; + sheduler = new(ELeave) CActiveScheduler; + CActiveScheduler::Install(sheduler); + SetScheduler(sheduler); + + iControl = CActiveControl::NewL(this); + sheduler->Add(iControl); + iStatus = iControl->Status(); + + + err=User::LoadPhysicalDevice(PDD_NAME); + if (err!=KErrNone && err!=KErrAlreadyExists) User::Leave(err); + + err=User::LoadLogicalDevice(LDD_NAME ); + if (err!=KErrNone && err!=KErrAlreadyExists) User::Leave(err); + + TBool startC32 = ETrue; + GetBoolFromConfig(ConfigSection(),KWapStartC32, startC32); + if(startC32) + { + _LIT(KPhbkSyncCMI, "phbsync.cmi"); + err = StartC32WithCMISuppressions(KPhbkSyncCMI); + ERR_PRINTF2(TRefByValue(_L("Start Comms Process Status = %d\n")), err); + if(err!=KErrNone && err!=KErrAlreadyExists) + { + User::Leave(err); + } + } + + LoadConfig(); + + SetTestStepResult(EPass); + return TestStepResult(); + } + +TVerdict CWapStackSuiteStepBase::doTestStepPostambleL() + { + + delete iControl; + iControl = NULL; + delete Scheduler(); + if(iSendBuffPtr) delete iSendBuffPtr; + iSendBuffPtr = NULL; + if(iRecvBuffPtr) delete iRecvBuffPtr; + iRecvBuffPtr = NULL; + __UHEAP_MARKEND; + return TestStepResult(); + } + +void CWapStackSuiteStepBase::LoadConfig() + { + TPtrC16 remote_host, local_host; + + GetIntFromConfig(KWapCommonSec, KWapBearer, (TInt&)iBearer); + if(GetStringFromConfig(KWapCommonSec, KWapRemoteHost, remote_host)) + { + iRemoteHost.Copy(remote_host); + } + if(GetStringFromConfig(KWapCommonSec, KWapLocalHost, local_host)) + { + iLocalHost.Copy(local_host); + } + TInt remote, local, timeOut; + if(GetIntFromConfig(KWapCommonSec, KWapRemotePort, remote)) + { + iRemotePort = static_cast(remote); + } + if(GetIntFromConfig(KWapCommonSec, KWapLocalPort, local)) + { + iLocalPort = static_cast(local); + } + if(GetIntFromConfig(KWapCommonSec,KWapTimeOut, timeOut)) + { + iTimeout=timeOut; + } + TInt headerLength, bufLength, bufLen, method; + if(GetIntFromConfig(KWapCommonSec,KWapWSPRecvHeaderLength, headerLength)) + { + iHeaderRecvBufLength=static_cast(headerLength); + } + if(GetIntFromConfig(KWapCommonSec,KWapWSPRecvBodyLength, bufLength)) + { + iBodyRecvBufLength=static_cast(bufLength); + } + if(GetIntFromConfig(KWapCommonSec,KWapWdpBufLength, bufLen)) + { + iWdpRecvBufLength=static_cast(bufLen); + } + if(GetIntFromConfig(KWapCommonSec,KWapWSPMethod, method)) + { + iMethod = static_cast(method); + } + else + { + iMethod = 64; // default method GET + } + GetIntFromConfig(KWapCommonSec, KWapExError, iExError); + if(!GetIntFromConfig(KWapCommonSec, KWapRepeat, iRepeat)) + { + iRepeat = 1; + }; + + GetIntFromConfig(KWapCommonSec, KWapExError2, iExError2); + GetBoolFromConfig(KWapCommonSec, KWapUseSIMTSY, iUseSIMTSY); + GetBoolFromConfig(KWapCommonSec, KWapDetailedLogging, iDetailedLogging); + GetBoolFromConfig(KWapCommonSec, KAwaitLengthCancel, iAwaitLengthCancel); + GetBoolFromConfig(KWapCommonSec, KMiddleCancel, iMiddleCancel); + GetBoolFromConfig(KWapCommonSec, KMultiReadCancel, iMultiReadCancel); + GetBoolFromConfig(KWapCommonSec, KAwaitLengthTwice, iAwaitLengthTwice); + GetBoolFromConfig(KWapCommonSec, KWapDelayPortClosure, iDelayPortClosure); + GetIntFromConfig(KWapCommonSec,KWapSIMTSYState, iSimTsyState); + + TInt result; + // if using SIMTSY, we need to define the test number property + // since we set the test number before loading SIMTSY + if (iUseSIMTSY) + { + result = RProperty::Define(KUidPSSimTsyCategory, KPSSimTsyTestNumber, RProperty::EInt); + __ASSERT_ALWAYS(result == KErrNone || result == KErrAlreadyExists,User::Panic(KWapStackSuitePanic, EDataCorrupt)); + } + + // Phone power property, normally defined by UIKON, is not defined by any + // startup code in console builds - we're on our own with this one. + result = RProperty::Define(KUidSystemCategory, KUidPhonePwr.iUid, RProperty::EInt); + __ASSERT_ALWAYS(result == KErrNone || result == KErrAlreadyExists,User::Panic(KWapStackSuitePanic, EDataCorrupt)); + + } + +TInt CWapStackSuiteStepBase::CallStateMachine() + { + return (0); + } + +void CWapStackSuiteStepBase::StartScheduler() + { + INFO_PRINTF1(_L("Star Scheduler")); + CActiveScheduler::Start(); + } + +void CWapStackSuiteStepBase::StopScheduler() + { + INFO_PRINTF1(_L("Stop Scheduler")); + CActiveScheduler::Stop(); + } + +void CWapStackSuiteStepBase::WaitForInitializeL() + { + _LIT(KMMTSY,"MM"); + _LIT(KSIMTSY,"SIM"); + + TName tsy; + + if(UseSimTsy()) + { + tsy=KSIMTSY; + } + else + { + tsy = KMMTSY; + } + + RTelServer serverT; + User::LeaveIfError(serverT.Connect()); + CleanupClosePushL(serverT); + User::LeaveIfError(serverT.LoadPhoneModule(tsy)); + INFO_PRINTF2(_L("%S TSY loaded"), &tsy); + + // Find the phone corresponding to this TSY and open a number of handles on it + TInt numPhones; + User::LeaveIfError(serverT.EnumeratePhones(numPhones)); + RPhone phone; + while (numPhones--) + { + TName phoneTsy; + User::LeaveIfError(serverT.GetTsyName(numPhones,phoneTsy)); + if (phoneTsy.CompareF(tsy)==KErrNone) + { + RTelServer::TPhoneInfo info; + User::LeaveIfError(serverT.GetPhoneInfo(numPhones,info)); + User::LeaveIfError(phone.Open(serverT,info.iName)); + CleanupClosePushL(phone); + const TInt err = phone.Initialise(); + User::LeaveIfError(err); + CleanupStack::PopAndDestroy(&phone); + break; + } + } + CleanupStack::PopAndDestroy(&serverT); + } + +void CWapStackSuiteStepBase::DumpBuf(const TDesC8& aBuf) + { + if(!DetailedLogging()) return; + TBuf16<100> dumpbuf; + TInt totLen = aBuf.Length(); + + INFO_PRINTF1(_L("-------------------------------------------------------------------------")); + INFO_PRINTF2(_L("Buffer: %d bytes"), totLen); + INFO_PRINTF1(_L("-------------------------------------------------------------------------")); + + for (TInt i = 0; i < totLen; i += 16) + { + dumpbuf.FillZ(100); + dumpbuf.Zero(); + dumpbuf.AppendFormat(_L("%04x "),i); + TInt j = 0; + TInt thisRow = Min(16,totLen - j - i); + for (j = 0; j < 16; j++) + { + if (j < thisRow) + { + TText8 chr = aBuf[i + j]; + dumpbuf.AppendFormat(_L("%02x "),chr); + } + else + dumpbuf.AppendFormat(_L(" ")); + } + dumpbuf.AppendFormat(_L(" ")); + for (j = 0; j < thisRow; j++) + { + TText8 chr = aBuf[i + j]; + TChar c(chr); + if (!c.IsPrint()) + { + chr='.'; + } + // NOTE: "<" & ">" are HTML tags (change to "[" & "]") + if((chr == '<') || (chr == '>')) + { + chr+=31; + } + dumpbuf.AppendFormat(_L("%c"),chr); + } + INFO_PRINTF2(_L("%s"), dumpbuf.Ptr()); + } + INFO_PRINTF1(_L("-------------------------------------------------------------------------")); + } + +void CWapStackSuiteStepBase::ShowConnectionInfo() +{ + if(!DetailedLogging()) return; + + TBuf16 host; + TBuf16<100> infostr; + + INFO_PRINTF1(_L("-------------------------------------------------------------------------")); + INFO_PRINTF1(_L("Connection Info:")); + INFO_PRINTF1(_L("-------------------------------------------------------------------------")); + + infostr.FillZ(100); + switch(iBearer) + { + case Wap::EAll: infostr.Copy(_L("EAll")); + break; + case Wap::EIP: infostr.Copy(_L("EIP")); + break; + case Wap::ESMS7: infostr.Copy(_L("ESMS7")); + break; + case Wap::ESMS: infostr.Copy(_L("ESMS")); + break; + case Wap::EWAPSMS7: infostr.Copy(_L("EWAPSMS7")); + break; + case Wap::EWAPSMS: infostr.Copy(_L("EWAPSMS")); + break; + default: + break; + } + + INFO_PRINTF2(_L("Bearer : %s"), infostr.Ptr()); + host.FillZ(WAP_MAX_HOST_NAME); + host.Copy(iRemoteHost); + INFO_PRINTF2(_L("Remote Host : %s"), host.Ptr()); + INFO_PRINTF2(_L("Remote Port : %d"),iRemotePort); + host.FillZ(100); + host.Copy(iLocalHost); + INFO_PRINTF2(_L("Local Host : %s"), host.Ptr()); + INFO_PRINTF2(_L("Local Port : %d"), iLocalPort); + infostr.FillZ(100); + switch(iSecure) + { + case ETrue: infostr.Copy(_L("TRUE")); + break; + case EFalse: infostr.Copy(_L("FALSE")); + break; + default: + break; + } + INFO_PRINTF2(_L("Secure : %s"), infostr.Ptr()); + infostr.FillZ(100); + switch(iReconnect) + { + case ETrue: infostr.Copy(_L("TRUE")); + break; + case EFalse: infostr.Copy(_L("FALSE")); + break; + default: + break; + } + INFO_PRINTF2(_L("Timeout : %d"), iTimeout); + INFO_PRINTF2(_L("Reconnect : %s"), infostr.Ptr()); + INFO_PRINTF2(_L("ExitCode : %d"), iExError); + INFO_PRINTF2(_L("Repeat : %d"), iRepeat); + + INFO_PRINTF1(_L("-------------------------------------------------------------------------")); +} + +/** + Active controller +*/ +CActiveControl* CActiveControl::NewL(MControlNotify* aControl) + { + CActiveControl* self = new(ELeave) CActiveControl(aControl); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +void CActiveControl::ConstructL() + { + } + +CActiveControl::CActiveControl(MControlNotify* aControl) +: CActive(EPriorityStandard) + { + iControl = aControl; + } + +CActiveControl::~CActiveControl() + { + } + +void CActiveControl::ReStart() + { + TRequestStatus* status = &iStatus; + SetActive(); + User::RequestComplete(status, KErrNone); + } + +void CActiveControl::RunL() + { + if(iControl->CallStateMachine()) + { + SetActive(); + } + } + +void CActiveControl::DoCancel() + { + }