1 // Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of "Eclipse Public License v1.0" |
4 // under the terms of "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
24 #include "recordprotocolevents.h" |
24 #include "recordprotocolevents.h" |
25 #include "tlshandshake.h" |
25 #include "tlshandshake.h" |
26 #include "applicationdata.h" |
26 #include "applicationdata.h" |
27 #include <es_sock.h> |
27 #include <es_sock.h> |
28 #include <in_sock.h> |
28 #include <in_sock.h> |
29 #include <featdiscovery.h> |
|
30 #include <featureuids.h> |
|
31 |
29 |
32 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
30 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
33 #include <ssl_internal.h> |
31 #include <ssl_internal.h> |
34 #endif |
32 #endif |
35 |
33 |
154 iTlsProvider = CTLSProvider::ConnectL(); // Set up Security/crypto interfaces |
152 iTlsProvider = CTLSProvider::ConnectL(); // Set up Security/crypto interfaces |
155 |
153 |
156 User::LeaveIfError( SetProtocol(aProtocol) ); |
154 User::LeaveIfError( SetProtocol(aProtocol) ); |
157 iTlsProvider->Attributes()->iCurrentCipherSuite.iLoByte = 0x00; |
155 iTlsProvider->Attributes()->iCurrentCipherSuite.iLoByte = 0x00; |
158 iTlsProvider->Attributes()->iCurrentCipherSuite.iHiByte = 0x00; |
156 iTlsProvider->Attributes()->iCurrentCipherSuite.iHiByte = 0x00; |
159 TBool allowUntrustedCertificates = EFalse; |
157 iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; |
160 allowUntrustedCertificates = CFeatureDiscovery::IsFeatureSupportedL(NFeature::KFeatureIdFfHttpAllowUntrustedCertificates); |
|
161 |
|
162 if( allowUntrustedCertificates ) |
|
163 { |
|
164 iTlsProvider->Attributes()->iDialogMode = ETTLSDialogModeAllowAutomatic; |
|
165 } |
|
166 else |
|
167 { |
|
168 iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; |
|
169 } |
|
170 iDialogMode = EDialogModeAttended; |
158 iDialogMode = EDialogModeAttended; |
171 |
159 |
172 iGenericSocket = new(ELeave)CGenericSecureSocket<RSocket>(aSocket); |
160 iGenericSocket = new(ELeave)CGenericSecureSocket<RSocket>(aSocket); |
173 |
161 |
174 iRecordParser = new(ELeave)CRecordParser( *iGenericSocket, *iTlsProvider ); |
162 iRecordParser = new(ELeave)CRecordParser( *iGenericSocket, *iTlsProvider ); |
175 LOG(Log::Printf(_L("iRecordParser %x - %x"), iRecordParser, (TUint)iRecordParser + sizeof( CRecordParser ));) |
163 LOG(Log::Printf(_L("iRecordParser %x - %x"), iRecordParser, (TUint)iRecordParser + sizeof( CRecordParser ));) |
176 iRecordComposer = new(ELeave)CRecordComposer( *iGenericSocket, *iTlsProvider ); |
164 iRecordComposer = new(ELeave)CRecordComposer( *iGenericSocket, *iTlsProvider ); |
177 TBuf<32> tempBuf; |
165 TBuf<32> tempBuf; |
178 tempBuf.Copy(aProtocol); |
166 tempBuf.Copy(aProtocol); |
179 tempBuf.UpperCase(); |
167 tempBuf.UpperCase(); |
180 TInt ret = tempBuf.Compare(KProtocolVerSSL30); |
168 TInt ret = tempBuf.Compare(KProtocolVerSSL30); |
181 if (!ret) |
169 if (!ret) |
182 { |
170 { |
183 iRecordComposer->SetVersion(&KSSL3_0); |
171 iRecordComposer->SetVersion(&KSSL3_0); |
184 } |
172 } |
185 else |
173 else |
186 { |
174 { |
187 iRecordComposer->SetVersion(&KTLS1_0); |
175 iRecordComposer->SetVersion(&KTLS1_0); |
188 } |
176 } |
|
177 |
189 LOG(Log::Printf(_L("iRecordComposer %x - %x"), iRecordComposer, (TUint)iRecordComposer + sizeof( CRecordComposer ));) |
178 LOG(Log::Printf(_L("iRecordComposer %x - %x"), iRecordComposer, (TUint)iRecordComposer + sizeof( CRecordComposer ));) |
190 |
179 |
191 #ifdef _DEBUG |
180 #ifdef _DEBUG |
192 TInt nBlock; |
181 TInt nBlock; |
193 LOG(Log::Printf(_L("RHeap::Size(), RHeap::Size() - RHeap::Available() %d, %d"), User::Heap().Size(), User::Heap().Size() - User::Heap().Available( nBlock ) );) |
182 LOG(Log::Printf(_L("RHeap::Size(), RHeap::Size() - RHeap::Available() %d, %d"), User::Heap().Size(), User::Heap().Size() - User::Heap().Available( nBlock ) );) |
216 iTlsProvider = CTLSProvider::ConnectL(); // Set up Security/crypto interfaces |
205 iTlsProvider = CTLSProvider::ConnectL(); // Set up Security/crypto interfaces |
217 |
206 |
218 User::LeaveIfError( SetProtocol(aProtocol) ); |
207 User::LeaveIfError( SetProtocol(aProtocol) ); |
219 iTlsProvider->Attributes()->iCurrentCipherSuite.iLoByte = 0x00; |
208 iTlsProvider->Attributes()->iCurrentCipherSuite.iLoByte = 0x00; |
220 iTlsProvider->Attributes()->iCurrentCipherSuite.iHiByte = 0x00; |
209 iTlsProvider->Attributes()->iCurrentCipherSuite.iHiByte = 0x00; |
221 TBool allowUntrustedCertificates = EFalse; |
210 iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; |
222 allowUntrustedCertificates = CFeatureDiscovery::IsFeatureSupportedL(NFeature::KFeatureIdFfHttpAllowUntrustedCertificates); |
|
223 |
|
224 if( allowUntrustedCertificates ) |
|
225 { |
|
226 iTlsProvider->Attributes()->iDialogMode = ETTLSDialogModeAttended; |
|
227 } |
|
228 else |
|
229 { |
|
230 iTlsProvider->Attributes()->iDialogNonAttendedMode = EFalse; |
|
231 } |
|
232 iDialogMode = EDialogModeAttended; |
211 iDialogMode = EDialogModeAttended; |
233 |
212 |
234 iRecordParser = new(ELeave)CRecordParser( aSocket, *iTlsProvider ); |
213 iRecordParser = new(ELeave)CRecordParser( aSocket, *iTlsProvider ); |
235 LOG(Log::Printf(_L("iRecordParser %x - %x"), iRecordParser, (TUint)iRecordParser + sizeof( CRecordParser ));) |
214 LOG(Log::Printf(_L("iRecordParser %x - %x"), iRecordParser, (TUint)iRecordParser + sizeof( CRecordParser ));) |
236 iRecordComposer = new(ELeave)CRecordComposer( aSocket, *iTlsProvider ); |
215 iRecordComposer = new(ELeave)CRecordComposer( aSocket, *iTlsProvider ); |
930 |
909 |
931 // This method must ensure that the dialog mode passed in is part of the |
910 // This method must ensure that the dialog mode passed in is part of the |
932 // TDialogMode enum or has the value EDialogModeUnattended/EDialogModeAttended. |
911 // TDialogMode enum or has the value EDialogModeUnattended/EDialogModeAttended. |
933 // Otherwise, it must return KErrArgument |
912 // Otherwise, it must return KErrArgument |
934 TInt ret = KErrNone; |
913 TInt ret = KErrNone; |
935 TBool allowUntrustedCertificates = EFalse; |
914 |
936 TRAP(ret, allowUntrustedCertificates = CFeatureDiscovery::IsFeatureSupportedL(NFeature::KFeatureIdFfHttpAllowUntrustedCertificates)); |
915 switch(aDialogMode) |
937 |
916 { |
938 if(KErrNone == ret) |
917 case EDialogModeUnattended: |
939 { |
918 case EDialogModeAttended: |
940 TTLSDialogMode tlsDialogMode( ETTLSDialogModeAttended ); |
919 iDialogMode = aDialogMode; |
941 switch(aDialogMode) |
920 break; |
942 { |
921 |
943 case EDialogModeUnattended: |
922 default: //-- wrong mode |
944 { |
923 LOG(Log::Printf(_L("SetDialogMode() - Unknown dialog mode, default setting (Attended mode) being used"));) |
945 if( allowUntrustedCertificates ) |
924 return KErrArgument; |
946 { |
925 }; |
947 tlsDialogMode = ETTLSDialogModeUnattended; |
926 |
948 iDialogMode = aDialogMode; |
927 if ( iTlsProvider ) |
949 break; |
928 { |
950 } |
929 iTlsProvider->Attributes()->iDialogNonAttendedMode = (iDialogMode == EDialogModeUnattended); |
951 } |
930 } |
952 case EDialogModeAttended: |
|
953 { |
|
954 if( allowUntrustedCertificates ) |
|
955 { |
|
956 tlsDialogMode = ETTLSDialogModeAttended; |
|
957 } |
|
958 iDialogMode = aDialogMode; |
|
959 break; |
|
960 } |
|
961 case EDialogModeAllowAutomatic: |
|
962 { |
|
963 tlsDialogMode = ETTLSDialogModeAllowAutomatic; |
|
964 iDialogMode = aDialogMode; |
|
965 break; |
|
966 } |
|
967 |
|
968 default: //-- wrong mode |
|
969 LOG(Log::Printf(_L("SetDialogMode() - Unknown dialog mode, default setting (Attended mode) being used"));) |
|
970 return KErrArgument; |
|
971 }; |
|
972 |
|
973 if ( iTlsProvider ) |
|
974 { |
|
975 if( allowUntrustedCertificates ) |
|
976 { |
|
977 iTlsProvider->Attributes()->iDialogMode = tlsDialogMode; |
|
978 } |
|
979 else |
|
980 { |
|
981 iTlsProvider->Attributes()->iDialogNonAttendedMode = (iDialogMode == EDialogModeUnattended); |
|
982 } |
|
983 } |
|
984 } |
|
985 |
931 |
986 return ret; |
932 return ret; |
987 } |
933 } |
988 |
934 |
989 TInt CTlsConnection::SetOpt(TUint aOptionName,TUint aOptionLevel, const TDesC8& aOption) |
935 TInt CTlsConnection::SetOpt(TUint aOptionName,TUint aOptionLevel, const TDesC8& aOption) |