--- a/networksecurity/tls/protocol/tlsconnection.cpp Tue Aug 31 16:45:15 2010 +0300
+++ b/networksecurity/tls/protocol/tlsconnection.cpp Wed Sep 01 12:33:58 2010 +0100
@@ -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 <es_sock.h>
#include <in_sock.h>
+#include <featdiscovery.h>
+#include <featureuids.h>
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
#include <ssl_internal.h>
@@ -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<RSocket>(aSocket);
@@ -163,18 +175,17 @@
LOG(Log::Printf(_L("iRecordParser %x - %x"), iRecordParser, (TUint)iRecordParser + sizeof( CRecordParser ));)
iRecordComposer = new(ELeave)CRecordComposer( *iGenericSocket, *iTlsProvider );
TBuf<32> tempBuf;
- tempBuf.Copy(aProtocol);
- tempBuf.UpperCase();
- TInt ret = tempBuf.Compare(KProtocolVerSSL30);
- if (!ret)
- {
- iRecordComposer->SetVersion(&KSSL3_0);
- }
- else
- {
- iRecordComposer->SetVersion(&KTLS1_0);
- }
-
+ tempBuf.Copy(aProtocol);
+ tempBuf.UpperCase();
+ TInt ret = tempBuf.Compare(KProtocolVerSSL30);
+ if (!ret)
+ {
+ iRecordComposer->SetVersion(&KSSL3_0);
+ }
+ else
+ {
+ iRecordComposer->SetVersion(&KTLS1_0);
+ }
LOG(Log::Printf(_L("iRecordComposer %x - %x"), iRecordComposer, (TUint)iRecordComposer + sizeof( CRecordComposer ));)
#ifdef _DEBUG
@@ -207,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 );
@@ -911,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;
}