std::string Configuration::generateSessionId() { std::string sessionId = sessionIdPrefix(); sessionId += WRandom::generateId(sessionIdLength() - sessionId.length()); return sessionId; }
TVerdict CDelayedGetSessionStep::doTestStepL() { TInt sessionDelay; sessionDelay = ReadGetSessionDelayL(); // first we have to retrieve the available cipher suites TInt err = GetCipherSuitesL(); TInt sessionIdLength(0) ; CTlsCryptoAttributes* tlsCryptoAttributes = Provider()->Attributes(); CX509Certificate* cert = NULL; err = VerifyServerCertificateL(cert); delete cert; // don't really need the cert err = CreateSessionL(); // ensure we succeeded if (err != KErrNone) { INFO_PRINTF2(_L("Failed! Create Session failed! (Error %d)"), err); SetTestStepResult(EFail); } HBufC8* keyExMessage = NULL; err = ClientKeyExchange(keyExMessage); if (err != KErrNone) { INFO_PRINTF2(_L("Failed! Key exchange failed! (Error %d)"), err); SetTestStepResult(EFail); } CleanupStack::PushL(keyExMessage); // Call ServerFinished to do the chache // derive the premaster secret from the key exchange method INFO_PRINTF1(_L("Deriving master secret.")); HBufC8* premaster = DerivePreMasterSecretL(*keyExMessage); CleanupStack::PopAndDestroy(keyExMessage); // compute the master secret from the premaster. CleanupStack::PushL(premaster); HBufC8* master = ComputeMasterSecretL(*premaster); CleanupStack::PopAndDestroy(premaster); CleanupStack::PushL(master); // do the caching ValidateServerFinishL(*master); CleanupStack::PopAndDestroy(master); err = VerifyGetSessionL(tlsCryptoAttributes->iSessionNameAndID.iServerName, sessionIdLength); // case A if (err != KErrNone || sessionIdLength == 0) { INFO_PRINTF1(_L("Case A Failed! GetSession failed!")); SetTestStepResult(EFail); return TestStepResult(); } RTimer timer; TRequestStatus timerStatus; timer.CreateLocal(); TTimeIntervalMicroSeconds32 waitTime( 1000000*(sessionDelay)); timer.After( timerStatus, waitTime); User::WaitForRequest(timerStatus); timer.Close(); err = 0; sessionIdLength = 0; err = VerifyGetSessionL(tlsCryptoAttributes->iSessionNameAndID.iServerName, sessionIdLength); // case B, delay should have caused session to be cleared. if ( sessionIdLength != 0) { INFO_PRINTF1(_L("Case B Failed! GetSession failed!")); SetTestStepResult(EFail); } return TestStepResult(); }