diff -r 3652a10b304a -r 7e41d162e158 networksecurity/tls/protocol/tlsconnection.cpp --- a/networksecurity/tls/protocol/tlsconnection.cpp Thu Jul 15 20:25:02 2010 +0300 +++ b/networksecurity/tls/protocol/tlsconnection.cpp Thu Aug 19 11:25:30 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2003-2010 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" @@ -26,6 +26,8 @@ #include "applicationdata.h" #include #include +#include +#include #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS #include @@ -154,7 +156,17 @@ User::LeaveIfError( SetProtocol(aProtocol) ); iTlsProvider->Attributes()->iCurrentCipherSuite.iLoByte = 0x00; iTlsProvider->Attributes()->iCurrentCipherSuite.iHiByte = 0x00; - iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; + TBool allowUntrustedCertificates = EFalse; + allowUntrustedCertificates = CFeatureDiscovery::IsFeatureSupportedL(NFeature::KFeatureIdFfHttpAllowUntrustedCertificates); + + if( allowUntrustedCertificates ) + { + iTlsProvider->Attributes()->iDialogMode = ETTLSDialogModeAllowAutomatic; + } + else + { + iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; + } iDialogMode = EDialogModeAttended; iGenericSocket = new(ELeave)CGenericSecureSocket(aSocket); @@ -206,7 +218,17 @@ User::LeaveIfError( SetProtocol(aProtocol) ); iTlsProvider->Attributes()->iCurrentCipherSuite.iLoByte = 0x00; iTlsProvider->Attributes()->iCurrentCipherSuite.iHiByte = 0x00; - iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; + TBool allowUntrustedCertificates = EFalse; + allowUntrustedCertificates = CFeatureDiscovery::IsFeatureSupportedL(NFeature::KFeatureIdFfHttpAllowUntrustedCertificates); + + if( allowUntrustedCertificates ) + { + iTlsProvider->Attributes()->iDialogMode = ETTLSDialogModeAttended; + } + else + { + iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; + } iDialogMode = EDialogModeAttended; iRecordParser = new(ELeave)CRecordParser( aSocket, *iTlsProvider ); @@ -910,23 +932,56 @@ // TDialogMode enum or has the value EDialogModeUnattended/EDialogModeAttended. // Otherwise, it must return KErrArgument TInt ret = KErrNone; - - switch(aDialogMode) - { - case EDialogModeUnattended: - case EDialogModeAttended: - iDialogMode = aDialogMode; - break; - - default: //-- wrong mode - LOG(Log::Printf(_L("SetDialogMode() - Unknown dialog mode, default setting (Attended mode) being used"));) - return KErrArgument; - }; + TBool allowUntrustedCertificates = EFalse; + TRAP(ret, allowUntrustedCertificates = CFeatureDiscovery::IsFeatureSupportedL(NFeature::KFeatureIdFfHttpAllowUntrustedCertificates)); + + if(KErrNone == ret) + { + TTLSDialogMode tlsDialogMode( ETTLSDialogModeAttended ); + switch(aDialogMode) + { + case EDialogModeUnattended: + { + if( allowUntrustedCertificates ) + { + tlsDialogMode = ETTLSDialogModeUnattended; + iDialogMode = aDialogMode; + break; + } + } + case EDialogModeAttended: + { + if( allowUntrustedCertificates ) + { + tlsDialogMode = ETTLSDialogModeAttended; + } + iDialogMode = aDialogMode; + break; + } + case EDialogModeAllowAutomatic: + { + tlsDialogMode = ETTLSDialogModeAllowAutomatic; + iDialogMode = aDialogMode; + break; + } + + default: //-- wrong mode + LOG(Log::Printf(_L("SetDialogMode() - Unknown dialog mode, default setting (Attended mode) being used"));) + return KErrArgument; + }; - if ( iTlsProvider ) - { - iTlsProvider->Attributes()->iDialogNonAttendedMode = (iDialogMode == EDialogModeUnattended); - } + if ( iTlsProvider ) + { + if( allowUntrustedCertificates ) + { + iTlsProvider->Attributes()->iDialogMode = tlsDialogMode; + } + else + { + iTlsProvider->Attributes()->iDialogNonAttendedMode = (iDialogMode == EDialogModeUnattended); + } + } + } return ret; }