28 #endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) |
28 #endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) |
29 |
29 |
30 |
30 |
31 // INCLUDE FILES |
31 // INCLUDE FILES |
32 #include <e32base.h> |
32 #include <e32base.h> |
33 //#include "EapTlsPeapUtils.h" |
33 #include "EapTlsPeapUtils.h" |
34 #include "EapTlsPeapDbParameterNames.h" |
34 #include "EapTlsPeapDbParameterNames.h" |
35 #include "EapTlsPeapDbDefaults.h" |
35 #include "EapTlsPeapDbDefaults.h" |
36 #include <EapTlsPeapUiConnection.h> |
36 #include <EapTlsPeapUiConnection.h> |
37 #include <EapTlsPeapUiCipherSuites.h> |
37 #include <EapTlsPeapUiCipherSuites.h> |
38 #include <EapTlsPeapUiCipherSuite.h> |
38 #include <EapTlsPeapUiCipherSuite.h> |
39 #include <EapTraceSymbian.h> |
39 |
40 #include <EapType.h> |
40 const TUint KMaxSqlQueryLength = 256; |
41 |
|
42 //const TUint KMaxSqlQueryLength = 256; |
|
43 |
41 |
44 CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites(CEapTlsPeapUiConnection * const aUiConn) |
42 CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites(CEapTlsPeapUiConnection * const aUiConn) |
45 : iIsOpened(EFalse) |
43 : iIsOpened(EFalse) |
46 , iUiConn(aUiConn) |
44 , iUiConn(aUiConn) |
47 , iDataPtr(NULL) |
45 , iDataPtr(NULL) |
48 { |
46 { |
49 EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites()\n"))); |
|
50 EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites()\n")); |
|
51 } |
47 } |
52 |
48 |
53 |
49 |
54 CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites() |
50 CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites() |
55 { |
51 { |
56 EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()\n"))); |
52 if (iUiConn) |
57 EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()\n")); |
|
58 |
|
59 if (iUiConn) |
|
60 { |
53 { |
61 Close(); |
54 Close(); |
62 iUiConn = NULL; |
55 iUiConn = NULL; |
63 } |
56 } |
64 } |
57 } |
65 |
58 |
66 |
59 |
67 TInt CEapTlsPeapUiCipherSuites::Open() |
60 TInt CEapTlsPeapUiCipherSuites::Open() |
68 { |
61 { |
69 EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Open()\n"))); |
|
70 EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Open()\n")); |
|
71 |
|
72 if (iIsOpened) |
62 if (iIsOpened) |
73 { |
63 { |
74 return KErrAlreadyExists; |
64 return KErrAlreadyExists; |
75 } |
65 } |
76 |
66 |
77 TEapExpandedType aEapType(iUiConn->GetEapType()); |
67 TInt err = iUiConn->GetDatabase(iDatabase); |
78 |
|
79 TRAPD(err, iEapTypeConnection = CEapType::NewL(iUiConn->GetIndexType(), iUiConn->GetIndex(), aEapType)); |
|
80 if (err != KErrNone) |
68 if (err != KErrNone) |
81 { |
69 { |
82 EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCipherSuites::Open() CEapType::NewL err=%d\n"),err)); |
|
83 return err; |
70 return err; |
84 } |
71 } |
85 |
|
86 iEapTypeConnection->SetTunnelingType(iUiConn->GetTunnelingType()); |
|
87 |
72 |
88 iIsOpened = ETrue; |
73 iIsOpened = ETrue; |
89 |
74 |
90 return KErrNone; |
75 return KErrNone; |
91 } |
76 } |
92 |
77 |
93 |
78 |
94 TInt CEapTlsPeapUiCipherSuites::GetCipherSuites(RPointerArray<TEapTlsPeapUiCipherSuite> ** aDataPtr) |
79 TInt CEapTlsPeapUiCipherSuites::GetCipherSuites(CArrayFixFlat<TEapTlsPeapUiCipherSuite> ** aDataPtr) |
95 { |
80 { |
96 EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::GetCipherSuites()\n"))); |
|
97 EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::GetCipherSuites()\n")); |
|
98 |
|
99 if (aDataPtr == NULL) |
81 if (aDataPtr == NULL) |
100 { |
82 { |
101 return KErrArgument; |
83 return KErrArgument; |
102 } |
84 } |
103 if (iIsOpened == EFalse) |
85 if (iIsOpened == EFalse) |
107 |
89 |
108 if (iDataPtr != 0) |
90 if (iDataPtr != 0) |
109 { |
91 { |
110 *aDataPtr = iDataPtr; |
92 *aDataPtr = iDataPtr; |
111 return KErrNone; |
93 return KErrNone; |
112 } |
94 } |
113 |
95 iDataPtr = new CArrayFixFlat<TEapTlsPeapUiCipherSuite>(8); |
114 iDataPtr = new RPointerArray<TEapTlsPeapUiCipherSuite>(8); |
|
115 if (!iDataPtr) |
96 if (!iDataPtr) |
116 { |
97 { |
117 return KErrNoMemory; |
98 return KErrNoMemory; |
118 } |
99 } |
119 |
100 |
120 TInt i_ind(0); |
101 TInt i(0); |
121 while (available_cipher_suites[i_ind] != 0) |
102 while (available_cipher_suites[i] != 0) |
122 { |
103 { |
123 TEapTlsPeapUiCipherSuite * const tmp = new TEapTlsPeapUiCipherSuite; |
104 TEapTlsPeapUiCipherSuite tmp; |
124 if (tmp == 0) |
105 tmp.iCipherSuite = available_cipher_suites[i]; |
125 { |
106 tmp.iIsEnabled = EFalse; |
126 return KErrNoMemory; |
|
127 } |
|
128 |
|
129 tmp->SetCipherSuite(available_cipher_suites[i_ind]); |
|
130 tmp->SetIsEnabled(EFalse); |
|
131 |
107 |
132 TRAPD(err, iDataPtr->AppendL(tmp)); |
108 TRAPD(err, iDataPtr->AppendL(tmp)); |
133 if (err != KErrNone) |
109 if (err != KErrNone) |
134 { |
110 { |
135 return err; |
111 return err; |
136 } |
112 } |
137 |
113 |
138 i_ind++; |
114 i++; |
139 } |
115 } |
140 |
116 |
141 EAPSettings aSettings; |
117 |
142 |
118 |
143 TRAPD(error,iEapTypeConnection->GetConfigurationL(aSettings)); |
119 TRAPD(err, FetchDataL()); |
144 if (error) |
120 |
145 { |
121 if (err != KErrNone) |
146 EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCipherSuites::GetCipherSuites() GetConfigurationL(): failed %d\n"), error)); |
122 { |
147 return error; |
123 delete iDataPtr; |
148 } |
124 return err; |
149 |
125 } |
150 if (aSettings.iCipherSuitesPresent) |
126 |
151 { |
127 *aDataPtr = iDataPtr; |
152 TInt i_ind(0); |
128 |
153 |
129 return KErrNone; |
154 for (i_ind = 0; i_ind < aSettings.iCipherSuites.Count(); ++i_ind) |
130 } |
|
131 |
|
132 |
|
133 TInt CEapTlsPeapUiCipherSuites::Update() |
|
134 { |
|
135 TRAPD(err, UpdateL()); |
|
136 return err; |
|
137 } |
|
138 |
|
139 void CEapTlsPeapUiCipherSuites::UpdateL() |
|
140 { |
|
141 HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength); |
|
142 TPtr sqlStatement = buf->Des(); |
|
143 |
|
144 // Form the query. Query everything. |
|
145 _LIT(KSQLQuery, "SELECT * FROM %S WHERE %S=%d AND %S=%d AND %S=%d"); |
|
146 |
|
147 if (iUiConn->GetEapType() == eap_type_tls) |
|
148 { |
|
149 sqlStatement.Format(KSQLQuery, |
|
150 &KTlsAllowedCipherSuitesDatabaseTableName, |
|
151 &KServiceType, |
|
152 iUiConn->GetIndexType(), |
|
153 &KServiceIndex, |
|
154 iUiConn->GetIndex(), |
|
155 &KTunnelingType, |
|
156 iUiConn->GetTunnelingType()); |
|
157 } |
|
158 else if (iUiConn->GetEapType() == eap_type_peap) |
|
159 { |
|
160 sqlStatement.Format(KSQLQuery, |
|
161 &KPeapAllowedCipherSuitesDatabaseTableName, |
|
162 &KServiceType, |
|
163 iUiConn->GetIndexType(), |
|
164 &KServiceIndex, |
|
165 iUiConn->GetIndex(), |
|
166 &KTunnelingType, |
|
167 iUiConn->GetTunnelingType()); |
|
168 } |
|
169 else if (iUiConn->GetEapType() == eap_type_ttls || iUiConn->GetEapType() == eap_type_ttls_plain_pap) |
|
170 { |
|
171 sqlStatement.Format(KSQLQuery, |
|
172 &KTtlsAllowedCipherSuitesDatabaseTableName, |
|
173 &KServiceType, |
|
174 iUiConn->GetIndexType(), |
|
175 &KServiceIndex, |
|
176 iUiConn->GetIndex(), |
|
177 &KTunnelingType, |
|
178 iUiConn->GetTunnelingType()); |
|
179 } |
|
180 |
|
181 #ifdef USE_FAST_EAP_TYPE |
|
182 else if (iUiConn->GetEapType() == eap_type_fast) |
|
183 { |
|
184 sqlStatement.Format(KSQLQuery, |
|
185 &KFastAllowedCipherSuitesDatabaseTableName, |
|
186 &KServiceType, |
|
187 iUiConn->GetIndexType(), |
|
188 &KServiceIndex, |
|
189 iUiConn->GetIndex(), |
|
190 &KTunnelingType, |
|
191 iUiConn->GetTunnelingType()); |
|
192 } |
|
193 #endif //#ifdef USE_FAST_EAP_TYPE |
|
194 |
|
195 // Evaluate view |
|
196 RDbView view; |
|
197 User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement))); |
|
198 CleanupClosePushL(view); |
|
199 User::LeaveIfError(view.EvaluateAll()); |
|
200 |
|
201 // Delete old rows |
|
202 if (view.FirstL()) |
|
203 { |
|
204 do { |
|
205 view.DeleteL(); |
|
206 } while (view.NextL() != EFalse); |
|
207 } |
|
208 |
|
209 // Get column set so we get the correct column numbers |
|
210 CDbColSet* colSet = view.ColSetL(); |
|
211 CleanupStack::PushL(colSet); |
|
212 |
|
213 TInt i(0); |
|
214 |
|
215 for (i = 0; i < iDataPtr->Count(); i++) |
|
216 { |
|
217 if (iDataPtr->At(i).iIsEnabled) |
155 { |
218 { |
156 TUint aCipherSuite = aSettings.iCipherSuites[i_ind]; |
219 view.InsertL(); |
157 TInt j_ind(0); |
220 view.SetColL(colSet->ColNo(KServiceType), static_cast<TUint>(iUiConn->GetIndexType())); |
158 |
221 view.SetColL(colSet->ColNo(KServiceIndex), static_cast<TUint>(iUiConn->GetIndex())); |
159 for (j_ind = 0; j_ind < iDataPtr->Count(); j_ind++) |
222 view.SetColL(colSet->ColNo(KTunnelingType), static_cast<TUint>(iUiConn->GetTunnelingType())); |
160 { |
223 view.SetColL(colSet->ColNo(KCipherSuite), static_cast<TUint>(iDataPtr->At(i).iCipherSuite)); |
161 if ((*iDataPtr)[j_ind]->GetCipherSuite() == aCipherSuite) |
224 view.PutL(); |
162 { |
|
163 (*iDataPtr)[j_ind]->SetIsEnabled(ETrue); |
|
164 break; |
|
165 } |
|
166 } |
|
167 } |
225 } |
168 } |
226 } |
169 |
227 CleanupStack::PopAndDestroy(colSet); |
170 *aDataPtr = iDataPtr; |
228 CleanupStack::PopAndDestroy(); // view |
171 |
229 CleanupStack::PopAndDestroy(buf); |
172 return KErrNone; |
230 } |
173 } |
|
174 |
|
175 |
|
176 TInt CEapTlsPeapUiCipherSuites::Update() |
|
177 { |
|
178 EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Update()\n"))); |
|
179 EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Update()\n")); |
|
180 |
|
181 EAPSettings aSettings; |
|
182 |
|
183 aSettings.iCipherSuitesPresent = ETrue; |
|
184 |
|
185 TInt i_ind(0); |
|
186 |
|
187 for (i_ind = 0; i_ind < iDataPtr->Count(); i_ind++) |
|
188 { |
|
189 if ((*iDataPtr)[i_ind]->GetIsEnabled()) |
|
190 { |
|
191 TInt error = aSettings.iCipherSuites.Append((*iDataPtr)[i_ind]->GetCipherSuite()); |
|
192 if (error != KErrNone) |
|
193 { |
|
194 return error; |
|
195 } |
|
196 } |
|
197 } |
|
198 |
|
199 TRAPD(error,iEapTypeConnection->SetConfigurationL(aSettings)); |
|
200 |
|
201 EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiDataConnection::Update(): error = %d\n"),error)); |
|
202 |
|
203 return error; |
|
204 } |
|
205 |
|
206 |
|
207 |
231 |
208 TInt CEapTlsPeapUiCipherSuites::Close() |
232 TInt CEapTlsPeapUiCipherSuites::Close() |
209 { |
233 { |
210 EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Close()\n"))); |
|
211 EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Close()\n")); |
|
212 |
|
213 if (iIsOpened == EFalse) |
234 if (iIsOpened == EFalse) |
214 { |
235 { |
215 return KErrNone; |
236 return KErrNone; |
216 } |
237 } |
217 |
238 |
220 |
241 |
221 iUiConn = NULL; |
242 iUiConn = NULL; |
222 return KErrNone; |
243 return KErrNone; |
223 } |
244 } |
224 |
245 |
|
246 |
|
247 void CEapTlsPeapUiCipherSuites::FetchDataL() |
|
248 { |
|
249 HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength); |
|
250 TPtr sqlStatement = buf->Des(); |
|
251 |
|
252 // Form the query. Query everything. |
|
253 _LIT(KSQLQuery, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d"); |
|
254 |
|
255 if (iUiConn->GetEapType() == eap_type_tls) |
|
256 { |
|
257 sqlStatement.Format(KSQLQuery, |
|
258 &KCipherSuite, |
|
259 &KTlsAllowedCipherSuitesDatabaseTableName, |
|
260 &KServiceType, |
|
261 iUiConn->GetIndexType(), |
|
262 &KServiceIndex, |
|
263 iUiConn->GetIndex(), |
|
264 &KTunnelingType, |
|
265 iUiConn->GetTunnelingType()); |
|
266 } |
|
267 else if (iUiConn->GetEapType() == eap_type_peap) |
|
268 { |
|
269 sqlStatement.Format(KSQLQuery, |
|
270 &KCipherSuite, |
|
271 &KPeapAllowedCipherSuitesDatabaseTableName, |
|
272 &KServiceType, |
|
273 iUiConn->GetIndexType(), |
|
274 &KServiceIndex, |
|
275 iUiConn->GetIndex(), |
|
276 &KTunnelingType, |
|
277 iUiConn->GetTunnelingType()); |
|
278 } |
|
279 else if (iUiConn->GetEapType() == eap_type_ttls || iUiConn->GetEapType() == eap_type_ttls_plain_pap) |
|
280 { |
|
281 sqlStatement.Format(KSQLQuery, |
|
282 &KCipherSuite, |
|
283 &KTtlsAllowedCipherSuitesDatabaseTableName, |
|
284 &KServiceType, |
|
285 iUiConn->GetIndexType(), |
|
286 &KServiceIndex, |
|
287 iUiConn->GetIndex(), |
|
288 &KTunnelingType, |
|
289 iUiConn->GetTunnelingType()); |
|
290 } |
|
291 |
|
292 #ifdef USE_FAST_EAP_TYPE |
|
293 else if (iUiConn->GetEapType() == eap_type_fast) |
|
294 { |
|
295 sqlStatement.Format(KSQLQuery, |
|
296 &KCipherSuite, |
|
297 &KFastAllowedCipherSuitesDatabaseTableName, |
|
298 &KServiceType, |
|
299 iUiConn->GetIndexType(), |
|
300 &KServiceIndex, |
|
301 iUiConn->GetIndex(), |
|
302 &KTunnelingType, |
|
303 iUiConn->GetTunnelingType()); |
|
304 } |
|
305 #endif //#ifdef USE_FAST_EAP_TYPE |
|
306 |
|
307 // Evaluate view |
|
308 RDbView view; |
|
309 User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement))); |
|
310 CleanupClosePushL(view); |
|
311 User::LeaveIfError(view.EvaluateAll()); |
|
312 |
|
313 // Get column set so we get the correct column numbers |
|
314 CDbColSet* colSet = view.ColSetL(); |
|
315 CleanupStack::PushL(colSet); |
|
316 |
|
317 if (view.FirstL()) |
|
318 { |
|
319 do { |
|
320 view.GetL(); |
|
321 |
|
322 switch (view.ColType(colSet->ColNo(KCipherSuite))) |
|
323 { |
|
324 case EDbColUint32: |
|
325 { |
|
326 // Find the corresponding cipher suite in the list |
|
327 TInt j(0); |
|
328 TUint id = view.ColUint(colSet->ColNo(KCipherSuite)); |
|
329 for (j = 0; j < iDataPtr->Count(); j++) |
|
330 { |
|
331 if (iDataPtr->At(j).iCipherSuite == id) |
|
332 { |
|
333 iDataPtr->At(j).iIsEnabled = ETrue; |
|
334 break; |
|
335 } |
|
336 } |
|
337 } |
|
338 break; |
|
339 default: |
|
340 User::Leave(KErrArgument); |
|
341 } |
|
342 } while (view.NextL() != EFalse); |
|
343 } |
|
344 |
|
345 CleanupStack::PopAndDestroy(colSet); |
|
346 |
|
347 CleanupStack::PopAndDestroy(); // view |
|
348 CleanupStack::PopAndDestroy(buf); |
|
349 } |
|
350 |
225 // End of file |
351 // End of file |