1 /* |
|
2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Details view Model |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 // EXTERNAL INCLUDES |
|
20 #include <badesca.h> |
|
21 #include <StringLoader.h> |
|
22 #include <wlansniffer.rsg> |
|
23 #include <coemain.h> |
|
24 #include <AknUtils.h> |
|
25 #include <avkon.rsg> |
|
26 #include <nifvar.h> |
|
27 #include <rconnmon.h> |
|
28 |
|
29 // INTERNAL INCLUDES |
|
30 #include "wsfwlaninfo.h" |
|
31 #include "wsfconnecteddetailsmodel.h" |
|
32 #include "wsfwlaninfoarray.h" |
|
33 #include "wsfactivewaiter.h" |
|
34 #include "wsflogger.h" |
|
35 |
|
36 |
|
37 // LOCAL DEFINITIONS |
|
38 #ifdef _DEBUG |
|
39 _LIT( KDetailsViewModelPanic, "CWsfConnectedDetailsModel" ); |
|
40 #define _ASSERTD( cond ) __ASSERT_DEBUG( (cond), \ |
|
41 User::Panic( KDetailsViewModelPanic, __LINE__) ) |
|
42 #else |
|
43 #define _ASSERTD( cond ) {} |
|
44 #endif //_DEBUG |
|
45 |
|
46 // the size of the Details Listbox's array |
|
47 const TInt KWlanInfoGranularity = 3; |
|
48 |
|
49 // Listbox element format string |
|
50 _LIT( KListItemFormat, "%S\t%S" ); |
|
51 |
|
52 // invalid connection id |
|
53 const TInt KInvalidConnectionId = 0; |
|
54 |
|
55 |
|
56 // --------------------------------------------------------------------------- |
|
57 // CWsfConnectedDetailsModel::CWsfConnectedDetailsModel |
|
58 // --------------------------------------------------------------------------- |
|
59 // |
|
60 CWsfConnectedDetailsModel::CWsfConnectedDetailsModel(): |
|
61 iIsConnActive( EFalse ), |
|
62 iConnectionId( KInvalidConnectionId ), |
|
63 iCoeEnv( CCoeEnv::Static() ) |
|
64 { |
|
65 } |
|
66 |
|
67 // --------------------------------------------------------------------------- |
|
68 // CWsfConnectedDetailsModel::ConstructL |
|
69 // --------------------------------------------------------------------------- |
|
70 // |
|
71 void CWsfConnectedDetailsModel::ConstructL() |
|
72 { |
|
73 LOG_ENTERFN( "CWsfConnectedDetailsModel::ConstructL" ); |
|
74 iFormattedWlanInfo = new (ELeave) CDesCArrayFlat( KWlanInfoGranularity ); |
|
75 iConnectionMonitor.ConnectL(); |
|
76 FindWlanConnectionL(); |
|
77 } |
|
78 |
|
79 // --------------------------------------------------------------------------- |
|
80 // CWsfConnectedDetailsModel::NewL |
|
81 // --------------------------------------------------------------------------- |
|
82 // |
|
83 CWsfConnectedDetailsModel* CWsfConnectedDetailsModel::NewL() |
|
84 { |
|
85 LOG_ENTERFN( "CWsfConnectedDetailsModel::NewL" ); |
|
86 CWsfConnectedDetailsModel* self = CWsfConnectedDetailsModel::NewLC(); |
|
87 CleanupStack::Pop( self ); |
|
88 return self; |
|
89 } |
|
90 |
|
91 // --------------------------------------------------------------------------- |
|
92 // CWsfConnectedDetailsModel::NewLC |
|
93 // --------------------------------------------------------------------------- |
|
94 // |
|
95 CWsfConnectedDetailsModel* CWsfConnectedDetailsModel::NewLC() |
|
96 { |
|
97 LOG_ENTERFN( "CWsfConnectedDetailsModel::NewLC" ); |
|
98 CWsfConnectedDetailsModel* self = new( ELeave ) CWsfConnectedDetailsModel; |
|
99 CleanupStack::PushL( self ); |
|
100 self->ConstructL(); |
|
101 return self; |
|
102 } |
|
103 |
|
104 // --------------------------------------------------------------------------- |
|
105 // CWsfConnectedDetailsModel::~CWsfConnectedDetailsModel |
|
106 // --------------------------------------------------------------------------- |
|
107 // |
|
108 CWsfConnectedDetailsModel::~CWsfConnectedDetailsModel() |
|
109 { |
|
110 LOG_ENTERFN( |
|
111 "CWsfConnectedDetailsModel::~CWsfConnectedDetailsModel" ); |
|
112 iConnectionMonitor.CancelAsyncRequest(EConnMonGetUintAttribute); |
|
113 iConnectionMonitor.CancelAsyncRequest(EConnMonGetIntAttribute); |
|
114 iConnectionMonitor.Close(); |
|
115 delete iFormattedWlanInfo; |
|
116 } |
|
117 |
|
118 |
|
119 // --------------------------------------------------------------------------- |
|
120 // CWsfConnectedDetailsModel::FindWlanConnectionL |
|
121 // --------------------------------------------------------------------------- |
|
122 // |
|
123 void CWsfConnectedDetailsModel::FindWlanConnectionL() |
|
124 { |
|
125 LOG_ENTERFN( "CWsfConnectedDetailsModel::FindWlanConnectionL" ); |
|
126 |
|
127 #ifndef __WINS__ |
|
128 // first call, need to get the connection parameters |
|
129 iConnectionId = KInvalidConnectionId; |
|
130 TUint connectionCount( 0 ); |
|
131 |
|
132 CWsfActiveWaiter* waiter = CWsfActiveWaiter::NewL(); |
|
133 iConnectionMonitor.GetConnectionCount( connectionCount, waiter->iStatus ); |
|
134 waiter->WaitForRequest(); |
|
135 |
|
136 if ( waiter->iStatus.Int() == KErrNone ) |
|
137 { |
|
138 LOG_WRITEF( "connectionCount = %d", connectionCount ); |
|
139 // find the connection with WLAN bearer |
|
140 // that will be the selected WLAN |
|
141 for ( TUint i = 1; i <= connectionCount; ++i ) |
|
142 { |
|
143 TUint connectionId( KInvalidConnectionId ); |
|
144 TUint subConnectionCount( 0 ); |
|
145 TConnMonBearerType bearerType( EBearerUnknown ); |
|
146 |
|
147 iConnectionMonitor.GetConnectionInfo( i, |
|
148 connectionId, |
|
149 subConnectionCount ); |
|
150 iConnectionMonitor.GetIntAttribute( connectionId, |
|
151 0, |
|
152 KBearer, |
|
153 ( TInt& )bearerType, |
|
154 waiter->iStatus ); |
|
155 waiter->WaitForRequest(); |
|
156 |
|
157 if ( waiter->iStatus.Int() == KErrNone && |
|
158 bearerType == EBearerWLAN ) |
|
159 { |
|
160 LOG_WRITEF( "found connection id = %d", connectionId ); |
|
161 iConnectionId = connectionId; |
|
162 break; |
|
163 } |
|
164 } |
|
165 } |
|
166 |
|
167 if ( iConnectionId != KInvalidConnectionId ) |
|
168 { |
|
169 iIsConnActive = ETrue; |
|
170 |
|
171 // now we have the connectiond ID, ask the start time |
|
172 LOG_WRITE( "querying start time..." ); |
|
173 |
|
174 TConnMonTimeBuf timeBuf; |
|
175 iConnectionMonitor.GetPckgAttribute( iConnectionId, 0, KStartTime, |
|
176 timeBuf, waiter->iStatus ); |
|
177 waiter->WaitForRequest(); |
|
178 |
|
179 if ( waiter->iStatus.Int() == KErrNone ) |
|
180 { |
|
181 iStartTime = timeBuf(); |
|
182 } |
|
183 } |
|
184 |
|
185 delete waiter; |
|
186 |
|
187 #else // __WINS__ |
|
188 |
|
189 // for testing |
|
190 iStartTime.UniversalTime(); |
|
191 iIsConnActive = ETrue; |
|
192 |
|
193 #endif // __WINS__ |
|
194 |
|
195 } |
|
196 |
|
197 |
|
198 // --------------------------------------------------------------------------- |
|
199 // CWsfConnectedDetailsModel::FormatWlanInfoL |
|
200 // --------------------------------------------------------------------------- |
|
201 // |
|
202 CDesCArrayFlat* CWsfConnectedDetailsModel::FormatWlanInfoL( |
|
203 TWsfWlanInfo* aWlanInfo, |
|
204 CWsfWlanInfoArray* aWlanArray ) |
|
205 { |
|
206 LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatWlanInfoL" ); |
|
207 _ASSERTD( aWlanArray ); |
|
208 |
|
209 // While the system loads the dialog and the connection lost that could |
|
210 // cause problems eg.: "No data" displayed |
|
211 if ( !aWlanInfo || !VisibleWlans( *aWlanArray ) ) |
|
212 { |
|
213 // bad wlan info or no visible wlans |
|
214 return iFormattedWlanInfo; |
|
215 } |
|
216 |
|
217 iWlanInfo = *aWlanInfo; |
|
218 iWlanArray = aWlanArray; |
|
219 |
|
220 RefreshCurrentWlanInfoL(); |
|
221 |
|
222 |
|
223 return GetWlanDetails(); |
|
224 } |
|
225 |
|
226 |
|
227 // --------------------------------------------------------------------------- |
|
228 // CWsfConnectedDetailsModel::RefreshCurrentWlanInfoL |
|
229 // --------------------------------------------------------------------------- |
|
230 // |
|
231 CDesCArrayFlat* CWsfConnectedDetailsModel::RefreshCurrentWlanInfoL() |
|
232 { |
|
233 LOG_ENTERFN( "CWsfConnectedDetailsModel::RefreshCurrentWlanInfoL" ); |
|
234 LOG_WRITEF( "iIsConnActive: %d", iIsConnActive ); |
|
235 _ASSERTD( iWlanArray ); |
|
236 if ( iRefreshing ) |
|
237 { |
|
238 return iFormattedWlanInfo; |
|
239 } |
|
240 |
|
241 // mutual exclusion |
|
242 iRefreshing = ETrue; |
|
243 |
|
244 #ifndef __WINS__ |
|
245 if ( iIsConnActive ) |
|
246 { |
|
247 LOG_WRITEF( "RefreshCurrentWlanInfoL - iConnectionId: %d", |
|
248 iConnectionId ); |
|
249 |
|
250 CWsfActiveWaiter* waiter = CWsfActiveWaiter::NewL(); |
|
251 TInt connStat( 0 ); |
|
252 iConnectionMonitor.GetIntAttribute( iConnectionId, |
|
253 0, |
|
254 KConnectionStatus, |
|
255 connStat, |
|
256 waiter->iStatus ); |
|
257 waiter->WaitForRequest(); |
|
258 |
|
259 LOG_WRITEF( "connStat: %d", connStat ); |
|
260 LOG_WRITEF( "status.Int(): %d", waiter->iStatus.Int() ); |
|
261 |
|
262 if ( waiter->iStatus.Int() != KErrNone ) |
|
263 { |
|
264 delete waiter; |
|
265 iRefreshing = EFalse; |
|
266 return iFormattedWlanInfo; |
|
267 } |
|
268 |
|
269 delete waiter; |
|
270 |
|
271 // set the connection status |
|
272 LOG_WRITEF( "connStat: %d", connStat ); |
|
273 if ( ( connStat == KLinkLayerOpen ) || |
|
274 ( connStat == KConnectionOpen ) ) |
|
275 { |
|
276 iIsConnActive = ETrue; |
|
277 } |
|
278 else |
|
279 { |
|
280 iIsConnActive = EFalse; |
|
281 } |
|
282 } |
|
283 |
|
284 #endif // __WINS__ |
|
285 |
|
286 iFormattedWlanInfo->Reset(); |
|
287 |
|
288 // create array of connected WLAN data |
|
289 FormatAndAppendConnectedWlanSsidL(); |
|
290 FormatAndAppendDurationL(); |
|
291 FormatAndAppendTransferredL(); |
|
292 |
|
293 iRefreshing = EFalse; |
|
294 |
|
295 return GetWlanDetails(); |
|
296 } |
|
297 |
|
298 |
|
299 // --------------------------------------------------------------------------- |
|
300 // CWsfConnectedDetailsModel::GetWlanDetails |
|
301 // --------------------------------------------------------------------------- |
|
302 // |
|
303 CDesCArrayFlat* CWsfConnectedDetailsModel::GetWlanDetails() |
|
304 { |
|
305 LOG_ENTERFN( "CWsfConnectedDetailsModel::GetWlanDetails" ); |
|
306 #ifdef _DEBUG |
|
307 const TInt KThatLongBufferWillMakeDo = 100; |
|
308 for( TInt i = 0; i < iFormattedWlanInfo->MdcaCount(); i++) |
|
309 { |
|
310 TPtrC temp = iFormattedWlanInfo->MdcaPoint( i ); |
|
311 TBuf<KThatLongBufferWillMakeDo> tempElement = temp; |
|
312 LOG_WRITEF( "iFormattedWlanInfo: %S", &tempElement ); |
|
313 } |
|
314 #endif |
|
315 |
|
316 return iFormattedWlanInfo; |
|
317 } |
|
318 |
|
319 |
|
320 // --------------------------------------------------------------------------- |
|
321 // CWsfConnectedDetailsModel::WlanSsid |
|
322 // --------------------------------------------------------------------------- |
|
323 // |
|
324 const TDesC8& CWsfConnectedDetailsModel::WlanSsid() const |
|
325 { |
|
326 return iWlanInfo.iSsid; |
|
327 } |
|
328 |
|
329 |
|
330 // --------------------------------------------------------------------------- |
|
331 // CWsfConnectedDetailsModel::FormatListBoxItemLC |
|
332 // --------------------------------------------------------------------------- |
|
333 // |
|
334 HBufC* CWsfConnectedDetailsModel::FormatListBoxItemLC( |
|
335 const TUint aResourceId, |
|
336 const TDesC& aValueText ) const |
|
337 { |
|
338 LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatListBoxItemLC" ); |
|
339 // hold the column name on list item |
|
340 HBufC* columnName = NULL; |
|
341 |
|
342 if ( aResourceId ) |
|
343 { |
|
344 columnName = StringLoader::LoadLC( aResourceId ); |
|
345 } |
|
346 else |
|
347 { |
|
348 columnName = KNullDesC().AllocLC(); |
|
349 } |
|
350 |
|
351 |
|
352 // Holds the list box item |
|
353 HBufC* listBoxItem = HBufC::NewL( KListItemFormat().Length()+ |
|
354 columnName->Length() + |
|
355 aValueText.Length() ); |
|
356 |
|
357 // For formating needs |
|
358 TPtr listBoxItemPrt = listBoxItem->Des(); |
|
359 |
|
360 // Format string ( KListItemFormat = %S\t%S ) |
|
361 listBoxItemPrt.Format( KListItemFormat, columnName, &aValueText ); |
|
362 CleanupStack::PopAndDestroy( columnName ); |
|
363 CleanupStack::PushL( listBoxItem ); |
|
364 return listBoxItem; |
|
365 } |
|
366 |
|
367 |
|
368 // --------------------------------------------------------------------------- |
|
369 // CWsfConnectedDetailsModel::FormatAndAppendConnectedWlanSsidL |
|
370 // --------------------------------------------------------------------------- |
|
371 // |
|
372 void CWsfConnectedDetailsModel::FormatAndAppendConnectedWlanSsidL() |
|
373 { |
|
374 LOG_ENTERFN( |
|
375 "CWsfConnectedDetailsModel::FormatAndAppendConnectedWlanSsidL" ); |
|
376 HBufC* wlanName( NULL ); |
|
377 |
|
378 if ( iWlanInfo.iNetworkName.Length() ) // If there is IAP |
|
379 { |
|
380 wlanName = iWlanInfo.GetIapNameAsUnicodeLC(); |
|
381 } |
|
382 else // If there no IAP |
|
383 { |
|
384 wlanName = iWlanInfo.GetSsidAsUnicodeLC(); |
|
385 } |
|
386 |
|
387 HBufC* listBoxItem = FormatListBoxItemLC( |
|
388 R_QTN_WLAN_ITEM_HEADING_TEXT_WLAN, |
|
389 *wlanName ); |
|
390 |
|
391 iFormattedWlanInfo->AppendL( *listBoxItem ); |
|
392 CleanupStack::PopAndDestroy( listBoxItem ); |
|
393 CleanupStack::PopAndDestroy( wlanName ); |
|
394 } |
|
395 |
|
396 |
|
397 // --------------------------------------------------------------------------- |
|
398 // CWsfConnectedDetailsModel::FormatAndAppendDurationL |
|
399 // --------------------------------------------------------------------------- |
|
400 // |
|
401 void CWsfConnectedDetailsModel::FormatAndAppendDurationL() |
|
402 { |
|
403 LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatAndAppendDurationL" ); |
|
404 HBufC* duration = FormatDurationLC(); |
|
405 HBufC* listBoxItem = FormatListBoxItemLC( |
|
406 R_QTN_WLAN_ITEM_HEADING_DURATION, |
|
407 *duration ); |
|
408 |
|
409 iFormattedWlanInfo->AppendL( *listBoxItem ); |
|
410 CleanupStack::PopAndDestroy( listBoxItem ); |
|
411 CleanupStack::PopAndDestroy( duration ); |
|
412 } |
|
413 |
|
414 |
|
415 // --------------------------------------------------------------------------- |
|
416 // CWsfConnectedDetailsModel::FormatAndAppendTransferredL |
|
417 // --------------------------------------------------------------------------- |
|
418 // |
|
419 void CWsfConnectedDetailsModel::FormatAndAppendTransferredL() |
|
420 { |
|
421 LOG_ENTERFN( |
|
422 "CWsfConnectedDetailsModel::FormatAndAppendTransferredL" ); |
|
423 HBufC* transferredData = FormatTransferredLC(); |
|
424 HBufC* listBoxItem = FormatListBoxItemLC( R_QTN_WLAN_ITEM_HEADING_TRANSF, |
|
425 *transferredData ); |
|
426 |
|
427 iFormattedWlanInfo->AppendL( *listBoxItem ); |
|
428 CleanupStack::PopAndDestroy( listBoxItem ); |
|
429 CleanupStack::PopAndDestroy( transferredData ); |
|
430 } |
|
431 |
|
432 |
|
433 // --------------------------------------------------------------------------- |
|
434 // CWsfConnectedDetailsModel::FormatDurationLC |
|
435 // --------------------------------------------------------------------------- |
|
436 // |
|
437 HBufC* CWsfConnectedDetailsModel::FormatDurationLC() |
|
438 { |
|
439 LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatDurationLC" ); |
|
440 const TUint KTimeStringLength = 64; |
|
441 |
|
442 if ( iIsConnActive ) |
|
443 { |
|
444 // if connection is still active, update the duration |
|
445 TTime now; |
|
446 now.UniversalTime(); |
|
447 iDuration = now.MicroSecondsFrom( iStartTime ); |
|
448 } |
|
449 |
|
450 HBufC* timeString = HBufC::NewLC( KTimeStringLength ); |
|
451 TPtr16 tempBuf( timeString->Des() ); |
|
452 |
|
453 HBufC* temp = StringLoader::LoadLC( R_QTN_TIME_DURAT_LONG_WITH_ZERO ); |
|
454 |
|
455 TTime activeTime( iDuration.Int64() ); |
|
456 activeTime.FormatL( tempBuf, *temp ); |
|
457 CleanupStack::PopAndDestroy( temp ); |
|
458 |
|
459 TPtr timePtr = timeString->Des(); |
|
460 AknTextUtils::DisplayTextLanguageSpecificNumberConversion( timePtr ); |
|
461 |
|
462 return timeString; |
|
463 } |
|
464 |
|
465 |
|
466 // --------------------------------------------------------------------------- |
|
467 // CWsfConnectedDetailsModel::FormatTransferredLC |
|
468 // --------------------------------------------------------------------------- |
|
469 // |
|
470 HBufC* CWsfConnectedDetailsModel::FormatTransferredLC() |
|
471 { |
|
472 LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatTransferredLC" ); |
|
473 |
|
474 #ifndef __WINS__ |
|
475 CWsfActiveWaiter* waiter = CWsfActiveWaiter::NewL(); |
|
476 |
|
477 TUint uplink( 0 ); |
|
478 TUint downlink( 0 ); |
|
479 |
|
480 if ( iIsConnActive && iConnectionId != KInvalidConnectionId ) |
|
481 { |
|
482 // if connection is still active, update the transmitted bytes |
|
483 iConnectionMonitor.GetUintAttribute( iConnectionId, 0, KUplinkData, |
|
484 uplink, waiter->iStatus ); |
|
485 waiter->WaitForRequest(); |
|
486 } |
|
487 |
|
488 if ( waiter->iStatus.Int() == KErrNone |
|
489 && iIsConnActive |
|
490 && iConnectionId != KInvalidConnectionId ) |
|
491 { |
|
492 iConnectionMonitor.GetUintAttribute( iConnectionId, 0, KDownlinkData, |
|
493 downlink, waiter->iStatus ); |
|
494 waiter->WaitForRequest(); |
|
495 |
|
496 } |
|
497 |
|
498 iBytesTransmitted = uplink + downlink; |
|
499 delete waiter; |
|
500 |
|
501 #endif |
|
502 |
|
503 const TUint KTransferredBytesFormatBuf = 16; |
|
504 const TUint KTransferredBytesWidth = 10; |
|
505 const TUint KTransferredBytesDecimalPlaces = 2; |
|
506 const TUint KKiloByte = 1024; |
|
507 TUint resId; |
|
508 |
|
509 TBuf<KTransferredBytesFormatBuf> buf; |
|
510 |
|
511 TReal denom( KKiloByte ); |
|
512 |
|
513 if ( iBytesTransmitted < KKiloByte*KKiloByte ) |
|
514 { |
|
515 denom = KKiloByte; |
|
516 resId = R_QTN_WLAN_ITEM_KB; |
|
517 } |
|
518 else |
|
519 { |
|
520 denom = KKiloByte*KKiloByte; |
|
521 resId = R_QTN_WLAN_ITEM_MB; |
|
522 } |
|
523 |
|
524 TReal value = TReal( iBytesTransmitted ) / denom; |
|
525 |
|
526 TRealFormat realFormat( KTransferredBytesWidth, |
|
527 KTransferredBytesDecimalPlaces ); |
|
528 |
|
529 HBufC* number = HBufC::NewLC( KTransferredBytesWidth ); |
|
530 number->Des().Num( value, realFormat ); |
|
531 |
|
532 _LIT( KUdFormatLarge, "%S" ); |
|
533 buf.Format( KUdFormatLarge, number ); |
|
534 CleanupStack::PopAndDestroy( number ); |
|
535 |
|
536 HBufC* loadedTxt = StringLoader::LoadLC( resId, buf, iCoeEnv ); |
|
537 |
|
538 |
|
539 // Convert digits |
|
540 TPtr loadTextPtr( loadedTxt->Des() ); |
|
541 AknTextUtils::DisplayTextLanguageSpecificNumberConversion( loadTextPtr ); |
|
542 |
|
543 return loadedTxt; |
|
544 } |
|
545 |
|
546 |
|
547 // --------------------------------------------------------------------------- |
|
548 // CWsfConnectedDetailsModel::VisibleWlans |
|
549 // --------------------------------------------------------------------------- |
|
550 // |
|
551 TInt CWsfConnectedDetailsModel::VisibleWlans( CWsfWlanInfoArray& aArray ) |
|
552 { |
|
553 LOG_ENTERFN( "CWsfConnectedDetailsModel::VisibleWlans" ); |
|
554 TInt i = 0; |
|
555 TBool hiddenFound = EFalse; |
|
556 TWsfWlanInfo* wlanInfo; |
|
557 while ( i < aArray.Count() && !hiddenFound ) |
|
558 { |
|
559 wlanInfo = aArray[i]; |
|
560 if ( wlanInfo->Hidden() && !wlanInfo->Known() ) |
|
561 { |
|
562 hiddenFound = ETrue; |
|
563 } |
|
564 else |
|
565 { |
|
566 ++i; |
|
567 } |
|
568 } |
|
569 return i; |
|
570 } |
|
571 |
|
572 // END OF FILE |
|
573 |
|