# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284491165 -10800 # Node ID bb1f80fb7db26facf9c383295edebb01149dc8ce # Parent 83ca720e2b9a5aeb7eb1b64b755f6503ebb86814 Revision: 201033 Kit: 201035 diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/S60MCPR/inc/s60mcpr.h --- a/bearermanagement/S60MCPR/inc/s60mcpr.h Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/S60MCPR/inc/s60mcpr.h Tue Sep 14 22:06:05 2010 +0300 @@ -63,6 +63,7 @@ EMPMStartIAPNotificationMsg, EMPMErrorNotificationMsg, EMPMStartupErrorIgnoredMsg, + EMPMStopIAPNotificationMsg, }; public: typedef Messages::TMessageSigVoid TMPMReselectBestIAPCompletedMsg; @@ -72,6 +73,7 @@ typedef Messages::TMessageSigNumber TMPMStartIAPNotificationMsg; typedef Messages::TMessageSigNumber TMPMErrorNotificationMsg; typedef Messages::TMessageSigVoid TMPMStartupErrorIgnoredMsg; + typedef Messages::TMessageSigNumber TMPMStopIAPNotificationMsg; }; /** diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/S60MCPR/inc/s60mcpractivities.h --- a/bearermanagement/S60MCPR/inc/s60mcpractivities.h Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/S60MCPR/inc/s60mcpractivities.h Tue Sep 14 22:06:05 2010 +0300 @@ -32,7 +32,8 @@ enum TS60MCprActivities { - ECFActivityS60McprServiceIdMessage2Handler = ESock::ECFActivityCustom + 10 + ECFActivityS60McprServiceIdMessage2Handler = ESock::ECFActivityCustom + 10, + ECFActivityS60McprStopIAP }; /** diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/S60MCPR/inc/s60mcprstates.h --- a/bearermanagement/S60MCPR/inc/s60mcprstates.h Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/S60MCPR/inc/s60mcprstates.h Tue Sep 14 22:06:05 2010 +0300 @@ -172,6 +172,39 @@ virtual void DoL(); DECLARE_SMELEMENT_FOOTER( TRetrieveServiceId ) + /** + * STATE: Waits for StopIAPNotification message. + * @return ETrue if message is accepted. + */ + DECLARE_SMELEMENT_HEADER( TAwaitingStopIAPNotification, + MeshMachine::TState, + NetStateMachine::MState, + TContext ) + virtual TBool Accept(); + DECLARE_SMELEMENT_FOOTER( TAwaitingStopIAPNotification ) + + /** + * TRANSITION/ACTION: Sends Stop to Service Provider + */ + DECLARE_SMELEMENT_HEADER( TSendStop, + MeshMachine::TStateTransition, + NetStateMachine::MStateTransition, + TContext ) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER( TSendStop ) + + + /** + * STATE: Waits for Stopped or Error + * @return ETrue if message is accepted. + */ + DECLARE_SMELEMENT_HEADER( TAwaitingStoppedOrError, + MeshMachine::TState, + NetStateMachine::MState, + TContext ) + virtual TBool Accept(); + DECLARE_SMELEMENT_FOOTER( TAwaitingStoppedOrError ) + class CS60ErrorRecoveryActivity : public MeshMachine::CNodeRetryActivity { public: diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/S60MCPR/src/s60mcpr.cpp --- a/bearermanagement/S60MCPR/src/s60mcpr.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/S60MCPR/src/s60mcpr.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -381,23 +381,14 @@ TMpmNotificationStopIAP& notification = static_cast( const_cast( aNotification ) ); - // Allow TStop message only when ServiceProvider exists and the IAP matches or is unspecified. - // - if ( ServiceProvider() && - (((RMetaServiceProviderInterface*)ServiceProvider())->ProviderInfo().APId() == notification.iInfo.iIap || - notification.iInfo.iIap == 0 )) - { - S60MCPRLOGSTRING2("S60MCPR<%x>::PolicyNotification() EMPMStopIAPNotification IAP %d",(TInt*)this,notification.iInfo.iIap); - PostToClients( TNodeCtxId( 0, Id() ), - TCFServiceProvider::TStop( KErrDisconnected ).CRef(), - TClientType( TCFClientType::EServProvider) ); - } -#ifdef _DEBUG - else - { - S60MCPRLOGSTRING2("S60MCPR<%x>::PolicyNotification() EMPMStopIAPNotification NO MATCH! IAP %d",(TInt*)this,notification.iInfo.iIap); - } -#endif + S60MCPRLOGSTRING2("S60MCPR<%x>::PolicyNotification() EMPMStopIAPNotification IAP %d",(TInt*)this, notification.iInfo.iIap); + + // Send stop notification into meshmachine. + // + RNodeInterface ni; + ni.OpenPostMessageClose( NodeId(), + NodeId(), + TCFS60MCPRMessage::TMPMStopIAPNotificationMsg( notification.iInfo.iIap ).CRef() ); break; } default: diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/S60MCPR/src/s60mcpractivities.cpp --- a/bearermanagement/S60MCPR/src/s60mcpractivities.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/S60MCPR/src/s60mcpractivities.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -406,6 +406,31 @@ } // S60MCprServiceIdRMessage2HandlerActivity // ----------------------------------------------------------------------------- +// S60MCprStopIAPActivity +// ----------------------------------------------------------------------------- +// + +namespace S60MCprStopIAPActivity + { + DECLARE_DEFINE_NODEACTIVITY( ECFActivityS60McprStopIAP, + MCprStopIAPActivity, + TCFS60MCPRMessage::TMPMStopIAPNotificationMsg) + + FIRST_NODEACTIVITY_ENTRY( S60MCprStates::TAwaitingStopIAPNotification, + MeshMachine::TNoTag ) + + NODEACTIVITY_ENTRY( KNoTag, + S60MCprStates::TSendStop, + S60MCprStates::TAwaitingStoppedOrError, + MeshMachine::TNoTag ) + + LAST_NODEACTIVITY_ENTRY( KNoTag, + MeshMachine::TDoNothing ) + + NODEACTIVITY_END() + } // S60MCprStopIAPActivity + +// ----------------------------------------------------------------------------- // S60MCprActivities - activitymap // ----------------------------------------------------------------------------- // @@ -419,6 +444,7 @@ ACTIVITY_MAP_ENTRY(S60MCprMobilityActivity, MCprMobility) // in s60mcprmobilityactivity.cpp ACTIVITY_MAP_ENTRY(S60MCprConnectionGoneDownRecoveryActivity, MCprConnectionGoneDownRecovery) ACTIVITY_MAP_ENTRY(S60MCprServiceIdRMessage2HandlerActivity, S60MCprServiceIdLegacyRMessage2Handler) + ACTIVITY_MAP_ENTRY(S60MCprStopIAPActivity, MCprStopIAPActivity) ACTIVITY_MAP_END_BASE(MobilityMCprActivities, mobilityMCprActivities) } diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/S60MCPR/src/s60mcprstates.cpp --- a/bearermanagement/S60MCPR/src/s60mcprstates.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/S60MCPR/src/s60mcprstates.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -21,6 +21,7 @@ */ #include +#include #include "s60mcprstates.h" @@ -390,6 +391,99 @@ } } + +// ----------------------------------------------------------------------------- +// TAwaitingStopIAPNotification::Accept +// ----------------------------------------------------------------------------- +// +DEFINE_SMELEMENT( TAwaitingStopIAPNotification, NetStateMachine::MState, TContext ) +TBool TAwaitingStopIAPNotification::Accept() + { + TUint32 iapId( 0 ); + TCFS60MCPRMessage::TMPMStopIAPNotificationMsg* msg = + message_cast(&iContext.iMessage); + if ( msg ) + { + iapId = msg->iValue; + // Only accept the notification if it matches current service provider, or if the IAP is undefined + if ( iContext.Node().ServiceProvider() && + (((RMetaServiceProviderInterface*)iContext.Node().ServiceProvider())->ProviderInfo().APId() == iapId || + iapId == 0 ) ) + { + return ETrue; + } +#ifdef _DEBUG + else + { + S60MCPRLOGSTRING2("S60MCPR<%x>::TAwaitingStopIAPNotification() NO MATCH! IAP %d",(TInt*)this,iapId); + } +#endif + } + return EFalse; + } + +// ----------------------------------------------------------------------------- +// TProcessError::DoL +// ----------------------------------------------------------------------------- +// +DEFINE_SMELEMENT( TSendStop, NetStateMachine::MStateTransition, TContext ) +void TSendStop::DoL() // codescanner::leave + { + __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KS60MCprPanic, KPanicNoActivity)); + __ASSERT_DEBUG(iContext.Node().ServiceProvider(), User::Panic(KS60MCprPanic, KPanicNoServiceProvider)); + + // Send TStop to current Service Provider. + iContext.iNodeActivity->PostRequestTo( + iContext.Node().ServiceProvider()->RecipientId(), + TCFServiceProvider::TStop( KErrDisconnected ).CRef() ); + } + +// ----------------------------------------------------------------------------- +// TAwaitingStoppedOrError::Accept +// ----------------------------------------------------------------------------- +// +DEFINE_SMELEMENT( TAwaitingStoppedOrError, NetStateMachine::MState, TContext ) +TBool TAwaitingStoppedOrError::Accept() + { + __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KS60MCprPanic, KPanicNoActivity)); + + if ( iContext.iMessage.IsMessage() ) + { + return ETrue; + } + + // Error is returned if S60MCPR leaves IPProtoMCPr before Stopped is received + if( iContext.iMessage.IsMessage() ) + { + // Ignore the error code. It's better than crashing. + // Propagating might lead to situation where self-posted message ends up to a dead node. + return ETrue; + } + + // Rare scenario: if the stopping service provider is sending a TStateChange message, + // and a mobility activity is ongoing, the message must be ignored in order to keep + // harmful connection stages such as KLinkLayerClosed from reaching the client + TUint32 mobilityActivities = iContext.Node().CountActivities( ECFActivityMCprMobility ); + TBool isStateChange = iContext.iMessage.IsMessage(); + TBool isServProvider = + iContext.iPeer && + iContext.iPeer->Type() == TCFClientType::EServProvider && + iContext.iPeer->Flags() & TCFClientType::EActive; + + S60MCPRLOGSTRING4("S60MCPR<%x>::TAwaitingStoppedOrError() M %d, SC %d, SP %d",(TInt*)this, + mobilityActivities, isStateChange, isServProvider ); + + if ( isStateChange && isServProvider && mobilityActivities > 0 ) + { + // Discard the message + iContext.iMessage.ClearMessageId(); + } + + return EFalse; + } + + + // ----------------------------------------------------------------------------- // TRetrieveServiceId::DoL // ----------------------------------------------------------------------------- diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/group/mpmserver.mmp --- a/bearermanagement/mpm/group/mpmserver.mmp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/group/mpmserver.mmp Tue Sep 14 22:06:05 2010 +0300 @@ -58,6 +58,8 @@ SOURCE mpmofflinewatcher.cpp SOURCE mpmexpirytimer.cpp SOURCE mpmconnpermquerytimer.cpp +SOURCE mpmofflinequerytimer.cpp +SOURCE mpmconnselectiondlgtimer.cpp USERINCLUDE ../inc diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/inc/mpmcommsdataccess.h --- a/bearermanagement/mpm/inc/mpmcommsdataccess.h Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/inc/mpmcommsdataccess.h Tue Sep 14 22:06:05 2010 +0300 @@ -300,6 +300,14 @@ TWlanIapType CheckWlanL( TUint32 aIapId ) const; /** + * Checks if given IAP is TUN driver IAP. + * @since S^3 + * @param aIapId IAP Id. + * @return True if given IAP is TUN driver IAP, false otherwise. + */ + TBool IsTunDriverIap( TUint32 aIapId ) const; + + /** * Removes categorised IAPs from the list of available IAPs. * @since 3.2 * @param aIAPList List of IAPs diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/inc/mpmconnmonevents.h --- a/bearermanagement/mpm/inc/mpmconnmonevents.h Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/inc/mpmconnmonevents.h Tue Sep 14 22:06:05 2010 +0300 @@ -293,6 +293,13 @@ inline TBool DiscardAvailabilityNotification(); /** + * Returns the setting whether IAP availability notification has been discarded by MPM. + * @since 3.2 + * @return ETrue if availability notifications have been discarded. + */ + inline TBool AvailabilityNotificationDiscarded(); + + /** * Creates preferred carrier available notification when needed. * @since 5.1 * @param aCaller Identifies the calling context @@ -343,6 +350,9 @@ // until MPM initiated WLAN scan request has completed. TBool iDiscardAvailabilityNotification; + // ConnMon's IAP availability event has been discarded. + TBool iAvailabilityNotificationDiscarded; + #ifdef _DEBUG TBool iFilterEvents; // by default off. (CBase) public: @@ -378,6 +388,15 @@ return iDiscardAvailabilityNotification; } +// ----------------------------------------------------------------------------- +// CMPMConnMonEvents::AvailabilityNotificationDiscarded +// ----------------------------------------------------------------------------- +// +inline TBool CMPMConnMonEvents::AvailabilityNotificationDiscarded() + { + return iAvailabilityNotificationDiscarded; + } + #endif // MPMCONNMONEVENTS_H // End of file diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/inc/mpmconnselectiondlgtimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bearermanagement/mpm/inc/mpmconnselectiondlgtimer.h Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Declaration of class CMPMConnSelectionDlgTimer. +* +*/ + +#ifndef MPMCONNSELECTIONDLGTIMER_H +#define MPMCONNSELECTIONDLGTIMER_H + +// INCLUDES +#include +#include "mpmexpirytimercallback.h" + +class CMPMServer; +class CMPMExpiryTimer; + +/** +* Class that implements connection selection dialog's +* cancellation delay timer and callback. +* @since 5.2 +*/ +class CMPMConnSelectionDlgTimer : public CBase, public MMPMExpiryTimerCallback + { + +public: + + /** + * New for calling the two-phased constructor. + * @since 5.2 + * @param aServer Pointer to the MPM server object, for callback purposes + * @return Pointer to created object instance + */ + static CMPMConnSelectionDlgTimer* NewL( CMPMServer* aServer ); + + /** + * Destructor. + * @since 5.2 + */ + virtual ~CMPMConnSelectionDlgTimer(); + + /** + * Start the timer. + * @since 5.2 + */ + void StartTimer(); + + /** + * Dialog expiration timeout callback, inherited from MMPMExpiryTimerCallback. + * @since 5.2 + */ + void HandleTimedOut(); + +private: + + /** + * C++ default constructor. + * @since 5.2 + * @param aServer Pointer to the MPM server object, for callback purposes + */ + CMPMConnSelectionDlgTimer( CMPMServer* aServer ); + + /** + * Symbian 2nd phase constructor. + * @since 5.2 + */ + void ConstructL(); + + +private: // data + + /** + * Pointer to the MPM Server object. Not own. + */ + CMPMServer* iServer; + + /** + * Pointer to the common MPM expiry timer object. + */ + CMPMExpiryTimer* iExpiryTimer; + + /** + * Timeout constant. + */ + static const TInt KTimeout = 10000000; // 10 sec + + }; + +#endif // MPMCONNSELECTIONDLGTIMER_H diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/inc/mpmofflinequerytimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bearermanagement/mpm/inc/mpmofflinequerytimer.h Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Declaration of class CMPMOfflineQueryTimer. +* +*/ + +#ifndef MPMOFFLINEQUERYTIMER_H +#define MPMOFFLINEQUERYTIMER_H + +// INCLUDES +#include +#include "mpmexpirytimercallback.h" + +class CMPMServer; +class CMPMExpiryTimer; + +/** +* Class that implements Offline query's cancellation delay timer +* and callback. +* @since 5.2 +*/ +class CMPMOfflineQueryTimer : public CBase, public MMPMExpiryTimerCallback + { + +public: + + /** + * New for calling the two-phased constructor. + * @since 5.2 + * @param aServer Pointer to the MPM server object, for callback purposes + * @return Pointer to created object instance + */ + static CMPMOfflineQueryTimer* NewL( CMPMServer* aServer ); + + /** + * Destructor. + * @since 5.2 + */ + virtual ~CMPMOfflineQueryTimer(); + + /** + * Start the timer. + * @since 5.2 + */ + void StartTimer(); + + /** + * Dialog expiration timeout callback, inherited from MMPMExpiryTimerCallback. + * @since 5.2 + */ + void HandleTimedOut(); + +private: + + /** + * C++ default constructor. + * @since 5.2 + * @param aServer Pointer to the MPM server object, for callback purposes + */ + CMPMOfflineQueryTimer( CMPMServer* aServer ); + + /** + * Symbian 2nd phase constructor. + * @since 5.2 + */ + void ConstructL(); + + +private: // data + + /** + * Pointer to the MPM Server object. Not own. + */ + CMPMServer* iServer; + + /** + * Pointer to the common MPM expiry timer object. + */ + CMPMExpiryTimer* iExpiryTimer; + + /** + * Timeout constant. + */ + static const TInt KTimeout = 10000000; // 10 sec + + }; + +#endif // MPMOFFLINEQUERYTIMER_H diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/inc/mpmserver.h --- a/bearermanagement/mpm/inc/mpmserver.h Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/inc/mpmserver.h Tue Sep 14 22:06:05 2010 +0300 @@ -201,6 +201,8 @@ class CMPMWlanQueryDialog; class CMPMDialog; class CMPMConnPermQueryTimer; +class CMPMOfflineQueryTimer; +class CMPMConnSelectionDlgTimer; // CLASS DECLARATION /** @@ -966,7 +968,49 @@ * @return ETrue if timer is running, EFalse otherwise. */ TBool IsConnPermQueryTimerOn(); + + /** + * Starts the offline query timer. + * During the timer, offline query can not be initiated. + * @since 5.2 + */ + void StartOfflineQueryTimer(); + /** + * Resets the offline query timer. + * @since 5.2 + */ + void ResetOfflineQueryTimer(); + + /** + * Returns true if the offline query timer is running. + * During the timer, offline query can not be initiated. + * @since 5.2 + * @return ETrue if timer is running, EFalse otherwise. + */ + TBool IsOfflineQueryTimerOn(); + + /** + * Starts the connection selection dialog timer. + * During the timer, connection selection dialog can not be initiated. + * @since 5.2 + */ + void StartConnSelectionDlgTimer(); + + /** + * Resets the connection selection dialog timer. + * @since 5.2 + */ + void ResetConnSelectionDlgTimer(); + + /** + * Returns true if the connection selection dialog timer is running. + * During the timer, connection selection dialog can not be initiated. + * @since 5.2 + * @return ETrue if timer is running, EFalse otherwise. + */ + TBool IsConnSelectionDlgTimerOn(); + private: /** @@ -1001,6 +1045,7 @@ * @param aIapId Iap id for checking */ void CheckIapForDisconnect( TInt aIapId ); + private: // Data // Pointer to the ConnMonEvents object @@ -1119,6 +1164,13 @@ // Connection permission query cancellation delay timer CMPMConnPermQueryTimer* iConnPermQueryTimer; + + // Offline query cancellation delay timer + CMPMOfflineQueryTimer* iOfflineQueryTimer; + + // Connection selection dialog cancellation delay timer + CMPMConnSelectionDlgTimer* iConnSelectionDlgTimer; + }; #include "mpmserver.inl" diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmcommsdataccess.cpp --- a/bearermanagement/mpm/src/mpmcommsdataccess.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/src/mpmcommsdataccess.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -1787,6 +1787,34 @@ } // ----------------------------------------------------------------------------- +// CMPMCommsDatAccess::IsTunDriverIap +// ----------------------------------------------------------------------------- +// +TBool CMPMCommsDatAccess::IsTunDriverIap( TUint32 aIapId ) const + { + TBool isTunDriver = EFalse; + MPMLOGSTRING( "CMPMCommsDatAccess::IsTunDriverIap" ) + + CMDBSession* db = CMDBSession::NewLC( KCDVersion1_1 ); + CCDIAPRecord* record = LoadIapRecordLC( aIapId, db ); + + TBuf bearerTypeName( record->iBearerType.GetL() ); + TBuf serviceTypeName( record->iServiceType.GetL() ); + + if ( (bearerTypeName == TPtrC( KCDTypeNameVirtualBearer ) ) + && ( serviceTypeName == TPtrC( KCDTypeNameLANService ) ) ) + { + // TunDriver; + isTunDriver = ETrue; + } + + CleanupStack::PopAndDestroy( record ); + CleanupStack::PopAndDestroy( db ); + + return isTunDriver; + } + +// ----------------------------------------------------------------------------- // CMPMCommsDatAccess::RemoveCategorisedIapsL // ----------------------------------------------------------------------------- // diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmconnmonevents.cpp --- a/bearermanagement/mpm/src/mpmconnmonevents.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/src/mpmconnmonevents.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -51,7 +51,8 @@ // CMPMConnMonEvents::CMPMConnMonEvents( CMPMServer& aServer ) : iMyServer( aServer ), - iDiscardAvailabilityNotification( EFalse ) + iDiscardAvailabilityNotification( EFalse ), + iAvailabilityNotificationDiscarded( EFalse ) { } @@ -466,6 +467,7 @@ if ( ( iAvailableIAPs.Count() > 0 ) && !DiscardAvailabilityNotification() ) { + iAvailabilityNotificationDiscarded = EFalse; // Remove temporary blacklistings as fresh availability // info is available. // @@ -479,6 +481,7 @@ } else { + iAvailabilityNotificationDiscarded = ETrue; MPMLOGSTRING2( "CMPMConnMonEvents::EventL - IAPs count: %d", iAvailableIAPs.Count() ) MPMLOGSTRING2( diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmconnmonreqs.cpp --- a/bearermanagement/mpm/src/mpmconnmonreqs.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/src/mpmconnmonreqs.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -347,6 +347,12 @@ // iParent.IapAvailabilityChange( EConnMon ); } + + if ( iParent.AvailabilityNotificationDiscarded() ) + { + MPMLOGSTRING( "CMPMConnMonReqs::RunL: AvailabilityNotificationDiscarded, roaming logic triggered" ) + iParent.IapAvailabilityChange( EConnMonEvent ); + } } // check which callback function to use // diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmconnselectiondlgtimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bearermanagement/mpm/src/mpmconnselectiondlgtimer.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "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: Implementation of class CMPMConnSelectionDlgTimer. + * This timer is used for preventing showing of connection selection + * dialog when the user has cancelled the previous selection dialog. + * + */ + +#include "mpmlogger.h" +#include "mpmserver.h" +#include "mpmexpirytimer.h" +#include "mpmconnselectiondlgtimer.h" + +// --------------------------------------------------------------------------- +// Creates a new object by calling the two-phased constructor. +// --------------------------------------------------------------------------- +// +CMPMConnSelectionDlgTimer* CMPMConnSelectionDlgTimer::NewL( CMPMServer* aServer ) + { + MPMLOGSTRING( "CMPMConnSelectionDlgTimer::NewL" ) + + CMPMConnSelectionDlgTimer* self = new( ELeave ) CMPMConnSelectionDlgTimer( aServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Default C++ constructor. +// --------------------------------------------------------------------------- +// +CMPMConnSelectionDlgTimer::CMPMConnSelectionDlgTimer( CMPMServer* aServer ) : + iServer( aServer ) + { + MPMLOGSTRING( "CMPMConnSelectionDlgTimer::CMPMConnSelectionDlgTimer" ) + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CMPMConnSelectionDlgTimer::ConstructL() + { + MPMLOGSTRING( "CMPMConnSelectionDlgTimer::ConstructL" ) + iExpiryTimer = CMPMExpiryTimer::NewL( *this, KTimeout ); + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CMPMConnSelectionDlgTimer::~CMPMConnSelectionDlgTimer() + { + MPMLOGSTRING( "CMPMConnSelectionDlgTimer::~CMPMConnSelectionDlgTimer" ) + if ( iExpiryTimer ) + { + iExpiryTimer->Cancel(); + delete iExpiryTimer; + } + } + +// --------------------------------------------------------------------------- +// Start the timer. +// --------------------------------------------------------------------------- +// +void CMPMConnSelectionDlgTimer::StartTimer() + { + MPMLOGSTRING( "CMPMConnSelectionDlgTimer::StartTimer" ) + if ( iExpiryTimer ) + { + iExpiryTimer->Cancel(); + iExpiryTimer->Start(); + } + } + +// --------------------------------------------------------------------------- +// Handles the timeout. +// --------------------------------------------------------------------------- +// +void CMPMConnSelectionDlgTimer::HandleTimedOut() + { + MPMLOGSTRING( "CMPMConnSelectionDlgTimer::HandleTimedOut" ) + iServer->ResetConnSelectionDlgTimer(); + } diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmiapselection.cpp --- a/bearermanagement/mpm/src/mpmiapselection.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/src/mpmiapselection.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -835,6 +835,13 @@ ChooseIapComplete( aError, NULL ); delete iDialog; iDialog = NULL; + // Start ConnSelectionDlgTimer if user has cancelled the connection + // selection dialog. During the timer interval dialog is not shown. + // + if( aError == KErrCancel ) + { + iSession->MyServer().StartConnSelectionDlgTimer(); + } } @@ -1022,13 +1029,22 @@ MPMLOGSTRING( "CMPMIapSelection::ImplicitConnectionIapSelectionL" ) iSession->AvailableUnblacklistedIapsL( iStoredAvailableIaps, iSession->ConnectionId() ); - // Create and initiate user dialog + // Create and initiate user dialog only if it hasnot + // been cancelled in last 10s(KTimeout) // - iDialog = CMPMDialog::NewL( *this, + if ( !iSession->MyServer().IsConnSelectionDlgTimerOn() ) + { + iDialog = CMPMDialog::NewL( *this, iStoredAvailableIaps, iChooseIapPref.BearerSet(), *iSession->MyServer().ConnectDialogQueue(), iSession->MyServer() ); + } + else + { + MPMLOGSTRING( "CMPMIapSelection::ImplicitConnectionIapSelectionL, iConnSelectionDlgTimer running" ) + ChooseIapComplete( KErrCancel, NULL ); + } } // ----------------------------------------------------------------------------- @@ -1136,9 +1152,14 @@ ret = aAvailableIAPs.Find( destNetIaps[k].iIapId ); if ( ret == KErrNotFound ) { - MPMLOGSTRING2( "CMPMIapSelection::ChooseBestIAPL: \ -Remove unavailable IAP = %i", destNetIaps[k].iIapId ) - destNetIaps.Remove( k ); + TBool isTunDriver = iCommsDatAccess->IsTunDriverIap( + destNetIaps[k].iIapId ); + if ( !isTunDriver ) + { + MPMLOGSTRING2( "CMPMIapSelection::ChooseBestIAPL: \ + Remove unavailable IAP = %i", destNetIaps[k].iIapId ) + destNetIaps.Remove( k ); + } } } @@ -1154,11 +1175,14 @@ ret = aAvailableIAPs.Find( embeddedIaps[m].iIapId ); if ( ret == KErrNotFound ) { - // Remove IapId because it's not available - // - MPMLOGSTRING2( "CMPMIapSelection::ChooseBestIAPL: \ + TBool isTunDriver = iCommsDatAccess->IsTunDriverIap( embeddedIaps[m].iIapId ); + if ( !isTunDriver ) + { + // Remove IapId because it's not available + MPMLOGSTRING2( "CMPMIapSelection::ChooseBestIAPL: \ Remove unavailable IAP = %i", embeddedIaps[m].iIapId ) - embeddedIaps.Remove( m ); + embeddedIaps.Remove( m ); + } } } } diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmofflinequerytimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bearermanagement/mpm/src/mpmofflinequerytimer.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "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: Implementation of class CMPMOfflineQueryTimer. + * This timer is used for preventing offline query when the user + * has cancelled the previous offline query. + * + */ + +#include "mpmlogger.h" +#include "mpmserver.h" +#include "mpmexpirytimer.h" +#include "mpmofflinequerytimer.h" + +// --------------------------------------------------------------------------- +// Creates a new object by calling the two-phased constructor. +// --------------------------------------------------------------------------- +// +CMPMOfflineQueryTimer* CMPMOfflineQueryTimer::NewL( CMPMServer* aServer ) + { + MPMLOGSTRING( "CMPMOfflineQueryTimer::NewL" ) + + CMPMOfflineQueryTimer* self = new( ELeave ) CMPMOfflineQueryTimer( aServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Default C++ constructor. +// --------------------------------------------------------------------------- +// +CMPMOfflineQueryTimer::CMPMOfflineQueryTimer( CMPMServer* aServer ) : + iServer( aServer ) + { + MPMLOGSTRING( "CMPMOfflineQueryTimer::CMPMOfflineQueryTimer" ) + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CMPMOfflineQueryTimer::ConstructL() + { + MPMLOGSTRING( "CMPMOfflineQueryTimer::ConstructL" ) + iExpiryTimer = CMPMExpiryTimer::NewL( *this, KTimeout ); + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CMPMOfflineQueryTimer::~CMPMOfflineQueryTimer() + { + MPMLOGSTRING( "CMPMOfflineQueryTimer::~CMPMOfflineQueryTimer" ) + if ( iExpiryTimer ) + { + iExpiryTimer->Cancel(); + delete iExpiryTimer; + } + } + +// --------------------------------------------------------------------------- +// Start the timer. +// --------------------------------------------------------------------------- +// +void CMPMOfflineQueryTimer::StartTimer() + { + MPMLOGSTRING( "CMPMOfflineQueryTimer::StartTimer" ) + if ( iExpiryTimer ) + { + iExpiryTimer->Cancel(); + iExpiryTimer->Start(); + } + } + +// --------------------------------------------------------------------------- +// Handles the timeout. +// --------------------------------------------------------------------------- +// +void CMPMOfflineQueryTimer::HandleTimedOut() + { + MPMLOGSTRING( "CMPMOfflineQueryTimer::HandleTimedOut" ) + iServer->ResetOfflineQueryTimer(); + } diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmserver.cpp --- a/bearermanagement/mpm/src/mpmserver.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/src/mpmserver.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -47,6 +47,8 @@ #include "mpmpropertydef.h" #include "mpmofflinewatcher.h" #include "mpmconnpermquerytimer.h" +#include "mpmofflinequerytimer.h" +#include "mpmconnselectiondlgtimer.h" // ============================= LOCAL FUNCTIONS =============================== @@ -381,6 +383,10 @@ delete iCommsDatAccess; delete iConnPermQueryTimer; + + delete iOfflineQueryTimer; + + delete iConnSelectionDlgTimer; } @@ -1956,6 +1962,10 @@ // cancel the periodic object self->iRoamingToWlanPeriodic->Cancel(); self->StartForcedRoamingToWlanL( self->iConnMonIapInfo ); + // Added also execution of policy based roaming logic because + // connections that are in EStarting state, when WLAN signal + // gets weak, would remain in WLAN as long as signal is weak. + self->StartForcedRoamingFromWlanL( self->iConnMonIapInfo ); } return 0; } @@ -1973,6 +1983,10 @@ // cancel the periodic object self->iRoamingToHotspotWlanPeriodic->Cancel(); self->StartForcedRoamingToWlanL( self->iConnMonIapInfo ); + // Added also execution of policy based roaming logic because + // connections that are in EStarting state, when WLAN signal + // gets weak, would remain in WLAN as long as signal is weak. + self->StartForcedRoamingFromWlanL( self->iConnMonIapInfo ); } return 0; } @@ -2379,6 +2393,116 @@ return retval; } +// --------------------------------------------------------------------------- +// CMPMServer::StartOfflineQueryTimer +// Starts the offline query timer. +// --------------------------------------------------------------------------- +// +void CMPMServer::StartOfflineQueryTimer() + { + MPMLOGSTRING( "CMPMServer::StartOfflineQueryTimer" ) + + if ( !iOfflineQueryTimer ) + { + TRAPD( err, iOfflineQueryTimer = CMPMOfflineQueryTimer::NewL( this ) ); + if ( err == KErrNone ) + { + iOfflineQueryTimer->StartTimer(); + MPMLOGSTRING( "CMPMServer::StartOfflineQueryTimer: Ok." ) + } + } + } + +// --------------------------------------------------------------------------- +// CMPMServer::ResetOfflineQueryTimer +// Resets the offline query timer. +// --------------------------------------------------------------------------- +// +void CMPMServer::ResetOfflineQueryTimer() + { + MPMLOGSTRING( "CMPMServer::ResetOfflineQueryTimer" ) + + if ( iOfflineQueryTimer ) + { + delete iOfflineQueryTimer; + iOfflineQueryTimer = NULL; + MPMLOGSTRING( "CMPMServer::ResetOfflineQueryTimer: Ok." ) + } + } + +// --------------------------------------------------------------------------- +// CMPMServer::IsOfflineQueryTimerOn +// Tells if the offline query timer is on. +// --------------------------------------------------------------------------- +// +TBool CMPMServer::IsOfflineQueryTimerOn() + { + MPMLOGSTRING( "CMPMServer::IsOfflineQueryTimerOn" ) + + TBool retval = EFalse; + if ( iOfflineQueryTimer ) + { + retval = ETrue; + MPMLOGSTRING( "CMPMServer::IsOfflineQueryTimerOn: Yes." ) + } + return retval; + } + +// --------------------------------------------------------------------------- +// CMPMServer::StartConnSelectionDlgTimer +// Starts the connection selection dialog timer. +// --------------------------------------------------------------------------- +// +void CMPMServer::StartConnSelectionDlgTimer() + { + MPMLOGSTRING( "CMPMServer::StartConnSelectionDlgTimer" ) + + if ( !iConnSelectionDlgTimer ) + { + TRAPD( err, iConnSelectionDlgTimer = CMPMConnSelectionDlgTimer::NewL( this ) ); + if ( err == KErrNone ) + { + iConnSelectionDlgTimer->StartTimer(); + MPMLOGSTRING( "CMPMServer::StartConnSelectionDlgTimer: Ok." ) + } + } + } + +// --------------------------------------------------------------------------- +// CMPMServer::ResetConnSelectionDlgTimer +// Resets the connection selection dialog timer. +// --------------------------------------------------------------------------- +// +void CMPMServer::ResetConnSelectionDlgTimer() + { + MPMLOGSTRING( "CMPMServer::ResetConnSelectionDlgTimer" ) + + if ( iConnSelectionDlgTimer ) + { + delete iConnSelectionDlgTimer; + iConnSelectionDlgTimer = NULL; + MPMLOGSTRING( "CMPMServer::ResetConnSelectionDlgTimer: Ok." ) + } + } + +// --------------------------------------------------------------------------- +// CMPMServer::IsConnSelectionDlgTimerOn +// Tells if the connection selection dialog timer is on. +// --------------------------------------------------------------------------- +// +TBool CMPMServer::IsConnSelectionDlgTimerOn() + { + MPMLOGSTRING( "CMPMServer::IsConnSelectionDlgTimerOn" ) + + TBool retval = EFalse; + if ( iConnSelectionDlgTimer ) + { + retval = ETrue; + MPMLOGSTRING( "CMPMServer::IsConnSelectionDlgTimerOn: Yes." ) + } + return retval; + } + // ----------------------------------------------------------------------------- // CMPMServer::CheckIapForDisconnect // ----------------------------------------------------------------------------- diff -r 83ca720e2b9a -r bb1f80fb7db2 bearermanagement/mpm/src/mpmwlanquerydialog.cpp --- a/bearermanagement/mpm/src/mpmwlanquerydialog.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/bearermanagement/mpm/src/mpmwlanquerydialog.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -207,6 +207,7 @@ { iIapSelection.Session()->MyServer().SetOfflineWlanQueryResponse( EOfflineResponseNo ); + iIapSelection.Session()->MyServer().StartOfflineQueryTimer(); MPMLOGSTRING2( "CMPMWlanQueryDialog::RunL offline query returned %d", iStatus.Int() ) } @@ -474,14 +475,22 @@ iIapSelection.UserWlanSelectionDoneL( KErrPermissionDenied, iWlanIapId ); } else - { - MPMLOGSTRING( "CMPMWlanQueryDialog::StartWlanQuery, starting offline note" ) + { iWlanQueryState = EOffline; - iNotifier.StartNotifierAndGetResponse( iStatus, - KUidCOfflineWlanNoteDlg, - KNullDesC8(), - iOfflineReply ); - SetActive(); + if ( !iIapSelection.Session()->MyServer().IsOfflineQueryTimerOn() ) + { + MPMLOGSTRING( "CMPMWlanQueryDialog::StartWlanQuery, starting offline query" ) + iNotifier.StartNotifierAndGetResponse( iStatus, + KUidCOfflineWlanNoteDlg, + KNullDesC8(), + iOfflineReply ); + SetActive(); + } + else + { + MPMLOGSTRING( "CMPMWlanQueryDialog::StartWlanQuery, offline note not shown as OfflineQueryTimer is active" ) + iIapSelection.UserWlanSelectionDoneL( KErrPermissionDenied, iWlanIapId ); + } } } // if easy wlan iap and some wlan iap started, use existing connection diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/Group/bld.inf --- a/cmmanager/cmmgr/Plugins/Group/bld.inf Wed Sep 01 12:23:51 2010 +0100 +++ b/cmmanager/cmmgr/Plugins/Group/bld.inf Tue Sep 14 22:06:05 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -32,5 +32,6 @@ #include "../cmpluginwlan/group/bld.inf" #include "../cmpluginembdestination/group/bld.inf" #include "../cmpluginvpn/group/bld.inf" +#include "../cmplugintundriver/group/bld.inf" // End of File diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/data/20027F3E.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/data/20027F3E.rss Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: ECom resource descriptor for TUN Driver plug-in +* +*/ + +#include "ecom/registryinfo.rh" + +// Because attribute enums had to be added to namespace CMManager +// it's not possible to included cmplugintundriverdef.h. +// Thus bearer type id had to be redefined here. +#define KPluginTUNDriverBearerTypeUid 0x20027F3F + +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = 0x20027F3E; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x10207377; // = KCMPluginInterfaceUid. Do NOT modify it!!! + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = KPluginTUNDriverBearerTypeUid; + version_no = 1; + display_name = "VPN"; + default_data = "VPN"; + opaque_data = ""; + } + }; + } + }; + } diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/group/bld.inf Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: TUN Driver plug-in IF implementation class. +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +// export localised loc file + +PRJ_MMPFILES +cmplugintundriver.mmp + +PRJ_EXTENSIONS +START EXTENSION s60/mifconv +OPTION TARGETFILE cmplugintundriver.mif +OPTION HEADERFILE cmpluginvpn.mbg +OPTION SOURCES -c8,1 qgn_prop_vpn_access_point +END diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/group/cmplugintundriver.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/group/cmplugintundriver.mmp Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Project specification for TUN Driver plug-in +* +*/ + +#include +#include + +TARGET cmplugintundriver.dll +UID 0x10009D8D 0x20027F3E + +TARGETTYPE PLUGIN + +CAPABILITY CAP_ECOM_PLUGIN +VENDORID VID_DEFAULT + +SOURCEPATH ../src + +SOURCE cmpluginproxytundriver.cpp +SOURCE cmplugintundriver.cpp +SOURCE ../../../Framework/Src/cmlogger.cpp + +SOURCEPATH ../data + +START RESOURCE 20027F3E.rss +TARGET cmplugintundriver.rsc +END + + +USERINCLUDE ../data +USERINCLUDE ../../../Framework/Inc +USERINCLUDE ../../../Framework/SrcData + +// Component specific internal headers +USERINCLUDE ../inc + +// ADO specific internal headers +SYSTEMINCLUDE ../../../../../inc + +//Macro to /epoc32 headers +MW_LAYER_SYSTEMINCLUDE + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +APP_LAYER_SYSTEMINCLUDE +#endif + +LIBRARY hlplch.lib +LIBRARY euser.lib +LIBRARY ecom.lib +LIBRARY cmmanager.lib +LIBRARY commsdat.lib + +LIBRARY aknskins.lib +LIBRARY efsrv.lib +LIBRARY CommonEngine.lib +LIBRARY cone.lib eikcore.lib avkon.lib +LIBRARY eikcoctl.lib eikdlg.lib +LIBRARY bafl.lib +LIBRARY vpnapi.lib +LIBRARY centralrepository.lib +LIBRARY featmgr.lib +LIBRARY cmmanagerdatabase.lib +DEBUGLIBRARY flogger.lib diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/group/cmplugintundriver_icons.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/group/cmplugintundriver_icons.mk Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,66 @@ +# +# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "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: Makefile for icons of TUN Driver plug-in +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z +else +ZDIR=\epoc32\data\z +endif + + +TARGETDIR=$(ZDIR)\resource\apps +ICONTARGETFILENAME=$(TARGETDIR)\cmpluginvpn.mif + +HEADERDIR=\epoc32\include +HEADERFILENAME=$(HEADERDIR)\cmpluginvpn.mbg + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \ + /c8,1 qgn_prop_vpn_access_point.bmp + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(HEADERFILENAME)&& \ + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/inc/cmplugintundriver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/inc/cmplugintundriver.h Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,165 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: TUN Driver plugin IF implementation class. +* +*/ + +#ifndef TUNDRIVER_PLUGIN_INCLUDED +#define TUNDRIVER_PLUGIN_INCLUDED + +#include +#include + +class CCDVirtualIAPNextLayerRecord; + +/** + * TUN Driver Plugin IF implementation class + * This class will be instantiated when the connection is created using the PluginBearer Id KPluginTUNDriverBearerTypeUid + * @since S^3 + */ +NONSHARABLE_CLASS(CCmPluginTUNDriver) : public CCmPluginLanBase + { + + public: + + /** + * This function is invoked by the cmmanager plugin framework to load TUNDriver plugin. + * This plugin will be identified based on the plugin UID from cmpluginproxy.cpp + * @param aInitParam Initialization parameters. + * @return CCmPluginTUNDriver. + */ + static CCmPluginTUNDriver* NewL( TCmPluginInitParam* aInitParam ); + + /** + * Destructor. + */ + virtual ~CCmPluginTUNDriver(); + + /** + * This function is invoked by the cmmanager plugin framework while loading the plugin. + * CreateInstance of the plugin will invoke each time plugin type needs to instantiated + * @param aInitParam Initialization parameters. + * @return CCmPluginBaseEng. + */ + virtual CCmPluginBaseEng* CreateInstanceL( TCmPluginInitParam& aInitParam ) const; + + /** + * This is function is invoked by cmmanager framework. + * Once the plugin type is identified, identifies the right ServiceRecord and loads. + */ + void LoadServiceSettingL(); + + public: + + /** + * This is function is invoked by cmmanager framework. + * Check here if every data of the connection method is valid + * before records were saved to CommsDat. + * Set incorrect attribute id in iInvalidAttribute and leave + * with KErrArgument. + */ + void PrepareToUpdateRecordsL(); + + /** + * This is function is invoked by cmmanager framework. If Settings are enabled. + * Currently Settings for TUNDriver is not supported. + * @return KErrNotSupported. + */ + virtual TInt RunSettingsL(); + + /** + * This is function is invoked by cmmanager framework. + * Once the plugin type is identified, type of bearer and other attributes types are obtained. + * @param aAttribute Attribute type. + * @return Integer attribute's value. + */ + virtual TUint32 GetIntAttributeL( const TUint32 aAttribute ) const; + + /** + * This is function is invoked by cmmanager framework. + * Once the plugin type is identified, finds wether the IAP selected belongs to TUNDriver. + * @param aIapId IapId for the selected accesspoint + * @return ETrue if IAP can be handled else EFalse. + */ + virtual TBool CanHandleIapIdL( TUint32 aIapId ) const; + + /** + * This is function is invoked by cmmanager framework. + * Once the plugin type is identified, finds wether the IAP selected belongs to TUNDriver. + * This is identified if service type is LANService and Bearer is VirtualBearer and + * IfName is TunDriverIf and agent is TunDriverAgent. + * @param aIapRecord - iaprecord of type CCDIAPRecord from commsdatabase + * @return ETrue if IAP can be handled else EFalse. + */ + virtual TBool CanHandleIapIdL( CommsDat::CCDIAPRecord* aIapRecord ) const; + + /** + * This is function is invoked by cmmanager framework when needs to initialzed with UI. + * This feature is currently not supported by the plugin. + * @param aManuallyConfigure Manual configuration on or off. + * @return KErrNotSupported + */ + TBool InitializeWithUiL( TBool aManuallyConfigure ); + + /** + * This is function is invoked by plugin destructor. + * If the function is not defined then compiler will throw error for TUNDriver plugin construction. + */ + virtual void AdditionalReset(); + + protected: + + /** + * This is function is invoked by cmmanager framework. + * @return aName is LanService name and aRecordId the service record Id. + */ + virtual void ServiceRecordIdLC( HBufC* &aServiceName, TUint32& aRecordId ); + + /** + * This is function is invoked by cmmanager framework. + * @param aBearerName Output parameter for bearer name. + * @param aRecordId Output parameter for Bearer record Id. + */ + virtual void BearerRecordIdLC( HBufC* &aBearerName, TUint32& aRecordId ); + + /** + * This is function is invoked by cmmanager framework. + * Once the plugin type is identified, this invoked for the first time when plgun is loaded + * while creating connection for TUNDriver plugin. + */ + virtual void CreateNewServiceRecordL(); + + private: + + /** + * This is default constructor of the plugin. + * @param aInitParam Initialization parameters. + */ + CCmPluginTUNDriver( TCmPluginInitParam* aInitParam ); + + /** + * This is second phase constructor of the plugin. + * Builds the commsdatabase with the Tables required for TUNDriver plugin. + */ + void ConstructL(); + + /** + * This is function is invoked by cmmanager framework. + * Returns the service record of the TUN driver plugin. + * @return service record. + */ + CommsDat::CCDLANServiceRecord& ServiceRecord()const; + }; + +#endif // TUNDRIVER_PLUGIN_INCLUDED diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/inc/cmtundrivercommonconstants.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/inc/cmtundrivercommonconstants.h Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: constants for the TUN Driver plugin +* +*/ + +#ifndef CMTUNDRIVERCOMMONCONSTANTS_H +#define CMTUNDRIVERCOMMONCONSTANTS_H + +// CONSTANTS +_LIT( KPluginVPNResDirAndFileName, "z:cmpluginvpnui.rsc" ); + +// Do not change this default to other value because proxy number is using this value as default port number +const TInt KVpnProxyPortNumberDefault = 0; + +#endif // CMTUNDRIVERCOMMONCONSTANTS_H diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/src/cmpluginproxytundriver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/src/cmpluginproxytundriver.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: TUN Driver plug-in IF implementation class. +* +*/ + +#include "cmplugintundriver.h" +#include +#include + +// Exported proxy for instantiation method resolution +// Define the interface UIDs +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( KPluginTUNDriverBearerTypeUid, CCmPluginTUNDriver::NewL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) +/** +* ImplementationGroupProxy +* This is function is invoked by E-Com Plugin framework for TUNDriver plugin UID when needs to be loaded. +* @param +* @return +*/ + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + + return ImplementationTable; + } diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Plugins/cmplugintundriver/src/cmplugintundriver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Plugins/cmplugintundriver/src/cmplugintundriver.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,472 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: TUN Driver plug-in IF implementation class. +* +*/ + +#include +#include +#include + +#include "cmlogger.h" +#include "cmdestinationimpl.h" +#include "cmplugintundriver.h" + +using namespace CMManager; +using namespace CommsDat; + +const TUint32 KDefaultPriorityTUNDriver = 0; +_LIT( KPluginTUNDriverFileIcons, "z:cmplugintundriver.mbm" ); +_LIT(KTUNDriverBearerName,"TUNDriverBearer"); +#define KCDAgentNameTUNDriver _S("tundriveragt.agt") +_LIT(KTUNDriverTunnelAgent,"tundriveragt.agt"); +#define KCDInterfaceNameTUNDriver _S("tundriver") +_LIT(KTUNDriverInterfaceName,"tundriver"); + +const TInt KLanLastSocketActivityTimeout = -1; +const TInt KLanLastSocketClosedTimeout = -1; + +const TBool KDefIpAddrFromServer = EFalse; +const TBool KDefIpDnsAddrFromServer = EFalse; +const TBool KDefIp6DnsAddrFromServer = EFalse; +_LIT( KEmpty, ""); + +static const TCmAttribConvTable STUNDriverConvTbl[] = + { + { ETUNDriverIfNetworks, ETUNDriverRangeMax, NULL }, + { ETUNDriverIfNetworks, KCDTIdLANIfNetworks, NULL }, + { ETUNDriverIpNetMask, KCDTIdLANIpNetMask, &CheckIPv4ValidityL }, + { ETUNDriverIpGateway, KCDTIdLANIpGateway, &CheckIPv4ValidityL }, + { ETUNDriverIpAddrFromServer, KCDTIdLANIpAddrFromServer, NULL }, + { ETUNDriverIpAddr, KCDTIdLANIpAddr, &CheckIPv4ValidityL }, + { ETUNDriverIpDNSAddrFromServer, KCDTIdLANIpDNSAddrFromServer, NULL }, + { ETUNDriverIpNameServer1, KCDTIdLANIpNameServer1, &CheckIPv4ValidityL }, + { ETUNDriverIpNameServer2, KCDTIdLANIpNameServer2, &CheckIPv4ValidityL }, + { ETUNDriverIp6DNSAddrFromServer, KCDTIdLANIp6DNSAddrFromServer, NULL }, + { ETUNDriverIp6NameServer1, KCDTIdLANIp6NameServer1, &CheckIPv4ValidityL }, + { ETUNDriverIp6NameServer2, KCDTIdLANIp6NameServer2, &CheckIPv4ValidityL }, + { ETUNDriverIpAddrLeaseValidFrom, KCDTIdLANIpAddrLeaseValidFrom, NULL }, + { ETUNDriverIpAddrLeaseValidTo, KCDTIdLANIpAddrLeaseValidTo, NULL }, + { ETUNDriverConfigDaemonManagerName, KCDTIdLANConfigDaemonManagerName, NULL }, + { ETUNDriverConfigDaemonName, KCDTIdLANConfigDaemonName, NULL }, + { ETUNDriverServiceExtensionTableName, KCDTIdLANServiceExtensionTableName, NULL }, + { ETUNDriverServiceExtensionTableRecordId, KCDTIdLANServiceExtensionTableRecordId, NULL }, + { 0, 0, NULL } + }; + +static const TCmCommonAttrConvArrayItem STUNDriverCommonConvTbl[] = + { + { ETUNDriverIfNetworks, ECmIFNetworks }, + { ETUNDriverIpNetMask, ECmIPNetmask }, + { ETUNDriverIpGateway, ECmIPGateway }, + { ETUNDriverIpAddrFromServer, ECmIPAddFromServer }, + { ETUNDriverIpAddr, ECmIPAddress }, + { ETUNDriverIpDNSAddrFromServer, ECmIPDNSAddrFromServer }, + { ETUNDriverIpNameServer1, ECmIPNameServer1 }, + { ETUNDriverIpNameServer2, ECmIPNameServer2 }, + { ETUNDriverIp6DNSAddrFromServer, ECmIP6DNSAddrFromServer }, + { ETUNDriverIp6NameServer1, ECmIP6NameServer1 }, + { ETUNDriverIp6NameServer2, ECmIP6NameServer2 }, + { ETUNDriverIpAddrLeaseValidFrom, ECmIPAddrLeaseValidFrom }, + { ETUNDriverIpAddrLeaseValidTo, ECmIPAddrLeaseValidTo }, + { ETUNDriverConfigDaemonManagerName, ECmConfigDaemonManagerName }, + { ETUNDriverConfigDaemonName, ECmConfigDaemonName }, + { 0, 0 } + }; + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::NewL() +// -------------------------------------------------------------------------- +// +CCmPluginTUNDriver* CCmPluginTUNDriver::NewL( TCmPluginInitParam* aInitParam ) + { + CCmPluginTUNDriver* self = new( ELeave ) CCmPluginTUNDriver( aInitParam ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::~CCmPluginTUNDriver() +// -------------------------------------------------------------------------- +// +CCmPluginTUNDriver::~CCmPluginTUNDriver() + { + AdditionalReset(); + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::CreateInstanceL +// -------------------------------------------------------------------------- +// +CCmPluginBaseEng* CCmPluginTUNDriver::CreateInstanceL( TCmPluginInitParam& aInitParam ) const + { + CCmPluginTUNDriver* self = new( ELeave ) CCmPluginTUNDriver( &aInitParam ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::CCmPluginTUNDriver() +// -------------------------------------------------------------------------- +// +CCmPluginTUNDriver::CCmPluginTUNDriver( TCmPluginInitParam* aInitParam ) + : CCmPluginLanBase( aInitParam ) + { + CLOG_CREATE; + iBearerType = KPluginTUNDriverBearerTypeUid; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::ConstructL() +// -------------------------------------------------------------------------- +// +void CCmPluginTUNDriver::ConstructL() + { + CCmPluginLanBase::ConstructL(); + iBearerRecName = KCDTypeNameVirtualBearer; + + AddConverstionTableL( (CCDRecordBase**)&iServiceRecord, NULL, STUNDriverConvTbl ); + AddCommonConversionTableL( STUNDriverCommonConvTbl ); + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::GetIntAttributeL() +// -------------------------------------------------------------------------- +// +TUint32 CCmPluginTUNDriver::GetIntAttributeL( const TUint32 aAttribute ) const + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::GetIntAttributeL" ); + + TUint32 retVal( 0 ); + + switch( aAttribute ) + { + case ECmBearerIcon: + { + MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); + TAknsItemID id; + TParse mbmFile; + User::LeaveIfError( mbmFile.Set( KPluginTUNDriverFileIcons, + &KDC_BITMAP_DIR, NULL ) ); + + retVal = (TUint32)AknsUtils::CreateGulIconL( + skinInstance, + id, + mbmFile.FullName(), + EMbmCmpluginvpnQgn_prop_vpn_access_point, + EMbmCmpluginvpnQgn_prop_vpn_access_point_mask ); + } + break; + case ECmCommsDBBearerType: + { + retVal = KCommDbBearerLAN; + } + break; + case ECmDefaultUiPriority: + case ECmDefaultPriority: + { + retVal = aAttribute == ECmDefaultPriority ? + GlobalBearerPriority( TPtrC(KCDTypeNameLANService) ) : + GlobalUiBearerPriority( TPtrC(KCDTypeNameLANService) ); + + if ( retVal == KDataMobilitySelectionPolicyPriorityWildCard ) + { + retVal = KDefaultPriorityTUNDriver; + } + } + break; + default: + { + retVal = CCmPluginBaseEng::GetIntAttributeL( aAttribute ); + } + } + + return retVal; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::CanHandleIapIdL() +// -------------------------------------------------------------------------- +// +TBool CCmPluginTUNDriver::CanHandleIapIdL( TUint32 aIapId ) const + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::CanHandleIapIdL1" ); + TBool retVal( EFalse ); + + CCDIAPRecord *iapRecord = static_cast + (CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord)); + + CleanupStack::PushL( iapRecord ); + iapRecord->SetRecordId( aIapId ); + + TRAPD( err, iapRecord->LoadL( Session() )); + + if( !err ) + { + CanHandleIapIdL( iapRecord ); + } + + CleanupStack::PopAndDestroy( iapRecord ); + return retVal; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::CanHandleIapIdL() +// -------------------------------------------------------------------------- +// +TBool CCmPluginTUNDriver::CanHandleIapIdL( CCDIAPRecord *aIapRecord ) const + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::CanHandleIapIdL" ); + + TBool retVal( EFalse ); + + if( TPtrC( aIapRecord->iServiceType ) == TPtrC(KCDTypeNameLANService) && + TPtrC( aIapRecord->iBearerType ) == TPtrC(KCDTypeNameVirtualBearer) ) + { + CMDBRecordSet* bearersRS = + new ( ELeave ) CMDBRecordSet(KCDTIdVirtualBearerRecord); + CleanupStack::PushL( bearersRS ); + CCDVirtualBearerRecord* bearerRecord = + static_cast( CCDRecordBase::RecordFactoryL( KCDTIdVirtualBearerRecord ) ); + CleanupStack::PushL( bearerRecord ); + + // Find entries used "tundriveragt.agt" as agent from Table VirtualBearer + bearerRecord->iBearerAgent.SetL( KTUNDriverTunnelAgent ); + bearerRecord->iVirtualBearerNifName.SetL( KTUNDriverInterfaceName ); + bearersRS->iRecords.AppendL( bearerRecord ); + + CleanupStack::Pop( bearerRecord ); + bearerRecord = NULL; + if ( bearersRS->FindL( Session() ) ) + { + TUint32 recordId = (*bearersRS)[0]->RecordId(); + TPtrC bearerName( (*bearersRS)[0]->iRecordName.GetL() ); + TPtrC bearerAgent( (*bearersRS)[0]->iBearerAgent.GetL() ); + TPtrC bearerInterface( (*bearersRS)[0]->iVirtualBearerNifName.GetL() ); + + // Further comparing record ID referred to by this VPN IAP with entry ID in table VirtualBearer + // And also comparing bear name with our expected one "vpnbearer" + if ( bearerAgent == TPtrC( KCDAgentNameTUNDriver ) && + bearerInterface == TPtrC( KCDInterfaceNameTUNDriver ) ) + { + retVal = ETrue; + } + } + + CleanupStack::PopAndDestroy( bearersRS ); + } + return retVal; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::RunSettingsL() +// -------------------------------------------------------------------------- +// +TInt CCmPluginTUNDriver::RunSettingsL() + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::RunSettingsL" ); + User::Leave( KErrNotSupported ); + return KErrNotSupported; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::LoadServiceSettingL() +// -------------------------------------------------------------------------- +// +void CCmPluginTUNDriver::LoadServiceSettingL() + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::LoadServiceSettingL" ); + + if( TPtrC(KCDTypeNameLANService) == iIapRecord->iServiceType ) + { + iServiceRecord = static_cast + ( CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + } + else + { + User::Leave( KErrNotSupported ); + } + + CCmPluginBaseEng::LoadServiceSettingL(); + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::InitializeWithUiL() +// -------------------------------------------------------------------------- +// +TBool CCmPluginTUNDriver::InitializeWithUiL( TBool /*aManuallyConfigure*/ ) + { + User::Leave( KErrNotSupported ); + return ETrue; + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::ServiceRecord() +// -------------------------------------------------------------------------- +// +CCDLANServiceRecord& CCmPluginTUNDriver::ServiceRecord() const + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::ServiceRecord" ); + return *static_cast( iServiceRecord ); + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::CreateNewServiceRecordL() +// -------------------------------------------------------------------------- +// +void CCmPluginTUNDriver::CreateNewServiceRecordL() + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::CreateNewServiceRecordL" ); + + delete iServiceRecord; + iServiceRecord = NULL; + + iServiceRecord = static_cast + (CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord )); + + // I do not think that we have to use the default record, + // but for compatibility with ApEngine, we write all fields + CCDLANServiceRecord* record = + static_cast( iServiceRecord ); + + if ( FeatureSupported( KFeatureIdIPv6 ) ) + { + record->iIfNetworks.SetL( KDefIspIfNetworksIPv4IPv6LAN ); + } + else + { + record->iIfNetworks.SetL( KDefIspIfNetworksIPv4 ); + } + record->iIpGateway.SetL( KUnspecifiedIPv4 ); + record->iIpAddrFromServer.SetL( KDefIpAddrFromServer ); + + record->iIpAddr.SetL( KUnspecifiedIPv4 ); + + record->iIpDnsAddrFromServer.SetL( KDefIpDnsAddrFromServer ); + + record->iIpNameServer1.SetL( KUnspecifiedIPv4 ); + record->iIpNameServer2.SetL( KUnspecifiedIPv4 ); + record->iIp6DnsAddrFromServer.SetL( KDefIp6DnsAddrFromServer ); + record->iIp6NameServer1.SetL( KDynamicIpv6Address ); + record->iIp6NameServer2.SetL( KDynamicIpv6Address ); + + if ( KDefIpAddrFromServer ) + { + record->iConfigDaemonManagerName.SetL( KDaemonManagerName ); + record->iConfigDaemonName.SetL( KConfigDaemonName ); + } + else + { + record->iConfigDaemonManagerName.SetL( KEmpty ); + record->iConfigDaemonName.SetL( KEmpty ); + } + } + +// --------------------------------------------------------------------------- +// CCmPluginTUNDriver::ServiceRecordIdLC +// --------------------------------------------------------------------------- +// +void CCmPluginTUNDriver::ServiceRecordIdLC( HBufC* &aName, TUint32& aRecordId ) + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::ServiceRecordIdLC" ); + + aName = TPtrC( KCDTypeNameLANService ).AllocLC(); + aRecordId = iServiceRecord->RecordId(); + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::BearerRecordIdLC() +// -------------------------------------------------------------------------- +// +void CCmPluginTUNDriver::BearerRecordIdLC( HBufC* &aBearerName, TUint32& aRecordId ) + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::BearerRecordIdLC" ); + + CMDBRecordSet* bearersRS = + new(ELeave) CMDBRecordSet + (KCDTIdVirtualBearerRecord); + CleanupStack::PushL( bearersRS ); + + CCDVirtualBearerRecord* tmprec = static_cast + (CCDRecordBase::RecordFactoryL( KCDTIdVirtualBearerRecord )); + CleanupStack::PushL( tmprec ); + tmprec->iBearerAgent.SetL( KTUNDriverTunnelAgent ); + bearersRS->iRecords.AppendL( tmprec ); + + CleanupStack::Pop( tmprec ); + tmprec = NULL; + + if ( !bearersRS->FindL( Session() ) ) + // No bearer record found -> create a default one. + { + tmprec = static_cast + (CCDRecordBase::RecordFactoryL(KCDTIdVirtualBearerRecord)); + CleanupStack::PushL(tmprec); + + tmprec->iRecordName.SetL( KTUNDriverBearerName ); + tmprec->iBearerAgent.SetL( KTUNDriverTunnelAgent ); + tmprec->iVirtualBearerNifName.SetL(KTUNDriverInterfaceName); + tmprec->iLastSocketActivityTimeout = (TUint32)KLanLastSocketActivityTimeout; + tmprec->iLastSessionClosedTimeout = (TUint32) KLanLastSocketClosedTimeout; + tmprec->iLastSocketClosedTimeout = (TUint32)KLanLastSocketActivityTimeout; + + tmprec->SetRecordId( KCDNewRecordRequest ); + tmprec->StoreL( Session() ); + + aRecordId = tmprec->RecordId(); + + CleanupStack::PopAndDestroy(tmprec); + } + else + { + aRecordId = (*bearersRS)[0]->RecordId(); + } + + CleanupStack::PopAndDestroy( bearersRS ); + + aBearerName = TPtrC( KCDTypeNameVirtualBearer ).AllocLC(); + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::PrepareToUpdateRecordsL() +// -------------------------------------------------------------------------- +// +void CCmPluginTUNDriver::PrepareToUpdateRecordsL() + { + LOGGER_ENTERFN( "CCmPluginTUNDriver::PrepareToUpdateRecordsL" ); + CheckDNSServerAddressL( ETrue, + ServiceRecord().iIp6NameServer1, + ServiceRecord().iIp6NameServer2, + ServiceRecord().iIp6DnsAddrFromServer ); + + CheckDNSServerAddressL( EFalse, + ServiceRecord().iIpNameServer1, + ServiceRecord().iIpNameServer2, + ServiceRecord().iIpDnsAddrFromServer ); + } + +// -------------------------------------------------------------------------- +// CCmPluginTUNDriver::AdditionalReset() +// -------------------------------------------------------------------------- +// +void CCmPluginTUNDriver::AdditionalReset() + { + + } + +// eof diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Rom/cmplugintundriver.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Rom/cmplugintundriver.iby Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + +#ifndef __CMPLUGINTUNDRIVER_IBY__ +#define __CMPLUGINTUNDRIVER_IBY__ + + +ECOM_PLUGIN(cmplugintundriver.dll,20027F3E.rsc) +SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,cmplugintundriver) + + +#endif diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/Rom/cmplugintundriverresources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Rom/cmplugintundriverresources.iby Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,25 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + +#ifndef __CMPLUGINTUNDRIVER_RESOURCES_IBY__ +#define __CMPLUGINTUNDRIVER_RESOURCES_IBY__ + + +data = DATAZ_\RESOURCE_FILES_DIR\cmplugintundriverui.rsc RESOURCE_FILES_DIR\cmplugintundriverui.rsc + +# +#endif \ No newline at end of file diff -r 83ca720e2b9a -r bb1f80fb7db2 cmmanager/cmmgr/group/bld.inf --- a/cmmanager/cmmgr/group/bld.inf Wed Sep 01 12:23:51 2010 +0100 +++ b/cmmanager/cmmgr/group/bld.inf Tue Sep 14 22:06:05 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -35,6 +35,9 @@ ../Rom/cmpluginvpn.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cmpluginvpn.iby) ../Rom/cmpluginvpnresources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(cmpluginvpnresources.iby) +../Rom/cmplugintundriver.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cmplugintundriver.iby) +../Rom/cmplugintundriverresources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(cmplugintundriverresources.iby) + ../Rom/cmpluginwlan.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cmpluginwlan.iby) ../Rom/cmpluginwlanresources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(cmpluginwlanresources.iby) diff -r 83ca720e2b9a -r bb1f80fb7db2 connectionmonitoring/connmon/connectionmonitor/src/connmoncommsdatcache.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/connmoncommsdatcache.cpp Wed Sep 01 12:23:51 2010 +0100 +++ b/connectionmonitoring/connmon/connectionmonitor/src/connmoncommsdatcache.cpp Tue Sep 14 22:06:05 2010 +0300 @@ -524,7 +524,9 @@ TInt err( KErrNone ); TBool availabilityEventsEnabled( EFalse ); - if ( ( aBearerId == EBearerIdAll ) || ( aBearerId == EBearerIdVirtualVPN ) ) + if ( ( aBearerId == EBearerIdAll ) || + ( aBearerId == EBearerIdVirtualVPN ) || + ( aBearerId == EBearerIdWLAN ) ) { // If WLAN background scanning is on, and client is asking IAP // availability for all- or virtual IAPs, send IAP availability changed diff -r 83ca720e2b9a -r bb1f80fb7db2 data/cccccc00_emulator.cre Binary file data/cccccc00_emulator.cre has changed diff -r 83ca720e2b9a -r bb1f80fb7db2 inc/meshpreface1.cfg --- a/inc/meshpreface1.cfg Wed Sep 01 12:23:51 2010 +0100 +++ b/inc/meshpreface1.cfg Tue Sep 14 22:06:05 2010 +0300 @@ -272,6 +272,13 @@ FIELD_COUNT=2 END_ADD +ADD_SECTION +# COMMDB_ID = 14 + Name=tundrivermcpr + MCprUid=0x10281E05 + FIELD_COUNT=2 +END_ADD + ############################################################ ## CprTable ## @@ -467,6 +474,13 @@ FIELD_COUNT=2 END_ADD +ADD_SECTION +# COMMDB_ID = 12 + Name=tundriverprotocol + ProtocolUid=0x10281C3C + FIELD_COUNT=2 +END_ADD + ############################################################ ## BearerTypeTable ## @@ -610,4 +624,14 @@ FIELD_COUNT=6 END_ADD +ADD_SECTION +# COMMDB_ID = 13 + Name=tundriver + Tier=Link.TierTable.271064565 + MCpr=MCprTable.14 + Cpr=CprTable.3 + SCpr=SCprTable.3 + Protocol=ProtocolTable.12 + FIELD_COUNT=6 +END_ADD diff -r 83ca720e2b9a -r bb1f80fb7db2 ipcm_pub/connection_settings_api/group/bld.inf --- a/ipcm_pub/connection_settings_api/group/bld.inf Wed Sep 01 12:23:51 2010 +0100 +++ b/ipcm_pub/connection_settings_api/group/bld.inf Tue Sep 14 22:06:05 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -12,7 +12,7 @@ * Contributors: * * Description: File that exports the files belonging to -: Connection Settings API +* Connection Settings API * */ @@ -41,3 +41,4 @@ ../inc/cmmanager.h MW_LAYER_PUBLIC_EXPORT_PATH(cmmanager.h) ../inc/cmsettingsui.h MW_LAYER_PUBLIC_EXPORT_PATH(cmsettingsui.h) ../inc/cmgenconnsettings.h MW_LAYER_PUBLIC_EXPORT_PATH(cmgenconnsettings.h) +../inc/cmplugintundriverdef.h MW_LAYER_PUBLIC_EXPORT_PATH(cmplugintundriverdef.h) diff -r 83ca720e2b9a -r bb1f80fb7db2 ipcm_pub/connection_settings_api/inc/cmplugintundriverdef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipcm_pub/connection_settings_api/inc/cmplugintundriverdef.h Tue Sep 14 22:06:05 2010 +0300 @@ -0,0 +1,148 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Attributes for TUN Driver plug-in. +* +*/ + + +#ifndef CMPLUGINTUNDRIVER_DEF_H +#define CMPLUGINTUNDRIVER_DEF_H + +#include +const TUint KPluginTUNDriverBearerTypeUid = 0x20027F3F; + +namespace CMManager + { + /** LAN specific connection method attributes */ + enum TConnectionMethodTUNDriverSpecificAttributes + { + ETUNDriverSpecificAttributes = 20000, + + /** + * Comma separated list of network protocols, e.g. "PPP". + * ( String - default: None) + */ + ETUNDriverIfNetworks = KLanBaseIfNetworks, + + /** + * IP net mask of interface. + * ( String - default: None) + */ + ETUNDriverIpNetMask, + + /** + * IP address of gateway + * ( String - default: None) + */ + ETUNDriverIpGateway, + + /** + * Get IP addresses (for EPOC) from server? + * ( TBool - default: None) + */ + ETUNDriverIpAddrFromServer, + + /** + * IP address of EPOC. + * ( String - default: None) + */ + ETUNDriverIpAddr, + + /** + * Get DNS addresses from server? + * ( TBool - default: None) + */ + ETUNDriverIpDNSAddrFromServer, + + /** + * IP Address of primary name server. + * ( String - default: None) + */ + ETUNDriverIpNameServer1, + + /** + * IP Address of secondary name server. + * ( String - default: None) + */ + ETUNDriverIpNameServer2, + + /** + * Get IP6 DNS addresses from server? + * ( TBool - default: None) + */ + ETUNDriverIp6DNSAddrFromServer, + + /** + * IP6 Address of primary name server. + * ( String - default: None) + */ + ETUNDriverIp6NameServer1, + + /** + * IP6 Address of secondary name server. + * ( String - default: None) + */ + ETUNDriverIp6NameServer2, + + /** + * IP address valid from this time, used to store + * dynamically assigned address lease info. + * ( String - default: None) + */ + ETUNDriverIpAddrLeaseValidFrom, + + /** + * IP address valid for use until this time, used to store . + * dynamically assigned address lease info. + * ( String - default: None) + */ + ETUNDriverIpAddrLeaseValidTo, + + /** + * Name of the ECOM configuration daemon manager component. + * This component interfaces with the server identified in + * ISP_CONFIG_DAEMON_NAME. If specified, ISP_CONFIG_DAEMON_NAME + * should also be specified. + * ( String - default: None) + */ + ETUNDriverConfigDaemonManagerName, + + /** + * Name of the configuration daemon server. + * This server is used to provide further configuration for + * a connection, e.g. dynamic IP address assignment. + * If specified, ISP_CONFIG_DAEMON_MANAGER_NAME should also + * be specified. + * ( String - default: None) + */ + ETUNDriverConfigDaemonName, + + /** + * Name of the TUN Driver Service Extension table. + * ( String - default: None) + */ + ETUNDriverServiceExtensionTableName, + + /** + * The record ID of the linked TUN Driver Service Extension record in the + * TUN Driver Service Extension table. + * ( TUint32 - default: None) + */ + ETUNDriverServiceExtensionTableRecordId, + + ETUNDriverRangeMax = KLanBaseRangeMax + }; + } // namespace CMManager + +#endif // CMPLUGINTUNDRIVER_DEF_H