sl@0: /* sl@0: * Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "CRefSecurityDialog.h" sl@0: sl@0: // ---------------------------------------------------------------------------- sl@0: // SecurityDialogFactory sl@0: // sl@0: sl@0: EXPORT_C MSecurityDialog* SecurityDialogFactory::CreateL() sl@0: { sl@0: return CRefSecurityDialog::NewL(); sl@0: } sl@0: sl@0: sl@0: sl@0: // ---------------------------------------------------------------------------- sl@0: // CRefSecurityDialog sl@0: // sl@0: sl@0: sl@0: sl@0: CRefSecurityDialog::~CRefSecurityDialog() sl@0: { sl@0: delete iRequester; sl@0: } sl@0: sl@0: void CRefSecurityDialog::Release() sl@0: { sl@0: delete this; sl@0: } sl@0: sl@0: sl@0: CRefSecurityDialog* CRefSecurityDialog::NewL() sl@0: { sl@0: CRefSecurityDialog* self = new (ELeave) CRefSecurityDialog(); sl@0: CleanupStack::PushL( self ); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop( self ); sl@0: return self; sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::ConstructL() sl@0: { sl@0: iRequester = CDialogRequester::NewL( *this ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::EnterPIN( const TPINParams& aPINParams, TBool aRetry, sl@0: TPINValue& aPINValue, TRequestStatus& aStatus ) sl@0: { sl@0: iClientPINValuePtr = &aPINValue; sl@0: DoBasicPINOperation( EEnterPIN, aPINParams, aRetry, iPINValueBuf, aStatus ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::EnablePIN( const TPINParams& aPINParams, TBool aRetry, sl@0: TPINValue& aPINValue, TRequestStatus& aStatus ) sl@0: { sl@0: iClientPINValuePtr = &aPINValue; sl@0: DoBasicPINOperation( EEnablePIN, aPINParams, aRetry, iPINValueBuf, aStatus ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::DisablePIN( const TPINParams& aPINParams, TBool aRetry, sl@0: TPINValue& aPINValue, TRequestStatus& aStatus ) sl@0: { sl@0: iClientPINValuePtr = &aPINValue; sl@0: DoBasicPINOperation( EDisablePIN, aPINParams, aRetry, iPINValueBuf, aStatus ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::ChangePIN( const TPINParams& aPINParams, TBool aRetry, sl@0: TPINValue& aOldPINValue, TPINValue& aNewPINValue, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iClientPINValuePtr = &aOldPINValue; sl@0: iClientSecondPINValuePtr = &aNewPINValue; sl@0: DoBasicPINOperation( EChangePIN, aPINParams, aRetry, iTwoPINOutputBuf, aStatus ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::UnblockPIN( const TPINParams& aBlockedPINParams, sl@0: const TPINParams& aUnblockingPINParams, TBool aRetry, sl@0: TPINValue& aUnblockingPINValue, TPINValue& aNewPINValue, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = EUnblockPIN; sl@0: InitClientStatus( aStatus ); sl@0: sl@0: TUnblockPINInput unblockPINInput; sl@0: unblockPINInput.iOperation = EUnblockPIN; sl@0: if ( aRetry ) sl@0: { sl@0: unblockPINInput.iOperation |= EPINValueIncorrect; sl@0: } sl@0: unblockPINInput.iPIN = aBlockedPINParams; sl@0: unblockPINInput.iUnblockPIN = aUnblockingPINParams; sl@0: TUnblockPINInputBuf unblockPINInputBuf( unblockPINInput ); sl@0: iUnblockPINInputBuf.Copy( unblockPINInputBuf ); sl@0: iClientPINValuePtr = &aUnblockingPINValue; sl@0: iClientSecondPINValuePtr = &aNewPINValue; sl@0: sl@0: iRequester->RequestDialog( iUnblockPINInputBuf, iTwoPINOutputBuf ); sl@0: } sl@0: sl@0: void CRefSecurityDialog::UnblockPINInClear( const TPINParams& aBlockedPINParams, sl@0: const TPINParams& aUnblockingPINParams, TBool aRetry, sl@0: TUnblockPINValue& aUnblockingPINValue, TPINValue& aNewPINValue, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = EUnblockPINInClear; sl@0: InitClientStatus( aStatus ); sl@0: sl@0: TUnblockPINInput unblockPINInput; sl@0: unblockPINInput.iOperation = EUnblockPINInClear; sl@0: if ( aRetry ) sl@0: { sl@0: unblockPINInput.iOperation |= EPINValueIncorrect; sl@0: } sl@0: unblockPINInput.iPIN = aBlockedPINParams; sl@0: unblockPINInput.iUnblockPIN = aUnblockingPINParams; sl@0: TUnblockPINInputBuf unblockPINInputBuf( unblockPINInput ); sl@0: sl@0: iClientUnblockPINValuePtr = &aUnblockingPINValue; sl@0: iClientSecondPINValuePtr = &aNewPINValue; sl@0: iUnblockPINInputBuf.Copy( unblockPINInputBuf ); sl@0: iRequester->RequestDialog( iUnblockPINInputBuf, iUnblockPINInClearOutputBuf ); sl@0: } sl@0: sl@0: void CRefSecurityDialog::Cancel() sl@0: { sl@0: iRequester->Cancel(); sl@0: if (iClientStatus) sl@0: { sl@0: User::RequestComplete(iClientStatus, KErrCancel); sl@0: } sl@0: } sl@0: sl@0: void CRefSecurityDialog::PINBlocked( const TPINParams& aPINParams, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = EPINBlocked; sl@0: TPckg pinValueBuf( KNullDesC() ); sl@0: DoBasicPINOperation( EPINBlocked, aPINParams, EFalse, pinValueBuf, aStatus ); sl@0: } sl@0: sl@0: sl@0: void CRefSecurityDialog::TotalBlocked( const TPINParams& aPINParams, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = ETotalBlocked; sl@0: TPckg pinValueBuf( KNullDesC() ); sl@0: DoBasicPINOperation( ETotalBlocked, aPINParams, EFalse, pinValueBuf, aStatus ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::EstablishSecureConnection( const TDesC8& aCertData, sl@0: const RArray& aCertHandleList, sl@0: MSecurityDialog::TConnectionType aConnectionType, sl@0: TBool& aDoClientAuthentication, TCTTokenObjectHandle& aCertHandle, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = ESecureConnection; sl@0: InitClientStatus( aStatus ); sl@0: sl@0: TInt certDataSize = aCertData.Size(); sl@0: TSignInput signInput; sl@0: signInput.iOperation = ESecureConnection; sl@0: signInput.iVariableDataSize = certDataSize; sl@0: signInput.iCertHandleArrayTotal = aCertHandleList.Count(); sl@0: signInput.iDoClientAuthentication = aDoClientAuthentication; sl@0: signInput.iConnectionType = aConnectionType; sl@0: TPckgC signInputBufPtr( signInput ); sl@0: // iSignInputBuf is persistent because further input processing occurs in the AO before sl@0: // calling the notifier. sl@0: iSignInputBuf.Copy( signInputBufPtr ); sl@0: iVariableDataPtr.Set( aCertData ); sl@0: sl@0: iClientDoClientAuthenticationPtr = &aDoClientAuthentication; sl@0: iClientCertInfoHandlePtr = &aCertHandle; sl@0: sl@0: iRequester->RequestVariableBufferDialog( iSignInputBuf, iVariableDataPtr, sl@0: aCertHandleList, iCertInfoHandleBuf ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::SignText( const TDesC& aTextToSign, sl@0: const RArray& aCertHandleList, sl@0: TCTTokenObjectHandle& aCertHandle, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = ESignText; sl@0: InitClientStatus( aStatus ); sl@0: sl@0: TInt textSize = aTextToSign.Size(); sl@0: TSignInput signInput; sl@0: signInput.iOperation = ESignText; sl@0: signInput.iVariableDataSize = textSize; sl@0: signInput.iCertHandleArrayTotal = aCertHandleList.Count(); sl@0: TPckgC signInputBufPtr( signInput ); sl@0: // iSignInputBuf is persistent because further input processing occurs in the AO before sl@0: // calling the notifier. sl@0: iSignInputBuf.Copy( signInputBufPtr ); sl@0: const TUint8* textToSignPtr = reinterpret_cast( aTextToSign.Ptr() ); sl@0: iVariableDataPtr.Set( textToSignPtr, textSize ); sl@0: sl@0: iClientCertInfoHandlePtr = &aCertHandle; sl@0: sl@0: iRequester->RequestVariableBufferDialog( iSignInputBuf, iVariableDataPtr, sl@0: aCertHandleList, iCertInfoHandleBuf ); sl@0: } sl@0: sl@0: void CRefSecurityDialog::ServerAuthenticationFailure(const TDesC8& aServerName,const TValidationError& aFailureReason, const TDesC8& aEncodedCert,TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = EServerAuthenticationFailure; sl@0: InitClientStatus( aStatus ); sl@0: sl@0: CServerAuthenticationFailureInput* serverAuthenticationFailureInput = NULL; sl@0: TRAPD(err, serverAuthenticationFailureInput = CServerAuthenticationFailureInput::NewL(aServerName, aFailureReason, aEncodedCert)); sl@0: sl@0: // Ownership of the inputBuffer will pass to the requester. sl@0: HBufC8* inputBuffer = NULL; sl@0: if (err == KErrNone) sl@0: TRAP(err, inputBuffer = serverAuthenticationFailureInput->PackBufferL()); sl@0: sl@0: delete serverAuthenticationFailureInput; sl@0: sl@0: if (err == KErrNone) sl@0: iRequester->RequestDialog(inputBuffer, iServerAuthenticationOutputBuf); sl@0: else sl@0: HandleResponse(err); sl@0: } sl@0: sl@0: void CRefSecurityDialog::DoBasicPINOperation( TSecurityDialogOperation aOperation, sl@0: const TPINParams& aPINParams, TBool aRetry, TDes8& aPINValue, sl@0: TRequestStatus& aStatus ) sl@0: { sl@0: iCurrentOperation = aOperation; sl@0: InitClientStatus( aStatus ); sl@0: TPINInput pinInput; sl@0: pinInput.iOperation = aOperation; sl@0: if ( aRetry ) sl@0: { sl@0: pinInput.iOperation |= EPINValueIncorrect; sl@0: } sl@0: pinInput.iPIN = aPINParams; sl@0: TPINInputBuf pinInputBuf( pinInput ); sl@0: iPINInputBuf.Copy( pinInputBuf ); sl@0: iRequester->RequestDialog( iPINInputBuf, aPINValue ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::InitClientStatus( TRequestStatus& aStatus ) sl@0: { sl@0: iClientStatus = &aStatus; sl@0: *iClientStatus = KRequestPending; sl@0: } sl@0: sl@0: sl@0: sl@0: void CRefSecurityDialog::HandleResponse( TInt aResult ) sl@0: { sl@0: if ( aResult >= KErrNone ) sl@0: { sl@0: switch ( iCurrentOperation ) sl@0: { sl@0: case EServerAuthenticationFailure: sl@0: { sl@0: TServerAuthenticationFailureDialogResult serverAuthenticationOutput = iServerAuthenticationOutputBuf(); sl@0: sl@0: if(serverAuthenticationOutput == EContinue) sl@0: { sl@0: aResult = KErrNone; sl@0: } sl@0: else if(serverAuthenticationOutput == EStop) sl@0: { sl@0: aResult = KErrAbort; sl@0: } sl@0: } sl@0: break; sl@0: case ESecureConnection: sl@0: { sl@0: if ( aResult == KClientAuthenticationRequested ) sl@0: { sl@0: *iClientDoClientAuthenticationPtr = ETrue; sl@0: aResult = KErrNone; sl@0: } sl@0: else sl@0: { sl@0: *iClientDoClientAuthenticationPtr = EFalse; sl@0: } sl@0: *iClientCertInfoHandlePtr = iCertInfoHandleBuf(); sl@0: break; sl@0: } sl@0: case ESignText: sl@0: { sl@0: *iClientCertInfoHandlePtr = iCertInfoHandleBuf(); sl@0: break; sl@0: } sl@0: case EEnterPIN: sl@0: case EEnablePIN: sl@0: case EDisablePIN: sl@0: *iClientPINValuePtr = iPINValueBuf(); sl@0: break; sl@0: case EChangePIN: sl@0: case EUnblockPIN: sl@0: { sl@0: TTwoPINOutput& twoPINOutput = iTwoPINOutputBuf(); sl@0: *iClientPINValuePtr = twoPINOutput.iPINValueToCheck; sl@0: *iClientSecondPINValuePtr = twoPINOutput.iNewPINValue; sl@0: break; sl@0: } sl@0: sl@0: case EUnblockPINInClear: sl@0: { sl@0: TUnblockPINInClearOutput& unblockPINOutput = iUnblockPINInClearOutputBuf(); sl@0: *iClientUnblockPINValuePtr = unblockPINOutput.iPINValueToCheck; sl@0: *iClientSecondPINValuePtr = unblockPINOutput.iNewPINValue; sl@0: break; sl@0: } sl@0: sl@0: case EPINBlocked: sl@0: case ETotalBlocked: sl@0: // No data to return sl@0: break; sl@0: default: sl@0: __ASSERT_DEBUG( EFalse, _L( "Invalid operation" ) ); sl@0: } sl@0: } sl@0: sl@0: User::RequestComplete( iClientStatus, aResult ); sl@0: } sl@0: sl@0: sl@0: sl@0: // ---------------------------------------------------------------------------- sl@0: // CDialogRequester sl@0: // sl@0: sl@0: CDialogRequester::CDialogRequester( CRefSecurityDialog& aSecDialog ) sl@0: : CActive( EPriorityStandard ), iSecDialog( aSecDialog ) sl@0: { sl@0: CActiveScheduler::Add( this ); sl@0: } sl@0: sl@0: sl@0: sl@0: CDialogRequester::~CDialogRequester() sl@0: { sl@0: Cancel(); sl@0: iNotifier.Close(); sl@0: } sl@0: sl@0: sl@0: sl@0: CDialogRequester* CDialogRequester::NewL( CRefSecurityDialog& aSecDialog ) sl@0: { sl@0: CDialogRequester* self = new (ELeave) CDialogRequester( aSecDialog ); sl@0: CleanupStack::PushL( self ); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop( self ); sl@0: return self; sl@0: } sl@0: sl@0: sl@0: sl@0: void CDialogRequester::ConstructL() sl@0: { sl@0: User::LeaveIfError( iNotifier.Connect() ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CDialogRequester::RequestDialog( const TDesC8& aData, TDes8& aResponse ) sl@0: { sl@0: iNotifier.StartNotifierAndGetResponse( iStatus, KUidSecurityDialogNotifier, sl@0: aData, aResponse ); sl@0: iState = KMakingRequest; sl@0: SetActive(); sl@0: } sl@0: sl@0: sl@0: sl@0: void CDialogRequester::DoCancel() sl@0: { sl@0: delete iInputBuffer; sl@0: iInputBuffer = NULL; sl@0: iNotifier.CancelNotifier( KUidSecurityDialogNotifier ); sl@0: } sl@0: sl@0: sl@0: sl@0: void CDialogRequester::RequestVariableBufferDialog( const TDesC8& aOperationData, sl@0: const TDesC8& aVariableData, sl@0: const RArray& aCertHandleList, sl@0: TDes8& aResponse ) sl@0: { sl@0: iOperationDataPtr = &aOperationData; sl@0: iVariableDataPtr = &aVariableData; sl@0: iCertHandleListPtr = &aCertHandleList; sl@0: iResponsePtr = &aResponse; sl@0: iState = KFillingVariableInputBuffer; sl@0: SetActive(); sl@0: // Complete the AO immediately so that buffer processing can occur in RunL(). sl@0: TRequestStatus* statusPtr = &iStatus; sl@0: User::RequestComplete( statusPtr, KErrNone ); sl@0: } sl@0: sl@0: void CDialogRequester::RequestDialog(HBufC8* aInputBuffer, TDes8& aResponse) sl@0: { sl@0: iInputBuffer = aInputBuffer; sl@0: RequestDialog(*iInputBuffer, aResponse); sl@0: } sl@0: sl@0: sl@0: void CDialogRequester::RunL() sl@0: { sl@0: switch ( iState ) sl@0: { sl@0: case KFillingVariableInputBuffer: sl@0: { sl@0: TInt operationDataSize = iOperationDataPtr->Size(); sl@0: TInt variableDataSize = iVariableDataPtr->Size(); sl@0: TInt arraySize = sizeof( TCTTokenObjectHandle ) * iCertHandleListPtr->Count(); sl@0: TInt bufferSize = operationDataSize + variableDataSize + arraySize; sl@0: iInputBuffer = HBufC8::NewL( bufferSize ); sl@0: TPtr8 inputBufferPtr( iInputBuffer->Des() ); sl@0: inputBufferPtr.Append( *iOperationDataPtr ); sl@0: for ( TInt h = 0, total = iCertHandleListPtr->Count(); h < total; ++h ) sl@0: { sl@0: const TCTTokenObjectHandle& certHandle = (*iCertHandleListPtr)[h]; sl@0: TPckgC certHandleBuf( certHandle ); sl@0: inputBufferPtr.Append( certHandleBuf ); sl@0: } sl@0: inputBufferPtr.Append( *iVariableDataPtr ); sl@0: RequestDialog( *iInputBuffer, *iResponsePtr ); sl@0: break; sl@0: } sl@0: case KMakingRequest: sl@0: { sl@0: delete iInputBuffer; sl@0: iInputBuffer = NULL; sl@0: iSecDialog.HandleResponse( iStatus.Int() ); sl@0: break; sl@0: } sl@0: default: sl@0: __ASSERT_DEBUG( EFalse, _L( "Invalid state" ) ); sl@0: } sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * RunError should only be called if the buffer allocation fails, in which case sl@0: * let client handle it. sl@0: */ sl@0: TInt CDialogRequester::RunError( TInt aError ) sl@0: { sl@0: iSecDialog.HandleResponse( aError ); sl@0: return KErrNone; sl@0: } sl@0: sl@0: // ---------------------------------------------------------------------------- sl@0: // CServerAuthenticationFailureInput sl@0: // sl@0: sl@0: CServerAuthenticationFailureInput::CServerAuthenticationFailureInput() sl@0: { sl@0: } sl@0: sl@0: sl@0: CServerAuthenticationFailureInput::~CServerAuthenticationFailureInput() sl@0: { sl@0: if(iServerName) sl@0: delete iServerName; sl@0: if(iEncodedCert) sl@0: delete iEncodedCert; sl@0: } sl@0: sl@0: CServerAuthenticationFailureInput* CServerAuthenticationFailureInput::NewL(const TDesC8& aServerName,const TValidationError& aFailureReason, const TDesC8& aEncodedCert, const TBool aCreateOwnBuffers) sl@0: { sl@0: CServerAuthenticationFailureInput* self = CServerAuthenticationFailureInput::NewLC(aServerName, aFailureReason, aEncodedCert, aCreateOwnBuffers); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CServerAuthenticationFailureInput* CServerAuthenticationFailureInput::NewLC(const TDesC8& aServerName,const TValidationError& aFailureReason, const TDesC8& aEncodedCert, const TBool aCreateOwnBuffers) sl@0: { sl@0: CServerAuthenticationFailureInput* self = new(ELeave) CServerAuthenticationFailureInput(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aServerName, aFailureReason, aEncodedCert, aCreateOwnBuffers); sl@0: return self; sl@0: } sl@0: sl@0: EXPORT_C CServerAuthenticationFailureInput* CServerAuthenticationFailureInput::NewL(const TDesC8& aBuffer, const TBool aCreateOwnBuffers) sl@0: { sl@0: CServerAuthenticationFailureInput* self = CServerAuthenticationFailureInput::NewLC(aBuffer, aCreateOwnBuffers); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: EXPORT_C CServerAuthenticationFailureInput* CServerAuthenticationFailureInput::NewLC(const TDesC8& aBuffer, const TBool aCreateOwnBuffers) sl@0: { sl@0: CServerAuthenticationFailureInput* self = new(ELeave) CServerAuthenticationFailureInput(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aBuffer, aCreateOwnBuffers); sl@0: return self; sl@0: } sl@0: sl@0: void CServerAuthenticationFailureInput::ConstructL(const TDesC8& aServerName,const TValidationError& aFailureReason, const TDesC8& aEncodedCert, const TBool aCreateOwnBuffers) sl@0: { sl@0: iFailureReason = aFailureReason; sl@0: sl@0: if (aCreateOwnBuffers) sl@0: { sl@0: iServerName = aServerName.AllocL(); sl@0: iServerNamePtr.Set(iServerName->Des()); sl@0: iEncodedCert = aEncodedCert.AllocL(); sl@0: iEncodedCertPtr.Set(iEncodedCert->Des()); sl@0: } sl@0: else sl@0: { sl@0: iServerNamePtr.Set(aServerName); sl@0: iEncodedCertPtr.Set(aEncodedCert); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CServerAuthenticationFailureInput::ConstructL(const TDesC8& aBuffer, const TBool aCreateOwnBuffers) sl@0: { sl@0: const TServerAuthenticationFailureInput* srvAuthFail = sl@0: reinterpret_cast sl@0: ( aBuffer.Ptr() ); sl@0: sl@0: const TUint8* binaryDataPtr = aBuffer.Ptr() + sizeof(TServerAuthenticationFailureInput); sl@0: sl@0: iFailureReason = srvAuthFail->iFailureReason; sl@0: sl@0: if(aCreateOwnBuffers) sl@0: { sl@0: TPtrC8 dataPtr(binaryDataPtr, srvAuthFail->iServerNameLength); sl@0: iServerName = dataPtr.AllocL(); sl@0: iServerNamePtr.Set(iServerName->Des()); sl@0: sl@0: dataPtr.Set(binaryDataPtr + srvAuthFail->iServerNameLength, srvAuthFail->iEncodedCertLength); sl@0: iEncodedCert = dataPtr.AllocL(); sl@0: iEncodedCertPtr.Set(iEncodedCert->Des()); sl@0: } sl@0: else sl@0: { sl@0: iServerNamePtr.Set(binaryDataPtr, srvAuthFail->iServerNameLength); sl@0: iEncodedCertPtr.Set(binaryDataPtr + srvAuthFail->iServerNameLength, srvAuthFail->iEncodedCertLength); sl@0: } sl@0: sl@0: } sl@0: sl@0: EXPORT_C TValidationError CServerAuthenticationFailureInput::FailureReason() sl@0: { sl@0: return iFailureReason; sl@0: } sl@0: sl@0: EXPORT_C void CServerAuthenticationFailureInput::GetServerName(TPtrC8& aServerNamePtr) sl@0: { sl@0: aServerNamePtr.Set(iServerNamePtr); sl@0: } sl@0: sl@0: EXPORT_C void CServerAuthenticationFailureInput::GetEncodedCert(TPtrC8& aEncodedCertPtr) sl@0: { sl@0: aEncodedCertPtr.Set(iEncodedCertPtr); sl@0: } sl@0: sl@0: EXPORT_C HBufC8* CServerAuthenticationFailureInput::PackBufferL() const sl@0: { sl@0: TServerAuthenticationFailureInput serverAuthenticationInput; sl@0: serverAuthenticationInput.iOperation = EServerAuthenticationFailure; sl@0: serverAuthenticationInput.iFailureReason = iFailureReason; sl@0: serverAuthenticationInput.iServerNameLength = iServerNamePtr.Length(); sl@0: serverAuthenticationInput.iEncodedCertLength = iEncodedCertPtr.Length(); sl@0: sl@0: TServerAuthenticationFailureInputBuf serverAuthenticationInputBuf(serverAuthenticationInput); sl@0: sl@0: TInt bufferSize = sizeof(serverAuthenticationInputBuf) + iServerNamePtr.Length() + iEncodedCertPtr.Length(); sl@0: HBufC8* packedBuffer = HBufC8::NewL(bufferSize); sl@0: TPtr8 packedBufferPtr(packedBuffer->Des()); sl@0: sl@0: packedBufferPtr.Append(serverAuthenticationInputBuf); sl@0: packedBufferPtr.Append(iServerNamePtr); sl@0: packedBufferPtr.Append(iEncodedCertPtr); sl@0: sl@0: return packedBuffer; sl@0: } sl@0: