diff -r 000000000000 -r dd21522fd290 web_plat/connection_manager_api/inc/InternetConnectionManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web_plat/connection_manager_api/inc/InternetConnectionManager.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,677 @@ +/* +* Copyright (c) 2002 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: +* This class provides connection/session related information. +* Both the requested and the stored AP's are here. +* +*/ + + +#ifndef INTERNET_CONNECTION_MANAGER_H +#define INTERNET_CONNECTION_MANAGER_H + +//FORWARD DECLARATIONS +class CIntConnectionInitiator; +class CApUtils; +class CApDataHandler; +class CCommsDatabase; +class CAknGlobalNote; +class CAknGlobalConfirmationQuery; +class CAknWaitDialog; +class CActiveConnectorSyncWrapper; +class TCommDbConnPref; +class TConnSnapPref; + +//INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +//CONSTS +const TUint32 KPrompt = 0; +const TInt KErrGeneralConnection = -50000; +const TInt NW_STAT_WPS_ERROR = -26041; +const TInt KMaxStages = 3; + +_LIT( KConnectionResourceFileFormatter, "z:%SCONNECTIONMANAGER.RSC" ); + +const TInt KEtelExtErrIntervalHigh = KErrEtelGsmBase; +const TInt KEtelExtErrIntervalLow = KEtelExtErrIntervalHigh - 1160; +const TInt KGsmErrIntervalHigh = KErrPhoneSpecificGsmBase; +const TInt KGsmErrIntervalLow = KGsmErrIntervalHigh - 500; +const TInt KEtelCoreErrIntervalHigh = KErrEtelCoreBase; +const TInt KEtelCoreErrIntervalLow = KEtelCoreErrIntervalHigh - 64; +const static TInt KADontShowErrors[] = + { KErrGsmCCUnassignedNumber, + KErrGsmCCNoRouteToDestination, + KErrGsmCCChannelUnacceptable, + KErrGsmCCOperatorDeterminedBarring, + KErrGsmCCUserBusy, + KErrGsmCCUserNotResponding, + KErrGsmCCUserAlertingNoAnswer, + KErrGsmCCNumberChanged, + KErrGsmCCDestinationOutOfOrder, + KErrGsmCCInvalidNumberFormat, + KErrGsmCCNoChannelAvailable, + KErrGsmCCNetworkOutOfOrder, + KErrGsmCCTemporaryFailure, + KErrGsmCCSwitchingEquipmentCongestion, + KErrGsmCCRequestedChannelNotAvailable, + KErrGsmCCResourceNotAvailable, + KErrGsmCCQualityOfServiceNotAvailable, + KErrGsmCCIncomingCallsBarredInCug, + KErrGsmCCRequestedFacilityNotImplemented, + KErrGsmCCInvalidCallReferenceValue, + KErrGsmCCUserNotInCug, + KErrGsmCCIncompatibleDestination, + KErrGsmCCInvalidTransitNetworkSelection, + KErrGsmCCSemanticallyIncorrectMessage, + KErrGsmCCIncompatibleMessageInProtocolState, + KErrGsmCCConditionalIEError, + KErrGsmCCUnspecifiedProtocolError, + KErrGsmCCRequestedFacilityNotSubscribed, + KErrGsmCCAccessInformationDiscarded, + KErrGsmCallInProgress, + KErrGsmNumberBarred, + KErrGsmInvalidFdn, + KErrGsmNotAllowed, + KErrGsmNoService, + KErrGsmCallServerFail, + KErrGsmGprsActive, + KErrGsm0707SimNotInserted, + KErrGsm0707SIMPuk1Required, + KErrGsm0707SimPin1Required, + KErrGsm0707SimPin2Required, + KErrGsm0707SimFailure, + KErrGsm0707PhoneToSimLockRequired, + KErrGsm0707SimWrong, + KErrArgument, + KErrGsmNoNumber, + KErrGsmCCFacilityRejected, + KErrMMEtelActivationBlockedByCallControlNoText, + KErrMMEtelActivationBlockedByCallControlWithText + }; + +const static TInt KNumsOfDontShowErrors = sizeof(KADontShowErrors) / sizeof(TInt); + +//these errors will not be converted to a general one! +const static TInt KAExcludeFromConverting[] = + { + KErrGprsServicesNotAllowed, KErrGprsAndNonGprsServicesNotAllowed, + KErrGprsMSIdentityCannotBeDerivedByTheNetwork, KErrGprsMSImplicitlyDetached, + KErrGprsMSCTemporarilyNotReachable, KErrGprsLlcOrSndcpFailure, + KErrGprsInsufficientResources, KErrGprsMissingorUnknownAPN, + KErrGprsUnknownPDPAddress, KErrGprsUserAuthenticationFailure, + KErrGprsActivationRejectedByGGSN, + KErrGprsNSAPIAlreadyUsed, KErrGprsRegularContextDeactivation, + KErrGprsQoSNotAccepted, KErrGprsReactivationRequested, + KErrGprsFeatureNotSupported, + KErrEtelCallNotActive, + KErrGsmMMNetworkFailure, + KErrGprsActivationRejected, + KErrGsmMMServiceOptionNotSubscribed, + KErrGsmMMServiceOptionTemporaryOutOfOrder, + KErrPacketDataTsyMaxPdpContextsReached + }; + +const static TInt KNumsOfExcludeFromConverting = sizeof(KAExcludeFromConverting) / sizeof(TInt); + +class MOffLineObserver + { + public: + + virtual void OfflineModeChanged( TBool aEnabled ) = 0; + }; + +//This class is responsible for the logic that lies in connection handling +NONSHARABLE_CLASS( CInternetConnectionManager ): public CBase, + public MProgressDialogCallback, + public MConnection, + public MConnectionMultiStageObserver, + public MOffLineObserver + { + public: + /** + *Symbian OS 2 phased constructor + *@param aSilentMode: Set it to true if you don't want any userinteraction + */ + IMPORT_C static CInternetConnectionManager* NewL( TBool aSilentMode= EFalse ); + + + /** + *Symbian OS 2 phased constructor + *@param aSilentMode: Set it to true if you don't want any userinteraction + */ + IMPORT_C static CInternetConnectionManager* NewL( CCommsDatabase* aCommsDb, TBool aSilentMode= EFalse ); + + /** + *Symbian OS 2 phased constructor + *@param aSilentMode: Set it to true if you don't want any userinteraction + */ + IMPORT_C static CInternetConnectionManager* NewLC( TBool aSilentMode= EFalse ); + + /** + *Symbian OS 2 phased constructor + *@param aSilentMode: Set it to true if you don't want any userinteraction + */ + IMPORT_C static CInternetConnectionManager* NewLC( CCommsDatabase* aCommsDb, TBool aSilentMode= EFalse ); + + public: + /** + *Connects to the network + *It can leave with a lot of errors coming from underlying components + *If you don't want to handle all the leaves separately TRAP it + *and if error occured (other than OOM) call ShowGeneralConnectionErrorL + *@param aIAPId1 the first AP id to try the connection with, if 0 the user will be prompted + *@param aIAPId2 the second AP id to try the connection with, if 0 the user will be prompted + *@return KErrNone if no error occured, KErrGeneral if any connection error occured + */ + IMPORT_C TInt ConnectL( TUint32 aIAPId1, TUint32 aIAPId2 ); + + /** + *Connects to the network + *It can leave with a lot of errors coming from underlying components + *If you don't want to handle all the leaves separately TRAP it + *and if error occured (other than OOM) call ShowGeneralConnectionErrorL + *@param aIAPId the AP id to try the connection with, if 0 the user will be prompted + *@return KErrNone if no error occured, KErrGeneral if any connection error occured + */ + IMPORT_C TInt ConnectL( TUint32 aIAPId ); + + /** + *Call this function to show a localised general error + *It can be used after a trapped call to ConnectL + */ + IMPORT_C void ShowGeneralConnectionErrorL(); + + /** + *Use this function to stop the connection + */ + IMPORT_C void StopConnectionL(); + + /** + *Use this function to find out if the old already existing connection is used + *or a new connection is established + */ + IMPORT_C TBool NewConnectionEstablished( ) const; + + /** + * Change Internet Accespoint ( Change Connection ) + * @return + */ + IMPORT_C void ChangeIapL( TConManChangeConn& aCangeConn, + TUint32& aNewAp ); + + /** + * Ask Internet Accespoint from dialog + * @return KErrNone if the user selected an Iap or an error code + */ + IMPORT_C TInt AskIap( TUint32& aNewAp ); + + /** + * Shows the connection changed dialog. + * @return none. + */ + IMPORT_C void ShowConnectionChangedDlg(); + + public: + + /** + *Destructor + */ + virtual ~CInternetConnectionManager(); + + public: //MProgressDialogCallback + + /** + *This is called when the Connection Wait Dialog is dismissed + *@param aButtonId The button that was used to dismiss the dialog + */ + void DialogDismissedL( TInt aButtonId ); + + protected: + + /** + *first phase constructor + */ + CInternetConnectionManager( TBool aSilentMode= EFalse ); + + /** + *first phase constructor + */ + CInternetConnectionManager( CCommsDatabase* aCommsDb, TBool aSilentMode= EFalse ); + + private: + + enum TWaitIconType { EWaitNoIcon, EWaitDataIcon, EWaitGPRSIcon }; + + private: + + /*Does the connection with no check for existing one + *It does not display any errors + *@param aPref1 the first preference to try + *@param aPref2 the second preference to try + *@return KErrNone or KErrGeneral + */ + TInt ConnectWithoutCheckL ( TUint32 aIAPId1, TUint32 aIAPId2 ); + + /*Does the connection + *It does not display any errors + *@param aPref1 the first preference to try + *@param aPref2 the second preference to try + *@return KErrNone or KErrGeneral + */ + TInt ConnectWithoutCheckL( TUint32 aIAPId1 ); + + //Can be called after a ConnectWithoutCheckL + void DisplayConnErrorL(); + + /*Does the connection + *@param aPref1 the first preference to try + *@param aPref2 the second preference to try + *@return KErrNone or KErrGeneral + */ + TInt ConnectL + ( + TCommDbConnPref& aPref1, + TCommDbConnPref& aPref2 + ); + + /** + *Does the connection + *@param aPref1 the preference to try + *@return KErrNone or KErrGeneral + */ + TInt ConnectL + ( + TCommDbConnPref& aPref1 + ); + + /** + *Check network availability + *@param aGPRSAvailable on return it is ETrue if there is GPRS coverage + *@return EFalse if there is no network + */ + TBool CheckNetworkL( TBool& aGPRSAvailable ); + + /** + *Return the bearer type of the given AP. + *@param aIAPId the IAPId + */ + TApBearerType BearerTypeL( TUint32 aIAPId ); + + /** + *returns the name of the specified IAP + *@param aIAPId the id of the IAP + *@return the name of the AP + */ + HBufC* APNameLC( TUint32 aIAPId ) const; + + /** + *Returns the whether WLAN is supported in off-line mode. + **/ + TBool CheckForWLAN(); + + private: + + /** + *Do change iap. + */ + TBool DoChangeIapL( TUint32& aNewAp ); + + private: + + /** + *second phase constructor + */ + void ConstructL(); + + /** + * pops connection note while it is in connecting mode + * @param aLabel + * @param aIcon + */ + void StartWaitDialogL( HBufC* aLabel, TWaitIconType aIcon ); + + /** + *Pops up query note with the default icon and OK Cancel CBA pair + *@param aTextResId + *@return the button id pressed on dialog dismissal + */ + TInt ShowConfQueryNoteL(TInt aTextResId ); + + /** + *Pops up information note with the default icon + *@param aTextResId + */ + void ShowInformationNoteL( TInt aTextResId ); + + /** + *Pops up error note with the default icon + *@param aTextResId + *@param aContext The context of the error, need for special cases. by default + * ECtxAutomatic + */ + void ShowErrorNoteL( + TInt aErrorStat, + CTextResolver::TErrorContext aContext = CTextResolver::ECtxAutomatic ); + + + /** + *Utility function to decide whether an element is in an int array + */ + TBool InIntArray( TInt aUpperBound, const TInt* aArray, TInt aElement ); + + /** + *Utility functions that are used to establish a connection with a snap Id + */ + TInt ConnectWithSnapId(TUint32 aRequestedSnapId); + + TInt ConnectSnapWithoutCheckL(TUint32 aRequestedSnapId); + + TInt ConnectSnapL (TConnSnapPref& aPref1); + + /** + *Pops up global note (of specified note type) with the default icon + *@param aNoteType, the note type + *@param aTextResId + */ + void ShowGlobalNoteL( TAknGlobalNoteType aNoteType, TInt aTextResId ); + + public: // from MConnection + + /** + *Sets the requested AP later it may not be the one to be used + *@param aRequestedAPs the requested AP idpair + */ + IMPORT_C void SetRequestedAPs( TIdPair aRequestedAPs ); + + /** + *Sets RequestedAP + *@param aRequestedAP the requested AP id + */ + IMPORT_C void SetRequestedAP( TUint32 aRequestedAPId , TBool aDefault = EFalse ); + + IMPORT_C TAPValidity RequestedAPValidityL(); + + /** + *A query function to find out whether there is a connection which + *was matches with the "current" connection parameters + *@return ETrue if the condition above is satisfied EFalse otherwise. + */ + IMPORT_C TBool Connected(); + + /** + *Call this for obtaining the AP for the current connection + *@return the AP for the latest connection + * NULL if there isn't any + */ + IMPORT_C const CApAccessPointItem* CurrentAccessPoint() const; + + /** + *Returns the currently (or the last used) AP id + *@return the currently (or the last used) AP id + */ + IMPORT_C TUint32 CurrentAPId() const; + + /** + *Call this the find out the session security mode for the current AP + *@retun the security mode for the current AP + */ + IMPORT_C TBool CurrentSessionSecure() const; + + /** + *Call this the find out the connection type for the current AP + *@retun the conection type for the current AP + */ + IMPORT_C TBool CurrentSessionConnectionOriented() const; + + /** + *Call this the get the gateway address to be used + *@retun the address of the gateway associated with the current AP, space for zero terminator should also be allocated + */ + IMPORT_C HBufC* CurrentGatewayLC() const; + + + /** + *Call this the get the start page to be used + *@return the address of the start page associated with the current AP, space for zero terminator should also be allocated + */ + IMPORT_C HBufC* CurrentStartPageLC() const; + + /** + *Call this function to get the name of the current Wap AP, space for zero terminator should also allocated + *return + */ + IMPORT_C HBufC* CurrentApNameLC() const; + + /** + *Call this the get the current connection speed to be used + *@return the the connection speed + */ + IMPORT_C TApCallSpeed CurrentConnectionSpeed() const; + + /** + *Call this the get the current bearer to be used + *@return the bearer type associated with the current AP + */ + IMPORT_C TApBearerType CurrentBearerTypeL() const; + + /** + *It closes the connection and sets the manager to offline mode + */ + IMPORT_C void Disconnect(); + + /** + *Sets an observer on the AP changes + *@param aObserver reference to the the AP change observer + */ + IMPORT_C void SetApChangeObserver( MApChangeObserver& aObserver ); + + /** + *Removes the AP change observer + */ + IMPORT_C void UnsetApChangeObserver(); + + /** + *Starts the connection process + *@param aDisableConnNeeded if set to ETrue the initial dialog indicating that there is no connection will not appear + *@param aIgnoreSecureAttribute if set to ETrue the security of the AP will not be taken into account when making + making decisions about which AP to use the requested or the active + */ + IMPORT_C TInt StartConnectionL( TBool aDisableConnNeeded = EFalse, TBool aIgnoreSecureAttribute = EFalse ); + + /** + * Returns pointer to the currently used AP. + * @return pointer to the currently used AP. Can be NULL. + */ + IMPORT_C CApAccessPointItem* CurrentAP(); + + /** + *Updates the current AP according to the specified base AP, it is possible to update only the WAP part + *of the AP, and thus create a mixed AP for the current connection (and the session about to be established) + *@param aBaseAP the base AP according to which the current AP will be updated + *@param aOnlyWAPPart if set to ETrue only the WAP part of the current AP will be updated. otherewise the whole AP + */ + void UpdateCurrentAPL( CApAccessPointItem& aBaseAP, TBool aOnlyWAPpart ); + + /** + * Returns the requested id pair. + * @return requested id pair + */ + TIdPair& RequestedIdPair(); + + /** + * Returns TRUE if there is no second preference. + * @return TRUE if there is no second preference + */ + TBool NoSecondPreference() const; + + /** + * Set if there is second preference + * @param aNoSecondPreference TRUE if no second preference + */ + void SetNoSecondPreference( TBool aNoSecondPreference ); + + /** + * Return TRUE if silent mode set. + * @return TRUE if silent mode set. + */ + TBool SilentMode() const; + + /** + * Returns pointer to CApUtils object. + * @return pointer to CApUtils object. Always valid. + */ + CApUtils* ApUtils(); + + MApChangeObserver* ApObserver(); + + /** + *Returns the RConnection object used to create connection. + *@return RConnection object + */ + IMPORT_C RConnection& Connection(); + + /** + *Return name of the connection created. + *Ownership of name is handed over. + *@return name of the connection + */ + IMPORT_C TName* ConnectionNameL(); + + /** + * Return socket server + * @return socket server + */ + IMPORT_C RSocketServ& SocketServer(); + /** + *Functions that are used to store the connection type and the snap ID + */ + IMPORT_C void SetConnectionType( CMManager::TCmSettingSelectionMode aConnectionType ); + + IMPORT_C void SetRequestedSnap (TUint32 aRequestedSnapId); + + /** + * Return ETrue if we are in a 3G network + * @return ETrue if we are in a 3G network + */ + TBool Check3GNetworkL(); + + /** + *Checks if there is an active (HS)CSD connection in the system + *@return TRUE if there is + */ + EXPORT_C TBool IsThereActiveHSCSDConnectionL(); + + /** + * Checks if there is an active voice call in the system + * @return ETrue is there's active voice call + */ + TBool IsThereActiveVoiceCall(); + + void SetInternalError( TInt aInternalError ); + + public: // Functions from base classes + + virtual void OfflineModeChanged( TBool aEnabled ); + + TBool IsConnectionAllowedL( TBool aDisplayError ); + + protected: + + void StartConnectionObservingL(); + void StopConnectionObserving(); + void ConnectionStageAchievedL(TInt); + + CApAccessPointItem* APItemFromAPIdLC( TUint32 aAPId ); + CApAccessPointItem* APItemFromIAPIdLC( TUint32 aIAPId ); + CApDataHandler* ApDataHandler(); + TBool CheckIfAlreadyConnected( TUint32& aNewIapId ); + + void CheckVPNL( TUint32 aNewIap, TConManChangeConn& aChangeConn ); + void UpdateEasyWlanFlagL(); + + void DoShowConnectionChangedDlgL(); + + void InitializeL(); + + private: + + CApAccessPointItem* iCurrentAP; + CApDataHandler* iApDataHandler; + CApUtils* iApUtils; + CVpnApItem* iVpnItem; + CVpnApEngine* iVpnEngine; + CCommsDatabase* iCommsDb; + CAknGlobalNote* iNote; + RFs iRFs; + RSocketServ iServ; + RConnection iConnection; + TInt iResOffset; + + TBool iSilentMode; + TBool iCommsDbOwned; + TBool iNewConnectionEstablished; + TBool iAlreadyInUse; + TInt iInternalError; + TInt iLastConnectionStage; + CAknNoteDialog* iNoteDialog; + CActiveConnectorSyncWrapper* iSyncConnector; + + MApChangeObserver* iApObserver; + TUint32 iConnId; + TIdPair iRequestedAPIds;//< It stores the requested WAP AP ids (two prefs) + + CMManager::TCmSettingSelectionMode iConnectionType; + TUint32 iRequestedSnapId; + + TBool iNoSecondPreference; + TBool iAlreadyConfirmed; // not used anymore + CConnectionStageNotifierWCB* iStageNotifier; + TBool iConnected; + TBool iCalledFromProcessFinish; + CAknWaitDialog* iWaitDialog; + CRepository* iRepository; + TBool iInitialized; + TBool iEasyWlan; + + HBufC* iConnName; // Temp fix for CDMA + + RTelServer iTelServer; + RMobilePhone iMobilePhone; + TInt iSatges[KMaxStages]; + }; + +#endif// End of File