diff -r 1ac40e087278 -r 17af172ffa5f telephonyprotocols/pdplayer/src/PDPSCPRStates.cpp --- a/telephonyprotocols/pdplayer/src/PDPSCPRStates.cpp Thu Jul 15 19:58:53 2010 +0300 +++ b/telephonyprotocols/pdplayer/src/PDPSCPRStates.cpp Thu Aug 19 11:03:36 2010 +0300 @@ -58,7 +58,7 @@ #endif const TUint8 KGenericNifChallengeSize = 8; -const TUint KGenericNifIdLength = 1; + //-========================================================= // @@ -615,38 +615,38 @@ TUint8 challenge[KGenericNifChallengeSize] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; TUint8 i=0; - while(i < KGenericNifChallengeSize) + while((i < KGenericNifChallengeSize) && (aProtocolConfigOption.iChallenge.Length() < aProtocolConfigOption.iChallenge.MaxLength())) { challenge[i] = (TUint8)(Math::Rand(seedValue)%256); aProtocolConfigOption.iChallenge.Append(challenge[i++]); } //Response - TBuf8 message; - message.Append(aProtocolConfigOption.iId); - message.Append(aProtocolConfigOption.iAuthInfo.iPassword); - message.Append(aProtocolConfigOption.iChallenge); - - TInt length = 1 /*iId length */ + aProtocolConfigOption.iAuthInfo.iPassword.Length() + KGenericNifChallengeSize; - + TInt length = 1 /*iId length */ + aProtocolConfigOption.iAuthInfo.iPassword.Length() + aProtocolConfigOption.iChallenge.Length(); HBufC8* buf = HBufC8::NewL(length); - CleanupStack::PushL(buf); TPtr8 ptr((TUint8*)buf->Des().Ptr(),length); - - ptr.Copy(message); + ptr.Append(aProtocolConfigOption.iId); + ptr.Append(aProtocolConfigOption.iAuthInfo.iPassword); + ptr.Append(aProtocolConfigOption.iChallenge); CMD5* md5=0; md5 = CMD5::NewL(); - CleanupStack::PushL(md5); - TPtrC8 Response = md5->Hash(ptr); - - aProtocolConfigOption.iResponse.Copy(Response); - - CleanupStack::PopAndDestroy(2); //buf, md5 + + if (Response.Length() < aProtocolConfigOption.iResponse.MaxLength()) + { + aProtocolConfigOption.iResponse.Copy(Response); + } + else + { + // Just a defensive measure - this should not happen. + User::Leave(KErrCorrupt); + } + + CleanupStack::PopAndDestroy(2); //buf, md5 } void TCreatePrimaryPDPCtx::DoL() @@ -1156,7 +1156,27 @@ DEFINE_SMELEMENT(TAwaitingContextBlockedOrUnblocked, NetStateMachine::MState, PDPSCprStates::TContext) TBool TAwaitingContextBlockedOrUnblocked::Accept() { - return TAwaitingPDPFSMMessage::Accept(KContextBlockedEvent) || TAwaitingPDPFSMMessage::Accept(KContextUnblockedEvent); + + if (TAwaitingPDPFSMMessage::Accept(KContextBlockedEvent) || TAwaitingPDPFSMMessage::Accept(KContextUnblockedEvent)) + { + //check if there is a data flow as well. Incase we are getting the notification and the Data Client has already + //been destroyed, we will just ignore the notification. (ou1cimx1#466386) + RNodeInterface* theOnlyDataClient = iContext.iNode.GetFirstClient(TCFClientType::EData); + if (theOnlyDataClient == NULL) + { + // clear the message and return EFalse. + iContext.iMessage.ClearMessageId(); + return EFalse; + } + else + { + return ETrue; + } + } + else + { + return EFalse; + } } DEFINE_SMELEMENT(TForwardContextBlockedOrUnblockedToDC, NetStateMachine::MStateTransition, PDPSCprStates::TContext)