--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmsession.cpp Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Session class is required by the client/server framework
+*
+*/
+
+/*
+* %version: 23 %
+*/
+
+// INCLUDE FILES
+#include "wlmsession.h"
+#include "genscanlist.h"
+#include "wlmserver.h"
+#include "am_debug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWlmSession::CWlmSession
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CWlmSession::CWlmSession(
+ CWlmServer& aServer ) :
+ iId( 0 ),
+ iWlmServer( aServer ),
+ iIsNotificationRequestPending( EFalse ),
+ iNotificationHandle( NULL )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CWlmSession::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CWlmSession::ConstructL()
+ {
+ iPendingNotifications.Reset();
+ iId = iWlmServer.NotifySessionCreated();
+ }
+
+// -----------------------------------------------------------------------------
+// CWlmSession::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CWlmSession* CWlmSession::NewL(
+ CWlmServer& aServer )
+ {
+ CWlmSession* self = new( ELeave ) CWlmSession( aServer );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// Destructor
+CWlmSession::~CWlmSession()
+ {
+ iPendingNotifications.Close();
+
+ if( iNotificationHandle )
+ {
+ iWlmServer.NotifyRemove( *iNotificationHandle );
+ delete iNotificationHandle;
+ }
+ iWlmServer.NotifySessionClosed( iId );
+ }
+
+// ---------------------------------------------------------
+// CWlmSession::ServiceL
+// ---------------------------------------------------------
+//
+void CWlmSession::ServiceL(
+ const RMessage2& aMessage )
+ {
+ DEBUG1( "CWlmSession: Function %d received", aMessage.Function() );
+#ifdef _DEBUG
+ TInt totalAllocated = 0;
+ TInt cellCount = User::AllocSize( totalAllocated );
+ DEBUG2("WLMSERVER MEMORYINFO: mem allocated == %d, cellcount == %d",
+ totalAllocated, cellCount );
+#endif // _DEBUG
+
+ TInt cmd = aMessage.Function();
+ switch ( cmd )
+ {
+ case EOrderNotifications:
+ HandleOrderNotifications( aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelNotifications:
+ HandleCancelNotifications( aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetScanResults:
+ iWlmServer.GetScanResult( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelGetScanResults:
+ iWlmServer.CancelGetScanResult( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EJoinByProfileId:
+ // Joining/creating network requires capabilities
+ aMessage.HasCapabilityL( ECapabilityNetworkServices );
+ iWlmServer.Connect( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelJoin:
+ iWlmServer.CancelConnect( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EReset:
+ // Releasing network connections requires capabilities
+ aMessage.HasCapabilityL( ECapabilityNetworkServices );
+ iWlmServer.ReleaseComplete( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetAvailableIaps:
+ iWlmServer.GetAvailableIaps( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelGetAvailableIaps:
+ iWlmServer.CancelGetAvailableIaps( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetCurrentState:
+ iWlmServer.GetConnectionState( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetCurrentRSSI:
+ iWlmServer.GetCurrentRCPI( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetMacAddress:
+ iWlmServer.GetCurrentBSSID( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetNetworkName:
+ iWlmServer.GetCurrentSSID( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetSecurityMode:
+ iWlmServer.GetCurrentSecurityMode( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetSystemMode:
+ iWlmServer.GetCurrentSystemMode( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ENotifyChangedSettings:
+ iWlmServer.NotifyChangedSettings( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EAddBssidToRoguelist:
+ iWlmServer.AddBssidToRoguelist( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EUpdateRcpNotificationBoundaries:
+ iWlmServer.UpdateRcpNotificationBoundary( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EConfigureMulticastGroup:
+ iWlmServer.ConfigureMulticastGroup( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetPacketStatistics:
+ iWlmServer.GetPacketStatistics( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EClearPacketStatistics:
+ iWlmServer.ClearPacketStatistics( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetUapsdSettings:
+ iWlmServer.GetUapsdSettings( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ESetUapsdSettings:
+ iWlmServer.SetUapsdSettings( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetPowerSaveSettings:
+ iWlmServer.GetPowerSaveSettings( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ESetPowerSaveSettings:
+ iWlmServer.SetPowerSaveSettings( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ERunProtectedSetup:
+ iWlmServer.RunProtectedSetup( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelProtectedSetup:
+ iWlmServer.CancelProtectedSetup( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECreateTrafficStream:
+ iWlmServer.CreateTrafficStream( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelCreateTrafficStream:
+ iWlmServer.CancelCreateTrafficStream( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EDeleteTrafficStream:
+ iWlmServer.DeleteTrafficStream( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelDeleteTrafficStream:
+ iWlmServer.CancelDeleteTrafficStream( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetAccessPointInfo:
+ iWlmServer.GetAccessPointInfo( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetRoamMetrics:
+ iWlmServer.GetRoamMetrics( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetRogueList:
+ iWlmServer.GetRogueList( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetRegulatoryDomain:
+ iWlmServer.GetRegulatoryDomain( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetPowerSaveMode:
+ iWlmServer.GetPowerSaveMode( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EAddIapSsidList:
+ iWlmServer.AddIapSsidListL( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ERemoveIapSsidList:
+ iWlmServer.RemoveIapSsidListL( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ESetPowerSaveMode:
+ iWlmServer.SetPowerSaveMode( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ENotifyChangedPsmSrvMode:
+ iWlmServer.NotifyChangedPsmSrvMode( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EGetAcTrafficStatus:
+ iWlmServer.GetAcTrafficStatus( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case EDirectedRoam:
+ iWlmServer.DirectedRoam( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ case ECancelDirectedRoam:
+ iWlmServer.CancelDirectedRoam( iId, aMessage );
+ break;
+ // --------------------------------------------------------------------
+ default:
+ aMessage.Complete( KErrNotSupported );
+ }
+ }
+
+// ---------------------------------------------------------
+// CWlmSession::HandleOrderNotifications
+// ---------------------------------------------------------
+//
+void CWlmSession::HandleOrderNotifications(
+ const RMessage2& aMessage )
+ {
+ iPendingNotificationRequest = aMessage;
+ iIsNotificationRequestPending = ETrue;
+ if( !iNotificationHandle ) // == NULL i.e. is not activated
+ {
+ TRAPD( err, iNotificationHandle =
+ CSessionNotification::NewL( *this, aMessage.Int1() ) );
+ if ( err == KErrNone )
+ {
+ iWlmServer.NotifyAdd( *iNotificationHandle );
+ }
+ else
+ {
+ iIsNotificationRequestPending = EFalse;
+ aMessage.Complete( err );
+ return;
+ }
+ }
+ HandleNotification(); // check is there any unsent notifications
+ }
+
+// ---------------------------------------------------------
+// CWlmSession::HandleCancelNotifications
+// ---------------------------------------------------------
+//
+void CWlmSession::HandleCancelNotifications(
+ const RMessage2& aMessage )
+ {
+ if( iIsNotificationRequestPending )
+ {
+ iPendingNotificationRequest.Complete( EWlmNotifyNotificationsCancelled );
+ iIsNotificationRequestPending = EFalse;
+ iPendingNotifications.Reset();
+ }
+ if( iNotificationHandle )
+ {
+ iWlmServer.NotifyRemove( *iNotificationHandle );
+ delete iNotificationHandle;
+ iNotificationHandle = NULL;
+ }
+ aMessage.Complete( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CWlmSession::AddNotification
+// ---------------------------------------------------------
+//
+void CWlmSession::AddNotification(
+ TInt aNotification,
+ const TDesC8& aData )
+ {
+ DEBUG( "CWlmSession::AddNotification" );
+
+ TNotification notif;
+ notif.id = aNotification;
+ notif.data = aData;
+
+ iPendingNotifications.Append( notif );
+ HandleNotification(); // check is there client waiting for notification
+ }
+
+// ---------------------------------------------------------
+// CWlmSession::HandleNotification
+// ---------------------------------------------------------
+//
+void CWlmSession::HandleNotification()
+ {
+ DEBUG( "CWlmSession::HandleNotification" );
+
+ // Check is there message to wait notification and
+ // notification that is not sent.
+ if ( iIsNotificationRequestPending && iPendingNotifications.Count() != 0 )
+ {
+ DEBUG( "CWlmSession::HandleNotification - sending response..." );
+ iIsNotificationRequestPending = EFalse;
+
+ TPckgBuf<TWlmNotifyData> pckg;
+ pckg().data = iPendingNotifications[0].data;
+ TInt ret( iPendingNotificationRequest.Write( 0, pckg ) );
+ if ( ret != KErrNone )
+ {
+ iPendingNotificationRequest.Complete( ret );
+ return;
+ }
+ iPendingNotificationRequest.Complete( iPendingNotifications[0].id );
+ iPendingNotifications.Remove( 0 );
+ }
+ }
+
+// End of File