33 /** |
33 /** |
34 * Number of message slots at the server |
34 * Number of message slots at the server |
35 */ |
35 */ |
36 static const TInt KIPCSlots = 6; |
36 static const TInt KIPCSlots = 6; |
37 |
37 |
|
38 /** |
|
39 * Number of retries to start the server |
|
40 */ |
|
41 static const TInt KRetries = 3; |
|
42 |
38 |
43 |
39 |
44 |
40 // --------------------------------------------------------------------------- |
45 // --------------------------------------------------------------------------- |
41 // RWsfSession::RWsfSession |
46 // RWsfSession::RWsfSession |
42 // --------------------------------------------------------------------------- |
47 // --------------------------------------------------------------------------- |
108 EXPORT_C TInt RWsfSession::Connect() |
113 EXPORT_C TInt RWsfSession::Connect() |
109 { |
114 { |
110 LOG_ENTERFN( "RWsfSession::Connect" ); |
115 LOG_ENTERFN( "RWsfSession::Connect" ); |
111 TInt err = StartServer(); |
116 TInt err = StartServer(); |
112 |
117 |
113 if ( err == KErrNone ) |
118 for (TInt tries = 0; tries < KRetries; tries++) |
114 { |
119 { |
115 LOG_WRITE( "server started" ); |
120 LOG_WRITE( "server started" ); |
116 |
121 |
117 err = CreateSession( KWlanSnifferServerName, Version(), KIPCSlots ); |
122 err = CreateSession( KWlanSnifferServerName, Version(), KIPCSlots ); |
118 |
123 |
119 LOG_WRITEF( "CreateSession() returned %d", err ); |
124 LOG_WRITEF( "CreateSession() returned %d", err ); |
120 |
125 |
121 if ( err == KErrNone ) |
126 if (!err) |
122 { |
127 { |
|
128 LOG_WRITE( "connected" ); |
123 TRAP( err, iConnWaiter = new (ELeave) CActiveSchedulerWait() ); |
129 TRAP( err, iConnWaiter = new (ELeave) CActiveSchedulerWait() ); |
|
130 break; |
124 } |
131 } |
125 } |
132 if (err != KErrNotFound && err != KErrServerTerminated) |
126 else |
133 { |
127 { |
134 LOG_WRITE( "problems session creation - break" ); |
128 LOG_WRITEF( "server starting failed with error %d", err ); |
135 break; |
129 } |
136 } |
|
137 |
|
138 TInt err = StartServer(); // try to launch the server |
|
139 |
|
140 if (!err) |
|
141 { |
|
142 LOG_WRITE( "ok - try to connect again" ); |
|
143 continue; |
|
144 } |
|
145 |
|
146 if (err == KErrAlreadyExists) |
|
147 { |
|
148 LOG_WRITE( "someone else started - try to connect again" ); |
|
149 continue; |
|
150 } |
|
151 |
|
152 LOG_WRITE( "problems - break" ); |
|
153 break; |
|
154 } |
|
155 |
|
156 LOG_WRITEF( "connect exit value = %d", err ); |
130 |
157 |
131 return err; |
158 return err; |
132 } |
159 } |
133 |
160 |
134 |
161 |
206 waiter->iStatus.Int() ); |
233 waiter->iStatus.Int() ); |
207 User::LeaveIfError( waiter->iStatus.Int() ); |
234 User::LeaveIfError( waiter->iStatus.Int() ); |
208 CleanupStack::PopAndDestroy( waiter ); |
235 CleanupStack::PopAndDestroy( waiter ); |
209 |
236 |
210 return ret(); |
237 return ret(); |
|
238 } |
|
239 |
|
240 |
|
241 // --------------------------------------------------------------------------- |
|
242 // RWsfSession::GetConnectedWlanDetails |
|
243 // --------------------------------------------------------------------------- |
|
244 // |
|
245 EXPORT_C void RWsfSession::GetConnectedWlanDetails( TPckgBuf<TBool>& aPckg, |
|
246 TWsfWlanInfo& aWlanInfo, |
|
247 TRequestStatus& aStatus ) |
|
248 { |
|
249 LOG_ENTERFN("RWsfSession::GetConnectedWlanDetails"); |
|
250 TPckg<TWsfWlanInfo> package( aWlanInfo ); |
|
251 |
|
252 SendReceive( ESnifferCmdConnectedDetails, TIpcArgs( &aPckg, &package ), |
|
253 aStatus ); |
211 } |
254 } |
212 |
255 |
213 |
256 |
214 // --------------------------------------------------------------------------- |
257 // --------------------------------------------------------------------------- |
215 // RWsfSession::NotifyEventL |
258 // RWsfSession::NotifyEventL |
360 CleanupStack::PopAndDestroy( waiter ); |
403 CleanupStack::PopAndDestroy( waiter ); |
361 } |
404 } |
362 |
405 |
363 |
406 |
364 // --------------------------------------------------------------------------- |
407 // --------------------------------------------------------------------------- |
|
408 // RWsfSession::GetWlanListSize |
|
409 // --------------------------------------------------------------------------- |
|
410 // |
|
411 EXPORT_C void RWsfSession::GetWlanListSize( TPckgBuf<TUint> &aPckg, TRequestStatus& aStatus ) |
|
412 { |
|
413 LOG_ENTERFN("RWsfSession::GetWlanListSize"); |
|
414 SendReceive( ESnifferCmdWlanDataSize, TIpcArgs( &aPckg ), aStatus ); |
|
415 } |
|
416 |
|
417 |
|
418 // --------------------------------------------------------------------------- |
|
419 // RWsfSession::GetWlanList |
|
420 // --------------------------------------------------------------------------- |
|
421 // |
|
422 EXPORT_C void RWsfSession::GetWlanList( TPckgBuf<TUint>& aPckg, TPtr8& aPtr, TRequestStatus& aStatus ) |
|
423 { |
|
424 LOG_ENTERFN("RWsfSession::GetWlanList"); |
|
425 SendReceive( ESnifferCmdGetWlanInfo, TIpcArgs( &aPckg, &aPtr ), aStatus ); |
|
426 } |
|
427 |
|
428 |
|
429 // --------------------------------------------------------------------------- |
365 // RWsfSession::MonitorAccessPointL |
430 // RWsfSession::MonitorAccessPointL |
366 // --------------------------------------------------------------------------- |
431 // --------------------------------------------------------------------------- |
367 // |
432 // |
368 EXPORT_C void RWsfSession::MonitorAccessPointL( TUint32 aMonitoredIap ) |
433 EXPORT_C void RWsfSession::MonitorAccessPointL( TUint32 aMonitoredIap ) |
369 { |
434 { |
370 LOG_ENTERFN("RWsfSession::MonitorAccessPointL"); |
435 LOG_ENTERFN("RWsfSession::MonitorAccessPointL"); |
371 |
436 |
372 CWsfActiveWaiter *waiter = CWsfActiveWaiter::NewL(); |
437 TInt err = Send( ESnifferCmdMonitorAp, TIpcArgs( aMonitoredIap )); |
373 CleanupStack::PushL( waiter ); |
438 LOG_WRITEF( "message[%d] call returned %d", ESnifferCmdMonitorAp, err ); |
374 |
439 |
375 SendReceive( ESnifferCmdMonitorAp, TIpcArgs( aMonitoredIap ), |
440 User::LeaveIfError( err ); |
376 waiter->iStatus ); |
|
377 waiter->WaitForRequest(); |
|
378 LOG_WRITEF( "message[%d] call returned %d", |
|
379 ESnifferCmdMonitorAp, |
|
380 waiter->iStatus.Int() ); |
|
381 User::LeaveIfError( waiter->iStatus.Int() ); |
|
382 |
|
383 CleanupStack::PopAndDestroy( waiter ); |
|
384 } |
441 } |
385 |
442 |
386 |
443 |
387 // --------------------------------------------------------------------------- |
444 // --------------------------------------------------------------------------- |
388 // RWsfSession::RequestScanL |
445 // RWsfSession::RequestScanL |
402 ESnifferCmdRequestScan, |
459 ESnifferCmdRequestScan, |
403 waiter->iStatus.Int() ); |
460 waiter->iStatus.Int() ); |
404 User::LeaveIfError( waiter->iStatus.Int() ); |
461 User::LeaveIfError( waiter->iStatus.Int() ); |
405 CleanupStack::PopAndDestroy( waiter ); |
462 CleanupStack::PopAndDestroy( waiter ); |
406 return pckg(); |
463 return pckg(); |
|
464 } |
|
465 |
|
466 |
|
467 // --------------------------------------------------------------------------- |
|
468 // RWsfSession::RequestScan |
|
469 // --------------------------------------------------------------------------- |
|
470 // |
|
471 EXPORT_C void RWsfSession::RequestScan(TPckgBuf<TBool>& aPckg, TRequestStatus& aStatus ) |
|
472 { |
|
473 LOG_ENTERFN("RWsfSession::RequestScan"); |
|
474 SendReceive( ESnifferCmdRequestScan, TIpcArgs( &aPckg ), aStatus ); |
407 } |
475 } |
408 |
476 |
409 |
477 |
410 // --------------------------------------------------------------------------- |
478 // --------------------------------------------------------------------------- |
411 // RWsfSession::ConnectWlanBearerL |
479 // RWsfSession::ConnectWlanBearerL |
458 return res; |
526 return res; |
459 } |
527 } |
460 |
528 |
461 |
529 |
462 // --------------------------------------------------------------------------- |
530 // --------------------------------------------------------------------------- |
463 // RWsfSession::ConnectWlanBearerWithoutConnWaiterL |
531 // RWsfSession::ConnectWlanBearer |
464 // --------------------------------------------------------------------------- |
532 // --------------------------------------------------------------------------- |
465 // |
533 // |
466 EXPORT_C TInt RWsfSession::ConnectWlanBearerWithoutConnWaiterL( TUint32 aIapId, |
534 EXPORT_C void RWsfSession::ConnectWlanBearer( TPckgBuf<TBool>& aPckg, |
467 TWsfIapPersistence aPersistence ) |
535 TUint32 aIapId, |
468 { |
536 TWsfIapPersistence aPersistence, |
469 LOG_ENTERFN( "RWsfSession::ConnectWlanBearerWithoutConnWaiterL" ); |
537 TRequestStatus& aStatus ) |
|
538 { |
|
539 LOG_ENTERFN( "RWsfSession::ConnectWlanBearer" ); |
470 LOG_WRITEF( "IAP id = %d", aIapId ); |
540 LOG_WRITEF( "IAP id = %d", aIapId ); |
471 |
541 |
472 // mark the beginning of the connection process |
542 // mark the beginning of the connection process |
473 iEventHandler->SetConnecting( ETrue ); |
543 iEventHandler->SetConnecting( ETrue ); |
474 |
544 |
475 TInt res( KErrNone ); |
545 SendReceive( ESnifferCmdConnect, TIpcArgs( &aPckg, aIapId, aPersistence ), |
476 TPckgBuf<TInt> pckg; |
546 aStatus ); |
477 |
547 } |
478 CWsfActiveWaiter *waiter = CWsfActiveWaiter::NewL(); |
548 |
479 CleanupStack::PushL( waiter ); |
549 |
480 |
550 // --------------------------------------------------------------------------- |
481 SendReceive( ESnifferCmdConnect, TIpcArgs( &pckg, aIapId, aPersistence ), |
551 // RWsfSession::SetConnectWlanBearerResult |
482 waiter->iStatus ); |
552 // --------------------------------------------------------------------------- |
483 waiter->WaitForRequest(); |
553 // |
484 LOG_WRITEF( "message[%d] call returned %d", |
554 EXPORT_C void RWsfSession::SetConnectWlanBearerResult( TInt aResult ) |
485 ESnifferCmdConnect, |
555 { |
486 waiter->iStatus.Int() ); |
556 LOG_ENTERFN( "RWsfSession::SetConnectWlanBearerResult" ); |
487 User::LeaveIfError( waiter->iStatus.Int() ); |
557 LOG_WRITEF( "Result = %d", aResult ); |
488 CleanupStack::PopAndDestroy( waiter ); |
558 |
489 |
559 if ( aResult != KErrNone ) |
490 res = pckg(); |
|
491 |
|
492 if ( res != KErrNone ) |
|
493 { |
560 { |
494 // on any error the flag should be cleared |
561 // on any error the flag should be cleared |
495 iEventHandler->SetConnecting( EFalse ); |
562 iEventHandler->SetConnecting( EFalse ); |
496 } |
563 } |
497 |
|
498 return res; |
|
499 } |
564 } |
500 |
565 |
501 |
566 |
502 // --------------------------------------------------------------------------- |
567 // --------------------------------------------------------------------------- |
503 // RWsfSession::StopConnectingWait |
568 // RWsfSession::StopConnectingWait |
539 return res; |
604 return res; |
540 } |
605 } |
541 |
606 |
542 |
607 |
543 // --------------------------------------------------------------------------- |
608 // --------------------------------------------------------------------------- |
|
609 // RWsfSession::DisconnectWlanBearer |
|
610 // --------------------------------------------------------------------------- |
|
611 // |
|
612 EXPORT_C void RWsfSession::DisconnectWlanBearer( TPckgBuf<TBool>& aPckg, TRequestStatus& aStatus ) |
|
613 { |
|
614 LOG_ENTERFN("RWsfSession::DisconnectWlanBearer"); |
|
615 SendReceive( ESnifferCmdDisconnect, TIpcArgs( &aPckg ), aStatus ); |
|
616 } |
|
617 |
|
618 |
|
619 // --------------------------------------------------------------------------- |
544 // RWsfSession::Close |
620 // RWsfSession::Close |
545 // --------------------------------------------------------------------------- |
621 // --------------------------------------------------------------------------- |
546 // |
622 // |
547 EXPORT_C void RWsfSession::Close() |
623 EXPORT_C void RWsfSession::Close() |
548 { |
624 { |
549 LOG_ENTERFN("RWsfSession::Close"); |
625 LOG_ENTERFN("RWsfSession::Close"); |
550 delete iEventHandler; iEventHandler = NULL; |
626 delete iEventHandler; iEventHandler = NULL; |
551 delete iConnWaiter; iConnWaiter = NULL; |
627 delete iConnWaiter; iConnWaiter = NULL; |
552 |
628 |
|
629 LOG_WRITE( "close session" ); |
553 RSessionBase::Close(); |
630 RSessionBase::Close(); |
554 } |
631 } |
555 |
632 |
556 |
633 |
557 // --------------------------------------------------------------------------- |
634 // --------------------------------------------------------------------------- |