# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1274955421 -10800 # Node ID 489cf6208544363e147fa9b7340c80efd7b45ef0 # Parent 7ec726f93df141fc728441e6aa81a56aaffd6bcf Revision: 201019 Kit: 2010121 diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/data/10281BB4.rss --- a/accesspointcontrol/apcontrollistplugin/data/10281BB4.rss Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2006 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 plugin resource file for VPN Settings plugin. -* -*/ - -#include - -RESOURCE REGISTRY_INFO theInfo - { - dll_uid = 0x10281BB4; // Plugin dll UID - interfaces = - { - INTERFACE_INFO - { - interface_uid = 0x10207236; // UID for CGSPluginInterface - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = 0x10281BB5; // Plugin UID - version_no = 1; - display_name = "AP Control List Plugin"; // Plugin debug name -#ifdef RD_CONTROL_PANEL - default_data = "0x200255B9"; // Parent UID (gsconnsettingsplugin) - opaque_data = "70"; // Order number -#else //RD_CONTROL_PANEL - default_data = "0x10207250"; // Parent UID (Connection View) - opaque_data = "210"; // Order number -#endif //RD_CONTROL_PANEL - } - }; - } - }; - } - diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/data/apcontrollistpluginrsc.rss --- a/accesspointcontrol/apcontrollistplugin/data/apcontrollistpluginrsc.rss Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,357 +0,0 @@ -/* -* Copyright (c) 2006 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: -* Resource file for APControlListPlugin -* -*/ - - -// RESOURCE IDENTIFIER -NAME APCL - -// INCLUDES -#include -#include -#include -#include -#include - -#include "apcontrollistplugin.hrh" -#include - - - - -// MACROS - -// RESOURCE DEFINITIONS -RESOURCE RSS_SIGNATURE - { - } - -RESOURCE TBUF - { - buf = "apnlist"; - } - -//---------------------------------------------------- -// -// r_apclplugin_title -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_apclplugin_title - { - buf = qtn_acl_title; - } - -//---------------------------------------------------- -// -// r_qtn_acl_navi_active -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_navi_active - { - buf = qtn_acl_navi_active ; - } - -//---------------------------------------------------- -// -// r_qtn_acl_navi_not_active -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_navi_not_active - { - buf = qtn_acl_navi_not_active ; - } - -//---------------------------------------------------- -// -// r_qtn_acl_empty_view_primary -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_empty_view_primary - { - buf = qtn_acl_empty_view_primary ; - } - -//---------------------------------------------------- -// -// qtn_acl_empty_view_secondary -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_empty_view_secondary - { - buf = qtn_acl_empty_view_secondary ; - } - -//---------------------------------------------------- -// -// r_qtn_acl_wait_reading_sim -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_wait_reading_sim - { - buf = qtn_acl_wait_reading_sim; - } - -//---------------------------------------------------- -// -// r_qtn_acl_network_provided_apn -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_network_provided_apn - { - buf = qtn_acl_network_provided_apn; - } - -//---------------------------------------------------- -// -// r_qtn_acl_conf_nwp_apn_added -// -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_conf_nwp_apn_added - { - buf = qtn_acl_conf_nw_provided_apn_added; - } - -//---------------------------------------------------- -// -// r_qtn_acl_conf_apn_added -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_conf_apn_added { buf = qtn_acl_conf_apn_added ; } - -//---------------------------------------------------- -// -// r_qtn_acl_conf_apn_removed -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_conf_apn_removed { buf = qtn_acl_conf_apn_removed ; } - -//---------------------------------------------------- -// -// r_qtn_acl_conf_control_activated -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_conf_control_activated { buf = qtn_acl_conf_control_activated ; } - -//---------------------------------------------------- -// -// r_qtn_acl_conf_control_deactivated -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_conf_control_deactivated { buf = qtn_acl_conf_control_deactivated ; } - -//---------------------------------------------------- -// -// r_qtn_acl_info_active -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_info_active { buf = qtn_acl_info_active ; } - -//---------------------------------------------------- -// -// r_qtn_acl_info_not_active -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_info_not_active { buf = qtn_acl_info_not_active ; } - -//---------------------------------------------------- -// -// r_qtn_acl_err_invalid_input -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_err_invalid_input { buf = qtn_acl_err_invalid_input; } - -//---------------------------------------------------- -// -// r_qtn_acl_err_sim_card -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_err_sim_card { buf = text_fdn_card_error; } - -//---------------------------------------------------- -// -// r_two_string_for_empty_view -// -//---------------------------------------------------- -// -RESOURCE TBUF r_two_string_for_empty_view { buf = "%0U\n%1U"; } - -//---------------------------------------------------- -// -// r_apclplugin_main_menubar -// -// -//---------------------------------------------------- -// -RESOURCE MENU_BAR r_apclplugin_main_menubar - { - titles = - { - MENU_TITLE - { - menu_pane = r_apclplugin_main_menu; - } - }; - } - -//---------------------------------------------------- -// -// r_apclplugin_main_menu -// -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_apclplugin_main_menu - { - items = - { - MENU_ITEM - { - command = EAPControlListCmdActivate; - txt = qtn_acl_options_activate_control; - }, - MENU_ITEM - { - command = EAPControlListCmdDeactivate; - txt = qtn_acl_options_deactivate_control; - }, - MENU_ITEM - { - command = EAPControlListCmdAdd; - txt = qtn_acl_options_add_apn_manually; - }, - MENU_ITEM - { - command = EAPControlListCmdRemove; - txt = qtn_acl_options_remove; - flags = EEikMenuItemSpecific; - }, - MENU_ITEM - { - command = EAknCmdHelp; - txt = qtn_options_help; - }, - MENU_ITEM - { - command = EEikCmdExit; - txt = qtn_options_exit; - } - }; - } - -//---------------------------------------------------- -// -// r_apclplugin_softkeys_options_back -// -// -//---------------------------------------------------- -// -RESOURCE CBA r_apclplugin_softkeys_options_back - { - buttons = - { - CBA_BUTTON {id=EAknSoftkeyOptions; txt = text_softkey_option;}, - CBA_BUTTON {id=EAknSoftkeyBack; txt = text_softkey_back;}, - CBA_BUTTON {id=EAknSoftkeyEmpty; txt = text_softkey_empty;} - }; - } - -//---------------------------------------------------- -// -// r_apclplugin_main_view -// Main view. -// -//---------------------------------------------------- -// -RESOURCE AVKON_VIEW r_apclplugin_main_view - { - menubar=r_apclplugin_main_menubar; - cba=r_apclplugin_softkeys_options_back; - } - -RESOURCE LISTBOX r_apcontrol_listbox -{ - flags = EAknListBoxSelectionList; -} -//---------------------------------------------------- -// -// r_apn_name_query -// -// -//---------------------------------------------------- -// -RESOURCE DIALOG r_apn_name_query - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_DATA_QUERY - { - layout = EDataLayoutAllowEmptyInput; - label = qtn_acl_prmpt_apn_to_add; - control = EDWIN - { - maxlength = KMaxApnNameWitoutLabelLength; - default_case = EAknEditorLowerCase; - // accepts only ASCII - flags = EEikEdwinNoWrap; - avkon_flags = EAknEditorFlagLatinInputModesOnly; - }; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_qtn_vpn_main -// Caption for Plugin. -// -//---------------------------------------------------- -// -RESOURCE TBUF r_qtn_acl_menu_item { buf = qtn_acl_menu_item ; } - - -//End of File diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/group/apcontrollistplugin.mmp --- a/accesspointcontrol/apcontrollistplugin/group/apcontrollistplugin.mmp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2005 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: -* This is project specification file for the apcontrollistplugin. -* -* -*/ - -#include //this is needed for RESOURCE_FILES_DIR -#include - -CAPABILITY CAP_ECOM_PLUGIN -TARGET apcontrollistplugin.dll -TARGETTYPE PLUGIN -UID 0x10009D8D 0x10281BB4 -VENDORID VID_DEFAULT - -SOURCEPATH ../src -SOURCE apcontrollistapiwrapper.cpp -SOURCE apcontrollistbox.cpp -SOURCE apcontrollistboxmodel.cpp -SOURCE apcontrollistcapschange.cpp -SOURCE apcontrollistplugin.cpp -SOURCE apcontrollistplugincontainer.cpp -SOURCE apcontrollistpluginimplementationtable.cpp -SOURCE apcontrollistpluginlogger.cpp - -USERINCLUDE ../data - -// 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 - -SOURCEPATH ../data - -//ECOM resource definition -START RESOURCE 10281BB4.rss -TARGET apcontrollistplugin.rsc -END -// ECOM resource definition - -//apcontrollistplugin resources -START RESOURCE apcontrollistpluginrsc.rss -HEADER -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END - -LIBRARY hlplch.lib // for "Help" options menu -LIBRARY euser.lib -LIBRARY ecom.lib -LIBRARY efsrv.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY cone.lib -LIBRARY eikcoctl.lib -LIBRARY eikcore.lib -LIBRARY eikctl.lib -LIBRARY commonengine.lib//For RConeResourceLoader -LIBRARY GSFramework.lib -LIBRARY egul.lib // CGulIcon -LIBRARY aknskins.lib // AknsUtils.h -LIBRARY flogger.lib -LIBRARY GSEcomPlugin.lib -LIBRARY commonui.lib -LIBRARY aknnotify.lib -LIBRARY centralrepository.lib -LIBRARY etel.lib -LIBRARY etelmm.lib -LIBRARY customapi.lib -LIBRARY ws32.lib -LIBRARY FeatMgr.lib - - -// This is optional - used only by Codewarrior for convenience. -DOCUMENT 10281BB4.rss diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/group/apcontrollistpluginicons_dc.mk --- a/accesspointcontrol/apcontrollistplugin/group/apcontrollistpluginicons_dc.mk Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -# -# Copyright (c) 2003 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 APControlListPlugin -# - -ifeq (WINS,$(findstring WINS, $(PLATFORM))) -ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z -else -ZDIR=\epoc32\data\z -endif - - -TARGETDIR=$(ZDIR)\resource\apps -ICONTARGETFILENAME=$(TARGETDIR)\apcontrollistplugin.mif - -HEADERDIR=\epoc32\include -HEADERFILENAME=$(HEADERDIR)\apcontrollistplugin.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) \ - /c16,8 qgn_prop_set_conn_acl.bmp - -FREEZE : do_nothing - -SAVESPACE : do_nothing - -RELEASABLES : - @echo $(HEADERFILENAME)&& \ - @echo $(ICONTARGETFILENAME) - -FINAL : do_nothing diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/group/bld.inf --- a/accesspointcontrol/apcontrollistplugin/group/bld.inf Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2005 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: Build information for the APControlListsPlugin -* -*/ - - -#ifdef RD_GS_RENOVATION // This is the GS_RENOVATION - -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -// export iby files -../rom/APControlListPlugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(APControlListPlugin.iby) -../rom/APControlListPluginResources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(APControlListPluginResources.iby) - -// export localised loc file -../loc/apcontrollistplugin.loc MW_LAYER_LOC_EXPORT_PATH(apcontrollistplugin.loc) - -PRJ_MMPFILES -// gnumakefile apcontrollistpluginicons_dc.mk - -./apcontrollistplugin.mmp - -PRJ_EXTENSIONS - -START EXTENSION s60/mifconv -OPTION TARGETFILE apcontrollistplugin.mif -OPTION HEADERFILE apcontrollistplugin.mbg -OPTION SOURCES -c16,8 qgn_prop_set_conn_acl -END - -#endif - -// End of File diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistapiwrapper.h --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistapiwrapper.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,240 +0,0 @@ -/* -* Copyright (c) 2006 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: -* Wrapper class for asyncron calls in RMyPhone and RMyCustomAPI. -* -*/ - -#ifndef APCONTROLLISTAPIWRAPPER_H -#define APCONTROLLISTAPIWRAPPER_H - -// INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CAPControlListPlugin; - -// CLASS DECLARATION -/** -* Wrapper class for asyncron calls in RMyPhone and RMyCustomAPI. -*/ -class CAPControlListAPIWrapper : public CActive - { - private: - // Enum for the states checked in RunL() - enum TRequestType { EGetACLStatus, EAddAPN, EAddAPNSecurity, - ERemoveAPN, ERemoveAPNSecurity, EActivateACL, - EActivateACLSecurity, EDeactivateACL, - EDeactivateACLSecurity, EReadData, - EEnumerateAPN, ENoRequest}; - - public: - // Constructor and destructor - - /** - * Constructor. - * @param aPlugin reference to the view - * @param aPriority priority for CActive - */ - CAPControlListAPIWrapper(CAPControlListPlugin& aPlugin, - TInt aPriority = EPriorityStandard ); - /** - * Destructor. - */ - ~CAPControlListAPIWrapper(); - - // New functions - - /** - * Initialises iPhone and iCustomAPI members. - * Uses User::WaitForRequest - * because we need to know the ACL status before Visible() is called. - */ - void ConstructL(); - - // Primary functions for the API calls - // These are the functions for which security check is necessary. - // If the security was already checked they call the correspondig - // secondary function. If the security wasn't already checked they - // call the asyncron security check and let RunL call the correspondig - // secondary function when the security check is finished. - /** - * Add APN to the ACL list - */ - void AddAPNL(); - /** - * Remove APN from the ACL list which is currently selected in the - * listbox. - */ - void RemoveAPN(); - /** - * Activates the ACL list - */ - void ActivateACL(); - /** - * Deactivates the ACL list - */ - void DeActivateACL(); - - /** - * Gets the ACL status then reads the ACL list. - * If this call is succesfull then RunL calls EnumerateAPN - * then it calls DoReadData - */ - void ReadData(); - - /** - * Method for checking if plugin should be visible and used in - * the Connection settings. - * @return ETrue if plugin should be visible. - * @return EFalse if plugin should not be visible. - */ - TBool Visible() const; - - /** - * Method for checking if the ACL list is enabled or not. - * @return ETrue if the ACL list is enabled. - * @return EFalse if the ACL list is not enabled. - */ - TBool Enabled() const; - - /** - * Calls RMyPhone::NotifyIccAccessCapsChange - * Used by CAPControlListCapsChange class. This function is nescessary - * since iPhone is a private member. - */ - void NotifyIccAccessCapsChange(TRequestStatus& aReqStatus, - TUint32& aCaps); - /** - * Calls RTelSubSessionBase::CancelAsyncRequest - * Used by CAPControlListCapsChange class. This function is nescessary - * since iPhone is a private member. - */ - void CancelNotify(); - - // Functions from CActive - /** - * Closes API in case of Cancel() - */ - void DoCancel(); - /** - * Handles asynchronous function completion - */ - void RunL(); - - private: - // New functions - - /** - * Called from one of the primary functions for the API calls - * Calls RMmCustomAPI::CheckSecurityCode asyncron call. This functon is - * called only once. - * @param aRequest We need this to set the state so we'll know in RunL - * which primary function called it. - */ - void SecurityCheck( TRequestType aRequest ); - - // Secondary functions for the API calls - /** - * Secondary function for AddAPNL().Makes the asyncron call to - * add an APN to the ACL list. - * If the security was already checked it is called from AddAPNL. - * If the security was not checked it is called from the RunL() - * when RunL() is called for RMmCustomAPI::CheckSecurityCode() - */ - void DoAddAPNL(); - /** - * Secondary function for RemoveAPN().Makes the asyncron call to - * remove an APN from the ACL list. - * If the security was already checked it is called from AddAPNL. - * If the security was not checked it is called from the RunL() - * when RunL() is called for RMmCustomAPI::CheckSecurityCode() - */ - void DoRemoveAPN(); - /** - * Secondary function for ActivateACL() and DeActivateACL().Makes the - * asyncron call to SetACLStatus either EAclStatusEnabled or - * EAclStatusDisabled. - * If the security was already checked it is called from ActivateACL() - * or DeActivateACL(). - * If the security was not checked it is called from the RunL() - * when RunL() is called for RMmCustomAPI::CheckSecurityCode() - * @param aAclStatus the status we want to set. - */ - void SetACLStatus( const RMobilePhone::TAPNControlListServiceStatus - aAPNControlListServiceStatus ); - - /** - * Reads the ACL list. - * Gets the number of items with an asyncron call. The actual reading - * of the APNs happens in DoReadData() - */ - void EnumerateAPN(); - - /** - * Reads an APN entry from the ACL list and puts it in the listbox. - * Called from RunL() when RunL() after ReadData() was called. It is - * called iSize times. - */ - void DoReadData(); - - /** - * Case EReadData in RunL - * Code removed from RunL to make it's size smaller - */ - void FinishReadDataL(); - - private: // Data - - //@var reference to the view - CAPControlListPlugin& iPlugin; - - // API objects - //@var RTelServer object for the ACL API - RTelServer iServer; - //@var RMobilePhone object for the ACL API - RMobilePhone iPhone; - //@var RMmCustomAPI object for the ACL API - RMmCustomAPI iCustomAPI; - - //@var state to store which is the current request - TRequestType iRequest; - - //@var ACL status - RMobilePhone::TAPNControlListServiceStatus iAclStatus; - - //@var phone is online - TBool iConnAllowed; - - //@var security checked - TBool iSecurityChecked; - - //@var AP Name from the user input ( AddAPN2L() ) - HBufC* iAPN; - - //members for reading data ( ReadData() ReadData2() ) - //@var AP Name in the form expected by the API - RMobilePhone::TAPNEntryV3 iApn; - //@var iApn packaged - RMobilePhone::TAPNEntryV3Pckg iApnPKG; - //@var size of the ACL list - TUint32 iSize; - //@var index of item currently read from the ACL list - TUint32 iIndex; - } ; - -#endif - -// End of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistbox.h --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistbox.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2006 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 CApControlListbox. -* -*/ - - -#ifndef APSELECTOR_LISTBOX_H -#define APSELECTOR_LISTBOX_H - -// INCLUDE FILES -#include -class CAPControlListPluginContainer; - - -// CLASS DECLARATION - -/** -* Listbox to display the list of access points. -* -*/ -NONSHARABLE_CLASS(CApControlListbox): public CAknSingleStyleListBox - { - public: // Construct / destruct - - /** - * Destructor. - */ - virtual ~CApControlListbox(); - - - /** - * Constructor. - */ - CApControlListbox(); - - public : - /** - * Handle key event. - * @param aKeyEvent The key event. - * @param aType Key event type. - * @return Response (was the key event consumed?). - */ - TKeyResponse OfferKeyEventL - ( const TKeyEvent& aKeyEvent, TEventCode aType ); - - /** - * Handle focus change. - * @param aDrawNow Draw now? - */ - void FocusChanged( TDrawNow aDrawNow ); - - - /** - * From CCoeControl. Handles a change to the control's resources. - * The types of resources handled are those which are shared across - * the environment, e.g. colours or fonts. - * Called if Skinning is changed. - * @param aType A message UID value. - */ - virtual void HandleResourceChange(TInt aType); - - /** - * Set EmptyText in the listbox - */ - void SetListEmptyTextL(); - }; - - -#endif - -// End of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistboxmodel.h --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistboxmodel.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2006 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 CApControlListboxModel. -* -*/ - - -#ifndef APCONTROL_LISTBOX_MODEL_H -#define APCONTROL_LISTBOX_MODEL_H - -// INCLUDES -#include - -// CLASS DECLARATION - -/** -* Data model for the access point listbox. It is an array of CApListItem -* pointers; items are owned. -*/ -NONSHARABLE_CLASS( CApControlListboxModel ): - public CTextListBoxModel, - public MDesCArray - { - public: // Construct / destruct - - /** - * Constructor. - * @param aGraphicType Graphic type - */ - CApControlListboxModel( ); - - /** - * Destructor. - */ - virtual ~CApControlListboxModel(); - - public: // from MDesCArray - - /** - * Get number of items in the model. - * @return Number of items. - */ - TInt MdcaCount() const; - - /** - * Text to be displayed for this item. - * @param aIndex Index of item. - * @return TPtrC for this item text (text owned by the model). - */ - TPtrC MdcaPoint( TInt aIndex ) const; - - }; - - -#endif - -// End of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistcapschange.h --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistcapschange.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* -* Copyright (c) 2006 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: Class for asyncron API call NotifyIccAccessCapsChange. -* -*/ - -#ifndef APCONTROLLISTCAPSCHANGE_H -#define APCONTROLLISTCAPSCHANGE_H - -// INCLUDES -#include - -// FORWARD DECLARATIONS -class CAPControlListPlugin; - -// CLASS DECLARATION -/** -* Wrapper class for asyncron syncron API call NotifyIccAccessCapsChange. -*/ -class CAPControlListCapsChange : public CActive - { - public: - // Constructor and destructor - - /** - * Constructor. - * @param aPlugin reference to the view - * @param aPriority priority for CActive - */ - CAPControlListCapsChange(CAPControlListPlugin& aPlugin, - TInt aPriority = EPriorityStandard ); - /** - * Destructor. - */ - ~CAPControlListCapsChange(); - - // New functions - /** - * Makes asyncron API call RMobilePhone::NotifyIccAccessCapsChange - */ - void NotifyCapsChange(); - - - // Functions from CActive - /** - * Called by Cancel() - */ - void DoCancel(); - /** - * Handles asynchronous function completion - */ - void RunL(); - - private: - //@var reference to the view - CAPControlListPlugin& iPlugin; - - //@var Caps set by NotifyIccAccessCapsChange - TUint32 iCaps; - } ; - -#endif - -// End of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugin.h --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugin.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,256 +0,0 @@ -/* -* Copyright (c) 2006 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: -* Header file for CAPControlListPlugin class. -* -*/ - -#ifndef APCONTROLLIST_PLUGIN_H__ -#define APCONTROLLIST_PLUGIN_H__ - -// System includes -#include -#include -#include - -// This UID is used for both the view UID and the ECOM plugin implementation UID. -const TUid KAPControlListPluginUid = { 0x10281BB5 }; - - -// Forward declarations -class CAPControlListPluginContainer; -class CAPControlListAPIWrapper; -class MUiRunnerObserver; -class MEikListBoxObserver; -class CAPControlListCapsChange; - -/** -* Interface class for AP Settings Handler UI. -*/ -class CAPControlListPlugin : public CGSPluginInterface, - public MEikListBoxObserver - { - public://Constructors & destructors - - /** - * First phase constructor - * Creates new Plugin and Launches CAPControlListPlugin - * with default parameters - * @param aAppUi pointer to the application Ui - */ - static CAPControlListPlugin* NewL( TAny* aInitParams ); - - /** - * Destructor - */ - inline ~CAPControlListPlugin(); - - public: // Functions from base class - - /** - * From CAknView - */ - TUid Id() const; - - /** - * From CAknView - */ - void HandleCommandL( TInt aCommand ); - - /** - * From CAknView - */ - void DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * From CAknView - */ - void DoDeactivate(); - - /** - * Exit plugin - */ - void ExitOnUSIMRemovalL(); - - - public: - - /** - * from CGSPluginInterface - */ - - /** - * Method for checking plugin's Uid. Uid identifies this GS plugin. Use - * same Uid as the ECOM plugin implementation Uid. - * - * @return PluginUid - */ - TUid PluginUid() const; - - /** - * Method for getting caption of this plugin. This should be the - * localized name of the settings view to be shown in parent view. - * - * @param aCaption pointer to Caption variable - */ - void GetCaptionL( TDes& aCaption ) const; - - /** - * Method for checking, if item has bitmap icon to be shown in list - * - * @return ETrue if plugin has icon bitmap - * @return EFalse if plugin does not have a bitmap - */ - TBool HasBitmap() const; - - /** - * Method for reading bitmap icon. - * - * @param aBitmap plugin bitmap - * @param aMask plugin icon bitmap mask - */ - void GetBitmapL( CFbsBitmap* aBitmap, CFbsBitmap* aMask ) const; - - /** - * Method for reading the ID of the plugin provider category. See - * - * @return Plugin provider category ID defined by - * - */ - TInt PluginProviderCategory() const; - - /** - * Creates a new icon of desired type. Override this to provide custom - * icons. Othervise default icon is used. Ownership of the created icon - * is transferred to the caller. - * - * Icon type UIDs (use these defined constants): - * KGSIconTypeLbxItem - ListBox item icon. - * KGSIconTypeTab - Tab icon. - * - * @param aIconType UID Icon type UID of the icon to be created. - * @return Pointer of the icon. NOTE: Ownership of this icon is - * transferred to the caller. - */ - CGulIcon* CreateIconL( const TUid aIconType ); - - /** - * Method for checking, if plugin should be visible and used in GS FW. - * (for example shown in listbox of the parent view). - * - * On default plugin is visible. Overwrite this function to enable or - * disable your plugin dynamically. - * - * @return ETrue if plugin should be visible in GS. - * @return EFalse if plugin should not be visible in GS. - */ - virtual TBool Visible() const; - - /** - * From MUiRunnerObserver - */ - void UiComplete( TInt aUirEvent ); - - /** - * From MEikListBoxObserver - */ - void HandleListBoxEventL( CEikListBox* aListBox, - TListBoxEvent aEventType ); - - /** - * Shows a information note. - * @param aResourceId Resource id of the showed text . - */ - void ShowInfoNoteL( TInt aResourceId ); - - /** - * Shows a confirmation note. - * @param aResourceId Resource id of the showed text . - */ - void ShowConfirmNoteL( TInt aResourceId ); - - /** - * Shows a confirmation note. - * @param aResourceId Resource id of the showed text . - */ - void ShowConfirmNoteAPNL( TInt aResourceId, TPtrC& aAPN ); - - /** - * Init menu pane - */ - virtual void DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ); - - /** - * Method for getting the container - * - * @return the container - * - */ - CAPControlListPluginContainer* Container(); - - /** - * Method for getting the APIWrapper - * - * @return the APIWrapper - * - */ - CAPControlListAPIWrapper* APIWrapper(); - - protected: - - /** - * Constructor - */ - CAPControlListPlugin(); - - private: - - /** - * Second phase constructor - */ - TAny ConstructL(); - - - private: //data - - //@var pointer to the container - owned - CAPControlListPluginContainer* iContainer; - - //@var Previous view. - TVwsViewId iPrevViewId; - - //@var resource loader - RConeResourceLoader iResources; - - //@var should the plugin should be visible and used in - // the Connection settings. - TBool iVisible; - - //@var class for wrapping asyncron API calls - owned - CAPControlListAPIWrapper* iAPIWrapper; - - //@var Wrapper class for asyncron syncron API call - //NotifyIccAccessCapsChange - owned - CAPControlListCapsChange* iChangeNotifier; - - // for the FeatureManager - TBool iHelp; - }; - -#endif //APCONTROLLIST_PLUGIN_H__ - -//End of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugin.hrh --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugin.hrh Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2006 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: -* This file contains declarations for resources of APControl List Plugin. -* The file can be included in C++ or resource file. -* -*/ - - -#ifndef APCONTROLLISTUI_HRH -#define APCONTROLLISTUI_HRH - -//Menu commands. -enum TAPControlListMenuCommands - { - EAPControlListCmdActivate = 7777, - EAPControlListCmdDeactivate, - EAPControlListCmdAdd, - EAPControlListCmdRemove, - EAPControlListCmdExit - }; - -enum { KMaxApnNameWitoutLabelLength = 99 }; //MaxApnName - 1 - -#endif // APCONTROLLISTUI_HRH - -// End of File diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugincontainer.h --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugincontainer.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -/* -* Copyright (c) 2006 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: -* Container class for APControl list plugin. -* -*/ - - -#ifndef APCONTROLLIST_PLUGIN_CONTAINER_H -#define APCONTROLLIST_PLUGIN_CONTAINER_H - -// INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CApControlListbox; -class CAknNavigationDecorator; -class CAknNavigationControlContainer; -class CAPControlListPlugin; -class MEikListBoxObserver; -class CApControlListboxModel; - -// UID of general settings app, in which help texts are included -const TUid KHelpUidAPControlList = { 0x100058EC }; - - -// CLASS DECLARATION - -/** -* CAPControlListPluginContainer container class -* container class for APControl list plugin -*/ -class CAPControlListPluginContainer : public CCoeControl - { - - public: - - /** - * Symbian OS constructor. - * - * @param aRect Listbox's rect. - * @param aListObserver pointer to the list observer - */ - void ConstructL( const TRect& aRect, - MEikListBoxObserver* aListObserver ); - - /** - * Destructor. - */ - ~CAPControlListPluginContainer(); - - public: // From CCoeControl - - /** - * From CCoeControl, gives back the count of contained controls. - */ - virtual TInt CountComponentControls() const; - - /** - * From CCoeControl, gives back the given indexed - * from contained controls. - * @param aIndex index - */ - CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * From CCoeControl, resizes the contained controls. - */ - virtual void SizeChanged(); - - /** - * From CCoeControl, processes the given key event. - * @param aKeyEvent The key event that occured. - * @param aType The type of key event that occured. - * @return @c EKeyWasConsumed if the event was processed, - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ); - - /** - * From CCoeControl, gets the control's help context. - * @param aContext help context. - */ - virtual void GetHelpContext( TCoeHelpContext& aContext ) const; - - /** - * From CCoeControl, used for sclable ui and landscape support. - * @param aType A message UID value. - */ - void HandleResourceChange( TInt aType ); - - /** - * From CoeControl,SizeChanged. - * @param aDrawNow Contains the value that was passed to it by - * @c SetFocus(). - */ - virtual void FocusChanged(TDrawNow aDrawNow); - - /** - * Adds to the ListBox - * @param newItem new item. - */ - void AddToListBoxL(TPtrC& newItem); - - /** - * Sets Current Item Index in the ListBox - * @param index Current item index. - */ - void SetCurrentItemIndex(TInt index); - - /** - * Gets current item index - * @return Current item index in the ListBox - */ - TInt CurrentItemIndex(); - - /** - * Removes current item from ListBox - */ - void RemoveFromListBoxL(); - - /** - * Gets the number of items in the list - * @return the number of items in the list - */ - TInt NumberOfItems() const; - - /** - * Writes text with ID to the NaviPane - */ - void WriteToNaviPaneL( TInt aResourceId ); - - private: - - /** - * Sets the title pane to the appropriate text. - * @param aResourceId Resource id of the showed text . - */ - void TitlePaneTextsL( TInt aResourceId ); - - public: - - //@var Listbox - owned - CApControlListbox* iListBox; - //@var Model for the listbox - owned - CApControlListboxModel* iModel; - - private: - - //@var For NaviPane. - owned - CAknNavigationDecorator* iNaviDecorator; - - //@var For NaviPane. - owned - CAknNavigationControlContainer* iNaviPane; - - }; - -#endif //APCONTROLLIST_PLUGIN_CONTAINER_H diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/inc/apcontrollistpluginlogger.h --- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistpluginlogger.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* -* Copyright (c) 2006 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: -* Logging macros for APControl List Plugin -* -*/ - - -#ifndef APCONROL_LIST_PLUGIN_LOGGER_H -#define APCONROL_LIST_PLUGIN_LOGGER_H - -// INCLUDES - -#ifdef _DEBUG - #include - #include - #include - - // TYPES - - enum TAPControlListPluginLogMask ///< Log mask bits. - { - ELogOff = 0x00000000, ///< Don't log. - EApUi = 0x00000001, ///< Log transaction activity. - ESelector = 0x00000002, ///< Log Selection activity. - EEditing = 0x00000004, ///< Log editing activity. - EModel = 0x00000008, ///< Log model activity. - - EProtection = 0x00000020, ///< Log protection activity. - EApItem = 0x00000040, ///< Log ApItem activity. - ECommons = 0x00000080, ///< Log transaction activity. - EActiveDb = 0x000000F0, ///< Log active db¬ific. activity. - ELogAll = 0xFFFFFFFF ///< Log all. - }; - - // MACROS - - /// Determines what to log. Construct this from TApEngineLogMask values. - #define APCONTROL_LIST_LOG_MASK ELogAll - /// Determines log detail (0==basic level). - #define APCONTROL_LIST_LOG_LEVEL 4 - - // CLASS DECLARATION - - /** - * Logger class. - */ -NONSHARABLE_CLASS( APControlListPluginLogger ) - { - public: // new methods - - /** - * Write formatted log. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aFmt Format string. - */ - static void Write - ( TInt32 aMask, TInt aLevel, - TRefByValue aFmt, ... ); - - /** - * Write formatted log. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aFmt Format string. - * @param aList Variable argument list. - */ - static void Write - ( - TInt32 aMask, - TInt aLevel, - TRefByValue aFmt, - VA_LIST& aList - ); - - /** - * Write formatted log. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aFmt Format string. - */ - static void Write - ( TInt32 aMask, TInt aLevel, - TRefByValue aFmt, ... ); - - /** - * Write formatted log. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aFmt Format string. - * @param aList Variable argument list. - */ - static void Write - ( - TInt32 aMask, - TInt aLevel, - TRefByValue aFmt, - VA_LIST& aList - ); - - /** - * Write hex dump. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aHeader Header string. - * @param aMargin Margin. - * @param aPtr Data. - * @param aLen Data length. - */ - static void HexDump - ( - TInt32 aMask, - TInt aLevel, - const TText* aHeader, - const TText* aMargin, - const TUint8* aPtr, - TInt aLen - ); - - /** - * Create log dir. - */ - static void FCreate(); - }; - - - #define CLOG_CREATE() {APControlListPluginLogger::FCreate();} - /// Write formatted to log. - #define CLOG( body ) APControlListPluginLogger::Write body - /// Write hex dump. - #define CDUMP( body ) APControlListPluginLogger::HexDump body - -#else /* not defined _DEBUG */ - - /// Do nothing (log disabled). - #define CLOG( body ) - /// Do nothing (log disabled). - #define CDUMP( body ) - #define CLOG_CREATE() - -#endif /* def _DEBUG */ - -#endif /* def APCONROL_LIST_PLUGIN_LOGGER_H */ diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/loc/apcontrollistplugin.loc --- a/accesspointcontrol/apcontrollistplugin/loc/apcontrollistplugin.loc Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* -* Copyright (c) 2006 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: -* Localization strings for Plugin -* -*/ - - -// LOCALISATION STRINGS - -//d:Text of a list item in Connection view's list -//d:Item opens APN control list view -//l:list_single_large_graphic_pane_t1 -//r:3.1 -// -#define qtn_acl_menu_item "Access point name (APN) control list" - - -//d:Title pane text of the APN control list view -//l:title_pane_t2/opt12 -//r:3.1 -// -#define qtn_acl_title "APN control list" - -//d:Text of the wait window while the program reads the info from the SIM card -//l:popup_note_wait_window -//r:3.1 -// -#define qtn_acl_wait_reading_sim "Reading info from SIM card" - -//d:Text in a note window -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_info_not_active "APN control list not active" - -//d:Text in a note window -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_info_active "APN control list is activated" - -//d:Text in the navi text pane pane when the control is not active -//l:navi_text_pane_t1 -//r:3.1 -// -#define qtn_acl_navi_not_active "Control not active" - -//d:Text in the navi text pane pane when the control is active -//l:navi_text_pane_t1 -//r:3.1 -// -#define qtn_acl_navi_active "Control active" - -//d:This is the text in the ABC column when when the list is empty -//l:main_pane_empty_t1/opt2 -//r:3.1 -// -#define qtn_acl_empty_view_primary "(no APNs)" - -//d:This is the secondary text in the ABC column when when the list is empty -//l:main_list_empty_pane/opt2 -//r:3.1 -// -#define qtn_acl_empty_view_secondary "Select Add APN from Options menu to add it to control list" - -//d:Command in options menu. -//d:Activates the currently selected list item. -//l:list_single_pane_t1_cp2 -//r:3.1 -// -#define qtn_acl_options_activate_control "Activate control" - -//d:Command in options menu. -//d:Deactivates the currently selected list item. -//l:list_single_pane_t1_cp2 -//r:3.1 -// -#define qtn_acl_options_deactivate_control "Deactivate control" - -//d:If the APN control list is activated -//d:this note is displayed. -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_conf_control_activated "APN control list activated" - -//d:If the APN control list is deactivated -//d:this note is displayed. -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_conf_control_deactivated "APN control list deactivated" - -//d:Command in options menu. -//d:Adds an APN manually -//l:list_single_pane_t1_cp2 -//r:3.1 -// -#define qtn_acl_options_add_apn_manually "Add APN manually" - -//d:Text in data query window -//d:text of the data query window with wich is possible to add APN manually -//l:popup_query_data_window -//r:3.1 -// -#define qtn_acl_prmpt_apn_to_add "APN to add:" - -//d:Text in the popup window whics comes up when the APN is -//d:added to the control list -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_conf_apn_added "APN '%U' added to control list" - -//d:Text in the popup window whics comes up when a Network-provided APN is -//d:added to the control list -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_conf_nw_provided_apn_added "Network-provided APN added to control list" - -//d:Command in options menu. -//d:Removes currently selected list item from the list. -//l:list_single_pane_t1_cp2 -//r:3.1 -// -#define qtn_acl_options_remove "Remove" - -//d:Text in the popup window whics comes up when -//d:the APN is removed from list -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_conf_apn_removed "APN removed from list" - -//d:APN name for network-provided APN in the list -//l:list_single_pane_t1 -//r:3.1 -// -#define qtn_acl_network_provided_apn "Network-provided APN" - -//d:Text in a note window -//l:popup_note_window -//r:3.1 -// -#define qtn_acl_err_invalid_input "Invalid input value" - -// End of File - - diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/rom/APControlListPlugin.iby --- a/accesspointcontrol/apcontrollistplugin/rom/APControlListPlugin.iby Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2006 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: Image description file for project APControlListPlugin -* -*/ - - -#ifndef __APControlListPLUGIN_IBY__ -#define __APControlListPLUGIN_IBY__ - -#ifdef __PROTOCOL_WCDMA -#ifdef _DEBUG -ECOM_PLUGIN_UDEB(APControlListPlugin.DLL,10281BB4.rsc) -SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,APControlListplugin) -#else -ECOM_PLUGIN(APControlListPlugin.DLL,10281BB4.rsc) -SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,APControlListplugin) -#endif -#endif //__PROTOCOL_WCDMA - -#endif __APControlListPLUGIN_IBY__ \ No newline at end of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/rom/APControlListPluginResources.iby --- a/accesspointcontrol/apcontrollistplugin/rom/APControlListPluginResources.iby Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2006 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: Image description file for project APControlListPlugin -* -*/ - - -#ifndef __APControlListPLUGIN_RESOURCES_IBY__ -#define __APControlListPLUGIN_RESOURCES_IBY__ - -#ifdef __PROTOCOL_WCDMA -data=DATAZ_\RESOURCE_FILES_DIR\APControlListPluginRsc.rsc RESOURCE_FILES_DIR\APControlListPluginRsc.rsc -#endif //__PROTOCOL_WCDMA - -#endif __APControlListPLUGIN_RESOURCES_IBY__ \ No newline at end of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistapiwrapper.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistapiwrapper.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,709 +0,0 @@ -/* -* Copyright (c) 2006 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: Class for asyncron calls. -* -*/ - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include - -#include "apcontrollistapiwrapper.h" -#include "apcontrollistpluginlogger.h" -#include "apcontrollistplugincontainer.h" -#include "apcontrollistplugin.h" -#include "apcontrollistbox.h" -#include "centralrepository.h" -#include "CoreApplicationUIsSDKCRKeys.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAPControlListAPIWrapper::CAPControlListAPIWrapper -// Description: CAPControlListAPIWrapper constructer -// ----------------------------------------------------------------------------- -// -CAPControlListAPIWrapper::CAPControlListAPIWrapper( - CAPControlListPlugin& aPlugin, TInt aPriority ) : - CActive( aPriority ), - iPlugin(aPlugin), - iApnPKG(iApn) - { - CActiveScheduler::Add( this ); - } - -// -//----------------------------------------------------------------------------- -// CAPControlListAPIWrapper:: CAPControlListAPIWrapper -// Description: CAPControlListAPIWrapper Destructer -// ----------------------------------------------------------------------------- -// -CAPControlListAPIWrapper::~CAPControlListAPIWrapper() - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListAPIWrapper::~CAPControlListAPIWrapper" ) ) ); - Cancel(); - iCustomAPI.Close(); - iPhone.Close(); - iServer.Close(); - delete iAPN; - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::~CAPControlListAPIWrapper" ) ) ); - } - -// -//----------------------------------------------------------------------------- -// CAPControlListAPIWrapper::RequestFunction -// Description: Request Function for CAPControlListAPIWrapper -// ---------------------------------------------------------------------------- -// -void CAPControlListAPIWrapper::SecurityCheck(TRequestType aRequest) - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListAPIWrapper::SecurityCheck" ) ) ); - if( !IsActive() ) - { - iCustomAPI.CheckSecurityCode (iStatus, - RMmCustomAPI::ESecurityCodePin2 ); - iRequest = aRequest; - SetActive(); - } - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::SecurityCheck" ) ) ); - } - - -// -//----------------------------------------------------------------------------- -// CAPControlListAPIWrapper::DoCancel -// Description: This is called from CActive's Cancel -//----------------------------------------------------------------------------- -// -void CAPControlListAPIWrapper::DoCancel() - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListAPIWrapper::DoCancel" ) ) ); - CLOG( ( ESelector, 0, _L( "Current request: %d" ), iRequest ) ); - switch(iRequest) - { - case EEnumerateAPN: - iPhone.CancelAsyncRequest(EMobilePhoneEnumerateAPNEntries); - break; - case EReadData: - iPhone.CancelAsyncRequest(EMobilePhoneGetAPNname); - break; - - // Since there are no enums for these, can't cancel - case EAddAPNSecurity: - case EAddAPN: - case ERemoveAPNSecurity: - case ERemoveAPN: - case EActivateACLSecurity: - case EActivateACL: - case EDeactivateACLSecurity: - case EDeactivateACL: - break; - - case ENoRequest: // no active request - break; - default: - // This could be only in case of programming error - CLOG( ( ESelector, 0, _L( "State Error: %d" ), iRequest ) ); - break; - } - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::DoCancel" ) ) ); - } - -// -//----------------------------------------------------------------------------- -// CAPControlListAPIWrapper::FinishReadDataL -// Description: Case EReadData in RunL -//----------------------------------------------------------------------------- -// -void CAPControlListAPIWrapper::FinishReadDataL() - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListAPIWrapper::FinishReadDataL" ) ) ); - if (iIndex > 0) - { - iApn = iApnPKG(); - // lablel lengthes must be replaced with dots and - // removed from the beginnig - if ( iApn.iApn.Length() ) - { - TUint8 lablelLength = (TUint8)(iApn.iApn[0]); - TUint8 wholeLength = lablelLength; - iApn.iApn.Delete(0,1); - while (iApn.iApn.Length() > wholeLength) - { - wholeLength = wholeLength + - (TUint8)(iApn.iApn[lablelLength]) + 1; - iApn.iApn[lablelLength] = '.'; - lablelLength = wholeLength;//place of next dot - } - HBufC* buf = HBufC::NewLC( RMobilePhone::KMaxApnName ); - buf->Des().Copy( iApn.iApn ); - TPtrC itemPtr(buf->Des()); - iPlugin.Container()->AddToListBoxL(itemPtr); - CleanupStack::PopAndDestroy( buf ); - } - else - { - // Empty APN means network provided APN - HBufC* buf = StringLoader::LoadLC ( - R_QTN_ACL_NETWORK_PROVIDED_APN ); - TPtrC nPtr(buf->Des()); - iPlugin.Container()->AddToListBoxL(nPtr); - CleanupStack::PopAndDestroy( buf ); - } - } - if (iIndex < iSize) - { - DoReadData(); - iIndex++; - } - else - { - iRequest = ENoRequest; - if ( iSize > 0 ) - { - iPlugin.Container()->SetCurrentItemIndex(0); - } - } - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::FinishReadDataL" ) ) ); - } - -// -//----------------------------------------------------------------------------- -// CAPControlListAPIWrapper::RunL -// Description: CActive::RunL implementation which will either stop the -// Scheduler or increment the count -//----------------------------------------------------------------------------- -// -void CAPControlListAPIWrapper::RunL() - { - if ( iStatus != KErrNone ) - { - CLOG( ( ESelector, 0, _L( "Bad RequestStatus: %d for request: %d" ), - iStatus.Int(), iRequest) ); - - // KErrOverflow can occur during APN adding process, if the APN list is full - // or there is no space for an additional entry in SIM card. - if( iStatus.Int() == KErrOverflow && iRequest == EAddAPN) - { - HBufC* text = StringLoader::LoadLC ( - R_QTN_ACL_ERR_SIM_CARD ); - CAknErrorNote* note = new ( ELeave ) CAknErrorNote( - ETrue ); - note->ExecuteLD( *text ); - - CleanupStack::PopAndDestroy( text ); - } - - iRequest = ENoRequest; - - return; - } - switch(iRequest) - { - case EGetACLStatus: - { - CLOG( ( ESelector, 0, _L( "EGetACLStatus OK" ) ) ); -#ifdef _DEBUG - if (iAclStatus == RMobilePhone::EAPNControlListServiceEnabled) - { - CLOG( ( ESelector, 0, _L( "iAclStatus == EAclStatusEnabled" ) ) ); - } - else if (iAclStatus == RMobilePhone::EAPNControlListServiceDisabled) - { - CLOG( ( ESelector, 0, _L( "iAclStatus == EAclStatusDisabled" ) ) ); - } - else - { - CLOG( ( ESelector, 0, _L( "iAclStatus is bad!!!" ) ) ); - } -#endif - if ( Enabled() ) - { - iPlugin.ShowInfoNoteL(R_QTN_ACL_INFO_ACTIVE); - iPlugin.Container()->WriteToNaviPaneL(R_QTN_ACL_NAVI_ACTIVE); - } - else - { - iPlugin.ShowInfoNoteL(R_QTN_ACL_INFO_NOT_ACTIVE); - iPlugin.Container()->WriteToNaviPaneL(R_QTN_ACL_NAVI_NOT_ACTIVE); - } - EnumerateAPN(); - break; - } - case EAddAPNSecurity: - CLOG( ( ESelector, 0, _L( "EAddAPNSecurity OK" ) ) ); - iSecurityChecked = ETrue; - DoAddAPNL(); - break; - case EAddAPN: - { - iRequest = ENoRequest; - CLOG( ( ESelector, 0, _L( "EAddAPN OK" ) ) ); - TPtrC tptrc(iAPN->Des()); - if (tptrc.Length()) - { - iPlugin.Container()->AddToListBoxL(tptrc); - iPlugin.ShowConfirmNoteAPNL(R_QTN_ACL_CONF_APN_ADDED, tptrc); - } - else - { - HBufC* buf = StringLoader::LoadLC ( - R_QTN_ACL_NETWORK_PROVIDED_APN ); - TPtrC itemPtr(buf->Des()); - iPlugin.Container()->AddToListBoxL(itemPtr); - CleanupStack::PopAndDestroy( buf ); - iPlugin.ShowConfirmNoteL(R_QTN_ACL_CONF_NWP_APN_ADDED); - } - break; - } - case ERemoveAPNSecurity: - CLOG( ( ESelector, 0, _L( "ERemoveAPNSecurity OK" ) ) ); - iSecurityChecked = ETrue; - DoRemoveAPN(); - break; - case ERemoveAPN: - iRequest = ENoRequest; - CLOG( ( ESelector, 0, _L( "ERemoveAPN OK" ) ) ); - iPlugin.ShowConfirmNoteL(R_QTN_ACL_CONF_APN_REMOVED); - iPlugin.Container()->RemoveFromListBoxL(); - break; - case EActivateACLSecurity: - CLOG( ( ESelector, 0, _L( "EActivateACLSecurity OK" ) ) ); - iSecurityChecked = ETrue; - SetACLStatus( RMobilePhone::EAPNControlListServiceEnabled ); - break; - case EActivateACL: - iRequest = ENoRequest; - CLOG( ( ESelector, 0, _L( "EActivateACL OK" ) ) ); - iAclStatus = RMobilePhone::EAPNControlListServiceEnabled; - iPlugin.ShowConfirmNoteL(R_QTN_ACL_CONF_CONTROL_ACTIVATED); - iPlugin.Container()->WriteToNaviPaneL(R_QTN_ACL_NAVI_ACTIVE); - break; - case EDeactivateACLSecurity: - CLOG( ( ESelector, 0, _L( "EDeactivateACLSecurity OK" ) ) ); - iSecurityChecked = ETrue; - SetACLStatus( RMobilePhone::EAPNControlListServiceDisabled ); - break; - case EDeactivateACL: - iRequest = ENoRequest; - CLOG( ( ESelector, 0, _L( "EDeactivateACL OK" ) ) ); - iAclStatus = RMobilePhone::EAPNControlListServiceDisabled; - iPlugin.ShowConfirmNoteL(R_QTN_ACL_CONF_CONTROL_DEACTIVATED); - iPlugin.Container()->WriteToNaviPaneL(R_QTN_ACL_NAVI_NOT_ACTIVE); - break; - case EEnumerateAPN: - CLOG( ( ESelector, 0, _L( "EEnumerateAPN OK" ) ) ); - iRequest = EReadData; - FinishReadDataL(); - break; - case EReadData: - CLOG( ( ESelector, 0, _L( "EReadData OK" ) ) ); - FinishReadDataL(); - break; - default: - { - // This could be only in case of programming error - CLOG( ( ESelector, 0, _L( "State Error: %d" ), iRequest ) ); - User::Leave(KErrGeneral); - } - break; - } - } - - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::DoReadData -// --------------------------------------------------------- -void CAPControlListAPIWrapper::DoReadData() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::ReadData2" ) ) ); - if( !IsActive() ) - { - iRequest = EReadData; - iApn.iApn.Zero(); - iApn.iApn.SetMax(); - iPhone.GetAPNname(iStatus, iIndex, iApnPKG); - SetActive(); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::ReadData2" ) ) ); - } -// --------------------------------------------------------- -// CAPControlListAPIWrapper::ReadData -// --------------------------------------------------------- -void CAPControlListAPIWrapper::ReadData() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::ReadData" ) ) ); - if( !IsActive() ) - { - iRequest = EGetACLStatus; - iPhone.GetAPNControlListServiceStatus( iStatus, iAclStatus ); - SetActive(); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::ReadData" ) ) ); - } -// --------------------------------------------------------- -// CAPControlListAPIWrapper::ReadData -// --------------------------------------------------------- -void CAPControlListAPIWrapper::EnumerateAPN() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::ReadData" ) ) ); - if( !IsActive() ) - { - iRequest = EEnumerateAPN; - iIndex = 0; - iPhone.EnumerateAPNEntries(iStatus, iSize); - SetActive(); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::ReadData" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::DeActivateACLL() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::DeActivateACL() - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListAPIWrapper::DeActivateACLL" ) ) ); - if (iSecurityChecked) - { - SetACLStatus( RMobilePhone::EAPNControlListServiceDisabled ); - } - else - { - SecurityCheck(EDeactivateACLSecurity); - } - - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::DeActivateACLL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::ActivateACLL() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::ActivateACL() - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListAPIWrapper::ActivateACLL" ) ) ); - if (iSecurityChecked) - { - SetACLStatus( RMobilePhone::EAPNControlListServiceEnabled ); - } - else - { - SecurityCheck(EActivateACLSecurity); - } - - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::ActivateACLL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::SetACLStatus() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::SetACLStatus( const - RMobilePhone::TAPNControlListServiceStatus aAPNControlListServiceStatus ) - { - CLOG( ( ESelector, 0, - _L( "-> CAPControlListAPIWrapper::SetACLStatus" ) ) ); - if( !IsActive() ) - { - iPhone.SetAPNControlListServiceStatus( iStatus, - aAPNControlListServiceStatus ); - if ( aAPNControlListServiceStatus == - RMobilePhone::EAPNControlListServiceEnabled ) - { - iRequest = EActivateACL; - } - else - { - iRequest = EDeactivateACL; - } - SetActive(); - } - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::SetACLStatus" ) ) ); - } - - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::RemoveAPN() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::RemoveAPN() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::RemoveAPNL" ) ) ); - if( iPlugin.Container()->NumberOfItems() > 0) - { - if (iSecurityChecked) - { - DoRemoveAPN(); - } - else - { - SecurityCheck(ERemoveAPNSecurity); - } - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::RemoveAPNL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::DoRemoveAPN() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::DoRemoveAPN() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::RemoveAPN2L" ) ) ); - if( !IsActive() ) - { - TInt index = iPlugin.Container()->CurrentItemIndex(); - iPhone.DeleteAPNName( iStatus, index ); - iRequest = ERemoveAPN; - SetActive(); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::RemoveAPN2L" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::AddAPNL() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::AddAPNL() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::AddAPNL" ) ) ); - if (iSecurityChecked) - { - DoAddAPNL(); - } - else - { - SecurityCheck(EAddAPNSecurity); - } - - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::AddAPNL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::DoAddAPNL() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::DoAddAPNL() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::DoAddAPNL" ) ) ); - if( !IsActive() ) - { - delete iAPN; - iAPN = NULL; - iAPN = HBufC::NewL( RMobilePhone::KMaxApnName ); - TPtr16 ptr( iAPN->Des() ); - CAknQueryDialog* dlg = - CAknQueryDialog::NewL( ptr, CAknQueryDialog::ENoTone ); - - TBool notCanceled = EFalse; - - // Ask the user until either the input is valid or canceled - while ( dlg->ExecuteLD( R_APN_NAME_QUERY ) ) - { - - TBool validInput = ETrue; - - for (TInt index = 0; index < ptr.Length(); index++) - { - TChar inputchar = ptr[index]; - // For ACL only 0-9, A-Z, a-z, '-' and '.' are valid - if (! ( ('0' <= inputchar && inputchar <= '9') || - ('A' <= inputchar && inputchar <= 'Z') || - ('a' <= inputchar && inputchar <= 'z') || - inputchar == '-' || inputchar == '.' ) ) - { - validInput = EFalse; - break; - } - } - - if ( validInput ) - { - notCanceled = ETrue; - break; - } - else - { - HBufC* text = StringLoader::LoadLC ( - R_QTN_ACL_ERR_INVALID_INPUT ); - CAknErrorNote* note = new ( ELeave ) CAknErrorNote( - ETrue ); - note->ExecuteLD( *text ); - - CleanupStack::PopAndDestroy( text ); - - dlg = - CAknQueryDialog::NewL( ptr, CAknQueryDialog::ENoTone ); - - } - } - - if ( notCanceled ) - { - - // lablel lengthes must be added in place of dots and at the - // beginnig - _LIT8(KFormat,"%c%S"); - iApn.iApn.SetMax(); - iApn.iApn.Zero(); - if ( iAPN->Length() ) - { - TBufC8 buffer; - TBufC8 buffer2; - buffer.Des().Copy( iAPN->Des() ); - TInt index = buffer.Des().Find(_L8(".")); - - while (index != KErrNotFound) - { - buffer2.Des().Copy( buffer.Des().Left( index ) ); - TPtr8 tmp = buffer2.Des(); - iApn.iApn.AppendFormat(KFormat, index, &tmp); - buffer.Des().Delete(0,index+1); - index = buffer.Des().Find(_L8(".")); - } - TPtr8 tmp = buffer.Des(); - iApn.iApn.AppendFormat(KFormat, buffer.Length(), &tmp); - } - else - { - _LIT8(KEmpty8,""); - iApn.iApn.Copy(KEmpty8); - } - - CLOG( ( ESelector, 0, _L( "Size: %d" ), iApn.iApn.Size() ) ); - iPhone.AppendAPNName( iStatus, iApnPKG ); - - iRequest = EAddAPN; - SetActive(); - } - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::DoAddAPNL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::Visible -// --------------------------------------------------------- -TBool CAPControlListAPIWrapper::Visible() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::Visible" ) ) ); - if (!iConnAllowed) - { - return EFalse; // phone is in off-line mode - } - TUint32 aCaps; - iPhone.GetIccAccessCaps(aCaps); - CLOG( ( ESelector, 0, _L( "%d" ), aCaps) ); - if (aCaps & RMobilePhone::KCapsUSimAccessSupported) - { - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::Visible 2" ) ) ); - return ETrue; - } - else - { - CLOG( ( ESelector, 0, _L( - "<- CAPControlListAPIWrapper::Visible 3" ) ) ); - return EFalse; - } - } -// --------------------------------------------------------- -// CAPControlListAPIWrapper::Enabled -// --------------------------------------------------------- -TBool CAPControlListAPIWrapper::Enabled() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::Enabled" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::Enabled" ) ) ); - if ( iAclStatus == RMobilePhone::EAPNControlListServiceEnabled ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -// --------------------------------------------------------- -// CAPControlListAPIWrapper::ConstructL() -// --------------------------------------------------------- -// -void CAPControlListAPIWrapper::ConstructL() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListAPIWrapper::ConstructL" ) ) ); - // init RMobilePhone and RMmCustomAPI - _LIT (KTsyName,"phonetsy.tsy"); - RTelServer::TPhoneInfo info; - RPhone::TLineInfo lineInfo; - User::LeaveIfError( iServer.Connect() ); - User::LeaveIfError( iServer.LoadPhoneModule( KTsyName ) ); - User::LeaveIfError( iServer.GetPhoneInfo( 0, info ) ); - User::LeaveIfError( iPhone.Open(iServer, info.iName) ); - User::LeaveIfError( iPhone.Initialise() ); - User::LeaveIfError( iCustomAPI.Open(iPhone) ); - - CRepository* aRepository = CRepository::NewL( KCRUidCoreApplicationUIs ); - aRepository->Get( KCoreAppUIsNetworkConnectionAllowed, iConnAllowed); - delete aRepository; - - if (!iAPN) - { - iAPN = HBufC::NewL( RMobilePhone::KMaxApnName ); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListAPIWrapper::ConstructL" ) ) ); - } - -// ---------------------------------------------------------- -// CAPControlListPlugin::NotifyIccAccessCapsChange() -// ---------------------------------------------------------- -// -void CAPControlListAPIWrapper::NotifyIccAccessCapsChange( - TRequestStatus& aReqStatus, TUint32& aCaps) - { - CLOG( ( ESelector, 0, - _L( "-> CAPControlListAPIWrapper::NotifyIccAccessCapsChange" ) ) ); - iPhone.NotifyIccAccessCapsChange( aReqStatus, aCaps ); - CLOG( ( ESelector, 0, - _L( "<- CAPControlListAPIWrapper::NotifyIccAccessCapsChange" ) ) ); - } -// ---------------------------------------------------------- -// CAPControlListPlugin::CancelNotify() -// ---------------------------------------------------------- -// -void CAPControlListAPIWrapper::CancelNotify() - { - CLOG( ( ESelector, 0, - _L( "-> CAPControlListAPIWrapper::CancelNotify" ) ) ); - iPhone.CancelAsyncRequest(EMobilePhoneNotifyIccAccessCapsChange); - CLOG( ( ESelector, 0, - _L( "<- CAPControlListAPIWrapper::CancelNotify" ) ) ); - } diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistbox.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistbox.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* -* Copyright (c) 2006 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 ApControlListbox. -* -*/ - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include - -#include "apcontrollistbox.h" -#include "apcontrollistboxmodel.h" -#include "apcontrollistpluginlogger.h" -#include "apcontrollistplugin.h" -#include "apcontrollistapiwrapper.h" - -// ================= MEMBER FUNCTIONS ======================= - - -// --------------------------------------------------------- -// CApControlListbox::CApControlListbox -// --------------------------------------------------------- -// -CApControlListbox::CApControlListbox() - { - CLOG( ( ESelector, 0, - _L( "<-> CApControlListbox::CApControlListbox" ) ) ); - } - - -// --------------------------------------------------------- -// CApControlListbox::~CApControlListbox -// --------------------------------------------------------- -// -CApControlListbox::~CApControlListbox() - { - CLOG( ( ESelector, 0, - _L( "<-> CApControlListbox::~CApControlListbox" ) ) ); - } - - -// --------------------------------------------------------- -// CApControlListbox::OfferKeyEventL -// --------------------------------------------------------- -// -TKeyResponse CApControlListbox::OfferKeyEventL -( const TKeyEvent& aKeyEvent, TEventCode aType ) - { - CLOG( ( ESelector, 0, _L( "-> CApControlListbox::OfferKeyEventL" ) ) ); - - TKeyResponse retval ( EKeyWasConsumed ); - - if ( aKeyEvent.iCode == EKeyOK && - !( aKeyEvent.iModifiers & EModifierShift ) - ) - { - // Enter pressed (not Shift-Enter). This will report an - // EEnterKeyPressed event sent to the observer (the view), which may - // delete this listbox. The code which processes keypresses by - // default, will continue (on the already deleted listbox), and - // will crash. So we grab this keypress here, and generate the - // same event, but after that, quit immediately. - ReportListBoxEventL( MEikListBoxObserver::EEventEnterKeyPressed ); - // By now the listbox may have been deleted. - // Do not access it after this point. - } - else if ( aKeyEvent.iCode == EKeyBackspace ) - { - static_cast(iListBoxObserver)->APIWrapper()-> - RemoveAPN(); - } - else - { - retval = CAknSingleStyleListBox::OfferKeyEventL - ( aKeyEvent, aType ); - } - - CLOG( ( ESelector, 0, _L( "<- CApControlListbox::OfferKeyEventL" ) ) ); - - return retval; - } - - - -// --------------------------------------------------------- -// CApControlListbox::FocusChanged -// --------------------------------------------------------- -// -void CApControlListbox::FocusChanged( TDrawNow aDrawNow ) - { - CLOG( ( ESelector, 0, _L( "-> CApControlListbox::FocusChanged" ) ) ); - - // Do nothing until the listbox is fully constructed - // The dialogpage sets the focus before calling ConstructL - if ( iView ) - { - CAknSingleStyleListBox::FocusChanged( aDrawNow ); - } - - CLOG( ( ESelector, 0, _L( "<- CApControlListbox::FocusChanged" ) ) ); - } - - -// --------------------------------------------------------- -// CApControlListbox::HandleResourceChange -// --------------------------------------------------------- -// -void CApControlListbox::HandleResourceChange(TInt aType) - { - CLOG( ( ESelector, 0, _L( - "-> CApControlListbox::HandleResourceChange" ) ) ); - if ( aType == KAknsMessageSkinChange ) - { CAknSingleStyleListBox::HandleResourceChange( aType ); - SizeChanged(); - } - - CAknSingleStyleListBox::HandleResourceChange( aType ); - CLOG( ( ESelector, 0, _L( - "<- CApControlListbox::HandleResourceChange" ) ) ); - } -// --------------------------------------------------------- -// CApControlListbox::AddToListBoxL -// --------------------------------------------------------- -// -void CApControlListbox::SetListEmptyTextL() - { - CLOG( ( ESelector, 0, _L( - "-> CApControlListbox::SetListEmptyTextL" ) ) ); - HBufC* primary = - iEikonEnv->AllocReadResourceLC( R_QTN_ACL_EMPTY_VIEW_PRIMARY ); -// _LIT( KCmNewLine, "\n" ); -// primary->Des().Append( KCmNewLine ); - HBufC* secondary = - iEikonEnv->AllocReadResourceLC( R_QTN_ACL_EMPTY_VIEW_SECONDARY ); - CDesCArrayFlat* items = new (ELeave) CDesCArrayFlat(2); - CleanupStack::PushL(items); - items->AppendL(primary->Des()); - items->AppendL(secondary->Des()); - HBufC* emptyText = - StringLoader::LoadLC( R_TWO_STRING_FOR_EMPTY_VIEW , *items); - View()->SetListEmptyTextL( *emptyText ); - CleanupStack::PopAndDestroy( emptyText ); - CleanupStack::PopAndDestroy( items ); - CleanupStack::PopAndDestroy( secondary ); - CleanupStack::PopAndDestroy( primary ); - - CLOG( ( ESelector, 0, _L( - "<- CApControlListbox::SetListEmptyTextL" ) ) ); - } - -// End of File diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistboxmodel.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistboxmodel.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2006 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 ApControlListboxModel. -* -*/ - - -// INCLUDE FILES -#include -#include - -#include "apcontrollistboxmodel.h" -#include "apcontrollistpluginlogger.h" - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CApControlListboxModel::CApControlListboxModel -// --------------------------------------------------------- -// -CApControlListboxModel::CApControlListboxModel() -:CTextListBoxModel() - { - CLOG( ( ESelector, 0, _L( - "-> CApControlListboxModel::CApControlListboxModel" ) ) ); - CLOG( ( ESelector, 0, _L( - "<- CApControlListboxModel::CApControlListboxModel" ) ) ); - } - - -// --------------------------------------------------------- -// CApControlListboxModel::~CApControlListboxModel -// --------------------------------------------------------- -// -CApControlListboxModel::~CApControlListboxModel() - { - CLOG( ( ESelector, 0, _L( - "-> CApControlListboxModel::~CApControlListboxModel" ) ) ); - CLOG( ( ESelector, 0, _L( - "<- CApControlListboxModel::~CApControlListboxModel" ) ) ); - } - - - -// --------------------------------------------------------- -// CApControlListboxModel::MdcaCount -// --------------------------------------------------------- -// -TInt CApControlListboxModel::MdcaCount() const - { - CLOG( ( ESelector, 0, _L( "-> CApControlListboxModel::MdcaCount" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CApControlListboxModel::MdcaCount" ) ) ); - return NumberOfItems(); - } - - -// --------------------------------------------------------- -// CApControlListboxModel::MdcaPoint -// --------------------------------------------------------- -// - -TPtrC CApControlListboxModel::MdcaPoint( TInt aIndex ) const - { - CLOG( ( ESelector, 0, _L( "-> CApControlListboxModel::MdcaPoint" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CApControlListboxModel::MdcaPoint" ) ) ); - return ItemText(aIndex); - } - - - - -// End of File diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistcapschange.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistcapschange.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* -* Copyright (c) 2006 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: Class for asyncron calls. -* -*/ - - -// INCLUDE FILES -#include - -#include "apcontrollistcapschange.h" -#include "apcontrollistplugin.h" -#include "apcontrollistapiwrapper.h" -#include "apcontrollistpluginlogger.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAPControlListCapsChange::CAPControlListCapsChange -// Description: CAPControlListCapsChange constructer -// ----------------------------------------------------------------------------- -// -CAPControlListCapsChange::CAPControlListCapsChange( - CAPControlListPlugin& aPlugin, TInt aPriority ) : - CActive( aPriority ), - iPlugin(aPlugin) - { - CActiveScheduler::Add( this ); - } - -// -//----------------------------------------------------------------------------- -// CAPControlListCapsChange:: CAPControlListCapsChange -// Description: CAPControlListCapsChange Destructer -// ----------------------------------------------------------------------------- -// -CAPControlListCapsChange::~CAPControlListCapsChange() - { - Cancel(); - } - - - -// -//----------------------------------------------------------------------------- -// CAPControlListCapsChange::DoCancel -// Description: This calls CActive's Cancel -//----------------------------------------------------------------------------- -// -void CAPControlListCapsChange::DoCancel() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListCapsChange::DoCancel" ) ) ); - iPlugin.APIWrapper()->CancelNotify(); - CLOG( ( ESelector, 0, _L( "<- CAPControlListCapsChange::DoCancel" ) ) ); - } - -// -//----------------------------------------------------------------------------- -// CAPControlListCapsChange::RunL -// Description: CActive::RunL implementation which will either stop the -// Scheduler or increment the count -//----------------------------------------------------------------------------- -// -void CAPControlListCapsChange::RunL() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListCapsChange::RunL" ) ) ); - CLOG( ( ESelector, 0, _L( "iStatus.Int(): %d"), iStatus.Int() ) ); - CLOG( ( ESelector, 0, _L( "iCaps: %d"), iCaps ) ); - if ( !(iCaps & RMobilePhone::KCapsUSimAccessSupported) ) - { - iPlugin.ExitOnUSIMRemovalL(); - } - else - { - iPlugin.APIWrapper()->NotifyIccAccessCapsChange( iStatus, iCaps ); - SetActive(); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListCapsChange::RunL" ) ) ); - } - - - -// --------------------------------------------------------- -// CAPControlListCapsChange::NotifyCapsChange() -// --------------------------------------------------------- -// -void CAPControlListCapsChange::NotifyCapsChange() - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListCapsChange::NotifyCapsChange" ) ) ); - if( !IsActive() ) - { - iPlugin.APIWrapper()->NotifyIccAccessCapsChange( iStatus, iCaps ); - SetActive(); - } - CLOG( ( ESelector, 0, _L( - "<- CAPControlListCapsChange::NotifyCapsChange" ) ) ); - } - diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistplugin.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistplugin.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,506 +0,0 @@ -/* -* Copyright (c) 2006 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: APControlListPlugin class. -* -*/ - - -// INCLUDE FILES - -// System includes -#include - -#include //for CListBox -#include -#include //for CAknInformationNote -#include -#include -#include -#include -#include -#include - -// User includes -#include "apcontrollistplugin.hrh" -#include "apcontrollistplugin.h" -#include "apcontrollistplugincontainer.h" -#include "apcontrollistpluginlogger.h" -#include "apcontrollistapiwrapper.h" -#include "apcontrollistcapschange.h" - -// CONSTANTS -// Resource file location constant -_LIT( KResourceFileName, "APControlListPluginRsc.rsc" ); - -// ROM folder -_LIT( KDriveZ, "z:" ); - -// Name of the MBM file containing icons -_LIT( KFileIcons, "apcontrollistplugin.mbm"); - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CAPControlListPlugin::NewL -// First phase constructor -// --------------------------------------------------------- -CAPControlListPlugin* CAPControlListPlugin::NewL( TAny* /*aInitParams*/ ) - { - CLOG_CREATE() - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::NewL" ) ) ); - CAPControlListPlugin* self = new ( ELeave ) CAPControlListPlugin(); - CleanupStack::PushL( self ); - - self->ConstructL( ); - - CleanupStack::Pop( self ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::NewL" ) ) ); - return self; - } - -// --------------------------------------------------------- -// CAPControlListPlugin::NewL -// Destructor -// --------------------------------------------------------- -CAPControlListPlugin::~CAPControlListPlugin() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::~CAPControlListPlugin" ) ) ); - if( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - } - if (iAPIWrapper) - { - delete iAPIWrapper; - } - if (iChangeNotifier) - { - delete iChangeNotifier; - } - iResources.Close(); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::~CAPControlListPlugin" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::Id -// --------------------------------------------------------- -TUid CAPControlListPlugin::Id() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::Id" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::Id" ) ) ); - return KAPControlListPluginUid; - } - -// --------------------------------------------------------- -// CAPControlListPlugin::HandleCommandL( TInt aCommand ) -// --------------------------------------------------------- -// -void CAPControlListPlugin::HandleCommandL( TInt aCommand ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::HandleCommandL" ) ) ); - switch ( aCommand ) - { - case EAknSoftkeyBack : - { - // Activate the view ( from GS ) that we - // are supposed to return to - AppUi()->ActivateLocalViewL( iPrevViewId.iViewUid ); - break; - } - case EAPControlListCmdActivate : - { - iAPIWrapper->ActivateACL(); - break; - } - case EAPControlListCmdDeactivate : - { - iAPIWrapper->DeActivateACL(); - break; - } - case EAPControlListCmdAdd : - { - iAPIWrapper->AddAPNL(); - break; - } - case EAPControlListCmdRemove : - { - iAPIWrapper->RemoveAPN(); - break; - } - case EAknCmdHelp : - { - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - AppUi()->AppHelpContextL() ); - break; - } - case EEikCmdExit : - default : - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::HandleCommandL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::ExitOnUSIMRemovalL -// --------------------------------------------------------- -void CAPControlListPlugin::ExitOnUSIMRemovalL() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::ExitOnUSIMRemovalL" ) ) ); - iVisible = EFalse; - AppUi()->ActivateLocalViewL( iPrevViewId.iViewUid ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::ExitOnUSIMRemovalL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::DoActivateL -// --------------------------------------------------------- -void CAPControlListPlugin::DoActivateL( const TVwsViewId& aPrevViewId, - TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/ ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::DoActivateL" ) ) ); - if ( iPrevViewId.iViewUid.iUid == 0 ) - { - //must be prepared to application switch, so it stores - //only the parent view (General Settings Main View) - iPrevViewId = aPrevViewId; - } - - if ( !iContainer ) - { - iContainer = new( ELeave ) CAPControlListPluginContainer; - iContainer->SetMopParent( this ); - - TRAPD( error, iContainer->ConstructL( ClientRect(), this ) ); - if ( error ) - { - delete iContainer; - iContainer = NULL; - User::Leave( error ); - } - - if (!iAPIWrapper) - { - iAPIWrapper = new( ELeave ) CAPControlListAPIWrapper(*this); - iAPIWrapper->ConstructL(); - } - if (!iChangeNotifier) - { - iChangeNotifier = new( ELeave ) CAPControlListCapsChange(*this); - iChangeNotifier->NotifyCapsChange(); - } - - ShowInfoNoteL(R_QTN_ACL_WAIT_READING_SIM); - iAPIWrapper->ReadData(); - iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch); - - - AppUi()->AddToViewStackL( *this, iContainer ); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::DoActivateL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::PluginUid -// --------------------------------------------------------- -TUid CAPControlListPlugin::PluginUid() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::PluginUid" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::PluginUid" ) ) ); - return KAPControlListPluginUid; - } - -// --------------------------------------------------------- -// CAPControlListPlugin::GetCaption -// --------------------------------------------------------- -void CAPControlListPlugin::GetCaptionL( TDes& aCaption ) const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::GetCaptionL" ) ) ); - StringLoader::Load( aCaption, R_QTN_ACL_MENU_ITEM ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::GetCaptionL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::HasBitmap -// --------------------------------------------------------- -TBool CAPControlListPlugin::HasBitmap() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::HasBitmap" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::HasBitmap" ) ) ); - return EFalse; - } - -// --------------------------------------------------------- -// CAPControlListPlugin::GetBitmapL -// --------------------------------------------------------- -void CAPControlListPlugin::GetBitmapL( CFbsBitmap* /*aBitmap*/, - CFbsBitmap* /*aMask*/ ) const - { - //no bitmap - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::GetBitmapL" ) ) ); - User::Leave( KErrNotFound ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::GetBitmapL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::PluginProviderCategory -// --------------------------------------------------------- -TInt CAPControlListPlugin::PluginProviderCategory() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::PluginProviderCategory" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::PluginProviderCategory" ) ) ); - return EGSPluginProviderOEM; - } - -// --------------------------------------------------------- -// CApSettingsPlugin::CreateIconL -// --------------------------------------------------------- -CGulIcon* CAPControlListPlugin::CreateIconL( const TUid aIconType ) - { - TFileName iconsFileName; - - iconsFileName.Append( KDriveZ ); - iconsFileName.Append( KDC_APP_BITMAP_DIR ); - iconsFileName.Append( KFileIcons ); - - CGulIcon* icon; - - if( aIconType == KGSIconTypeLbxItem ) - { - icon = AknsUtils::CreateGulIconL( - AknsUtils::SkinInstance(), - KAknsIIDQgnPropSetConnAccp, - iconsFileName, - EMbmApcontrollistpluginQgn_prop_set_conn_acl, - EMbmApcontrollistpluginQgn_prop_set_conn_acl_mask ); - } - else - { - icon = CGSPluginInterface::CreateIconL( aIconType ); - } - - return icon; - } - -// --------------------------------------------------------- -// CAPControlListPlugin::Visible -// --------------------------------------------------------- -TBool CAPControlListPlugin::Visible() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::Visible" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::Visible" ) ) ); - return iVisible; - } - -// --------------------------------------------------------- -// CAPControlListPlugin::CAPControlListPlugin -// --------------------------------------------------------- -CAPControlListPlugin::CAPControlListPlugin(): - iPrevViewId(), - iResources( *CCoeEnv::Static() ), - iVisible(EFalse) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::CAPControlListPlugin" ) ) ); - // no implementation required - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::CAPControlListPlugin" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::ConstructL -// --------------------------------------------------------- -TAny CAPControlListPlugin::ConstructL() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::ConstructL" ) ) ); - - TFileName fileName; - TDriveUnit drive( EDriveZ ); - - fileName.Append( drive.Name() ); - fileName.Append( KDC_RESOURCE_FILES_DIR ); - fileName.Append( KResourceFileName ); - iResources.OpenL( fileName ); - - BaseConstructL( R_APCLPLUGIN_MAIN_VIEW ); - - // get Visible - iAPIWrapper = new( ELeave ) CAPControlListAPIWrapper(*this); - iAPIWrapper->ConstructL(); - iVisible = iAPIWrapper->Visible(); - iAPIWrapper->Cancel(); - delete iAPIWrapper; - iAPIWrapper = NULL; - - FeatureManager::InitializeLibL(); - iHelp = FeatureManager::FeatureSupported( KFeatureIdHelp ); - FeatureManager::UnInitializeLib(); - - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::ConstructL" ) ) ); - } - - -// --------------------------------------------------------- -// CAPControlListPlugin::DynInitMenuPaneL -// --------------------------------------------------------- -void CAPControlListPlugin::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::DynInitMenuPaneL" ) ) ); - CAknView::DynInitMenuPaneL( aResourceId, aMenuPane ); - if ( aResourceId == R_APCLPLUGIN_MAIN_MENU ) - { - if ( iAPIWrapper->Enabled() ) - { - aMenuPane->DeleteMenuItem( EAPControlListCmdActivate ); - } - else - { - aMenuPane->DeleteMenuItem( EAPControlListCmdDeactivate ); - } - if ( !iContainer->NumberOfItems() ) - { - aMenuPane->DeleteMenuItem( EAPControlListCmdRemove ); - } - if (!iHelp) - { - aMenuPane->DeleteMenuItem( EAknCmdHelp ); - } - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::DynInitMenuPaneL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::DoDeactivate -// --------------------------------------------------------- -void CAPControlListPlugin::DoDeactivate() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::DoDeactivate" ) ) ); - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - } - - delete iContainer; - iContainer = NULL; - if (iChangeNotifier) - { - delete iChangeNotifier; - iChangeNotifier = NULL; - } - if (iAPIWrapper) - { - delete iAPIWrapper; - iAPIWrapper = NULL; - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::DoDeactivate" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::UiComplete( TInt aUirEvent ) -// --------------------------------------------------------- -// -void CAPControlListPlugin::UiComplete( TInt /*aUirEvent*/ ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::UiComplete" ) ) ); - // Activate this view as we are coming back - // from some other view in the UI - TRAP_IGNORE( - AppUi()->ActivateLocalViewL( KAPControlListPluginUid ) ) - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::UiComplete" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPlugin::HandleListBoxEventL -// --------------------------------------------------------- -void CAPControlListPlugin::HandleListBoxEventL( CEikListBox* /*aListBox*/, - TListBoxEvent aEventType ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::HandleListBoxEventL" ) ) ); - switch ( aEventType ) - { - case EEventEnterKeyPressed : - case EEventItemClicked : - { - break; - } - default : - break; - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::HandleListBoxEventL" ) ) ); - } - -// ---------------------------------------------------------- -// CAPControlListPlugin::ShowInfoNoteL( TInt aResourceId ) -// ---------------------------------------------------------- -// -void CAPControlListPlugin::ShowInfoNoteL( TInt aResourceId ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::ShowInfoNoteL" ) ) ); - HBufC* text = iCoeEnv->AllocReadResourceLC( aResourceId ); - CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( *text ); - CleanupStack::PopAndDestroy( text ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::ShowInfoNoteL" ) ) ); - } - -// ---------------------------------------------------------- -// CAPControlListPlugin::ShowConfirmNoteL( TInt aResourceId ) -// ---------------------------------------------------------- -// - -void CAPControlListPlugin::ShowConfirmNoteL( TInt aResourceId ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::ShowConfirmNoteL" ) ) ); - HBufC* text = iCoeEnv->AllocReadResourceLC( aResourceId ); - CAknConfirmationNote* note = new ( ELeave ) CAknConfirmationNote( ETrue ); - note->ExecuteLD( *text ); - CleanupStack::PopAndDestroy( text ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::ShowConfirmNoteL" ) ) ); - } - -// ---------------------------------------------------------- -// CAPControlListPlugin::ShowConfirmNoteL( TInt aResourceId ) -// ---------------------------------------------------------- -// -void CAPControlListPlugin::ShowConfirmNoteAPNL( TInt aResourceId, TPtrC& aAPN ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPlugin::ShowConfirmNoteL" ) ) ); - HBufC* text = StringLoader::LoadLC ( aResourceId, aAPN); - CAknConfirmationNote* note = new ( ELeave ) CAknConfirmationNote( ETrue ); - note->ExecuteLD( *text ); - CleanupStack::PopAndDestroy( text ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPlugin::ShowConfirmNoteL" ) ) ); - } - -// ---------------------------------------------------------- -// CAPControlListPlugin::Container() -// ---------------------------------------------------------- -// -CAPControlListPluginContainer* CAPControlListPlugin::Container() - { - return iContainer; - } - -// ---------------------------------------------------------- -// CAPControlListPlugin::APIWrapper() -// ---------------------------------------------------------- -// -CAPControlListAPIWrapper* CAPControlListPlugin::APIWrapper() - { - return iAPIWrapper; - } -//End of file diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistplugincontainer.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistplugincontainer.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,344 +0,0 @@ -/* -* Copyright (c) 2006 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: APControl list Plugin container -* -*/ - - -// INCLUDE FILES -#include //for help -#include - - -#include //for CAknTitlePane -#include //for TResourceReader -#include //for CListBox -#include //for CNaviPane -#include //for CAknNavigationDecorator -#include -#include - -#include "apcontrollistplugincontainer.h" -#include "apcontrollistplugin.h" -#include "apcontrollistplugin.hrh" -#include "apcontrollistbox.h" -#include "apcontrollistboxmodel.h" -#include "apcontrollistpluginlogger.h" - -// CONSTANTS -_LIT( KEmpty, ""); - -// ================= MEMBER FUNCTIONS ======================= -// --------------------------------------------------------- - -// --------------------------------------------------------- -// CAPControlListPluginContainer::ConstructL -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::ConstructL( const TRect& aRect, - MEikListBoxObserver* aListObserver ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::ConstructL" ) ) ); - if ( !iListBox ) - { - - TResourceReader rr; - - //creates resource reader. reader is pushed to cleaup stack - ControlEnv()->CreateResourceReaderLC( rr, R_APCONTROL_LISTBOX ); - - CreateWindowL(); - - iListBox = new( ELeave ) CApControlListbox; - iListBox->SetContainerWindowL( *this ); - - iListBox->CreateScrollBarFrameL( ETrue ); - iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto ); - - iListBox->ConstructFromResourceL( rr ); - - //Put in empty text thing - iListBox->SetListEmptyTextL(); - iListBox->SetListBoxObserver( aListObserver ); - - iModel = new( ELeave )CApControlListboxModel; - iModel->ConstructL(); - iListBox->Model()->SetItemTextArray( iModel );//give ownership of - // iModel to iListBox - - CleanupStack::PopAndDestroy(); //resource reader - - SetRect( aRect ); - - HandleResourceChange( KEikDynamicLayoutVariantSwitch ); - } - - - TitlePaneTextsL( R_APCLPLUGIN_TITLE ); - ActivateL(); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::ConstructL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::AddToListBoxL -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::AddToListBoxL(TPtrC& newItem) - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListPluginContainer::AddToListBoxL" ) ) ); - MDesCArray* textArray = iModel->ItemTextArray(); - CDesCArray* listBoxItems = static_cast(textArray); - - TBuf item; - // RMobilePhone::KMaxApnName - label length + TAB = - // RMobilePhone::KMaxApnName - item.Format(_L("\t%S"), &newItem); - listBoxItems->AppendL(item); - - iListBox->HandleItemAdditionL(); // Update listbox - iListBox->SetCurrentItemIndexAndDraw( - listBoxItems->Count() - 1); // select new item - CLOG( ( ESelector, 0, _L( - "<- CAPControlListPluginContainer::AddToListBoxL" ) ) ); - } -// --------------------------------------------------------- -// CAPControlListPluginContainer::CurrentItemIndex -// --------------------------------------------------------- -// -TInt CAPControlListPluginContainer::CurrentItemIndex() - { - CLOG( ( ESelector, 0, _L( - "-> CAPControlListPluginContainer::CurrentItemIndex" ) ) ); - CLOG( ( ESelector, 0, _L( - "<- CAPControlListPluginContainer::CurrentItemIndex" ) ) ); - return iListBox->CurrentItemIndex(); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::SetCurrentItemIndex -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::SetCurrentItemIndex(TInt index) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::SetCurrentItemIndex" ) ) ); - iListBox->SetCurrentItemIndexAndDraw(index); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::SetCurrentItemIndex" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::RemoveFromListBoxL -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::RemoveFromListBoxL() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::RemoveFromListBoxL" ) ) ); - TInt currentItem = iListBox->CurrentItemIndex(); - - MDesCArray* textArray = iModel->ItemTextArray(); - CDesCArray* listBoxItems = static_cast(textArray); - listBoxItems->Delete(currentItem, 1); // 1 = how many items to delete - AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(iListBox, currentItem, ETrue); - iListBox->DrawNow(); // Update listbox - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::RemoveFromListBoxL" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::~CAPControlListPluginContainer -// --------------------------------------------------------- -// -CAPControlListPluginContainer::~CAPControlListPluginContainer() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::~CAPControlListPluginContainer" ) ) ); - delete iListBox; - if (iNaviPane) - { - iNaviPane->Pop(iNaviDecorator); - } - delete iNaviDecorator; - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::~CAPControlListPluginContainer" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::CountComponentControls -// --------------------------------------------------------- -// -TInt CAPControlListPluginContainer::CountComponentControls() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::CountComponentControls" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::CountComponentControls" ) ) ); - return 1; - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::ComponentControl -// --------------------------------------------------------- -// -CCoeControl* CAPControlListPluginContainer::ComponentControl( TInt aIndex ) const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::ComponentControl" ) ) ); - switch( aIndex ) - { - case 0 : - { - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::ComponentControl 1" ) ) ); - return iListBox; - } - default: - { - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::ComponentControl 2" ) ) ); - return 0; - } - } - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::OfferKeyEventL -// --------------------------------------------------------- -// -TKeyResponse CAPControlListPluginContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::OfferKeyEventL" ) ) ); - TKeyResponse response = EKeyWasNotConsumed; - if ( aType == EEventKey ) - { - response = iListBox->OfferKeyEventL( aKeyEvent, aType ); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::OfferKeyEventL" ) ) ); - return response; - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::SizeChanged -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::SizeChanged() - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::SizeChanged" ) ) ); - iListBox->SetRect( Rect() ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::SizeChanged" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::GetHelpContext() -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::GetHelpContext( TCoeHelpContext& aContext) const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::GetHelpContext" ) ) ); - aContext.iMajor = KHelpUidAPControlList; - aContext.iContext = KACL_HLP_MAIN; - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::GetHelpContext" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::TitlePaneTextsL -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::TitlePaneTextsL( TInt aResourceId ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::TitlePaneTextsL" ) ) ); - CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); - CAknTitlePane* titlePane = - ( CAknTitlePane* )statusPane->ControlL( - TUid::Uid( EEikStatusPaneUidTitle ) ); - - //creates and sets title. title is pushed to cleanup stack - HBufC* title = iEikonEnv->AllocReadResourceLC( aResourceId ); - titlePane->SetTextL( *title ); - - iNaviPane = STATIC_CAST( CAknNavigationControlContainer*, - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); - - iNaviDecorator = iNaviPane->CreateNavigationLabelL( KEmpty ); - iNaviPane->PushL( *iNaviDecorator ); - - CleanupStack::PopAndDestroy(title); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::TitlePaneTextsL" ) ) ); - } - - -// --------------------------------------------------------- -// CAPControlListPluginContainer::HandleResourceChange -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::HandleResourceChange( TInt aType ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::HandleResourceChange" ) ) ); - CCoeControl::HandleResourceChange( aType ); - if( aType == KEikDynamicLayoutVariantSwitch ) - { - TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, - mainPaneRect ); - SetRect( mainPaneRect ); - DrawNow(); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::HandleResourceChange" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::FocusChanged -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::FocusChanged( TDrawNow aDrawNow ) - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::FocusChanged" ) ) ); - CCoeControl::FocusChanged( aDrawNow ); - if( iListBox ) - { - iListBox->SetFocus( IsFocused() ); - } - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::FocusChanged" ) ) ); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::CurrentItemNameL -// --------------------------------------------------------- -// -TInt CAPControlListPluginContainer::NumberOfItems() const - { - CLOG( ( ESelector, 0, _L( "-> CAPControlListPluginContainer::NumberOfItems" ) ) ); - CLOG( ( ESelector, 0, _L( "<- CAPControlListPluginContainer::NumberOfItems" ) ) ); - return iListBox->Model()->ItemTextArray()->MdcaCount(); - } - -// --------------------------------------------------------- -// CAPControlListPluginContainer::WriteToNaviPaneL -// --------------------------------------------------------- -// -void CAPControlListPluginContainer::WriteToNaviPaneL( TInt aResourceId ) - { - CLOG( ( ESelector, 0, - _L( "-> CAPControlListPluginContainer::WriteToNaviPaneL" ) ) ); - HBufC* text = iCoeEnv->AllocReadResourceLC( aResourceId ); - if ( iNaviDecorator ) - { - iNaviPane->Pop(iNaviDecorator); - delete iNaviDecorator; - iNaviDecorator = NULL;// CodeScanner needs this line - } - iNaviDecorator = iNaviPane->CreateNavigationLabelL( *text ); - iNaviPane->PushL( *iNaviDecorator ); - - CleanupStack::PopAndDestroy( text ); - CLOG( ( ESelector, 0, - _L( "<- CAPControlListPluginContainer::WriteToNaviPaneL" ) ) ); - } - -// End of File diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistpluginimplementationtable.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistpluginimplementationtable.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2006 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 proxy table for this plugin -* -*/ - - -// System includes -#include -#include - -// User includes -#include "apcontrollistplugin.h" - -// Constants -const TImplementationProxy KAPControlListPluginImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY( 0x10281BB5, CAPControlListPlugin::NewL ) - }; - - -// --------------------------------------------------------------------------- -// ImplementationGroupProxy -// Gate/factory function -// -// --------------------------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof( KAPControlListPluginImplementationTable ) - / sizeof( TImplementationProxy ); - return KAPControlListPluginImplementationTable; - } diff -r 7ec726f93df1 -r 489cf6208544 accesspointcontrol/apcontrollistplugin/src/apcontrollistpluginlogger.cpp --- a/accesspointcontrol/apcontrollistplugin/src/apcontrollistpluginlogger.cpp Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -/* -* Copyright (c) 2006 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 APControlListPluginLogger. -* -*/ - - -// INCLUDE FILES - -#ifdef _DEBUG - - #include "apcontrollistpluginlogger.h" - #include - #include - - // ================= CONSTANTS ======================= - - /// apcontrollistplugin logging directory. - _LIT( KapcontrollistpluginLogDir, "apcontrollistplugin" ); - /// apcontrollistplugin log file name. - _LIT( KapcontrollistpluginLogFile, "apcontrollistplugin.txt" ); - - - // ================= MEMBER FUNCTIONS ======================= - - // --------------------------------------------------------- - // APControlListPluginLogger::Write() - // --------------------------------------------------------- - // - void APControlListPluginLogger::Write - ( TInt32 aMask, TInt aLevel, TRefByValue aFmt, ... ) - { - if( (aMask & APCONTROL_LIST_LOG_MASK) && (aLevel <= APCONTROL_LIST_LOG_LEVEL) ) - { - VA_LIST list; - VA_START( list, aFmt ); - RFileLogger::WriteFormat - ( - KapcontrollistpluginLogDir, - KapcontrollistpluginLogFile, - EFileLoggingModeAppend, - aFmt, - list - ); - VA_END( list ); - } - } - - - // --------------------------------------------------------- - // APControlListPluginLogger::Write() - // --------------------------------------------------------- - // - void APControlListPluginLogger::Write - ( TInt32 aMask, TInt aLevel, TRefByValue aFmt, - VA_LIST& aList ) - { - if( (aMask & APCONTROL_LIST_LOG_MASK) && (aLevel <= APCONTROL_LIST_LOG_LEVEL) ) - { - RFileLogger::WriteFormat - ( - KapcontrollistpluginLogDir, - KapcontrollistpluginLogFile, - EFileLoggingModeAppend, - aFmt, - aList - ); - } - } - - - // --------------------------------------------------------- - // APControlListPluginLogger::Write() - // --------------------------------------------------------- - // - void APControlListPluginLogger::Write - ( TInt32 aMask, TInt aLevel, TRefByValue aFmt, ... ) - { - if( (aMask & APCONTROL_LIST_LOG_MASK) && (aLevel <= APCONTROL_LIST_LOG_LEVEL) ) - { - VA_LIST list; - VA_START( list, aFmt ); - RFileLogger::WriteFormat - ( - KapcontrollistpluginLogDir, - KapcontrollistpluginLogFile, - EFileLoggingModeAppend, - aFmt, - list - ); - VA_END( list ); - } - } - - - // --------------------------------------------------------- - // APControlListPluginLogger::Write() - // --------------------------------------------------------- - // - void APControlListPluginLogger::Write - ( TInt32 aMask, TInt aLevel, TRefByValue aFmt, - VA_LIST& aList ) - { - if( (aMask & APCONTROL_LIST_LOG_MASK) && (aLevel <= APCONTROL_LIST_LOG_LEVEL) ) - { - RFileLogger::WriteFormat - ( - KapcontrollistpluginLogDir, - KapcontrollistpluginLogFile, - EFileLoggingModeAppend, - aFmt, - aList - ); - } - } - - - // --------------------------------------------------------- - // APControlListPluginLogger::HexDump() - // --------------------------------------------------------- - // - void APControlListPluginLogger::HexDump - ( - TInt32 aMask, - TInt aLevel, - const TText* aHeader, - const TText* aMargin, - const TUint8* aPtr, - TInt aLen - ) - { - if( (aMask & APCONTROL_LIST_LOG_MASK) && (aLevel <= APCONTROL_LIST_LOG_LEVEL) ) - { - RFileLogger::HexDump - ( - KapcontrollistpluginLogDir, - KapcontrollistpluginLogFile, - EFileLoggingModeAppend, - aHeader, - aMargin, - aPtr, - aLen - ); - } - } - - // --------------------------------------------------------- - // APControlListPluginLogger::FCreate() - // --------------------------------------------------------- - // - void APControlListPluginLogger::FCreate() - { - TFileName path(_L("c:\\logs\\")); - path.Append(KapcontrollistpluginLogDir); - path.Append(_L("\\")); - RFs& fs = CEikonEnv::Static()->FsSession(); - fs.MkDirAll(path); - } -#endif // _DEBUG - diff -r 7ec726f93df1 -r 489cf6208544 apengine/apsettingshandlerui/src/ApNetSelPopupList.cpp --- a/apengine/apsettingshandlerui/src/ApNetSelPopupList.cpp Fri May 14 16:15:46 2010 +0300 +++ b/apengine/apsettingshandlerui/src/ApNetSelPopupList.cpp Thu May 27 13:17:01 2010 +0300 @@ -20,7 +20,6 @@ // INCLUDE FILES #include -#include #include #include "ApSettingsHandlerUI.hrh" @@ -183,8 +182,6 @@ APSETUILOGGER_ENTERFN( EListbox,"NetSelPopup::GetHelpContext") aContext.iMajor = iHandler->iHelpMajor; - // help no longer available for user, use dummy ID - aContext.iContext = KSET_HLP_AP_SETTING_GPRS; APSETUILOGGER_LEAVEFN( EListbox,"NetSelPopup::GetHelpContext") } diff -r 7ec726f93df1 -r 489cf6208544 apengine/apsettingshandlerui/src/ApSelPopupList.cpp --- a/apengine/apsettingshandlerui/src/ApSelPopupList.cpp Fri May 14 16:15:46 2010 +0300 +++ b/apengine/apsettingshandlerui/src/ApSelPopupList.cpp Thu May 27 13:17:01 2010 +0300 @@ -24,9 +24,6 @@ #include #include -#include - - #include "ApSelectorListBoxModel.h" #include "ApSettingsModel.h" #include "ApSettingsHandlerUI.hrh" @@ -316,8 +313,6 @@ APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::GetHelpContext") aContext.iMajor = iHandler->iHelpMajor; - // help no longer available for user, use dummy ID - aContext.iContext = KSET_HLP_AP_SETTING_GPRS; APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::GetHelpContext") } diff -r 7ec726f93df1 -r 489cf6208544 apengine/apsettingshandlerui/src/ApSelectorDialog.cpp --- a/apengine/apsettingshandlerui/src/ApSelectorDialog.cpp Fri May 14 16:15:46 2010 +0300 +++ b/apengine/apsettingshandlerui/src/ApSelectorDialog.cpp Thu May 27 13:17:01 2010 +0300 @@ -29,8 +29,6 @@ #include -#include - #include "ApSelectorDialog.h" #include "ApSelectorListBoxModel.h" #include "ApSelectorListbox.h" @@ -435,14 +433,12 @@ APSETUILOGGER_ENTERFN( EDialog,"SelDIalog::GetHelpContext<->") aContext.iMajor = iHandler->iHelpMajor; - // help no longer available for user, use dummy ID - aContext.iContext = KSET_HLP_AP_SETTING_GPRS; } // --------------------------------------------------------- -// CApSelectorDialog::HandleApDbEventL +// CApSelectorDialog::HandleApDbEventLw // called by the active access point framework // --------------------------------------------------------- // diff -r 7ec726f93df1 -r 489cf6208544 apengine/apsettingshandlerui/src/ApSettingsDlg.cpp --- a/apengine/apsettingshandlerui/src/ApSettingsDlg.cpp Fri May 14 16:15:46 2010 +0300 +++ b/apengine/apsettingshandlerui/src/ApSettingsDlg.cpp Thu May 27 13:17:01 2010 +0300 @@ -43,8 +43,6 @@ #include "ApSettingsModel.h" #include -#include - #include "ApSettingsHandlerUI.hrh" #include "ApsettingshandleruiImpl.h" #include "ApSettingsHandlerConsts.h" @@ -775,90 +773,6 @@ APSETUILOGGER_ENTERFN( ESettings,"Settings::GetHelpContext") aContext.iMajor = iHandler->iHelpMajor; - switch ( iBearerType ) - { - case EApBearerTypeCSD: - case EApBearerTypeHSCSD: - { - switch ( iLevel ) - { - case 2: - { - if ( iL2Ipv4 ) - { - aContext.iContext = KSET_HLP_AP_DATA_AS_IPV4; - } - else - { - aContext.iContext = KSET_HLP_AP_DATA_AS_IPV6; - } - break; - } - case 1: - { - aContext.iContext = KSET_HLP_AP_SETTING_DATA_AS; - break; - } - case 0: - default: - { - aContext.iContext = KSET_HLP_AP_SETTING_DATA; - break; - } - } - break; - } - case EApBearerTypeGPRS: - { - if ( iLevel ) - { - aContext.iContext = KSET_HLP_AP_SETTING_GPRS_AS; - } - else - { - aContext.iContext = KSET_HLP_AP_SETTING_GPRS; - } - break; - } - case EApBearerTypeWLAN: - { - switch ( iLevel ) - { - case 2: - { - if ( iL2Ipv4 ) - { - aContext.iContext = KSET_HLP_AP_WLAN_AS_IPV4; - } - else - { - aContext.iContext = KSET_HLP_AP_WLAN_AS_IPV6; - } - break; - } - case 1: - { - aContext.iContext = KSET_HLP_AP_SETTING_WLAN_AS; - break; - } - case 0: - { - aContext.iContext = KSET_HLP_AP_SETTING_WLAN; - break; - } - default: - { - break; - } - } - break; - } - default: - { - __ASSERT_DEBUG( EFalse, Panic( EInvalidBearerType ) ); - break; - } - } APSETUILOGGER_LEAVEFN( ESettings,"Settings::GetHelpContext") } diff -r 7ec726f93df1 -r 489cf6208544 bearermanagement/mpm/inc/mpmserver.h --- a/bearermanagement/mpm/inc/mpmserver.h Fri May 14 16:15:46 2010 +0300 +++ b/bearermanagement/mpm/inc/mpmserver.h Thu May 27 13:17:01 2010 +0300 @@ -58,6 +58,10 @@ //Total number of ranges const TUint KMPMPolicyRangeCount = 2; + +// roaming to connected wlan wait interval +// in micro seconds (10 sec) +const TInt KRoamingToWlanUpdateInterval = 10000000; //Definition of the ranges of IPC numbers const TInt KMPMPolicyRanges[KMPMPolicyRangeCount] = @@ -699,6 +703,14 @@ void StartForcedRoamingToWlanL( const TConnMonIapInfo& aIapInfo ); /** + * Starts forced roaming sequence to connected wlan + * + * @param aIapInfo Info about available IAPs + * @since 5.2 + */ + static TInt StartForcedRoamingToConnectedWlanL( TAny* aUpdater ); + + /** * Starts forced roaming sequence from WLAN if necessary * * @param aIapInfo Info about available IAPs @@ -961,6 +973,12 @@ // Is WLAN usage already accepted in this offline session. TOfflineWlanQueryResponse iOfflineWlanQueryResponse; + + // Timer to start roaming to connected WLAN network + CPeriodic* iRoamingToWlanPeriodic; + + // TConnMonIapInfo Info about available IAPs + TConnMonIapInfo iConnMonIapInfo; }; #include "mpmserver.inl" diff -r 7ec726f93df1 -r 489cf6208544 bearermanagement/mpm/src/mpmserver.cpp --- a/bearermanagement/mpm/src/mpmserver.cpp Fri May 14 16:15:46 2010 +0300 +++ b/bearermanagement/mpm/src/mpmserver.cpp Thu May 27 13:17:01 2010 +0300 @@ -230,6 +230,11 @@ // CMPMServer::~CMPMServer() { + if ( iRoamingToWlanPeriodic ) + { + iRoamingToWlanPeriodic->Cancel(); + delete iRoamingToWlanPeriodic; + } if ( iDisconnectQueue ) { iDisconnectQueue->ResetAndDestroy(); @@ -881,7 +886,32 @@ TCmUsageOfWlan usageOfWlan = CommsDatAccess()->ForcedRoamingL(); if ( usageOfWlan == ECmUsageOfWlanKnown || usageOfWlan == ECmUsageOfWlanKnownAndNew ) { - StartForcedRoamingToWlanL( iapInfo ); + if ( IsWlanConnectionStartedL( CommsDatAccess() ) ) + { + iConnMonIapInfo = aIapInfo; + + if ( iRoamingToWlanPeriodic ) + { + iRoamingToWlanPeriodic->Cancel(); + } + else + { + iRoamingToWlanPeriodic = CPeriodic::NewL( + CActive::EPriorityStandard ); + } + // start periodic object that calls StartForcedRoamingToWlanL after 10s. + // this handles the case when new wlan connection is + // started from e.g. wlan sniffer but IAP is not yet in Internet SNAP + iRoamingToWlanPeriodic->Start( + TTimeIntervalMicroSeconds32( KRoamingToWlanUpdateInterval ), + TTimeIntervalMicroSeconds32( KRoamingToWlanUpdateInterval ), + TCallBack( StartForcedRoamingToConnectedWlanL, this ) ); + } + else + { + StartForcedRoamingToWlanL( iapInfo ); + } + StartForcedRoamingFromWlanL( iapInfo ); } @@ -1446,12 +1476,11 @@ void CMPMServer::StartForcedRoamingToWlanL( const TConnMonIapInfo& aIapInfo ) { MPMLOGSTRING( "CMPMServer::StartForcedRoamingToWlan" ) - - // First check that there is no active wlan connection - if ( IsWlanConnectionStartedL( CommsDatAccess() ) ) + + // cancel the periodic object + if ( iRoamingToWlanPeriodic != NULL ) { - // Wlan already active can't roam to it - return; + iRoamingToWlanPeriodic->Cancel(); } // Copy all available wlan iap ids to own array @@ -1511,6 +1540,20 @@ CleanupStack::PopAndDestroy( &wlanIapIds ); } + +// --------------------------------------------------------------------------- +// CMPMServer::StartForcedRoamingToConnectedWlanL +// --------------------------------------------------------------------------- +// +TInt CMPMServer::StartForcedRoamingToConnectedWlanL( TAny* aUpdater ) + { + MPMLOGSTRING( "CMPMServer::StartForcedRoamingToConnectedWlanL" ); + static_cast( aUpdater )->StartForcedRoamingToWlanL( + static_cast( aUpdater )->iConnMonIapInfo ); + return 0; + } + + // ----------------------------------------------------------------------------- // CMPMServer::StartForcedRoamingFromWlanL // ----------------------------------------------------------------------------- diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/group/cmmapi.mmp --- a/cmmanager/cmmgr/cmmapi/group/cmmapi.mmp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/group/cmmapi.mmp Thu May 27 13:17:01 2010 +0300 @@ -17,7 +17,6 @@ */ -#include #include TARGET cmmanager.dll @@ -26,10 +25,10 @@ CAPABILITY CAP_GENERAL_DLL VENDORID VID_DEFAULT -SOURCEPATH ../../cmmcommon/Src +SOURCEPATH ../../cmmcommon/src SOURCE cmmclistatic.cpp -SOURCEPATH ../Src +SOURCEPATH ../src SOURCE cmmanager.cpp SOURCE cmmanagerapi.cpp SOURCE cmdestination.cpp @@ -56,12 +55,10 @@ LIBRARY euser.lib -DEBUGLIBRARY flogger.lib - #if defined(ARMCC) DEFFILE ../EABI/CmManager_prot_setup.def #elif defined( WINSCW ) -DEFFILE ../BWinsCw/CmManager_prot_setup.def +DEFFILE ../BWinsCw/CmManager_prot_setup.DEF #elif defined( WINS ) DEFFILE ../BWins/CmManager_prot_setup.def #else diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/inc/cmdestinationapi.h --- a/cmmanager/cmmgr/cmmapi/inc/cmdestinationapi.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/inc/cmdestinationapi.h Thu May 27 13:17:01 2010 +0300 @@ -85,6 +85,8 @@ TInt IsConnected( TBool& aResult ); TInt IsHidden( TBool& aResult ); TInt IsEqual( const TInt aHandle, TBool& aResult ); + TInt GetIcon( HBufC* aBuffer ); + TInt SetIcon( const TDesC& aValue ); private: // True when a subsession is established to the server. diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/inc/cmdestinationwrapper.h --- a/cmmanager/cmmgr/cmmapi/inc/cmdestinationwrapper.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/inc/cmdestinationwrapper.h Thu May 27 13:17:01 2010 +0300 @@ -90,6 +90,8 @@ TInt IsConnected( TBool& aResult ); TInt IsHidden( TBool& aResult ); TInt IsEqual( const TInt aHandle, TBool& aResult ); + TInt GetIcon( HBufC* aBuffer ); + TInt SetIcon( const TDesC& aValue); TBool SessionConnected(); void CloseSession(); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/inc/cmmanagerapi.h --- a/cmmanager/cmmgr/cmmapi/inc/cmmanagerapi.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/inc/cmmanagerapi.h Thu May 27 13:17:01 2010 +0300 @@ -132,6 +132,7 @@ const TInt aConnMethodHandle ); TInt RemoveAllReferences( const TInt aConnMethodHandle ); + TInt GetUncategorizedIcon( HBufC* aBuffer ); private: // Array of destination handles opened through this session. diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/src/cmconnectionmethod.cpp --- a/cmmanager/cmmgr/cmmapi/src/cmconnectionmethod.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/src/cmconnectionmethod.cpp Thu May 27 13:17:01 2010 +0300 @@ -178,7 +178,6 @@ else { CleanupStack::PopAndDestroy( buffer ); - buffer = NULL; buffer = KNullDesC().AllocL(); } @@ -211,7 +210,6 @@ else { CleanupStack::PopAndDestroy( buffer8 ); - buffer8 = NULL; buffer8 = KNullDesC8().AllocL(); } @@ -495,21 +493,44 @@ { OstTraceFunctionEntry0( RCMCONNECTIONMETHOD_GETICONL_ENTRY ); - User::Leave( KErrNotSupported ); + if ( !iCmConnectionMethodWrapper || !iCmConnectionMethodWrapper->SessionConnected() ) + { + User::Leave( KErrBadHandle ); + } + + HBufC* buffer = HBufC::NewLC( KCmmStringLengthMax ); + TInt err = iCmConnectionMethodWrapper->GetStringAttribute( CMManager::ECmBearerIcon, buffer ); + User::LeaveIfError( err ); + + if ( buffer->Length() > 0 ) + { + CleanupStack::Pop( buffer ); + } + else + { + CleanupStack::PopAndDestroy( buffer ); + buffer = KNullDesC().AllocL(); + } OstTraceFunctionExit0( RCMCONNECTIONMETHOD_GETICONL_EXIT ); - return NULL; + return buffer; } //----------------------------------------------------------------------------- // RCmConnectionMethod::SetIconL() //----------------------------------------------------------------------------- // -EXPORT_C void RCmConnectionMethod::SetIconL( const TDesC& /*aIcon*/ ) +EXPORT_C void RCmConnectionMethod::SetIconL( const TDesC& aIcon ) { OstTraceFunctionEntry0( RCMCONNECTIONMETHOD_SETICONL_ENTRY ); - User::Leave( KErrNotSupported ); + if ( !iCmConnectionMethodWrapper || !iCmConnectionMethodWrapper->SessionConnected() ) + { + User::Leave( KErrBadHandle ); + } + + TInt err = iCmConnectionMethodWrapper->SetStringAttribute( CMManager::ECmBearerIcon, aIcon ); + User::LeaveIfError( err ); OstTraceFunctionExit0( RCMCONNECTIONMETHOD_SETICONL_EXIT ); } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/src/cmdestination.cpp --- a/cmmanager/cmmgr/cmmapi/src/cmdestination.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/src/cmdestination.cpp Thu May 27 13:17:01 2010 +0300 @@ -796,21 +796,44 @@ { OstTraceFunctionEntry0( RCMDESTINATION_GETICONL_ENTRY ); - User::Leave( KErrNotSupported ); + if ( !iCmDestinationWrapper || !iCmDestinationWrapper->SessionConnected() ) + { + User::Leave( KErrBadHandle ); + } + + HBufC* buffer = HBufC::NewLC( KCmmStringLengthMax ); + TInt err = iCmDestinationWrapper->GetIcon( buffer ); + User::LeaveIfError( err ); + + if ( buffer->Length() > 0 ) + { + CleanupStack::Pop( buffer ); + } + else + { + CleanupStack::PopAndDestroy( buffer ); + buffer = KNullDesC().AllocL(); + } OstTraceFunctionExit0( RCMDESTINATION_GETICONL_EXIT ); - return NULL; + return buffer; } //----------------------------------------------------------------------------- // RCmDestination::SetIconL() //----------------------------------------------------------------------------- // -EXPORT_C void RCmDestination::SetIconL( const TDesC& /*aIcon*/ ) +EXPORT_C void RCmDestination::SetIconL( const TDesC& aIcon ) { OstTraceFunctionEntry0( RCMDESTINATION_SETICONL_ENTRY ); - User::Leave( KErrNotSupported ); + if ( !iCmDestinationWrapper || !iCmDestinationWrapper->SessionConnected() ) + { + User::Leave( KErrBadHandle ); + } + + TInt err = iCmDestinationWrapper->SetIcon( aIcon ); + User::LeaveIfError( err ); OstTraceFunctionExit0( RCMDESTINATION_SETICONL_EXIT ); } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/src/cmdestinationapi.cpp --- a/cmmanager/cmmgr/cmmapi/src/cmdestinationapi.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/src/cmdestinationapi.cpp Thu May 27 13:17:01 2010 +0300 @@ -413,4 +413,27 @@ return err; } +TInt RCmDestinationApi::GetIcon( HBufC* aBuffer ) + { + OstTraceFunctionEntry0( RCMDESTINATIONAPI_GETICON_ENTRY ); + + TPtr descriptor( aBuffer->Des() ); + TIpcArgs args( &descriptor ); + TInt err = SendReceive( EDestGetIcon, args ); + + OstTraceFunctionExit0( RCMDESTINATIONAPI_GETICON_EXIT ); + return err; + } + +TInt RCmDestinationApi::SetIcon( const TDesC& aValue ) + { + OstTraceFunctionEntry0( RCMDESTINATIONAPI_SETICON_ENTRY ); + + TIpcArgs args( &aValue ); + TInt err = SendReceive( EDestSetIcon, args ); + + OstTraceFunctionExit0( RCMDESTINATIONAPI_SETICON_EXIT ); + return err; + } + // End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/src/cmdestinationwrapper.cpp --- a/cmmanager/cmmgr/cmmapi/src/cmdestinationwrapper.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/src/cmdestinationwrapper.cpp Thu May 27 13:17:01 2010 +0300 @@ -386,6 +386,26 @@ return err; } +TInt CCmDestinationWrapper::GetIcon( HBufC* aBuffer ) + { + OstTraceFunctionEntry0( CCMDESTINATIONWRAPPER_GETICON_ENTRY ); + + TInt err = iCmDestinationApi.GetIcon( aBuffer ); + + OstTraceFunctionExit0( CCMDESTINATIONWRAPPER_GETICON_EXIT ); + return err; + } + +TInt CCmDestinationWrapper::SetIcon( const TDesC& aValue) + { + OstTraceFunctionEntry0( CCMDESTINATIONWRAPPER_SETICON_ENTRY ); + + TInt err = iCmDestinationApi.SetIcon( aValue ); + + OstTraceFunctionExit0( CCMDESTINATIONWRAPPER_SETICON_EXIT ); + return err; + } + TBool CCmDestinationWrapper::SessionConnected() { return iCmDestinationApi.SessionConnected(); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/src/cmmanager.cpp --- a/cmmanager/cmmgr/cmmapi/src/cmmanager.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/src/cmmanager.cpp Thu May 27 13:17:01 2010 +0300 @@ -210,7 +210,6 @@ else { CleanupStack::PopAndDestroy( buffer ); - buffer = NULL; buffer = KNullDesC().AllocL(); } @@ -244,7 +243,6 @@ else { CleanupStack::PopAndDestroy( buffer8 ); - buffer8 = NULL; buffer8 = KNullDesC8().AllocL(); } @@ -324,7 +322,6 @@ else { CleanupStack::PopAndDestroy( buffer ); - buffer = NULL; buffer = KNullDesC().AllocL(); } @@ -358,7 +355,6 @@ else { CleanupStack::PopAndDestroy( buffer8 ); - buffer8 = NULL; buffer8 = KNullDesC8().AllocL(); } @@ -909,10 +905,27 @@ { OstTraceFunctionEntry0( RCMMANAGER_GETUNCATEGORIZEDICONL_ENTRY ); - User::Leave( KErrNotSupported ); + if ( !iCmManagerApi ) + { + User::Leave( KErrBadHandle ); + } + + HBufC* buffer = HBufC::NewLC( KCmmStringLengthMax ); + TInt err = iCmManagerApi->GetUncategorizedIcon( buffer ); + User::LeaveIfError( err ); + + if ( buffer->Length() > 0 ) + { + CleanupStack::Pop( buffer ); + } + else + { + CleanupStack::PopAndDestroy( buffer ); + buffer = KNullDesC().AllocL(); + } OstTraceFunctionExit0( RCMMANAGER_GETUNCATEGORIZEDICONL_EXIT ); - return NULL; + return buffer; } // End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmapi/src/cmmanagerapi.cpp --- a/cmmanager/cmmgr/cmmapi/src/cmmanagerapi.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmapi/src/cmmanagerapi.cpp Thu May 27 13:17:01 2010 +0300 @@ -73,12 +73,8 @@ return err; } err = TCmManagerLauncher::LaunchServer( - KCmmServer, KCmmServerFile, - KCmmUid3, - KCmmServerInitHeapSize, - KCmmServerMaxHeapSize, - KCmmServerStackSize ); + KCmmUid3 ); if ( err != KErrNone && err != KErrAlreadyExists ) { @@ -954,4 +950,20 @@ return err; } +//----------------------------------------------------------------------------- +// RCmManagerApi::GetUncategorizedIcon() +//----------------------------------------------------------------------------- +// +TInt RCmManagerApi::GetUncategorizedIcon( HBufC* aBuffer ) + { + OstTraceFunctionEntry0( RCMMANAGERAPI_GETUNCATEGORIZEDICON_ENTRY ); + + TPtr descriptor( aBuffer->Des() ); + TIpcArgs args( &descriptor ); + TInt err = SendReceive( ECmmGetUncategorizedIcon, args ); + + OstTraceFunctionExit0( RCMMANAGERAPI_GETUNCATEGORIZEDICON_EXIT ); + return err; + } + // End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmcommon/inc/cmmclistatic.h --- a/cmmanager/cmmgr/cmmcommon/inc/cmmclistatic.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmcommon/inc/cmmclistatic.h Thu May 27 13:17:01 2010 +0300 @@ -22,9 +22,6 @@ #include -const TUint KCmmDefaultMinHeapSize = 0x1000; // 4K -const TUint KCmmDefaultMaxHeapSize = 0x10000; // 64K - const TInt KCmmDefaultMessageSlots = 2; _LIT( KCmManagerStartupMutex, "CmManagerStartupMutex" ); @@ -37,12 +34,8 @@ { public: static TInt LaunchServer( - const TDesC& aServerName, const TDesC& aServerFileName, - const TUid& aServerUid3, - const TUint aWinsMinHeapSize = KCmmDefaultMinHeapSize, - const TUint aWinsMaxHeapSize = KCmmDefaultMaxHeapSize, - const TUint aWinsStackSize = KDefaultStackSize ); + const TUid& aServerUid3 ); private: static TBool ServerStartupLock( RMutex& mutex, TInt& err ); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmcommon/inc/cmmserverdefs.h --- a/cmmanager/cmmgr/cmmcommon/inc/cmmserverdefs.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmcommon/inc/cmmserverdefs.h Thu May 27 13:17:01 2010 +0300 @@ -35,23 +35,11 @@ */ _LIT( KCmmServerFile, "cmmserver" ); -const TInt KCmmServerStackSize = 0x5000; //TODO, check if really used (in common code). -const TInt KCmmServerInitHeapSize = 0x1000; //TODO, check if really used (in common code). -const TInt KCmmServerMaxHeapSize = 0x1000000; //TODO, check if really used (in common code). - const TInt KBitsInOneByte = 8; const TInt KBitsInTwoBytes = 16; const TInt KBitsInThreeBytes = 24; /** - * The server version. A version must be specified when creating a session with - * the server. - */ -const TUint KCmmServerMajorVersionNumber = 0; //TODO, check if really used (in common code). -const TUint KCmmServerMinorVersionNumber = 1; //TODO, check if really used (in common code). -const TUint KCmmServerBuildVersionNumber = 1; //TODO, check if really used (in common code). - -/** * Amount of time in microseconds that the server will wait before shutting * down, after last client has gone. */ @@ -73,7 +61,7 @@ const TUint32 KCmmDestIdIntervalMin = 0x1000; const TUint32 KCmmDestIdIntervalMax = 0x1100; -const TInt KCmmStringLengthMax = 1024; //TODO, need to find out correct value here +const TInt KCmmStringLengthMax = 1024; //TODO, need to find out correct value here. 1024 is correct, but can that be received from commsdat? const TUint32 KTemporaryIdCounterStart = 32768; @@ -117,19 +105,20 @@ ECmmReadDefaultConnection = 8, ECmmReadGeneralConnectionSettings = 9, ECmmGetSupportedBearers = 10, + ECmmGetUncategorizedIcon = 11, - ECmmGetConnMethodInfoInt = 11, - ECmmGetConnMethodInfoBool = 12, - ECmmGetConnMethodInfoString = 13, - ECmmGetConnMethodInfoString8 = 14, + ECmmGetConnMethodInfoInt = 12, + ECmmGetConnMethodInfoBool = 13, + ECmmGetConnMethodInfoString = 14, + ECmmGetConnMethodInfoString8 = 15, - ECmmUpdateBearerPriorityArray = 15, - ECmmWriteDefaultConnection = 16, - ECmmWriteGeneralConnectionSettings = 17, - ECmmCopyConnMethod = 18, - ECmmMoveConnMethod = 19, - ECmmRemoveConnMethod = 20, - ECmmRemoveAllReferences = 21, // Connection method becomes uncategorized. + ECmmUpdateBearerPriorityArray = 16, + ECmmWriteDefaultConnection = 17, + ECmmWriteGeneralConnectionSettings = 18, + ECmmCopyConnMethod = 19, + ECmmMoveConnMethod = 20, + ECmmRemoveConnMethod = 21, + ECmmRemoveAllReferences = 22, // Connection method becomes uncategorized. // RCmDestination starts from 100 EDestGetDestination = 100, @@ -145,21 +134,23 @@ EDestIsHidden = 110, EDestIsEqual = 111, EDestGetEmbeddedDestination = 112, + EDestGetIcon = 113, - EDestCreateDestinationWithName = 113, - EDestCreateDestinationWithNameAndId = 114, - EDestIsConnected = 115, - EDestAddConnMethod = 116, - EDestAddEmbeddedDestination = 117, - EDestDeleteConnMethod = 118, - EDestRemoveConnMethod = 119, - EDestModifyPriority = 120, - EDestSetName = 121, - EDestSetMetadata = 122, - EDestSetProtection = 123, - EDestSetHidden = 124, - EDestUpdate = 125, - EDestDelete = 126, + EDestCreateDestinationWithName = 114, + EDestCreateDestinationWithNameAndId = 115, + EDestIsConnected = 116, + EDestAddConnMethod = 117, + EDestAddEmbeddedDestination = 118, + EDestDeleteConnMethod = 119, + EDestRemoveConnMethod = 120, + EDestModifyPriority = 121, + EDestSetName = 122, + EDestSetMetadata = 123, + EDestSetProtection = 124, + EDestSetHidden = 125, + EDestUpdate = 126, + EDestDelete = 127, + EDestSetIcon = 128, //RCmConnectionMethod starts from 200 ECMGetConnMethodWithId = 200, diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmcommon/src/cmmclistatic.cpp --- a/cmmanager/cmmgr/cmmcommon/src/cmmclistatic.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmcommon/src/cmmclistatic.cpp Thu May 27 13:17:01 2010 +0300 @@ -28,12 +28,8 @@ * otherwise one of the system wide error codes. */ TInt TCmManagerLauncher::LaunchServer( - const TDesC& aServerName, const TDesC& aServerFileName, - const TUid& aServerUid3, - const TUint aWinsMinHeapSize, - const TUint aWinsMaxHeapSize, - const TUint aWinsStackSize ) + const TUid& aServerUid3 ) { RMutex mutex; TInt err( KErrNone ); @@ -55,10 +51,6 @@ RProcess server; err = server.Create( aServerFileName, KNullDesC, serverUid ); - (void)aServerName; - (void)aWinsMinHeapSize; - (void)aWinsMaxHeapSize; - (void)aWinsStackSize; if ( err != KErrNone ) { diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmpluginbase/group/cmmpluginbase.mmp --- a/cmmanager/cmmgr/cmmpluginbase/group/cmmpluginbase.mmp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmpluginbase/group/cmmpluginbase.mmp Thu May 27 13:17:01 2010 +0300 @@ -16,7 +16,6 @@ * */ -#include #include TARGET cmmpluginbase.dll diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmpluginbase/inc/ccmpluginbaseengtextresolver.h --- a/cmmanager/cmmgr/cmmpluginbase/inc/ccmpluginbaseengtextresolver.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmpluginbase/inc/ccmpluginbaseengtextresolver.h Thu May 27 13:17:01 2010 +0300 @@ -22,7 +22,7 @@ /** * Utility class for resolving localised text. */ -class CCmPluginBaseEngTextResolver +NONSHARABLE_CLASS( CCmPluginBaseEngTextResolver ) : public CBase { public: /** diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmpluginbase/src/ccmpluginbaseeng.cpp --- a/cmmanager/cmmgr/cmmpluginbase/src/ccmpluginbaseeng.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmpluginbase/src/ccmpluginbaseeng.cpp Thu May 27 13:17:01 2010 +0300 @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include "ccmpluginbaseengtextresolver.h" @@ -94,8 +94,6 @@ // void CCmClientPluginInstance::ConstructL() { - OstTraceFunctionEntry0( CCMCLIENTPLUGININSTANCE_CONSTRUCTL_ENTRY ); - OstTraceFunctionExit0( CCMCLIENTPLUGININSTANCE_CONSTRUCTL_EXIT ); } @@ -331,31 +329,31 @@ User::Leave( KErrAlreadyExists ); } - // optional record is disabled in default + // Optional record, disabled by default. iLocationEnabled = EFalse; - // create mandatory records - iIapRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord)); - iNetworkRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdNetworkRecord)); - iProxyRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdProxiesRecord)); + // Create mandatory records. + iIapRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) ); + iNetworkRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdNetworkRecord ) ); + iProxyRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) ); NewWapRecordL(); iWapIPBearerRecord->iWAPGatewayAddress.SetL( KDefWapGatewayIpAddress ); iMetaDataRecord = NewMetadataRecordL( ETrue ); - // call plugin to create its own records + // Call plugin to create its own records. CreateServiceRecordL(); - // Update iaprecord servicetype name + // Update iaprecord servicetype name. HBufC* servicetypeName( NULL ); ServiceRecordNameLC( servicetypeName ); iIapRecord->iServiceType.SetL( *servicetypeName ); CleanupStack::PopAndDestroy( servicetypeName ); - // Update iaprecord bearertype name + // Update iaprecord bearertype name. HBufC* bearerTypeName( NULL ); BearerRecordNameLC( bearerTypeName ); iIapRecord->iBearerType.SetL( *bearerTypeName ); @@ -365,7 +363,7 @@ EnableProxyL( EFalse ); - _LIT(KDefaultConnNameTextId, "txt_occ_setlabel_connection_name_val_connection"); + _LIT( KDefaultConnNameTextId, "txt_occ_setlabel_connection_name_val_connection" ); HBufC* resolvedText( NULL ); resolvedText = CCmPluginBaseEngTextResolver::ResolveTextL( KDefaultConnNameTextId ); if ( resolvedText != NULL ) @@ -400,23 +398,19 @@ // --------------------------------------------------------------------------- // EXPORT_C CCmPluginBaseEng* CCmPluginBaseEng::CreateCopyL( - CCmClientPluginInstance* /*aClientPluginInstance*/ ) + CCmClientPluginInstance* /*aClientPluginInstance*/ ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_CREATECOPYL_ENTRY ); TCmPluginInitParam params( iSession ); - CCmPluginBaseEng* copyInst = CreateInstanceL( params ); CleanupStack::PushL( copyInst ); PrepareToCopyDataL( copyInst ); - CopyDataL( copyInst ); - CleanupStack::Pop( copyInst ); OstTraceFunctionExit0( CCMPLUGINBASEENG_CREATECOPYL_EXIT ); - return copyInst; } @@ -427,7 +421,7 @@ EXPORT_C void CCmPluginBaseEng::GetGenericTableIdsToBeObserved( RArray& aTableIdArray ) const { - // Service and bearer records should be added by plugins + // Service and bearer records should be added by plugins. aTableIdArray.Append( KCDTIdIAPRecord ); aTableIdArray.Append( KCDTIdWAPAccessPointRecord ); @@ -460,17 +454,17 @@ CopyRecordDataL( KIapRecordIndex, aCopyInstance ); - // Ensure that iap's name is set by the rules(Naming Method) - SetNameL( iIapRecord->iRecordName.GetL(), - aCopyInstance->iIapRecord, - aCopyInstance->iNamingMethod ); + // Ensure that IAP's name is set by the rules (Naming Method). + SetNameL( + iIapRecord->iRecordName.GetL(), + aCopyInstance->iIapRecord, + aCopyInstance->iNamingMethod ); CopyRecordDataL( KServiceRecordIndex, aCopyInstance ); CopyRecordDataL( KNetworkRecordIndex, aCopyInstance ); CopyRecordDataL( KWAPAPRecordIndex, aCopyInstance ); CopyRecordDataL( KWAPBearerRecordIndex, aCopyInstance ); CopyRecordDataL( KMetaDataRecordIndex, aCopyInstance ); - CopyRecordDataL( KLocationRecordIndex, aCopyInstance ); CopyRecordDataL( KProxyRecordIndex, aCopyInstance ); CopyBearerRecordsL( aCopyInstance ); @@ -499,6 +493,8 @@ case KServiceRecordIndex: { aCopyInstance->iServiceRecord = CopyServiceRecordL(); + // The name of the service record copy is changed during update + // process, in PrepareToUpdateRecordsL()-method. } break; case KNetworkRecordIndex: @@ -521,18 +517,12 @@ break; case KMetaDataRecordIndex: { - aCopyInstance->iMetaDataRecord = + CCDIAPMetadataRecord* metadataRecord = new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId ); - aCopyInstance->iMetaDataRecord->iIAP = IAPRecordElementId(); - aCopyInstance->iMetaDataRecord->iMetadata.SetL( iMetaDataRecord->iMetadata ); - aCopyInstance->iMetaDataRecord->iSeamlessness.SetL( iMetaDataRecord->iSeamlessness ); - } - break; - case KLocationRecordIndex: - { - aCopyInstance->iWapIPBearerRecord = - static_cast - ( CCDRecordBase::CreateCopyRecordL( *iWapIPBearerRecord ) ); + CleanupStack::PushL( metadataRecord ); + CopyRecordFieldsL( *iMetaDataRecord, *metadataRecord ); + CleanupStack::Pop( metadataRecord ); + aCopyInstance->iMetaDataRecord = metadataRecord; } break; case KProxyRecordIndex: @@ -555,6 +545,87 @@ } // --------------------------------------------------------------------------- +// CCmPluginBaseEng:: CopyRecordFieldsL +// --------------------------------------------------------------------------- +// +void CCmPluginBaseEng::CopyRecordFieldsL( + CommsDat::CMDBRecordBase& aSource, + CommsDat::CMDBRecordBase& aDestination ) + { + OstTraceFunctionEntry0( CCMPLUGINBASEENG_COPYRECORDFIELDSL_ENTRY ); + + const SRecordTypeInfo* recordInfo = aSource.GetRecordInfo(); + if ( recordInfo == NULL ) + { + User::Leave( KErrCorrupt ); + } + + CMDBElement* ptrSource( NULL ); + CMDBElement* ptrDest( NULL ); + + while ( recordInfo != NULL && recordInfo->iTypeId != 0 ) + { + ptrSource = aSource.GetFieldByIdL( recordInfo->iTypeId ); + ptrDest = aDestination.GetFieldByIdL( recordInfo->iTypeId ); + + // Make sure we see only basic type info. Masks out any additional info + // on links (CommsDat internal stuff). + switch ( recordInfo->iValType & 0x000000ff ) + { + case CommsDat::EInt: + case CommsDat::EBool: + { + if ( !( ptrSource->IsNull() ) ) + { + static_cast&>( *ptrDest ).SetL( + static_cast&>( *ptrSource ) ); + } + } + break; + case CommsDat::EUint32: + case CommsDat::ELink: + { + if ( !( ptrSource->IsNull() ) ) + { + static_cast&>( *ptrDest ).SetL( + static_cast&>( *ptrSource ) ); + } + } + break; + case CommsDat::EDesC8: + { + if ( !( ptrSource->IsNull() ) ) + { + static_cast&>( *ptrDest ).SetL( + static_cast&>( *ptrSource ) ); + } + } + break; + case CommsDat::EText: + case CommsDat::EMedText: + case CommsDat::ELongText: + { + if ( !( ptrSource->IsNull() ) ) + { + static_cast&>( *ptrDest ).SetL( + static_cast&>( *ptrSource ) ); + } + } + break; + default: + { + User::Leave( KErrCorrupt ); + } + break; + } + ptrDest->SetAttributes( ptrSource->Attributes() ); + recordInfo++; + } + + OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYRECORDFIELDSL_EXIT ); + } + +// --------------------------------------------------------------------------- // CCmPluginBaseEng::DoLoadL // --------------------------------------------------------------------------- // @@ -568,7 +639,6 @@ LoadWapRecordL(); LoadMetadataRecordL(); LoadNetworkRecordL(); - LoadLocationRecordL(); // This is a connectionmethodinfo instance, that has no // service and proxy setting. @@ -637,7 +707,7 @@ // Now try to find the linked proxy record // create new record - CCDProxiesRecord* proxyRecord = static_cast( + CCDProxiesRecord* proxyRecord = static_cast( CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) ); CleanupStack::PushL( proxyRecord ); @@ -653,7 +723,7 @@ if ( proxieRS->FindL(iSession) ) { TInt i( 0 ); - while( i < proxieRS->iRecords.Count() ) + while ( i < proxieRS->iRecords.Count() ) // Now that we have a list of services with the proper service type // search for our proxy record and remove it from the array, // then destroy the array. @@ -726,27 +796,6 @@ void CCmPluginBaseEng::LoadLocationRecordL() { OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADLOCATIONSETTINGL_ENTRY ); - - CCDLocationRecord* locationRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdLocationRecord)); - - CleanupStack::PushL( locationRecord ); - - locationRecord->SetRecordId( iIapRecord->iLocation ); - if ( locationRecord->FindL(iSession) ) - { - iLocationEnabled = ETrue; - - iLocationRecord = locationRecord; - - CleanupStack::Pop( locationRecord ); - } - else - { - iLocationEnabled = EFalse; - - CleanupStack::PopAndDestroy( locationRecord ); - } OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADLOCATIONSETTINGL_EXIT ); } @@ -755,24 +804,28 @@ // --------------------------------------------------------------------------- // void CCmPluginBaseEng::PrepareToUpdateRecordsL( - CCmClientPluginInstance* aClientPluginInstance ) + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_PREPARETOUPDATERECORDSL_ENTRY ); - // Set the record attributes to bearer specific records - CCDIAPRecord* iapRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + //TODO, Add null checks for mandatory generic record pointers. + // + + // Set the record attributes to bearer specific records. + CCDIAPRecord* iapRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); for ( TInt i = 0; i < aClientPluginInstance->iBearerSpecRecordArray.Count(); i++ ) { - CCDRecordBase* record = - static_cast( aClientPluginInstance->iBearerSpecRecordArray[i] ); + CCDRecordBase* record = static_cast( + aClientPluginInstance->iBearerSpecRecordArray[i] ); CopyAttributes( iapRecord, record ); } - PreparePluginToUpdateRecordsL( aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ); + PreparePluginToUpdateRecordsL( + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ); OstTraceFunctionExit0( CCMPLUGINBASEENG_PREPARETOUPDATERECORDSL_EXIT ); } @@ -782,16 +835,16 @@ // --------------------------------------------------------------------------- // void CCmPluginBaseEng::UpdateIAPRecordL( - CCmClientPluginInstance* aClientPluginInstance ) + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEIAPRECORDL_ENTRY ); - CCDIAPRecord* iapRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + CCDIAPRecord* iapRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); if ( iIapId == 0 ) { - // Otherwise predefined iapid + // Otherwise predefined iapid. if ( !iIapRecord->RecordId() ) { iIapRecord->SetRecordId( KCDNewRecordRequest ); @@ -814,14 +867,7 @@ iIapRecord->iNetwork = iNetworkRecord->RecordId(); - if ( iLocationRecord ) - { - iIapRecord->iLocation = iLocationRecord->RecordId(); - } - else - { - iIapRecord->iLocation = GetLocationIdL(); - } + iIapRecord->iLocation = GetLocationIdL(); CopyAttributes( iapRecord, iIapRecord ); CheckIfNameModifiedL( iapRecord, iIapRecord ); @@ -840,24 +886,24 @@ CleanupStack::PushL( iapRecord ); aClientPluginInstance->iGenRecordArray.InsertL( - static_cast( tempIapRecord ), KIapRecordIndex ); + static_cast( tempIapRecord ), + KIapRecordIndex ); CleanupStack::PopAndDestroy( iapRecord ); CleanupStack::Pop( tempIapRecord ); - } else { delete iIapRecord; iIapRecord = NULL; - iIapRecord = static_cast - ( CCDRecordBase::CreateCopyRecordL( *iapRecord ) ); + iIapRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iapRecord ) ); iIapRecord->SetElementId( iapRecord->ElementId() ); - iIapRecord->ModifyL( iSession ); } + OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATEIAPRECORDL_EXIT ); } @@ -876,6 +922,11 @@ CCDProxiesRecord* proxyRecord = static_cast( aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); + if ( !iapRecord || !proxyRecord ) + { + User::Leave( KErrCorrupt ); + } + CopyAttributes( iapRecord, proxyRecord ); CheckIfNameModifiedL( iapRecord, proxyRecord ); @@ -884,17 +935,17 @@ delete iProxyRecord; iProxyRecord = NULL; - iProxyRecord = static_cast - ( CCDRecordBase::CreateCopyRecordL( *proxyRecord ) ); + iProxyRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *proxyRecord ) ); iProxyRecord->SetElementId( proxyRecord->ElementId() ); if ( !iProxyRecord->RecordId() ) - // new proxy setting -> create new record { + // New proxy setting -> create new record. iProxyRecord->iService = iServiceRecord->RecordId(); iProxyRecord->iServiceType.SetL( iIapRecord->iServiceType ); - // By default protocol is set to "http" + // By default protocol is set to "http". if ( TPtrC( proxyRecord->iProtocolName ).Length() == 0 ) { iProxyRecord->iProtocolName.SetL( KDefProxyProtocolName ); @@ -907,7 +958,7 @@ proxyRecord->iServiceType.SetL( iIapRecord->iServiceType ); } else - // already existing record -> update only + // Already existing record -> update only. { iProxyRecord->ModifyL( iSession ); } @@ -919,6 +970,7 @@ iProxyRecord->DeleteL( iSession ); } } + OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATEPROXYRECORDL_EXIT ); } @@ -931,32 +983,29 @@ { OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEMETADATARECORDL_ENTRY ); - CCDIAPRecord* iapRecord = static_cast( + CCDIAPRecord* clientIapRecord = static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); - CCDIAPMetadataRecord* metadataRecord = static_cast( + CCDIAPMetadataRecord* clientMetadataRecord = static_cast( aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] ); - CopyAttributes( iapRecord, metadataRecord ); - CheckIfNameModifiedL( iapRecord, metadataRecord ); - + // Adjust client side metadata record attributes and name if needed. + CopyAttributes( clientIapRecord, clientMetadataRecord ); + CheckIfNameModifiedL( clientIapRecord, clientMetadataRecord ); + + // Make a copy of client's metadata record and save to database. delete iMetaDataRecord; iMetaDataRecord = NULL; - - // Get a new blank IAP metadata record. - iMetaDataRecord = NewMetadataRecordL( EFalse ); - - iMetaDataRecord->SetElementId( metadataRecord->ElementId() ); - iMetaDataRecord->iRecordName.SetL( metadataRecord->iRecordName ); - iMetaDataRecord->iMetadata.SetL( metadataRecord->iMetadata ); - iMetaDataRecord->iSeamlessness.SetL( metadataRecord->iSeamlessness ); + iMetaDataRecord = new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId ); + CopyRecordFieldsL( *clientMetadataRecord, *iMetaDataRecord ); + iMetaDataRecord->SetElementId( clientMetadataRecord->ElementId() ); if ( !iMetaDataRecord->RecordId() ) { iMetaDataRecord->iIAP = IAPRecordElementId(); iMetaDataRecord->SetRecordId( KCDNewRecordRequest ); iMetaDataRecord->StoreL( iSession ); - metadataRecord->SetElementId( iMetaDataRecord->ElementId() ); + clientMetadataRecord->SetElementId( iMetaDataRecord->ElementId() ); } else { @@ -975,16 +1024,17 @@ { OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATESERVICERECORDL_ENTRY ); - CCDIAPRecord* iapRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); - - CCDRecordBase* serviceRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KServiceRecordIndex] ); + CCDIAPRecord* iapRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + + CCDRecordBase* serviceRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KServiceRecordIndex] ); CopyAttributes( iapRecord, serviceRecord ); - UpdateServiceRecordL( aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ); + UpdateServiceRecordL( + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ); OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATESERVICERECORDL_EXIT ); } @@ -994,15 +1044,15 @@ // --------------------------------------------------------------------------- // void CCmPluginBaseEng::UpdateNetworkRecordL( - CCmClientPluginInstance* aClientPluginInstance ) + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATENETWORKRECORDL_ENTRY ); - CCDIAPRecord* iapRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); - - CCDNetworkRecord* networkRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KNetworkRecordIndex] ); + CCDIAPRecord* iapRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + + CCDNetworkRecord* networkRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KNetworkRecordIndex] ); CopyAttributes( iapRecord, networkRecord ); @@ -1011,8 +1061,8 @@ CheckIfNameModifiedL( iapRecord, networkRecord ); - iNetworkRecord = static_cast - ( CCDRecordBase::CreateCopyRecordL( *networkRecord ) ); + iNetworkRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *networkRecord ) ); iNetworkRecord->SetElementId( networkRecord->ElementId() ); @@ -1026,6 +1076,7 @@ { iNetworkRecord->ModifyL( iSession ); } + OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATENETWORKRECORDL_EXIT ); } @@ -1034,49 +1085,9 @@ // --------------------------------------------------------------------------- // void CCmPluginBaseEng::UpdateLocationRecordL( - CCmClientPluginInstance* aClientPluginInstance ) + CCmClientPluginInstance* /*aClientPluginInstance*/ ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATELOCATIONRECORDL_ENTRY ); - - if ( iLocationEnabled ) - { - CCDIAPRecord* iapRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); - - CCDLocationRecord* locationRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KLocationRecordIndex] ); - - // location record is not set as hidden because it can be shared between iaps - CopyAttributes( iapRecord, locationRecord ); - locationRecord->ClearAttributes( ECDHidden ); - - delete iLocationRecord; - iLocationRecord = NULL; - - iLocationRecord = static_cast - ( CCDRecordBase::CreateCopyRecordL( *locationRecord ) ); - - iLocationRecord->SetElementId( locationRecord->ElementId() ); - - CheckIfNameModifiedL( iapRecord, locationRecord ); - - if ( !iLocationRecord->RecordId() ) - { - iLocationRecord->SetRecordId( KCDNewRecordRequest ); - iLocationRecord->StoreL( iSession ); - } - else - { - iLocationRecord->ModifyL( iSession ); - } - } - else - { - if ( iLocationRecord ) - { - iLocationRecord->DeleteL( iSession ); - } - } OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATELOCATIONRECORDL_EXIT ); } @@ -1105,8 +1116,8 @@ if ( !iProxyRecord ) { - iProxyRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdProxiesRecord)); + iProxyRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) ); } iProxyRecord->iUseProxyServer = aEnable; @@ -1122,15 +1133,7 @@ { OstTraceFunctionEntry0( CCMPLUGINBASEENG_ENABLELOCATIONL_ENTRY ); - if ( aEnable ) - { - if ( !iLocationRecord ) - { - iLocationRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdLocationRecord)); - } - } - + // Not supported anymore iLocationEnabled = aEnable; OstTraceFunctionExit0( CCMPLUGINBASEENG_ENABLELOCATIONL_EXIT ); @@ -1147,8 +1150,8 @@ iWapIPBearerRecord = FindWAPRecordL(); if ( iWapIPBearerRecord ) { - CCDWAPAccessPointRecord *wapApRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdWAPAccessPointRecord)); + CCDWAPAccessPointRecord *wapApRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) ); CleanupStack::PushL( wapApRecord ); @@ -1158,8 +1161,8 @@ { CleanupStack::PopAndDestroy( wapApRecord ); - wapApRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdWAPAccessPointRecord)); + wapApRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) ); } else { @@ -1175,6 +1178,7 @@ { NewWapRecordL(); } + OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADWAPRECORDL_EXIT ); } @@ -1196,7 +1200,7 @@ // --------------------------------------------------------------------------- // void CCmPluginBaseEng::UpdateWapRecordL( - CCmClientPluginInstance* aClientPluginInstance ) + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEWAPRECORDL_ENTRY ); @@ -1206,14 +1210,14 @@ delete iWapIPBearerRecord; iWapIPBearerRecord = NULL; - CCDIAPRecord* iapRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); - - CCDWAPAccessPointRecord* wapAPRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] ); - - CCDWAPIPBearerRecord* wapIPBearerRecord = - static_cast( aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); + CCDIAPRecord* iapRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + + CCDWAPAccessPointRecord* wapAPRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] ); + + CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); CopyAttributes( iapRecord, wapAPRecord ); CopyAttributes( iapRecord, wapIPBearerRecord ); @@ -1221,12 +1225,12 @@ CheckIfNameModifiedL( iapRecord, wapAPRecord ); CheckIfNameModifiedL( iapRecord, wapIPBearerRecord ); - iWapAPRecord = static_cast - ( CCDRecordBase::CreateCopyRecordL( *wapAPRecord ) ); + iWapAPRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *wapAPRecord ) ); iWapAPRecord->SetElementId( wapAPRecord->ElementId() ); - iWapIPBearerRecord = static_cast - ( CCDRecordBase::CreateCopyRecordL( *wapIPBearerRecord ) ); + iWapIPBearerRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *wapIPBearerRecord ) ); iWapIPBearerRecord->SetElementId( wapIPBearerRecord->ElementId() ); if ( !iWapAPRecord->RecordId() ) @@ -1256,6 +1260,7 @@ { iWapIPBearerRecord->ModifyL( iSession ); } + OstTraceFunctionExit0( DUP1_CCMPLUGINBASEENG_UPDATEWAPRECORDL_EXIT ); } @@ -1269,8 +1274,8 @@ if ( !iWapIPBearerRecord ) { - iWapIPBearerRecord = static_cast - ( CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) ); + iWapIPBearerRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) ); iWapIPBearerRecord->iWAPProxyPort = 0; iWapIPBearerRecord->iWAPWSPOption = ECmWapWspOptionConnectionOriented; iWapIPBearerRecord->iWAPSecurity = EFalse; @@ -1278,11 +1283,12 @@ if ( !iWapAPRecord ) { - iWapAPRecord = static_cast - ( CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) ); - // SMS bearer is not supported by this version + iWapAPRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) ); + // SMS bearer is not supported by this version. iWapAPRecord->iWAPCurrentBearer.SetL( TPtrC( KCDTypeNameWAPIPBearer ) ); } + OstTraceFunctionExit0( CCMPLUGINBASEENG_NEWWAPRECORDL_EXIT ); } @@ -1313,9 +1319,10 @@ // CCmPluginBaseEng::SetAttribute // --------------------------------------------------------------------------- // -void CCmPluginBaseEng::SetAttribute( CCDRecordBase* aRecord, - TUint32 aAttribute, - TBool aSet ) +void CCmPluginBaseEng::SetAttribute( + CCDRecordBase* aRecord, + TUint32 aAttribute, + TBool aSet ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETATTRIBUTE_ENTRY ); @@ -1335,22 +1342,23 @@ // CCmPluginBaseEng::CopyAttributes // --------------------------------------------------------------------------- // -void CCmPluginBaseEng::CopyAttributes( CCDRecordBase* aSrcRecord, - CCDRecordBase* aDstRecord ) +void CCmPluginBaseEng::CopyAttributes( + CCDRecordBase* aSrcRecord, + CCDRecordBase* aDstRecord ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_COPYATTRIBUTES_ENTRY ); if ( aSrcRecord == NULL || aDstRecord == NULL ) { + OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYATTRIBUTES_EXIT ); return; } - // clear the target record attributes first + // Clear the target record attributes first. aDstRecord->ClearAttributes( aDstRecord->Attributes() ); - aDstRecord->SetAttributes( aSrcRecord->Attributes() ); - OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYATTRIBUTES_EXIT ); + OstTraceFunctionExit0( DUP1_CCMPLUGINBASEENG_COPYATTRIBUTES_EXIT ); } // --------------------------------------------------------------------------- @@ -1362,12 +1370,11 @@ OstTraceFunctionEntry0( CCMPLUGINBASEENG_FINDWAPRECORDL_ENTRY ); CMDBRecordSet* wapRS = - new(ELeave) - CMDBRecordSet(KCDTIdWAPIPBearerRecord); + new( ELeave ) CMDBRecordSet( KCDTIdWAPIPBearerRecord ); CleanupStack::PushL( wapRS ); - CCDWAPIPBearerRecord* wapBearerRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdWAPIPBearerRecord)); + CCDWAPIPBearerRecord* wapBearerRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) ); CleanupStack::PushL( wapBearerRecord ); @@ -1377,19 +1384,17 @@ CleanupStack::Pop( wapBearerRecord ); wapBearerRecord = NULL; - if ( wapRS->FindL(iSession) ) + if ( wapRS->FindL( iSession ) ) { - wapBearerRecord = - static_cast(wapRS->iRecords[0]); - - // we take over the ownership of this record + wapBearerRecord = static_cast( wapRS->iRecords[0] ); + + // Take over the ownership of this record. wapRS->iRecords.Remove( 0 ); } CleanupStack::PopAndDestroy( wapRS ); OstTraceFunctionExit0( CCMPLUGINBASEENG_FINDWAPRECORDL_EXIT ); - return wapBearerRecord; } @@ -1402,12 +1407,11 @@ OstTraceFunctionEntry0( CCMPLUGINBASEENG_FINDSEAMLESSNESSRECORDL_ENTRY ); CMDBRecordSet* metadataRecordSet = - new(ELeave) CMDBRecordSet( iMetadataTableId ); + new( ELeave ) CMDBRecordSet( iMetadataTableId ); CleanupStack::PushL( metadataRecordSet ); CCDIAPMetadataRecord* metadataRecord = - new (ELeave) CCDIAPMetadataRecord( iMetadataTableId ); - + new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId ); CleanupStack::PushL( metadataRecord ); metadataRecord->iIAP = IAPRecordElementId(); @@ -1434,7 +1438,6 @@ CleanupStack::PopAndDestroy( metadataRecordSet ); OstTraceFunctionExit0( CCMPLUGINBASEENG_FINDSEAMLESSNESSRECORDL_EXIT ); - return metadataRecord; } @@ -1442,8 +1445,9 @@ // CCmPluginBaseEng::DoMakeValidNameL // --------------------------------------------------------------------------- // -HBufC* CCmPluginBaseEng::DoMakeValidNameL( const TDesC& aName, - const TUint32& aIapId ) +HBufC* CCmPluginBaseEng::DoMakeValidNameL( + const TDesC& aName, + const TUint32& aIapId ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_DOMAKEVALIDNAMEL_ENTRY ); @@ -1469,9 +1473,9 @@ { changed = ETrue; postfix++; - // check the length of postfix, check text length accordingly + // Check the length of postfix, check text length accordingly. pf = postfix; - for (i=1; i<10; i++) + for ( i = 1; i < 10; i++ ) { pf /= 10; if ( !pf ) @@ -1496,7 +1500,7 @@ } if ( postfix ) { - TBuf< KMaxPostfixLength > postfixString; + TBuf postfixString; if ( postfix > 9 ) { postfixString.Format( KFormatLargePostfix, postfix ); @@ -1507,8 +1511,7 @@ postfixString.Format( KFormatPostfix, postfix ); // TODO: AknTextUtils::LanguageSpecificNumberConversion( postfixString ); } - sgdptr.Format( KFormatNameWithPostfix, &sgdptr2, - &postfixString ); + sgdptr.Format( KFormatNameWithPostfix, &sgdptr2, &postfixString ); } else { @@ -1531,7 +1534,6 @@ } OstTraceFunctionExit0( CCMPLUGINBASEENG_DOMAKEVALIDNAMEL_EXIT ); - return temp; } @@ -1539,8 +1541,9 @@ // CCmPluginBaseEng::EnsureMaxLengthLC // --------------------------------------------------------------------------- // -HBufC* CCmPluginBaseEng::EnsureMaxLengthLC( const TDesC& aName, - TBool& aChanged ) +HBufC* CCmPluginBaseEng::EnsureMaxLengthLC( + const TDesC& aName, + TBool& aChanged ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_ENSUREMAXLENGTHLC_ENTRY ); @@ -1556,7 +1559,8 @@ HBufC* corrname; if ( KApMaxConnNameLength < length ) - { // name too long, truncate. + { + // Name too long, truncate. corrname = aName.Left( KApMaxConnNameLength ).AllocLC(); aChanged = ETrue; } @@ -1568,7 +1572,7 @@ { User::Leave( KErrArgument ); } - // comes here only if name is valid + // Comes here only if name is valid. if ( corrname->Length() != aName.Length() ) { aChanged = ETrue; @@ -1576,7 +1580,6 @@ } OstTraceFunctionExit0( CCMPLUGINBASEENG_ENSUREMAXLENGTHLC_EXIT ); - return corrname; } @@ -1613,8 +1616,8 @@ prefix.Set( aName.Left( lastBrace ) ); } } + OstTraceFunctionExit0( CCMPLUGINBASEENG_GETPREFIX_EXIT ); - return prefix; } @@ -1682,8 +1685,8 @@ } } } + OstTraceFunctionExit0( CCMPLUGINBASEENG_GETPOSTFIX_EXIT ); - return postfix; } @@ -1691,49 +1694,46 @@ // CCmPluginBaseEng::IsValidNameL // --------------------------------------------------------------------------- // -TBool CCmPluginBaseEng::IsValidNameL( const TDesC& aNameText, - const TUint32& aIapId ) +TBool CCmPluginBaseEng::IsValidNameL( + const TDesC& aNameText, + const TUint32& aIapId ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_ISVALIDNAMEL_ENTRY ); TBool retVal( ETrue ); CMDBRecordSet* iapRS = - new(ELeave) CMDBRecordSet(KCDTIdIAPRecord); + new( ELeave ) CMDBRecordSet(KCDTIdIAPRecord); CleanupStack::PushL(iapRS); - CCDIAPRecord* iapRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord)); - + CCDIAPRecord* iapRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) ); CleanupStack::PushL( iapRecord ); - // Prime record + // Prime record. iapRecord->iRecordName.SetL( aNameText ); - iapRS->iRecords.AppendL( iapRecord ); - CleanupStack::Pop( iapRecord ); - iapRecord = NULL; - if ( iapRS->FindL(iSession) ) + if ( iapRS->FindL( iSession ) ) { if ( iIapId ) - // this is not a new CM { + // This is not a new CM. for ( TInt i = 0; i < iapRS->iRecords.Count(); ++i ) { if ( iapRS->iRecords[i]->RecordId() != aIapId ) - // duplication because it's not our name { + // Duplication because it's not our name. retVal = EFalse; break; } } } else - // new CM -> any occurence is a duplication { + // New CM -> any occurence is a duplication. retVal = EFalse; } } @@ -1741,7 +1741,6 @@ CleanupStack::PopAndDestroy( iapRS ); OstTraceFunctionExit0( CCMPLUGINBASEENG_ISVALIDNAMEL_EXIT ); - return retVal; } @@ -1760,7 +1759,7 @@ TUint quote( '\'' ); // TChar gives warnings in THUMB & ARMI TInt i( 0 ); - for ( i=0; iiRecordName.SetL( *newName ); @@ -1817,6 +1816,7 @@ { User::Leave( KErrCorrupt ); } + OstTraceFunctionExit0( CCMPLUGINBASEENG_SETDEFAULTNAMEL_EXIT ); } @@ -1841,7 +1841,7 @@ HBufC* newName = DoMakeValidNameL( aName, iapid ); if ( newName ) - // name converted to unique + // Name converted to unique. { CleanupStack::PushL( newName ); aIapRecord->iRecordName.SetL( *newName ); @@ -1880,9 +1880,14 @@ { OstTraceFunctionEntry0( CCMPLUGINBASEENG_CHECKIFNAMEMODIFIEDL_ENTRY ); + if ( !aSrcRecord || !aDestRecord ) + { + User::Leave( KErrCorrupt ); + } + if ( !TPtrC( aSrcRecord->iRecordName ).CompareF( TPtrC( aDestRecord->iRecordName ) ) ) - // names matche { + // Names match. OstTraceFunctionExit0( CCMPLUGINBASEENG_CHECKIFNAMEMODIFIEDL_EXIT ); return; } @@ -1897,8 +1902,6 @@ // --------------------------------------------------------------------------- TMDBElementId CCmPluginBaseEng::IAPRecordElementId() const { - OstTraceFunctionEntry0( CCMPLUGINBASEENG_IAPRECORDELEMENTID_ENTRY ); - return ( KCDMaskShowField & iIapRecord->ElementId() ); } @@ -1921,45 +1924,43 @@ TUint32 locId( 0 ); CMDBRecordSet* locRS = - new(ELeave) CMDBRecordSet(KCDTIdLocationRecord); + new( ELeave ) CMDBRecordSet( KCDTIdLocationRecord ); CleanupStack::PushL( locRS ); - CCDLocationRecord* locRecord = static_cast - (CCDRecordBase::RecordFactoryL(KCDTIdLocationRecord)); - + CCDLocationRecord* locRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLocationRecord ) ); CleanupStack::PushL( locRecord ); + locRecord->iRecordName.SetL( KLocationName ); locRS->iRecords.AppendL( locRecord ); CleanupStack::Pop( locRecord ); if ( locRS->FindL(iSession) ) { - locRecord = static_cast(locRS->iRecords[0]); - + locRecord = static_cast( locRS->iRecords[0] ); locId = locRecord->RecordId(); } else { - User::Leave( KErrNotFound ); + User::Leave( KErrNotFound ); //TODO, what to do if not found. Can we create it? need study. } CleanupStack::PopAndDestroy( locRS ); OstTraceFunctionExit0( CCMPLUGINBASEENG_GETLOCATIONIDL_EXIT ); - return locId; } // --------------------------------------------------------------------------- // CCmPluginBaseEng::SetProxyServerNameL // --------------------------------------------------------------------------- - void CCmPluginBaseEng::SetProxyServerNameL( const TDesC& aProxyServer, - CCDRecordBase* aProxyRecord ) + void CCmPluginBaseEng::SetProxyServerNameL( + const TDesC& aProxyServer, + CCDRecordBase* aProxyRecord ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETPROXYSERVERNAMEL_ENTRY ); - CCDProxiesRecord* proxyRecord = - static_cast( aProxyRecord ); + CCDProxiesRecord* proxyRecord = static_cast( aProxyRecord ); proxyRecord->iServerName.SetL( aProxyServer ); if ( !aProxyServer.Length() ) @@ -1979,10 +1980,11 @@ // CCmPluginBaseEng::CheckDNSServerAddressL // --------------------------------------------------------------------------- // -EXPORT_C void CCmPluginBaseEng::CheckDNSServerAddressL( TBool aIPv6, - CMDBField& aDNS1, - CMDBField& aDNS2, - CMDBField& aDNSFromServer ) +EXPORT_C void CCmPluginBaseEng::CheckDNSServerAddressL( + TBool aIPv6, + CMDBField& aDNS1, + CMDBField& aDNS2, + CMDBField& aDNSFromServer ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_CHECKDNSSERVERADDRESSL_ENTRY ); @@ -1999,7 +2001,7 @@ } else { - // Both are unspecified + // Both are unspecified. aDNSFromServer = ETrue; } } @@ -2015,7 +2017,7 @@ } else { - // Both are unspecified + // Both are unspecified. aDNSFromServer = ETrue; } } @@ -2046,11 +2048,12 @@ if ( iIapRecord ) { - CCDIAPRecord* iapRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iIapRecord ) ); + CCDIAPRecord* iapRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iIapRecord ) ); + iapRecord->SetElementId( iIapRecord->ElementId() ); CleanupStack::PushL( iapRecord ); - iapRecord->SetElementId( iIapRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( iapRecord ) ); + aClientPluginInstance->iGenRecordArray.AppendL( + static_cast( iapRecord ) ); CleanupStack::Pop( iapRecord ); } else @@ -2073,11 +2076,12 @@ if ( iNetworkRecord ) { - CCDNetworkRecord* networkRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iNetworkRecord ) ); + CCDNetworkRecord* networkRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iNetworkRecord ) ); + networkRecord->SetElementId( iNetworkRecord->ElementId() ); CleanupStack::PushL( networkRecord ); - networkRecord->SetElementId( iNetworkRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( networkRecord ) ); + aClientPluginInstance->iGenRecordArray.AppendL( + static_cast( networkRecord ) ); CleanupStack::Pop( networkRecord ); } else @@ -2087,11 +2091,12 @@ if ( iWapAPRecord ) { - CCDWAPAccessPointRecord* wapAPRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iWapAPRecord ) ); + CCDWAPAccessPointRecord* wapAPRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iWapAPRecord ) ); + wapAPRecord->SetElementId( iWapAPRecord->ElementId() ); CleanupStack::PushL( wapAPRecord ); - wapAPRecord->SetElementId( iWapAPRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( wapAPRecord ) ); + aClientPluginInstance->iGenRecordArray.AppendL( + static_cast( wapAPRecord ) ); CleanupStack::Pop( wapAPRecord ); } else @@ -2101,11 +2106,12 @@ if ( iWapIPBearerRecord ) { - CCDWAPIPBearerRecord* wapIPBearerRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iWapIPBearerRecord ) ); + CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iWapIPBearerRecord ) ); + wapIPBearerRecord->SetElementId( iWapIPBearerRecord->ElementId() ); CleanupStack::PushL( wapIPBearerRecord ); - wapIPBearerRecord->SetElementId( iWapIPBearerRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( wapIPBearerRecord ) ); + aClientPluginInstance->iGenRecordArray.AppendL( + static_cast( wapIPBearerRecord ) ); CleanupStack::Pop( wapIPBearerRecord ); } else @@ -2115,45 +2121,33 @@ if ( iMetaDataRecord ) { - CCDIAPMetadataRecord* metaDataRecord = + CCDIAPMetadataRecord* metadataRecord = new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId ); - CleanupStack::PushL( metaDataRecord ); - metaDataRecord->iIAP = IAPRecordElementId(); - metaDataRecord->iMetadata.SetL( iMetaDataRecord->iMetadata ); - metaDataRecord->iSeamlessness.SetL( iMetaDataRecord->iSeamlessness ); - metaDataRecord->SetElementId( iMetaDataRecord->ElementId() ); - // Record name is set during update. + CleanupStack::PushL( metadataRecord ); + CopyRecordFieldsL( *iMetaDataRecord, *metadataRecord ); + metadataRecord->SetElementId( iMetaDataRecord->ElementId() ); + // Record name is set/changed during update. aClientPluginInstance->iGenRecordArray.AppendL( - static_cast( metaDataRecord ) ); - CleanupStack::Pop( metaDataRecord ); + static_cast( metadataRecord ) ); + CleanupStack::Pop( metadataRecord ); } else { aClientPluginInstance->iGenRecordArray.AppendL( NULL ); } - if ( iLocationRecord ) - { - CCDLocationRecord* locationRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iLocationRecord ) ); - CleanupStack::PushL( locationRecord ); - locationRecord->SetElementId( iLocationRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( locationRecord ) ); - CleanupStack::Pop( locationRecord ); - } - else - { - aClientPluginInstance->iGenRecordArray.AppendL( NULL ); - } + // Location record does not need to be loaded + aClientPluginInstance->iGenRecordArray.AppendL( NULL ); if ( iProxyRecord ) { - CCDProxiesRecord* proxyRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iProxyRecord ) ); + CCDProxiesRecord* proxyRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iProxyRecord ) ); + proxyRecord->SetElementId( iProxyRecord->ElementId() ); CleanupStack::PushL( proxyRecord ); - proxyRecord->SetElementId( iProxyRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( proxyRecord ) ); + aClientPluginInstance->iGenRecordArray.AppendL( + static_cast( proxyRecord ) ); CleanupStack::Pop( proxyRecord ); } else @@ -2330,9 +2324,10 @@ break; case ECmDestination: { - TRAPD( err, retVal = GetBearerBoolAttributeL( aAttribute, - aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ) ); + TRAPD( err, retVal = GetBearerBoolAttributeL( + aAttribute, + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ) ); if ( err ) { if ( err == KErrNotFound ) @@ -2351,12 +2346,18 @@ retVal = EFalse; } break; + case ECmLocationUsageEnabled: + { + retVal = iLocationEnabled; + } + break; case ECmCoverage: // By default the plugin has no network coverage. { - TRAPD( err, retVal = GetBearerBoolAttributeL( aAttribute, - aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ) ); + TRAPD( err, retVal = GetBearerBoolAttributeL( + aAttribute, + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ) ); if ( err ) { if ( err == KErrNotFound ) @@ -2372,16 +2373,14 @@ break; case ECmMetaHighlight: { - CCDIAPMetadataRecord* metadataRecord = - static_cast( + CCDIAPMetadataRecord* metadataRecord = static_cast( aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] ); retVal = metadataRecord->iMetadata & EMetaHighlight; } break; case ECmMetaHiddenAgent: { - CCDIAPMetadataRecord* metadataRecord = - static_cast( + CCDIAPMetadataRecord* metadataRecord = static_cast( aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] ); retVal = metadataRecord->iMetadata & EMetaHiddenAgent; } @@ -2420,16 +2419,40 @@ { OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETSTRINGATTRIBUTEL_ENTRY ); + if ( !aClientPluginInstance ) + { + User::Leave( KErrCorrupt ); + } + HBufC* retVal = NULL; switch ( aAttribute ) { + case ECmBearerIcon: + { + //TODO, read icon name from metadata record after commsdat changes implemented. + //CCDIAPMetadataRecord* metadataRecord = static_cast( + // aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] ); + + //if ( !metadataRecord ) + // { + // User::Leave( KErrCorrupt ); + // } + + //retVal = TPtrC( metadataRecord->iIconFileName ).AllocL(); + retVal = KNullDesC().AllocL();//TODO, check this freed + } + break; case ECmStartPage: { - CCDWAPAccessPointRecord* wapAPRecord = - static_cast( + CCDWAPAccessPointRecord* wapAPRecord = static_cast( aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] ); + if ( !wapAPRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( wapAPRecord->iWAPStartPage ).AllocL(); } break; @@ -2438,84 +2461,89 @@ CCDIAPRecord* iapRecord = static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + if ( !iapRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( iapRecord->iRecordName ).AllocL(); } break; case ECmProxyServerName: { - if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ) - { - User::Leave( KErrNotFound ); - } - CCDProxiesRecord* proxyRecord = static_cast( aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); + if ( !proxyRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( proxyRecord->iServerName ).AllocL(); } break; case ECmProxyProtocolName: { - if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ) - { - User::Leave( KErrNotFound ); - } - CCDProxiesRecord* proxyRecord = static_cast( aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); + if ( !proxyRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( proxyRecord->iExceptions ).AllocL(); } break; case ECmProxyExceptions: { - if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ) - { - User::Leave( KErrNotFound ); - } - CCDProxiesRecord* proxyRecord = static_cast( aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); + if ( !proxyRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( proxyRecord->iProtocolName ).AllocL(); } break; case ECmWapIPGatewayAddress: { - if ( !aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ) - { - User::Leave( KErrNotFound ); - } - CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); + if ( !wapIPBearerRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( wapIPBearerRecord->iWAPGatewayAddress ).AllocL(); } break; case ECmWapIPProxyLoginName: { - if ( !aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ) - { - User::Leave( KErrNotFound ); - } - CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); + if ( !wapIPBearerRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( wapIPBearerRecord->iWAPProxyLoginName ).AllocL(); } break; case ECmWapIPProxyLoginPass: { - if ( !aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ) - { - User::Leave( KErrNotFound ); - } - CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); + if ( !wapIPBearerRecord ) + { + User::Leave( KErrCorrupt ); + } + retVal = TPtrC( wapIPBearerRecord->iWAPProxyLoginPass ).AllocL(); } break; @@ -2560,13 +2588,13 @@ return retVal; } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CCmPluginBaseEng::GetIntAttributeL // ----------------------------------------------------------------------------- EXPORT_C void CCmPluginBaseEng::SetIntAttributeL( - TUint32 aAttribute, - TUint32 aValue, - CCmClientPluginInstance* aClientPluginInstance ) + TUint32 aAttribute, + TUint32 aValue, + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETINTATTRIBUTEL_ENTRY ); @@ -2593,7 +2621,7 @@ { static_cast( aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] )-> - iSeamlessness.SetL( aValue ); + iSeamlessness.SetL( aValue ); } else { @@ -2611,17 +2639,18 @@ { if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ) { - CCDProxiesRecord* proxyRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iProxyRecord ) ); + CCDProxiesRecord* proxyRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iProxyRecord ) ); CleanupStack::PushL( proxyRecord ); proxyRecord->SetElementId( iProxyRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( proxyRecord ) ); + aClientPluginInstance->iGenRecordArray.AppendL( + static_cast( proxyRecord ) ); CleanupStack::Pop( proxyRecord ); } static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ) - ->iPortNumber = aValue; + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )-> + iPortNumber = aValue; } break; case ECmWapIPWSPOption: @@ -2633,39 +2662,43 @@ else { static_cast( - aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->iWAPWSPOption.SetL( aValue ); + aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )-> + iWAPWSPOption.SetL( aValue ); } } break; case ECmWapIPProxyPort: { static_cast( - aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->iWAPProxyPort.SetL( aValue ); + aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )-> + iWAPProxyPort.SetL( aValue ); } break; default: { - SetBearerIntAttributeL( aAttribute, - aValue, - aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ); + SetBearerIntAttributeL( + aAttribute, + aValue, + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ); } } + OstTraceFunctionExit0( CCMPLUGINBASEENG_SETINTATTRIBUTEL_EXIT ); } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CCmPluginBaseEng::SetBoolAttributeL // ----------------------------------------------------------------------------- EXPORT_C void CCmPluginBaseEng::SetBoolAttributeL( - TUint32 aAttribute, - TBool aValue, - CCmClientPluginInstance* aClientPluginInstance ) + TUint32 aAttribute, + TBool aValue, + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETBOOLATTRIBUTEL_ENTRY ); CCDIAPRecord* iapRecord = static_cast( - aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); switch ( aAttribute ) { @@ -2707,17 +2740,18 @@ { if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ) { - CCDProxiesRecord* proxyRecord = - static_cast( CCDRecordBase::CreateCopyRecordL( *iProxyRecord ) ); + CCDProxiesRecord* proxyRecord = static_cast( + CCDRecordBase::CreateCopyRecordL( *iProxyRecord ) ); CleanupStack::PushL( proxyRecord ); proxyRecord->SetElementId( iProxyRecord->ElementId() ); - aClientPluginInstance->iGenRecordArray.AppendL( static_cast( proxyRecord ) ); + aClientPluginInstance->iGenRecordArray.AppendL( + static_cast( proxyRecord ) ); CleanupStack::Pop( proxyRecord ); } static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ) - ->iUseProxyServer = aValue; + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->iUseProxyServer = + aValue; } break; case ECmChargeCardUsageEnabled: @@ -2732,9 +2766,8 @@ break; case ECmMetaHighlight: { - CCDIAPMetadataRecord* metadataRecord = - static_cast( - aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] ); + CCDIAPMetadataRecord* metadataRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] ); if ( aValue ) { metadataRecord->iMetadata = EMetaHighlight | metadataRecord->iMetadata; @@ -2762,38 +2795,57 @@ case ECmWapIPSecurity: { static_cast( - aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->iWAPSecurity.SetL( aValue ); + aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ) + ->iWAPSecurity.SetL( aValue ); } break; default: { - SetBearerBoolAttributeL( aAttribute, - aValue, - aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ); + SetBearerBoolAttributeL( + aAttribute, + aValue, + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ); } } + OstTraceFunctionExit0( CCMPLUGINBASEENG_SETBOOLATTRIBUTEL_EXIT ); } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CCmPluginBaseEng::SetStringAttributeL // ----------------------------------------------------------------------------- EXPORT_C void CCmPluginBaseEng::SetStringAttributeL( - TUint32 aAttribute, - const TDesC16& aValue, - CCmClientPluginInstance* aClientPluginInstance ) + TUint32 aAttribute, + const TDesC16& aValue, + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETSTRINGATTRIBUTEL_ENTRY ); switch ( aAttribute ) { + case ECmBearerIcon: + { + //TODO, write icon name to metadata record after commsdat changes implemented. + //CCDIAPMetadataRecord* metadataRecord = static_cast( + // aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] ); + + //if ( !metadataRecord ) + // { + // User::Leave( KErrCorrupt ); + // } + //metadataRecord->iIconFileName.SetL( aValue ); + } + break; case ECmStartPage: { - CCDWAPAccessPointRecord* wapAPRecord = - static_cast( - aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] ); - + CCDWAPAccessPointRecord* wapAPRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] ); + + if ( !wapAPRecord ) + { + User::Leave( KErrCorrupt ); + } wapAPRecord->iWAPStartPage.SetL( aValue ); } break; @@ -2802,23 +2854,25 @@ CCDIAPRecord* iapRecord = static_cast( aClientPluginInstance->iGenRecordArray[KIapRecordIndex] ); + if ( !iapRecord ) + { + User::Leave( KErrCorrupt ); + } SetNameL( aValue, iapRecord, aClientPluginInstance->iNamingMethod ); } break; case ECmProxyServerName: { - CCDProxiesRecord* proxyRecord = - static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); + CCDProxiesRecord* proxyRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); if ( !proxyRecord ) { - proxyRecord = static_cast - ( CCDRecordBase::RecordFactoryL(KCDTIdProxiesRecord ) ); - - // map proxy record to this iap. - proxyRecord->iService = - static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId(); + proxyRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) ); + + // Map proxy record to this iap. + proxyRecord->iService = static_cast( + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId(); aClientPluginInstance->iGenRecordArray.Insert( proxyRecord, KProxyRecordIndex ); } @@ -2828,18 +2882,16 @@ break; case ECmProxyProtocolName: { - CCDProxiesRecord* proxyRecord = - static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); + CCDProxiesRecord* proxyRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); if ( !proxyRecord ) { - proxyRecord = static_cast - ( CCDRecordBase::RecordFactoryL(KCDTIdProxiesRecord ) ); - - // map proxy record to this iap. - proxyRecord->iService = - static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId(); + proxyRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) ); + + // Map proxy record to this iap. + proxyRecord->iService = static_cast( + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId(); aClientPluginInstance->iGenRecordArray.Insert( proxyRecord, KProxyRecordIndex ); } @@ -2849,18 +2901,16 @@ break; case ECmProxyExceptions: { - CCDProxiesRecord* proxyRecord = - static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); + CCDProxiesRecord* proxyRecord = static_cast( + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] ); if ( !proxyRecord ) { - proxyRecord = static_cast - ( CCDRecordBase::RecordFactoryL(KCDTIdProxiesRecord ) ); - - // map proxy record to this iap. - proxyRecord->iService = - static_cast( - aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId(); + proxyRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) ); + + // Map proxy record to this iap. + proxyRecord->iService = static_cast( + aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId(); aClientPluginInstance->iGenRecordArray.Insert( proxyRecord, KProxyRecordIndex ); } @@ -2873,6 +2923,10 @@ CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); + if ( !wapIPBearerRecord ) + { + User::Leave( KErrCorrupt ); + } wapIPBearerRecord->iWAPGatewayAddress.SetL( aValue ); } break; @@ -2881,6 +2935,10 @@ CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); + if ( !wapIPBearerRecord ) + { + User::Leave( KErrCorrupt ); + } wapIPBearerRecord->iWAPProxyLoginName.SetL( aValue ); } break; @@ -2889,27 +2947,33 @@ CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast( aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] ); + if ( !wapIPBearerRecord ) + { + User::Leave( KErrCorrupt ); + } wapIPBearerRecord->iWAPProxyLoginPass.SetL( aValue ); } break; default: { - SetBearerStringAttributeL( aAttribute, - aValue, - aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ); + SetBearerStringAttributeL( + aAttribute, + aValue, + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ); } } + OstTraceFunctionExit0( CCMPLUGINBASEENG_SETSTRINGATTRIBUTEL_EXIT ); } -//----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CCmPluginBaseEng::SetString8AttributeL // ----------------------------------------------------------------------------- EXPORT_C void CCmPluginBaseEng::SetString8AttributeL( - TUint32 aAttribute, - const TDesC8& aValue, - CCmClientPluginInstance* aClientPluginInstance ) + TUint32 aAttribute, + const TDesC8& aValue, + CCmClientPluginInstance* aClientPluginInstance ) { OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETSTRING8ATTRIBUTEL_ENTRY ); @@ -2917,12 +2981,14 @@ { default: { - SetBearerString8AttributeL( aAttribute, - aValue, - aClientPluginInstance->iGenRecordArray, - aClientPluginInstance->iBearerSpecRecordArray ); + SetBearerString8AttributeL( + aAttribute, + aValue, + aClientPluginInstance->iGenRecordArray, + aClientPluginInstance->iBearerSpecRecordArray ); } } + OstTraceFunctionExit0( CCMPLUGINBASEENG_SETSTRING8ATTRIBUTEL_EXIT ); } @@ -2941,7 +3007,6 @@ } OstTraceFunctionExit0( DUP1__ISUNSPECIFIEDIPV4ADDRESS_EXIT ); - return EFalse; } @@ -2968,7 +3033,6 @@ } OstTraceFunctionExit0( DUP2__CLASSIFYIPV6ADDRESS_EXIT ); - return EIPv6UserDefined; } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmpluginbase/src/ccmpluginbaseengtextresolver.cpp --- a/cmmanager/cmmgr/cmmpluginbase/src/ccmpluginbaseengtextresolver.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmpluginbase/src/ccmpluginbaseengtextresolver.cpp Thu May 27 13:17:01 2010 +0300 @@ -27,15 +27,16 @@ { _LIT(KCMManagerTranslationFile, "cmmanager_"); _LIT(KTranslationPath, "\\resource\\qt\\translations"); - - TBool result = HbTextResolverSymbian::Init( KCMManagerTranslationFile, - KTranslationPath ); + + TBool result = HbTextResolverSymbian::Init( + KCMManagerTranslationFile, + KTranslationPath ); if ( result ) { OstTrace0( TRACE_ERROR, CCMPLUGINBASEENGTEXTRESOLVER_RESOLVETEXTL, "CCmPluginBaseEngTextResolver::ResolveTextL" ); } - - return HbTextResolverSymbian::LoadL( aTextId ); + + return HbTextResolverSymbian::LoadL( aTextId ); } - +// End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginlan/data/1020737B.rss --- a/cmmanager/cmmgr/cmmplugins/cmpluginlan/data/1020737B.rss Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginlan/data/1020737B.rss Thu May 27 13:17:01 2010 +0300 @@ -17,7 +17,7 @@ * */ -#include "ecom/RegistryInfo.rh" +#include "ecom/registryinfo.rh" // Because attribute enums had to be added to namespace CMManager // it's not possible to included cmpluginlanbasedef.h diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginlan/group/cmpluginlan.mmp --- a/cmmanager/cmmgr/cmmplugins/cmpluginlan/group/cmpluginlan.mmp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginlan/group/cmpluginlan.mmp Thu May 27 13:17:01 2010 +0300 @@ -49,7 +49,8 @@ MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib -LIBRARY ECOM.LIB +LIBRARY ecom.lib +LIBRARY commsdat.lib +LIBRARY featmgr.lib +LIBRARY cmmanagerdatabase.lib LIBRARY cmmpluginbase.lib -LIBRARY COMMSDAT.lib -LIBRARY featmgr.lib \ No newline at end of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginlan/inc/cmpluginlan.h --- a/cmmanager/cmmgr/cmmplugins/cmpluginlan/inc/cmpluginlan.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginlan/inc/cmpluginlan.h Thu May 27 13:17:01 2010 +0300 @@ -324,12 +324,23 @@ void GetDefaultLanBearerRecordL( RPointerArray& aRecordArray ); + /** + * Returns the default priority value identified with the parameter. + * @param aAttribute Indentifies the default priority value requested. + */ + TUint32 GetDefPriorityL( const TUint32 aAttribute ) const; + private: // Data /** * Pointer to LAN bearer record. */ CommsDat::CCDLANBearerRecord* iBearerRecord; + + /** + * Bearer priority table ID. + */ + CommsDat::TMDBElementId iBearerPriorityTableId; }; #endif // LAN_PLUGIN_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlan.cpp --- a/cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlan.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlan.cpp Thu May 27 13:17:01 2010 +0300 @@ -57,8 +57,6 @@ const TInt KLanLastSocketClosedTimeout = -1; const TInt KLanLastSessionClosedTimeout = -1; -const TUint32 KDefaultPriorityLAN = 0; - // --------------------------------------------------------- // CCmPluginLan::NewOutgoingL() @@ -135,6 +133,16 @@ FeatureManager::InitializeLibL(); CCmPluginBaseEng::ConstructL(); + + // Get bearer priority table ID. + TRAP_IGNORE( iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::TableIdL( iSession ) ); + + if ( !iBearerPriorityTableId ) + { + iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::CreateTableL( iSession ); + } OstTraceFunctionExit0( CCMPLUGINLAN_CONSTRUCTL_EXIT ); } @@ -197,7 +205,6 @@ void CCmPluginLan::PreparePluginToLoadRecordsL() { OstTraceFunctionEntry0( CCMPLUGINLAN_PREPAREPLUGINTOLOADRECORDSL_ENTRY ); - OstTraceFunctionExit0( CCMPLUGINLAN_PREPAREPLUGINTOLOADRECORDSL_EXIT ); } @@ -206,8 +213,8 @@ // ---------------------------------------------------------------------------- // void CCmPluginLan::PreparePluginToUpdateRecordsL( - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) + RPointerArray& aGenRecordArray, + RPointerArray& aBearerSpecRecordArray ) { OstTraceFunctionEntry0( CCMPLUGINLAN_PREPAREPLUGINTOUPDATERECORDSL_ENTRY ); @@ -245,11 +252,10 @@ delete iServiceRecord; iServiceRecord = NULL; - iServiceRecord = static_cast - (CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + iServiceRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); - CCDLANServiceRecord* lanServiceRecord = static_cast( iServiceRecord ); - + CCDLANServiceRecord* lanServiceRecord = static_cast( iServiceRecord ); if ( FeatureManager::FeatureSupported( KFeatureIdIPv6 ) ) { @@ -283,6 +289,7 @@ lanServiceRecord->iConfigDaemonManagerName.SetL( KEmpty ); lanServiceRecord->iConfigDaemonName.SetL( KEmpty ); } + OstTraceFunctionExit0( CCMPLUGINLAN_CREATESERVICERECORDL_EXIT ); } @@ -831,9 +838,14 @@ retVal = KCommDbBearerLAN; } break; + case ECmDefaultUiPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; case ECmDefaultPriority: { - retVal = KDefaultPriorityLAN; + retVal = GetDefPriorityL( aAttribute ); } break; case ELanServiceExtensionTableRecordId: @@ -1311,9 +1323,13 @@ } break; case ECmDefaultUiPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; case ECmDefaultPriority: { - retVal = KDefaultPriorityLAN; + retVal = GetDefPriorityL( aAttribute ); } break; case ECmExtensionLevel: @@ -1459,4 +1475,44 @@ OstTraceFunctionExit0( CCMPLUGINLAN_GETBEARERTABLEIDSTOBEOBSERVED_EXIT ); } +// --------------------------------------------------------------------------- +// CCmPluginLan::GetDefPriorityL +// --------------------------------------------------------------------------- +// +TUint32 CCmPluginLan::GetDefPriorityL( const TUint32 aAttribute ) const//TODO, OST + { + + TUint32 retVal( KDataMobilitySelectionPolicyPriorityWildCard ); + + CCDGlobalBearerTypePriorizationRecord* priorityRecord = + new( ELeave ) CCDGlobalBearerTypePriorizationRecord( iBearerPriorityTableId ); + CleanupStack::PushL( priorityRecord ); + + priorityRecord->iServiceType.SetL( TPtrC( KCDTypeNameLANService ) ); + + if ( priorityRecord->FindL( iSession ) ) + { + priorityRecord->LoadL( iSession ); + + switch ( aAttribute ) + { + case ECmDefaultPriority: + { + retVal = priorityRecord->iPriority; + } + break; + case ECmDefaultUiPriority: + { + retVal = priorityRecord->iUIPriority; + } + break; + default: + break; + } + } + CleanupStack::PopAndDestroy( priorityRecord ); + + return retVal; + } + // End of File diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlanproxy.cpp --- a/cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlanproxy.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginlan/src/cmpluginlanproxy.cpp Thu May 27 13:17:01 2010 +0300 @@ -20,7 +20,7 @@ #include "cmpluginlan.h" #include -#include +#include // Exported proxy for instantiation method resolution // Define the interface UIDs diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/data/1020737C.rss --- a/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/data/1020737C.rss Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/data/1020737C.rss Thu May 27 13:17:01 2010 +0300 @@ -16,7 +16,7 @@ * */ -#include "ecom/RegistryInfo.rh" +#include "ecom/registryinfo.rh" // Because attribute enums had to be added to namespace CMManager // it's not possible to included cmpluginpacketdatadef.h. diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/group/bld.inf --- a/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/group/bld.inf Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/group/bld.inf Thu May 27 13:17:01 2010 +0300 @@ -24,7 +24,7 @@ PRJ_EXPORTS // export iby files -../Rom/cmmpluginpacketdata.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cmmpluginpacketdata.iby) +../rom/cmmpluginpacketdata.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cmmpluginpacketdata.iby) PRJ_MMPFILES cmpluginpacketdata.mmp diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/group/cmpluginpacketdata.mmp --- a/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/group/cmpluginpacketdata.mmp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/group/cmpluginpacketdata.mmp Thu May 27 13:17:01 2010 +0300 @@ -16,7 +16,6 @@ * */ -#include #include TARGET cmpluginpacketdata.dll @@ -32,13 +31,12 @@ SOURCE cmpluginpacketdataproxy.cpp SOURCE cmpluginpacketdata.cpp -SOURCEPATH ../Data +SOURCEPATH ../data START RESOURCE 1020737C.rss TARGET cmpluginpacketdata.rsc END -//USERINCLUDE ../../../Framework/SrcData USERINCLUDE ../data // Component specific internal headers @@ -54,8 +52,9 @@ LIBRARY euser.lib LIBRARY ecom.lib LIBRARY cmmpluginbase.lib -LIBRARY commsdat.lib LIBRARY etel.lib LIBRARY etelpckt.lib LIBRARY featmgr.lib LIBRARY centralrepository.lib +LIBRARY cmmanagerdatabase.lib +LIBRARY commsdat.lib diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/inc/cmpluginpacketdata.h --- a/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/inc/cmpluginpacketdata.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/inc/cmpluginpacketdata.h Thu May 27 13:17:01 2010 +0300 @@ -396,8 +396,9 @@ * @param aServiceRecord Pointer to the service record where to save the * pdp type. */ - void SetPDPTypeL( RPacketContext::TProtocolType aPdpType, - CommsDat::CCDWCDMAPacketServiceRecord* aServiceRecord ); + void SetPDPTypeL( + RPacketContext::TProtocolType aPdpType, + CommsDat::CCDWCDMAPacketServiceRecord* aServiceRecord ); /** * Sets the daemon name for the Connection Method. @@ -407,8 +408,14 @@ * specific records of the Connection Method. */ void SetDaemonNameL( - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ); + RPointerArray& aGenRecordArray, + RPointerArray& aBearerSpecRecordArray ); + + /** + * Returns the default priority value identified with the parameter. + * @param aAttribute Indentifies the default priority value requested. + */ + TUint32 GetDefPriorityL( const TUint32 aAttribute ) const; private: /** @@ -422,22 +429,27 @@ /** * Boolean to define if this is outgoing or incoming packetdata cm. */ - TBool iOutgoing; + TBool iOutgoing; /** - * Id of the bearer record of the iap. + * ID of the bearer record of the IAP. */ TUint32 iBearerRecordId; /** - * Name of the bearer record of the iap. + * Name of the bearer record of the IAP. */ - HBufC* iBearerRecordName; + HBufC* iBearerRecordName; /** - * pointer to the QoS record of the iap. + * Pointer to the QoS record of the IAP. */ CommsDat::CCDUmtsR99QoSAndOnTableRecord* iPacketDataQoSRecord; + + /** + * Bearer priority table ID. + */ + CommsDat::TMDBElementId iBearerPriorityTableId; }; #endif // PACKETDATA_PLUGIN_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/src/cmpluginpacketdata.cpp --- a/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/src/cmpluginpacketdata.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/src/cmpluginpacketdata.cpp Thu May 27 13:17:01 2010 +0300 @@ -17,11 +17,12 @@ */ -#include -#include +#include +#include #include #include +#include "datamobilitycommsdattypes.h" #include "cmpluginpacketdata.h" #include "OstTraceDefinitions.h" @@ -34,9 +35,7 @@ // ================= CONSTANTS ======================= -const TUint32 KDefaultPriorityPacketData = 1; - -/// Modem bearer names for GPRS/WCDMA Access Points +/// Modem bearer names for GPRS/WCDMA access points. _LIT( KModemBearerPacketData, "GPRS Modem" ); _LIT( KDefaultQosDataRecordName, "PRIMARY1" ); _LIT( KDefaultQosDataRecordNamewithSpace, "PRIMARY1 " ); @@ -313,6 +312,16 @@ FeatureManager::InitializeLibL(); CCmPluginBaseEng::ConstructL(); + // Get bearer priority table ID. + TRAP_IGNORE( iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::TableIdL( iSession ) ); + + if ( !iBearerPriorityTableId ) + { + iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::CreateTableL( iSession ); + } + OstTraceFunctionExit0( CCMPLUGINPACKETDATA_CONSTRUCTL_EXIT ); } @@ -385,11 +394,13 @@ { OstTraceFunctionEntry0( CCMPLUGINPACKETDATA_PREPAREPLUGINTOUPDATERECORDSL_ENTRY ); - CCDIAPRecord* iapRecord = - static_cast( aGenRecordArray[KIapRecordIndex] ); - - CCDWCDMAPacketServiceRecord* serviceRecord = - static_cast( aGenRecordArray[KServiceRecordIndex] ); + //TODO, Add null checks for mandatory specific record pointers. + + CCDIAPRecord* iapRecord = static_cast( + aGenRecordArray[KIapRecordIndex] ); + + CCDWCDMAPacketServiceRecord* serviceRecord = static_cast( + aGenRecordArray[KServiceRecordIndex] ); CheckIfNameModifiedL( iapRecord, serviceRecord ); @@ -418,7 +429,7 @@ { OstTraceFunctionEntry0( CCMPLUGINPACKETDATA_SETDAEMONNAMEL_ENTRY ); - // use DHCP if we can + // Use DHCP if we can. TBool ipfromSrv = GetBearerBoolAttributeL( EPacketDataIPAddrFromServer, aGenRecordArray, aBearerSpecRecordArray ); @@ -1231,9 +1242,13 @@ } break; case ECmDefaultUiPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; case ECmDefaultPriority: { - retVal = KDefaultPriorityPacketData; + retVal = GetDefPriorityL( aAttribute ); } break; case ECmExtensionLevel: @@ -2492,11 +2507,14 @@ retVal = KCommDbBearerWcdma; } break; - case ECmDefaultUiPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; case ECmDefaultPriority: { - retVal = KDefaultPriorityPacketData; + retVal = GetDefPriorityL( aAttribute ); } break; case ECmExtensionLevel: @@ -2984,4 +3002,46 @@ OstTraceFunctionExit0( CCMPLUGINPACKETDATA_GETBEARERTABLEIDSTOBEOBSERVEDL_EXIT ); } +// --------------------------------------------------------------------------- +// CCmPluginPacketData::GetDefPriorityL +// --------------------------------------------------------------------------- +// +TUint32 CCmPluginPacketData::GetDefPriorityL( const TUint32 aAttribute ) const + { + OstTraceFunctionEntry0( CCMPLUGINPACKETDATA_GETDEFPRIORITYL_ENTRY ); + + TUint32 retVal( KDataMobilitySelectionPolicyPriorityWildCard ); + + CCDGlobalBearerTypePriorizationRecord* priorityRecord = + new( ELeave ) CCDGlobalBearerTypePriorizationRecord( iBearerPriorityTableId ); + CleanupStack::PushL( priorityRecord ); + + priorityRecord->iServiceType.SetL( TPtrC( KCDTypeNameOutgoingWCDMA ) ); + + if ( priorityRecord->FindL( iSession ) ) + { + priorityRecord->LoadL( iSession ); + + switch ( aAttribute ) + { + case ECmDefaultPriority: + { + retVal = priorityRecord->iPriority; + } + break; + case ECmDefaultUiPriority: + { + retVal = priorityRecord->iUIPriority; + } + break; + default: + break; + } + } + CleanupStack::PopAndDestroy( priorityRecord ); + + OstTraceFunctionExit0( CCMPLUGINPACKETDATA_GETDEFPRIORITYL_EXIT ); + return retVal; + } + // End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/src/cmpluginpacketdataproxy.cpp --- a/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/src/cmpluginpacketdataproxy.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginpacketdata/src/cmpluginpacketdataproxy.cpp Thu May 27 13:17:01 2010 +0300 @@ -18,7 +18,7 @@ #include -#include +#include #include "cmpluginpacketdata.h" @@ -29,9 +29,9 @@ IMPLEMENTATION_PROXY_ENTRY( KUidPacketDataBearerType, CCmPluginPacketData::NewL) }; -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); return ImplementationTable; } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginwlan/data/10281BB2.rss --- a/cmmanager/cmmgr/cmmplugins/cmpluginwlan/data/10281BB2.rss Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginwlan/data/10281BB2.rss Thu May 27 13:17:01 2010 +0300 @@ -17,7 +17,7 @@ * */ -#include "ecom/RegistryInfo.rh" +#include "ecom/registryinfo.rh" // Because attribute enums had to be added to namespace CMManager // it's not possible to included cmpluginwlandef.h diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginwlan/group/bld.inf --- a/cmmanager/cmmgr/cmmplugins/cmpluginwlan/group/bld.inf Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginwlan/group/bld.inf Thu May 27 13:17:01 2010 +0300 @@ -25,7 +25,7 @@ PRJ_EXPORTS // export iby files -../Rom/cmmpluginwlan.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cmmpluginwlan.iby) +../rom/cmmpluginwlan.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cmmpluginwlan.iby) PRJ_MMPFILES diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginwlan/group/cmpluginwlan.mmp --- a/cmmanager/cmmgr/cmmplugins/cmpluginwlan/group/cmpluginwlan.mmp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginwlan/group/cmpluginwlan.mmp Thu May 27 13:17:01 2010 +0300 @@ -17,7 +17,6 @@ * */ -#include #include TARGET cmpluginwlan.dll diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginwlan/inc/cmpluginwlan.h --- a/cmmanager/cmmgr/cmmplugins/cmpluginwlan/inc/cmpluginwlan.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginwlan/inc/cmpluginwlan.h Thu May 27 13:17:01 2010 +0300 @@ -340,8 +340,9 @@ * @param aSourceRecord A record where to copy from. * @param aDestRecord A record where to copy to. */ - void CopyWlanServiceRecordL( CCDWlanServiceRecord* aSourceRecord, - CCDWlanServiceRecord* aDestRecord); + void CopyWlanServiceRecordL( + CCDWlanServiceRecord* aSourceRecord, + CCDWlanServiceRecord* aDestRecord); /** * Copies the bearer specific records to copy instance. @@ -361,8 +362,9 @@ * @param aAttribute Identifies the attribute to be checked. * @param aValue A value to be checked. */ - void CheckSecurityAttributeValidityL( const TUint32 aAttribute, - const TUint32 aValue ); + void CheckSecurityAttributeValidityL( + const TUint32 aAttribute, + const TUint32 aValue ); /** * Convert a 8-bit string in ascii format to hex format. Ownership of @@ -382,19 +384,30 @@ */ TUint8 ConvertHexCharToNumberL( const TUint8 aHexChar ); + /** + * Returns the default priority value identified with the parameter. + * @param aAttribute Indentifies the default priority value requested. + */ + TUint32 GetDefPriorityL( const TUint32 aAttribute ) const; + private: // Data /** - * WLan service record. + * WLAN service record. */ CCDWlanServiceRecord* iWlanServiceRecord; /** - * WLAN table id. + * WLAN table ID. */ CommsDat::TMDBElementId iWlanTableId; /** + * Bearer priority table ID. + */ + CommsDat::TMDBElementId iBearerPriorityTableId; + + /** * Boolean to save the WAPI support info. */ TBool iWAPISupported; diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginwlan/src/cmpluginwlan.cpp --- a/cmmanager/cmmgr/cmmplugins/cmpluginwlan/src/cmpluginwlan.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginwlan/src/cmpluginwlan.cpp Thu May 27 13:17:01 2010 +0300 @@ -25,6 +25,7 @@ #include #include +#include "datamobilitycommsdattypes.h" #include "cmpluginwlan.h" #include "cmwlancoveragecheck.h" #include "cmmanagerdef.h" @@ -52,13 +53,11 @@ const TInt KWlanServiceRecordIndex = 0; -const TUint32 KDefaultPriorityWLan = 0; - const TInt KWlanLastSocketActivityTimeout = -1; const TInt KWlanLastSessionClosedTimeout = 1; const TInt KWlanLastSocketClosedTimeout = -1; -/// Modem bearer names for WLAN connection methods +/// Modem bearer names for WLAN connection methods. _LIT( KModemBearerWLAN, "WLANBearer" ); _LIT( KWlanBearerName, "WLANBearer" ); @@ -154,6 +153,16 @@ CCmPluginBaseEng::ConstructL(); + // Get bearer priority table ID. + TRAP_IGNORE( iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::TableIdL( iSession ) ); + + if ( !iBearerPriorityTableId ) + { + iBearerPriorityTableId = + CCDGlobalBearerTypePriorizationRecord::CreateTableL( iSession ); + } + // get WLAN table id TRAP_IGNORE( iWlanTableId = CCDWlanServiceRecord::TableIdL( iSession ) ); @@ -312,12 +321,12 @@ break; case ECmDefaultUiPriority: { - retVal = KDefaultPriorityWLan; + retVal = GetDefPriorityL( aAttribute ); } break; case ECmDefaultPriority: { - retVal = KDefaultPriorityWLan; + retVal = GetDefPriorityL( aAttribute ); } break; case EWlanServiceId: @@ -453,7 +462,7 @@ break; case EWlan802_1xAllowUnencrypted: { - retVal = static_cast( wlanServiceRecord->iWlanWpaKeyLength ); + retVal = static_cast( wlanServiceRecord->iWlanWpaKeyLength );//TODO, change typecast to if-else structure? } break; default: @@ -1232,8 +1241,8 @@ TBool retVal( EFalse ); - CCDIAPRecord *iapRecord = static_cast - ( CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord) ); + CCDIAPRecord *iapRecord = static_cast( + CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord) ); CleanupStack::PushL( iapRecord ); iapRecord->SetRecordId( aIapId ); @@ -1307,8 +1316,8 @@ if ( TPtrC( KCDTypeNameLANService ) == iIapRecord->iServiceType ) { - iServiceRecord = static_cast - ( CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + iServiceRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); ServiceRecord().SetRecordId( iIapRecord->iService ); ServiceRecord().LoadL( iSession ); @@ -1362,11 +1371,10 @@ delete iServiceRecord; iServiceRecord = NULL; - iServiceRecord = static_cast - (CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); + iServiceRecord = static_cast( + CCDRecordBase::RecordFactoryL( KCDTIdLANServiceRecord ) ); - CCDLANServiceRecord* lanServiceRecord = static_cast( iServiceRecord ); - + CCDLANServiceRecord* lanServiceRecord = static_cast( iServiceRecord ); if ( FeatureManager::FeatureSupported( KFeatureIdIPv6 ) ) { @@ -1401,7 +1409,7 @@ lanServiceRecord->iConfigDaemonName.SetL( KEmpty ); } - // create WLAN service record + // Create WLAN service record. CreateWlanServiceRecordL(); OstTraceFunctionExit0( CCMPLUGINWLAN_CREATESERVICERECORDL_EXIT ); @@ -1422,9 +1430,11 @@ iWlanServiceRecord = new( ELeave ) CCDWlanServiceRecord ( iWlanTableId ); iWlanServiceRecord->SetRecordId( KCDNewRecordRequest ); + // Some attributes need to have default values set. iWlanServiceRecord->iRecordName.SetL( iIapRecord->iRecordName ); iWlanServiceRecord->iWlanConnMode.SetL( CMManager::EInfra ); iWlanServiceRecord->iWlanSecMode.SetL( CMManager::EWlanSecModeOpen ); + iWlanServiceRecord->iWlanAuthMode.SetL( CMManager::EWlanAuthModeOpen ); iWlanServiceRecord->iWlanScanSSID.SetL( EFalse ); OstTraceFunctionExit0( CCMPLUGINWLAN_CREATEWLANSERVICERECORDL_EXIT ); @@ -2226,9 +2236,13 @@ } break; case ECmDefaultUiPriority: + { + retVal = GetDefPriorityL( aAttribute ); + } + break; case ECmDefaultPriority: { - retVal = KDefaultPriorityWLan; + retVal = GetDefPriorityL( aAttribute ); } break; case ECmExtensionLevel: @@ -2614,4 +2628,44 @@ return result; } +// --------------------------------------------------------------------------- +// CCmPluginWlan::GetDefPriorityL +// --------------------------------------------------------------------------- +// +TUint32 CCmPluginWlan::GetDefPriorityL( const TUint32 aAttribute ) const//TODO, OST + { + + TUint32 retVal( KDataMobilitySelectionPolicyPriorityWildCard ); + + CCDGlobalBearerTypePriorizationRecord* priorityRecord = + new( ELeave ) CCDGlobalBearerTypePriorizationRecord( iBearerPriorityTableId ); + CleanupStack::PushL( priorityRecord ); + + priorityRecord->iServiceType.SetL( TPtrC( KCDTypeNameLANService ) ); + + if ( priorityRecord->FindL( iSession ) ) + { + priorityRecord->LoadL( iSession ); + + switch ( aAttribute ) + { + case ECmDefaultPriority: + { + retVal = priorityRecord->iPriority; + } + break; + case ECmDefaultUiPriority: + { + retVal = priorityRecord->iUIPriority; + } + break; + default: + break; + } + } + CleanupStack::PopAndDestroy( priorityRecord ); + + return retVal; + } + // End of File diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmplugins/cmpluginwlan/src/cmpluginwlanproxy.cpp --- a/cmmanager/cmmgr/cmmplugins/cmpluginwlan/src/cmpluginwlanproxy.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmplugins/cmpluginwlan/src/cmpluginwlanproxy.cpp Thu May 27 13:17:01 2010 +0300 @@ -18,7 +18,7 @@ #include "cmpluginwlan.h" #include -#include +#include // Exported proxy for instantiation method resolution // Define the interface UIDs diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmmanagertextresolver.h --- a/cmmanager/cmmgr/cmmserver/inc/cmmanagertextresolver.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmmanagertextresolver.h Thu May 27 13:17:01 2010 +0300 @@ -22,7 +22,7 @@ /** * Utility class for resolving localised text. */ -class CCmManagerTextResolver +NONSHARABLE_CLASS( CCmManagerTextResolver ) : public CBase { public: /** diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmmcache.h --- a/cmmanager/cmmgr/cmmserver/inc/cmmcache.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmmcache.h Thu May 27 13:17:01 2010 +0300 @@ -533,6 +533,13 @@ void CheckIfConnMethodReferencesCanBeRemovedL( const CCmmConnMethodInstance& aConnMethodInstance ); /** + * Check if given connection method is referenced from any protected destination. + */ + void CheckIfConnMethodBelongsToProtectedDestinationL( + const CCmmConnMethodInstance& aConnMethodInstance, + TBool& aBelongsToProtectedDestination ); + + /** * Check if the given connection method can be deleted. */ void CheckIfConnMethodCanBeDeletedL( const CCmmConnMethodInstance& aConnMethodInstance ); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmmconnmethodinstance.h --- a/cmmanager/cmmgr/cmmserver/inc/cmmconnmethodinstance.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmmconnmethodinstance.h Thu May 27 13:17:01 2010 +0300 @@ -69,16 +69,6 @@ public: /** - * Set the plugin base pointer. - */ - void SetPlugin( CCmPluginBaseEng* aPlugin ); - - /** - * Get the plugin base pointer. - */ - CCmPluginBaseEng* GetPlugin() const; - - /** * Get connection method ID. */ TUint32 GetId() const; @@ -94,11 +84,6 @@ TUint32 GetBearerType() const; /** - * Set bearer type. - */ - void SetBearerType( const TUint32& aBearerType ); - - /** * Get handle ID. */ TInt GetHandle() const; @@ -171,8 +156,8 @@ * @return None */ void SetIntAttributeL( - const TUint32& aAttribute, - const TUint32& aValue ); + const TUint32& aAttribute, + const TUint32& aValue ); /** * Sets the integer value identified by aAttribute. @@ -181,8 +166,8 @@ * @return None */ void SetBoolAttributeL( - const TUint32& aAttribute, - const TBool& aValue ); + const TUint32& aAttribute, + const TBool& aValue ); /** * Sets the 16 bit string value identified by aAttribute. @@ -191,8 +176,8 @@ * @return None */ void SetStringAttributeL( - const TUint32& aAttribute, - const TDesC16& aValue ); + const TUint32& aAttribute, + const TDesC16& aValue ); /** * Sets the 8 bit string value identified by aAttribute. @@ -201,13 +186,8 @@ * @return None */ void SetString8AttributeL( - const TUint32& aAttribute, - const TDesC8& aValue ); - - /** - * Gets the current status of this connection method instance. - */ - TCmmConnMethodStatus GetStatus() const; + const TUint32& aAttribute, + const TDesC8& aValue ); /** * Sets a new status value. diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmmconnmethodstruct.h --- a/cmmanager/cmmgr/cmmserver/inc/cmmconnmethodstruct.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmmconnmethodstruct.h Thu May 27 13:17:01 2010 +0300 @@ -80,8 +80,9 @@ void SetStatus( const TCmmConnMethodStatus& aStatus ); /** - * TODO - * + * Refresh the connection method data in this cache side object to be in + * synch with the database and copy that data back to the session side + * connection method instance given as parameter. */ void RefreshConnMethodInstanceL( CCmmConnMethodInstance& aConnMethodInstance ); @@ -93,8 +94,7 @@ TInt SessionInstanceClosed(); //TODO, rename to ConnMethodInstanceClosed ? /** - * Set the connection method plugin. Updates status and sets reference - * counter to 1. + * Set the connection method plugin pointer, bearer type and status. */ void SetPlugin( CCmPluginBaseEng* aPlugin, diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmmdestinationinstance.h --- a/cmmanager/cmmgr/cmmserver/inc/cmmdestinationinstance.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmmdestinationinstance.h Thu May 27 13:17:01 2010 +0300 @@ -119,6 +119,12 @@ HBufC* GetLocalisedDestinationNameL(); void SetDestinationNameL( const TDesC& aDestinationName ); + /** + * Get the destination icon. + */ + HBufC* GetDestinationIconL(); + void SetDestinationIconL( const TDesC& aDestinationIcon ); + void GetMetadataL( const CMManager::TSnapMetadataField& aMetadataField, TUint32& aMetadata ); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmminstancemapping.h --- a/cmmanager/cmmgr/cmmserver/inc/cmminstancemapping.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmminstancemapping.h Thu May 27 13:17:01 2010 +0300 @@ -48,6 +48,9 @@ // IDs for unsupported connection methods inside this destination. RArray iUnsupportedConnMethods; + + // The destination metadata. + TUint32 iMetadata; }; @@ -142,6 +145,14 @@ TInt DestinationsContainingConnMethod( const TUint32& aConnMethodId ) const; /** + * Returns the destination ids containing the connection method given as + * parameter. + */ + void DestinationsContainingConnMethodL( + const TUint32 aConnMethodId, + RArray& aDestinationIds ) const; + + /** * Returns all conenction method IDs. Unsupported connection methods are * included if aCheckBearerType is set to EFalse. */ @@ -241,6 +252,11 @@ void RemoveConnMethodFromDestinations( const TUint32& aConnMethodId, RArray& aChangedDestinations ); + + /** + * Get the metadata of the destination identified with given id. + */ + TUint32 DestinationMetadata( const TUint32 aDestinationId ) const; private: /** diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmmserver.h --- a/cmmanager/cmmgr/cmmserver/inc/cmmserver.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmmserver.h Thu May 27 13:17:01 2010 +0300 @@ -104,6 +104,15 @@ TInt& aAction, TSecurityInfo& aMissing ); + /** + * Checks the client's capabilities in the middle of request handling. Some + * checks cannot be done with CustomSecurityCheckL() at the start phase of + * the operation. + * @param aMsg The IPC message from the client. + * @return Returns ETrue if client has the needed capabilities. Otherwise + * returns EFalse. + */ + CPolicyServer::TCustomResult CapabilityCheckWithProtection( const RMessage2& aMessage ); protected: // From CActive /** diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/inc/cmmsession.h --- a/cmmanager/cmmgr/cmmserver/inc/cmmsession.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/inc/cmmsession.h Thu May 27 13:17:01 2010 +0300 @@ -184,6 +184,7 @@ void GetAllDestinationsL( const RMessage2& aMessage ); void GetEasyWLANIdL( const RMessage2& aMessage ); void GetSupportedBearersL( const RMessage2& aMessage ); + void GetUncategorizedIconL( const RMessage2& aMessage ); void ReadDefaultConnectionL( const RMessage2& aMessage ); void ReadGenConnSettingsL( const RMessage2& aMessage ); void WriteGenConnSettingsL( const RMessage2& aMessage ); @@ -192,7 +193,6 @@ void CopyConnMethodL( const RMessage2& aMessage ); void MoveConnMethodL( const RMessage2& aMessage ); void RemoveConnMethodL( const RMessage2& aMessage ); - void RemoveAllReferencesL( const RMessage2& aMessage ); void GetDestinationL( const RMessage2& aMessage ); @@ -210,6 +210,7 @@ void IsDestinationConnectedL( const RMessage2& aMessage ); void IsDestinationHiddenL( const RMessage2& aMessage ); void DestinationIsEqualL( const RMessage2& aMessage ); + void GetDestinationIconL( const RMessage2& aMessage ); void DestAddConnMethodL( const RMessage2& aMessage ); void DestAddEmbeddedDestinationL( const RMessage2& aMessage ); @@ -223,6 +224,7 @@ void SetDestinationHiddenL( const RMessage2& aMessage ); void UpdateDestinationL( const RMessage2& aMessage ); void DeleteDestinationL( const RMessage2& aMessage ); + void SetDestinationIconL( const RMessage2& aMessage ); void CreateConnMethodL( const RMessage2& aMessage ); void UpdateConnMethodL( const RMessage2& aMessage ); @@ -247,6 +249,13 @@ void CreateCopyOfExistingL( const RMessage2& aMessage ); void GetEmbeddedDestinationL( const RMessage2& aMessage ); + /** + * Check if CM is protected and if so then check the needed capabilities. + */ + void CheckCapabilitiesForProtectedCML( + const RMessage2& aMessage, + CCmmConnMethodInstance* aConnectionMethod ); + private: RMessage2 iMessage; diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmanagerimpl.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmanagerimpl.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmanagerimpl.cpp Thu May 27 13:17:01 2010 +0300 @@ -304,23 +304,25 @@ CleanupStack::PushL( plugin ); TBool inserted( EFalse ); - //TODO, Implement plugin sorting by priority later. - /* - TInt defaultPriority( KDataMobilitySelectionPolicyPriorityWildCard ); + + TInt defaultPriority( CMManager::KDataMobilitySelectionPolicyPriorityWildCard ); - // No UI priority -> wildcard - TRAP_IGNORE( defaultPriority = plugin->GetIntAttributeL( ECmDefaultUiPriority ) ); + // No priority -> wildcard + TRAP_IGNORE( defaultPriority = plugin->GetBearerInfoIntL( + CMManager::ECmDefaultPriority ) ); - for ( TInt j( 0 ); j < iPlugins->Count(); ++j ) + for ( TInt j = 0; j < iPlugins->Count(); j++ ) { - if ( defaultPriority > (*iPlugins)[j]->GetIntAttributeL( ECmDefaultUiPriority ) ) + TUint32 bearerToCompare = (*iPlugins)[j]->GetBearerInfoIntL( + CMManager::ECmDefaultPriority ); + if ( defaultPriority > bearerToCompare ) { continue; } - else if ( defaultPriority == (*iPlugins)[j]->GetIntAttributeL( ECmDefaultUiPriority ) ) + else if ( defaultPriority == bearerToCompare ) { - if ( plugin->GetIntAttributeL( ECmExtensionLevel ) > - (*iPlugins)[j]->GetIntAttributeL( ECmExtensionLevel ) ) + if ( plugin->GetBearerInfoIntL( ECmExtensionLevel ) > + (*iPlugins)[j]->GetBearerInfoIntL( ECmExtensionLevel ) ) { iPlugins->InsertL( j, plugin ); inserted = ETrue; @@ -333,7 +335,7 @@ inserted = ETrue; break; } - }*/ + } if ( !inserted ) { diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmcache.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmcache.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmcache.cpp Thu May 27 13:17:01 2010 +0300 @@ -401,11 +401,13 @@ // Store the connection method into cache. - CCmmConnMethodStruct* connMethodStruct = CCmmConnMethodStruct::NewLC( connMethodId ); // Use connMethodId here, so ID is either a real ID or a temporary ID. + // Use connMethodId here, so ID is either a real ID or a temporary ID. + CCmmConnMethodStruct* connMethodStruct = CCmmConnMethodStruct::NewL( connMethodId ); connMethodStruct->SetPlugin( plugin, aBearerType, ECmmConnMethodStatusNotSaved ); + CleanupStack::Pop( plugin ); + CleanupStack::PushL( connMethodStruct ); iConnMethodArray.AppendL( connMethodStruct ); CleanupStack::Pop( connMethodStruct ); - CleanupStack::Pop( plugin ); //TODO, pop after SetPlugin()-call? // Copy the connection method data to session instance. aConnMethodInstance.CopyDataL( connMethodStruct ); // Will increase reference counter. @@ -416,6 +418,7 @@ // Add connection method to destination. aDestinationInstance->AddConnMethodL( aConnMethodInstance ); } + OstTraceFunctionExit0( CCMMCACHE_CREATECONNMETHODL_EXIT ); } @@ -445,15 +448,21 @@ User::Leave( KErrNotFound ); } - CCmPluginBaseEng* pluginCopy = plugin->CreateCopyL( aConnMethodInstance.GetPluginDataInstance() ); + CCmPluginBaseEng* pluginCopy = + plugin->CreateCopyL( aConnMethodInstance.GetPluginDataInstance() ); CleanupStack::PushL( pluginCopy ); // Store the connection method into cache. - CCmmConnMethodStruct* connMethodStruct = CCmmConnMethodStruct::NewLC( NextFreeTemporaryId() ); - connMethodStruct->SetPlugin( pluginCopy, aConnMethodInstance.GetBearerType(), ECmmConnMethodStatusNotSaved ); + CCmmConnMethodStruct* connMethodStruct = + CCmmConnMethodStruct::NewL( NextFreeTemporaryId() ); + connMethodStruct->SetPlugin( + pluginCopy, + aConnMethodInstance.GetBearerType(), + ECmmConnMethodStatusNotSaved ); + CleanupStack::Pop( pluginCopy ); + CleanupStack::PushL( connMethodStruct ); iConnMethodArray.AppendL( connMethodStruct ); CleanupStack::Pop( connMethodStruct ); - CleanupStack::Pop( pluginCopy ); //TODO, pop after SetPlugin()-call? // Copy the connection method data to session instance. aNewConnMethodInstance.CopyDataL( connMethodStruct ); // Will increase reference counter. @@ -2103,11 +2112,12 @@ } // Store the connection method into cache. - CCmmConnMethodStruct* connMethodStruct = CCmmConnMethodStruct::NewLC( aConnMethodId ); + CCmmConnMethodStruct* connMethodStruct = CCmmConnMethodStruct::NewL( aConnMethodId ); connMethodStruct->SetPlugin( plugin, bearerType, ECmmConnMethodStatusValid ); + CleanupStack::Pop( plugin ); + CleanupStack::PushL( connMethodStruct ); iConnMethodArray.AppendL( connMethodStruct ); CleanupStack::Pop( connMethodStruct ); - CleanupStack::Pop( plugin ); //TODO, pop after SetPlugin()-call? // Copy the connection method data to session instance. aConnMethodInstance.CopyDataL( connMethodStruct ); // Will increase reference counter. @@ -2875,6 +2885,8 @@ void CCmmCache::CheckIfConnMethodReferencesCanBeRemovedL( const CCmmConnMethodInstance& aConnMethodInstance ) { + OstTraceFunctionEntry0( CCMMCACHE_CHECKIFCONNMETHODREFERENCESCANBEREMOVEDL_ENTRY ); + TUint32 connMethodId( aConnMethodInstance.GetId() ); // Check that connection method exists in database. @@ -2889,8 +2901,6 @@ User::Leave( KErrArgument ); } - //TODO, what if protected? - // Iterate all destinations in database and check if possible reference can // be removed. RArray dbDestinations; @@ -2910,6 +2920,49 @@ { User::Leave( KErrInUse ); } + + OstTraceFunctionExit0( CCMMCACHE_CHECKIFCONNMETHODREFERENCESCANBEREMOVEDL_EXIT ); + } + +// --------------------------------------------------------------------------- +// Check if the given connection method can have all references removed and +// made into an uncategorized connection method. //TODO, fix comment, this looks like copy&paste from above +// --------------------------------------------------------------------------- +// +void CCmmCache::CheckIfConnMethodBelongsToProtectedDestinationL( + const CCmmConnMethodInstance& aConnMethodInstance, + TBool& aBelongsToProtectedDestination ) + { + OstTraceFunctionEntry0( CCMMCACHE_CHECKIFCONNMETHODBELONGSTOPROTECTEDDESTINATIONL_ENTRY ); + + TUint32 connMethodId( aConnMethodInstance.GetId() ); + + // Check that connection method exists in database. + if ( !iInstanceMapping->ValidConnMethodId( connMethodId ) ) + { + User::Leave( KErrNotFound ); + } + + aBelongsToProtectedDestination = EFalse; + // Get destinations which have references to connection method passed as parameter. + RArray dbDestinations; + CleanupClosePushL( dbDestinations ); + iInstanceMapping->DestinationsContainingConnMethodL( connMethodId, dbDestinations ); + TUint32 metadata( 0 ); + for ( TInt i = 0; i < dbDestinations.Count(); i++ ) + { + // Check if any of destinations is protected. + metadata = iInstanceMapping->DestinationMetadata( dbDestinations[i] ); + TUint32 protlevel = ( metadata & KDestProtectionLevelMask ) >> KBitsToShiftDestProtectionLevel; + if ( protlevel == CMManager::EProtLevel1 || protlevel == CMManager::EProtLevel3 ) + { + aBelongsToProtectedDestination = ETrue; + break; + } + } + CleanupStack::PopAndDestroy( &dbDestinations ); + + OstTraceFunctionExit0( CCMMCACHE_CHECKIFCONNMETHODBELONGSTOPROTECTEDDESTINATIONL_EXIT ); } // --------------------------------------------------------------------------- @@ -2919,6 +2972,8 @@ void CCmmCache::CheckIfConnMethodCanBeDeletedL( const CCmmConnMethodInstance& aConnMethodInstance ) { + OstTraceFunctionEntry0( CCMMCACHE_CHECKIFCONNMETHODCANBEDELETEDL_ENTRY ); + TUint32 connMethodId( aConnMethodInstance.GetId() ); // Find connection method from cache. @@ -2961,6 +3016,8 @@ { User::Leave( KErrLocked ); } + + OstTraceFunctionExit0( CCMMCACHE_CHECKIFCONNMETHODCANBEDELETEDL_EXIT ); } // --------------------------------------------------------------------------- @@ -2970,6 +3027,8 @@ void CCmmCache::CheckIfDestinationCanBeDeletedL( const CCmmDestinationInstance& aDestinationInstance ) { + OstTraceFunctionEntry0( CCMMCACHE_CHECKIFDESTINATIONCANBEDELETEDL_ENTRY ); + TUint32 destinationId( aDestinationInstance.GetId() ); // Find destination from cache. @@ -3019,6 +3078,8 @@ { User::Leave( KErrInUse ); } + + OstTraceFunctionExit0( CCMMCACHE_CHECKIFDESTINATIONCANBEDELETEDL_EXIT ); } // --------------------------------------------------------------------------- @@ -3035,13 +3096,16 @@ // methods inside it are connected. // --------------------------------------------------------------------------- // -void CCmmCache::DeleteDestinationForcedL( CCmmDestinationInstance& aDestinationInstance ) //TODO, OST +void CCmmCache::DeleteDestinationForcedL( CCmmDestinationInstance& aDestinationInstance ) { - //TODO + OstTraceFunctionEntry0( CCMMCACHE_DELETEDESTINATIONFORCEDL_ENTRY ); + if ( !DestinationConnectedL( 0, &aDestinationInstance ) ) { DeleteDestinationL( aDestinationInstance, ETrue ); } + + OstTraceFunctionExit0( CCMMCACHE_DELETEDESTINATIONFORCEDL_EXIT ); } // End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmconnmethodinstance.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmconnmethodinstance.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmconnmethodinstance.cpp Thu May 27 13:17:01 2010 +0300 @@ -36,7 +36,9 @@ // Two phased construction. // --------------------------------------------------------------------------- // -CCmmConnMethodInstance* CCmmConnMethodInstance::NewL( CCmmSession* aCmmSession, CCmmCache* aCache ) +CCmmConnMethodInstance* CCmmConnMethodInstance::NewL( + CCmmSession* aCmmSession, + CCmmCache* aCache ) { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_NEWL_ENTRY ); @@ -51,7 +53,9 @@ // Two phased construction. // --------------------------------------------------------------------------- // -CCmmConnMethodInstance* CCmmConnMethodInstance::NewLC( CCmmSession* aCmmSession, CCmmCache* aCache ) +CCmmConnMethodInstance* CCmmConnMethodInstance::NewLC( + CCmmSession* aCmmSession, + CCmmCache* aCache ) { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_NEWLC_ENTRY ); @@ -86,7 +90,9 @@ // Constructor. // --------------------------------------------------------------------------- // -CCmmConnMethodInstance::CCmmConnMethodInstance( CCmmSession* aCmmSession, CCmmCache* aCache ) +CCmmConnMethodInstance::CCmmConnMethodInstance( + CCmmSession* aCmmSession, + CCmmCache* aCache ) : iCmmSession( aCmmSession ), iCache( aCache ) @@ -117,37 +123,11 @@ } // --------------------------------------------------------------------------- -// Set the plugin base pointer. -// --------------------------------------------------------------------------- -// -void CCmmConnMethodInstance::SetPlugin( CCmPluginBaseEng* aPlugin ) - { - OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETPLUGIN_ENTRY ); - - iPlugin = aPlugin; - - OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_SETPLUGIN_EXIT ); - } - -// --------------------------------------------------------------------------- -// Get the plugin base pointer. -// --------------------------------------------------------------------------- -// -CCmPluginBaseEng* CCmmConnMethodInstance::GetPlugin() const - { - OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETPLUGIN_ENTRY ); - OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETPLUGIN_EXIT ); - return iPlugin; - } - -// --------------------------------------------------------------------------- // Get pointer to the plugin data container. // --------------------------------------------------------------------------- // CCmClientPluginInstance* CCmmConnMethodInstance::GetPluginDataInstance() const { - OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETPLUGINDATAINSTANCE_ENTRY ); - OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETPLUGINDATAINSTANCE_EXIT ); return iPluginDataInstance; } @@ -157,9 +137,6 @@ // TUint32 CCmmConnMethodInstance::GetId() const { - OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETID_ENTRY ); - OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETID_EXIT ); - return iConnMethodId; } @@ -182,26 +159,10 @@ // TUint32 CCmmConnMethodInstance::GetBearerType() const { - OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETBEARERTYPE_ENTRY ); - OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETBEARERTYPE_EXIT ); - return iBearerType; } // --------------------------------------------------------------------------- -// Get bearer type. -// --------------------------------------------------------------------------- -// -void CCmmConnMethodInstance::SetBearerType( const TUint32& aBearerType ) - { - OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETBEARERTYPE_ENTRY ); - - iBearerType = aBearerType; - - OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_SETBEARERTYPE_EXIT ); - } - -// --------------------------------------------------------------------------- // Get handle ID. // --------------------------------------------------------------------------- // @@ -307,52 +268,6 @@ } // --------------------------------------------------------------------------- -// Refresh the relevant connection method data in cache side object to be in -// synch with database and copy that data back to this session side connection -// method object. -// --------------------------------------------------------------------------- -// -//TODO, cleanup -/* -void CCmmConnMethodInstance::RefreshDataL( CCmmConnMethodStruct* aConnMethodStruct ) //TODO, remove - { - - //TODO - //if ( !aConnMethodStruct ) - //{ - //User::Leave( KErrCorrupt ); - //} - if ( !iPlugin ) - { - User::Leave( KErrCorrupt ); - } - - switch ( aConnMethodStruct->GetStatus() ) - { - case ECmmConnMethodStatusValid: - case ECmmConnMethodStatusToBeDeleted: - { - //TODO, add record status check later and only call Reload() if necessary. TCmmRecordStatus - //if ( !aConnMethodStruct->UpToDate() ) - // { - iPlugin->ReLoadL(); - // } - iPlugin->GetPluginDataL( iPluginDataInstance ); - } - break; - case ECmmConnMethodStatusNotSaved: // This is checked before. - case ECmmConnMethodStatusChanged: - default: - User::Leave( KErrCorrupt ); // Error, invalid status. - break; - } - - // Internal state need to be set to the same state as after a successfull update. - UpdateSuccessful(); - - }*/ - -// --------------------------------------------------------------------------- // CCmmConnMethodInstance::GetIntAttributeL // --------------------------------------------------------------------------- // @@ -360,9 +275,15 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETINTATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } - return iPlugin->GetIntAttributeL( aAttribute, iPluginDataInstance ); + TUint32 result = iPlugin->GetIntAttributeL( aAttribute, iPluginDataInstance ); + + OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETINTATTRIBUTEL_EXIT ); + return result; } // --------------------------------------------------------------------------- @@ -373,10 +294,12 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETBOOLATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } TBool retVal( EFalse ); - switch ( aAttribute ) { case CMManager::ECmConnected: @@ -399,6 +322,7 @@ { retVal = iPlugin->GetBoolAttributeL( aAttribute, iPluginDataInstance ); } + break; } OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETBOOLATTRIBUTEL_EXIT ); @@ -413,9 +337,15 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETSTRINGATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } - return iPlugin->GetStringAttributeL( aAttribute, iPluginDataInstance ); + HBufC* result = iPlugin->GetStringAttributeL( aAttribute, iPluginDataInstance ); + + OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETSTRINGATTRIBUTEL_EXIT ); + return result; } // --------------------------------------------------------------------------- @@ -426,9 +356,15 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETSTRING8ATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } - return iPlugin->GetString8AttributeL( aAttribute, iPluginDataInstance ); + HBufC8* result = iPlugin->GetString8AttributeL( aAttribute, iPluginDataInstance ); + + OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETSTRING8ATTRIBUTEL_EXIT ); + return result; } // --------------------------------------------------------------------------- @@ -441,7 +377,10 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETINTATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } iPlugin->SetIntAttributeL( aAttribute, aValue, iPluginDataInstance ); @@ -458,7 +397,10 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETBOOLATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } iPlugin->SetBoolAttributeL( aAttribute, aValue, iPluginDataInstance ); @@ -475,7 +417,10 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETSTRINGATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } iPlugin->SetStringAttributeL( aAttribute, aValue, iPluginDataInstance ); @@ -492,7 +437,10 @@ { OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETSTRING8ATTRIBUTEL_ENTRY ); - __ASSERT_DEBUG( iPlugin != NULL, User::Leave( KErrNotFound ) ); + if ( !iPlugin ) + { + User::Leave( KErrCorrupt ); + } iPlugin->SetString8AttributeL( aAttribute, aValue, iPluginDataInstance ); @@ -500,17 +448,6 @@ } // --------------------------------------------------------------------------- -// Gets the current status of this connection method instance. -// --------------------------------------------------------------------------- -// -TCmmConnMethodStatus CCmmConnMethodInstance::GetStatus() const - { - OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETSTATUS_ENTRY ); - OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETSTATUS_EXIT ); - return iStatus; - } - -// --------------------------------------------------------------------------- // Sets a new status value. // --------------------------------------------------------------------------- // @@ -531,7 +468,11 @@ // void CCmmConnMethodInstance::UpdateSuccessful() { + OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_UPDATESUCCESSFUL_ENTRY ); + SetStatus( ECmmConnMethodStatusValid ); + + OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_UPDATESUCCESSFUL_EXIT ); } // --------------------------------------------------------------------------- @@ -542,8 +483,12 @@ // void CCmmConnMethodInstance::DeleteSuccessful( const TUint32& aNewSecondaryId ) { + OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_DELETESUCCESSFUL_ENTRY ); + SetStatus( ECmmConnMethodStatusChanged ); SetId( aNewSecondaryId ); + + OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_DELETESUCCESSFUL_EXIT ); } // --------------------------------------------------------------------------- diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmconnmethodstruct.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmconnmethodstruct.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmconnmethodstruct.cpp Thu May 27 13:17:01 2010 +0300 @@ -172,11 +172,9 @@ } // --------------------------------------------------------------------------- -// TODO -// -// Refresh the relevant connection method data in cache side object to be in -// synch with database and copy that data back to this session side connection -// method object. +// Refresh the connection method data in this cache side object to be in synch +// with the database and copy that data back to the session side connection +// method instance given as parameter. // --------------------------------------------------------------------------- // void CCmmConnMethodStruct::RefreshConnMethodInstanceL( @@ -236,8 +234,7 @@ } // --------------------------------------------------------------------------- -// Set the connection method plugin. Updates status and sets reference -// counter to 1. +// Set the connection method plugin pointer, bearer type and status. // --------------------------------------------------------------------------- // void CCmmConnMethodStruct::SetPlugin( @@ -251,13 +248,13 @@ // when data is copied into it. if ( iReferenceCounter != 0 ) { - ASSERT( 0 ); // Error. + ASSERT( 0 ); // Error, wrong internal status. } iConnMethodPlugin = aPlugin; iBearerType = aBearerType; - switch ( aStatus ) //TODO, add missing status + switch ( aStatus ) { // Fallthrough intended case ECmmConnMethodStatusNotSaved: @@ -265,9 +262,10 @@ iStatus = aStatus; break; case ECmmConnMethodStatusChanged: + case ECmmConnMethodStatusToBeDeleted: default: iStatus = ECmmConnMethodStatusChanged; - ASSERT( 0 ); // Error, invalid status. + ASSERT( 0 ); // Error, invalid status as argument. break; } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmdestinationinstance.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmdestinationinstance.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmdestinationinstance.cpp Thu May 27 13:17:01 2010 +0300 @@ -425,6 +425,8 @@ // HBufC* CCmmDestinationInstance::GetLocalisedDestinationNameL() { + OstTraceFunctionEntry0( CCMMDESTINATIONINSTANCE_GETLOCALISEDDESTINATIONNAMEL_ENTRY ); + RefreshRecordL( ECmmDestNetworkRecord ); if ( !iNetworkRecord ) @@ -463,12 +465,13 @@ break; } - // Not Internet, operator or intranet...or something went wrong + // Not Internet, operator or intranet, or something went wrong. if ( !isLocalised || ( isLocalised && !resolvedText ) ) { - resolvedText = ( iNetworkRecord->iRecordName.GetL() ).AllocL(); + resolvedText = TPtrC( iNetworkRecord->iRecordName ).AllocL(); } - + + OstTraceFunctionExit0( CCMMDESTINATIONINSTANCE_GETLOCALISEDDESTINATIONNAMEL_EXIT ); return resolvedText; } @@ -480,8 +483,6 @@ { OstTraceFunctionEntry0( CCMMDESTINATIONINSTANCE_SETDESTINATIONNAMEL_ENTRY ); - //TODO, capability check depending on destination protection level, or if it is internet destination. Internet destination should be protected always? - // Write action, load all records. LoadAllRecordsL(); @@ -496,6 +497,48 @@ } // --------------------------------------------------------------------------- +// Get the destination icon. +// --------------------------------------------------------------------------- +// +HBufC* CCmmDestinationInstance::GetDestinationIconL() + { + OstTraceFunctionEntry0( CCMMDESTINATIONINSTANCE_GETDESTINATIONICONL_ENTRY ); + + RefreshRecordL( ECmmDestMetadataRecord ); + + if ( !iMetadataRecord ) + { + User::Leave( KErrCorrupt ); + } + + HBufC* icon( NULL ); + //icon = TPtrC( iMetadataRecord->iIconFileName ).AllocL();//TODO, enable after commsdat icon changes are implemented. + icon = KNullDesC().AllocL();//TODO + + OstTraceFunctionExit0( CCMMDESTINATIONINSTANCE_GETDESTINATIONICONL_EXIT ); + return icon; + } + +// --------------------------------------------------------------------------- +// Set the destination icon. +// --------------------------------------------------------------------------- +// +void CCmmDestinationInstance::SetDestinationIconL( const TDesC& /*aDestinationIcon*/ ) + { + OstTraceFunctionEntry0( CCMMDESTINATIONINSTANCE_SETDESTINATIONICONL_ENTRY ); + + // Write action, load all records. + LoadAllRecordsL(); + + //iMetadataRecord->iIconFileName.SetL( aDestinationIcon );//TODO, enable after commsdat icon changes are implemented. + + iMetadataRecordStatus = ECmmRecordStatusModified; + iStatus = ECmmDestinationStatusChanged; + + OstTraceFunctionExit0( CCMMDESTINATIONINSTANCE_SETDESTINATIONICONL_EXIT ); + } + +// --------------------------------------------------------------------------- // Get metadata of specified type. // --------------------------------------------------------------------------- // @@ -630,8 +673,7 @@ // Write action, load all records. LoadAllRecordsL(); - //TODO, verify capability check is done (NetworkControl). - + //TODO, comment this: iCurrentProtectionLevel = aProtectionLevel; if ( !iProtectionChanged ) { @@ -1289,19 +1331,16 @@ TBool result( ETrue ); if ( iNetworkRecordStatus != ECmmRecordStatusLoaded && - iNetworkRecordStatus != ECmmRecordStatusExpired && iNetworkRecordStatus != ECmmRecordStatusModified ) { result = EFalse; } if ( iDestApRecordStatus != ECmmRecordStatusLoaded && - iDestApRecordStatus != ECmmRecordStatusExpired && iDestApRecordStatus != ECmmRecordStatusModified ) { result = EFalse; } if ( iMetadataRecordStatus != ECmmRecordStatusLoaded && - iMetadataRecordStatus != ECmmRecordStatusExpired && iMetadataRecordStatus != ECmmRecordStatusModified ) { result = EFalse; @@ -1316,7 +1355,11 @@ } // --------------------------------------------------------------------------- -// Loads a certain type of record from database if it is not up-to-date. +// Loads a requested type of record from database if it is not yet loaded. +// +// Currently all records are loaded when client opens a handle to a +// destination, but if future optimizations are added and records are only +// loaded when needed, the functionality of this method becomes essential. // --------------------------------------------------------------------------- // void CCmmDestinationInstance::RefreshRecordL( TCmmDbRecords aRecordType ) @@ -1344,16 +1387,16 @@ { // Fallthrough intended case ECmmRecordStatusBlank: - case ECmmRecordStatusExpired: iCache->LoadDestinationRecordL( *this, aRecordType ); break; case ECmmRecordStatusLoaded: case ECmmRecordStatusModified: // Record is up-to-date. break; + case ECmmRecordStatusExpired: case ECmmRecordStatusUnsaved: default: - User::Leave( KErrCorrupt ); // Error, unknown status. + User::Leave( KErrCorrupt ); // Error, invalid or unknown status. break; } @@ -1362,6 +1405,7 @@ // --------------------------------------------------------------------------- // Loads all records from database that are not up-to-date. +// Guarantees the record pointers are valid or leaves. // --------------------------------------------------------------------------- // void CCmmDestinationInstance::LoadAllRecordsL() diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmdestinationstruct.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmdestinationstruct.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmdestinationstruct.cpp Thu May 27 13:17:01 2010 +0300 @@ -211,7 +211,7 @@ // Not found -> fill in with default values. iMetadataRecord->iSNAP = iId; iMetadataRecord->iMetadata = 0; - iMetadataRecord->iIcon = 0; + //iMetadataRecord->iIcon = 0;//TODO, set to 0 or not? iMetadataRecord->SetRecordId( KCDNewRecordRequest ); iMetadataRecordStatus = ECmmRecordStatusUnsaved; } @@ -836,7 +836,7 @@ { // Normal connection method. snapRecord2->iEmbeddedSNAP = 0; - snapRecord2->iIAP = ( KCDMaskShowField & CommsDat::KCDTIdIAPRecord ) | ( connMethodRealId << 8 ); + snapRecord2->iIAP = CommsDat::KCDTIdIAPRecord | ( connMethodRealId << 8 ); snapRecord2->iPriority = i + 1; // Priority values start from 1. aDestinationInstance.iConnMethodItemArray[i].iPriority = i + 1; // Update this just in case. } @@ -1333,6 +1333,10 @@ { metadataRecord->iIcon.SetL( source->iIcon ); } + //if ( !source->iIconFileName.IsNull() )//TODO, enable after commsdat icon changes are implemented. + //{ + //metadataRecord->iIconFileName.SetL( source->iIconFileName ); + //} metadataRecord->SetElementId( source->ElementId() ); CleanupStack::Pop( metadataRecord ); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmminstancemapping.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmminstancemapping.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmminstancemapping.cpp Thu May 27 13:17:01 2010 +0300 @@ -445,6 +445,55 @@ } // --------------------------------------------------------------------------- +// Returns the destination IDs containing the connection method given as +// parameter. +// --------------------------------------------------------------------------- +// +void CCmmInstanceMapping::DestinationsContainingConnMethodL( + const TUint32 aConnMethodId, + RArray& aDestinationIds ) const + { + OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_DESTINATIONSCONTAININGCONNMETHODL_ENTRY ); + + aDestinationIds.Reset(); + TInt count( 0 ); + + // Go through each destination. + for ( TInt i = 0; i < iDestinations.Count(); i++ ) + { + TBool foundInThisDestination( EFalse ); + + // Loop through all connection methods in this destination. + count = iDestinations[i]->iConnMethodItemArray.Count(); + for ( TInt j = 0; j < count; j++ ) + { + if ( iDestinations[i]->iConnMethodItemArray[j].iId == aConnMethodId ) + { + foundInThisDestination = ETrue; + aDestinationIds.AppendL( iDestinations[i]->iId ); + break; + } + } + + // Check unsupported connection methods also. + if ( !foundInThisDestination ) + { + count = iDestinations[i]->iUnsupportedConnMethods.Count(); + for ( TInt j = 0; j < count; j++ ) + { + if ( iDestinations[i]->iUnsupportedConnMethods[j] == aConnMethodId ) + { + aDestinationIds.AppendL( iDestinations[i]->iId ); + break; + } + } + } + } + + OstTraceFunctionExit0( CCMMINSTANCEMAPPING_DESTINATIONSCONTAININGCONNMETHODL_EXIT ); + } + +// --------------------------------------------------------------------------- // Get database session. // --------------------------------------------------------------------------- // @@ -575,7 +624,21 @@ { CDestination* dest = CDestination::NewL(); dest->iId = destinationId; - iDestinations.Append( dest ); + + CCDSNAPMetadataRecord* metadataRecord = new( ELeave ) CCDSNAPMetadataRecord( + iCache.TableId( ECmmDestMetadataRecord ) ); + CleanupStack::PushL( metadataRecord ); + + // Add destination metadata. + metadataRecord->iSNAP.SetL( destinationId ); + if ( metadataRecord->FindL( Session() ) ) + { + metadataRecord->LoadL( Session() ); + dest->iMetadata = metadataRecord->iMetadata; + iDestinations.AppendL( dest ); + } + CleanupStack::PopAndDestroy( metadataRecord ); + metadataRecord = NULL; } } } @@ -1064,6 +1127,7 @@ const TUint32& aConnMethodId, RArray& aChangedDestinations ) { + OstTraceFunctionEntry0( DUP1_CCMMINSTANCEMAPPING_REMOVECONNMETHOD_ENTRY ); // Remove from list of connection methods. for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ ) @@ -1089,7 +1153,8 @@ } } } - + + OstTraceFunctionExit0( DUP1_CCMMINSTANCEMAPPING_REMOVECONNMETHOD_EXIT ); } // --------------------------------------------------------------------------- @@ -1159,4 +1224,28 @@ OstTraceFunctionExit0( CCMMINSTANCEMAPPING_REMOVECONNMETHODFROMDESTINATIONS_EXIT ); } +// --------------------------------------------------------------------------- +// Iterate through destinations to find the one identified with parameter +// and returns its metadata mask. +// --------------------------------------------------------------------------- +// +TUint32 CCmmInstanceMapping::DestinationMetadata( + const TUint32 aDestinationId ) const + { + OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_DESTINATIONMETADATA_ENTRY ); + + TUint32 metadata( 0 ); + for ( TInt i = 0; i < iDestinations.Count(); i++ ) + { + if ( iDestinations[i]->iId == aDestinationId ) + { + metadata = iDestinations[i]->iMetadata; + break; + } + } + + OstTraceFunctionExit0( CCMMINSTANCEMAPPING_DESTINATIONMETADATA_EXIT ); + return metadata; + } + // End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmserver.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmserver.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmserver.cpp Thu May 27 13:17:01 2010 +0300 @@ -34,29 +34,29 @@ const TInt CCmmServer::iCmmRanges[iCmmRangeCount] = { - 0, // 0-10 - 11, // 11-14 - 15, // 15-21 - 22, // 22-99 - 100, // 100-112 - 113, // 113-126 - 127, // 127-199 - 200, // 200-205 - 206, // 206-210 - 211, // 211-214 - 215, // 215-220 - 221 // 221-KMaxInt + 0, // 1. 0-11 + 12, // 2. 12-15 + 16, // 3. 16-22 + 23, // 4. 23-99 + 100, // 5. 100-113 + 114, // 6. 114-128 + 129, // 7. 129-199 + 200, // 8. 200-205 + 206, // 9. 206-210 + 211, // 10. 211-214 + 215, // 11. 215-220 + 221 // 12. 221-KMaxInt }; const TUint8 CCmmServer::iCmmElementIndex[iCmmRangeCount] = { - CPolicyServer::EAlwaysPass, // 0-10 - CPolicyServer::ECustomCheck, // 11-14 - CPolicyServer::ECustomCheck, // 15-21 - CPolicyServer::ENotSupported, // 22-99 - CPolicyServer::EAlwaysPass, // 100-112 - CPolicyServer::ECustomCheck, // 113-126 - CPolicyServer::ENotSupported, // 127-199 + CPolicyServer::EAlwaysPass, // 0-11 + CPolicyServer::ECustomCheck, // 12-15 + CPolicyServer::ECustomCheck, // 16-22 + CPolicyServer::ENotSupported, // 23-99 + CPolicyServer::EAlwaysPass, // 100-113 + CPolicyServer::ECustomCheck, // 114-128 + CPolicyServer::ENotSupported, // 129-199 CPolicyServer::EAlwaysPass, // 200-205 CPolicyServer::ECustomCheck, // 206-210 CPolicyServer::ECustomCheck, // 211-214 @@ -73,12 +73,12 @@ {_INIT_SECURITY_POLICY_C1(ECapabilityNetworkControl), CPolicyServer::EFailClient}, }; -const CPolicyServer::TPolicy CCmmServer::iCmmPolicy = //TODO, check comments +const CPolicyServer::TPolicy CCmmServer::iCmmPolicy = { CPolicyServer::EAlwaysPass, // Specifies all connect attempts should pass iCmmRangeCount, // Count of ranges - iCmmRanges, // 0-999, 1000-1008, 1009... - iCmmElementIndex, // Only range 1000-1008 are checked + iCmmRanges, // 0-11, 12-15, 16... + iCmmElementIndex, // What to do for each range iCmmElements // The list of policy elements }; @@ -96,7 +96,7 @@ { switch ( aMessage.Function() ) { - // *********** 2nd range: 11-14 ************* + // *********** 2nd range: 12-15 ************* case ECmmGetConnMethodInfoInt: case ECmmGetConnMethodInfoBool: case ECmmGetConnMethodInfoString: @@ -127,7 +127,7 @@ case CMManager::EWlanWapiPsk: case CMManager::EWlanWapiPskFormat: // 802.1x: - case CMManager::EWlan802_1xAllowUnencrypted: //TODO, should this be here? + case CMManager::EWlan802_1xAllowUnencrypted: // Authentication: case CMManager::ECmIFAuthName: case CMManager::EPacketDataIFAuthName: @@ -139,38 +139,31 @@ EPass : EFail; } default: - // By default reading does not need any capabilities + // By default reading does not need any capabilities. return EPass; } } - // *********** 3rd range: 15-21 ************* + // *********** 3rd range: 16-22 ************* case ECmmUpdateBearerPriorityArray: case ECmmWriteDefaultConnection: case ECmmWriteGeneralConnectionSettings: + // At this phase all capabilities are not checked because of + // it's too heavy operation... + // At Session phase the protection of the destination and/or + // connection method is checked. If protected, + // ECapabilityNetworkControl is checked. + case ECmmCopyConnMethod: + case ECmmMoveConnMethod: + case ECmmRemoveConnMethod: + case ECmmRemoveAllReferences: { // ECapabilityWriteDeviceData is needed for writing return ( iCmmElements[1].iPolicy.CheckPolicy( aMessage ) ) ? EPass : EFail; } - case ECmmCopyConnMethod: - case ECmmMoveConnMethod: - case ECmmRemoveConnMethod: - case ECmmRemoveAllReferences: - { - // At this phase capability is not checked because of - // it's too heavy operation... - // At later phase the protection of the target destination - // and/or connection method is checked. - return EPass; - } - // *********** 6th range: 113-126 ************* + // *********** 6th range: 114-128 ************* case EDestCreateDestinationWithName: case EDestCreateDestinationWithNameAndId: - { - // ECapabilityWriteDeviceData is needed for writing - return ( iCmmElements[1].iPolicy.CheckPolicy( aMessage ) ) ? - EPass : EFail; - } case EDestIsConnected: case EDestAddConnMethod: case EDestAddEmbeddedDestination: @@ -183,34 +176,32 @@ case EDestSetHidden: case EDestUpdate: case EDestDelete: - { - // At this phase capability is not checked because of - // it's too heavy operation... - // At Session phase the protection of the destination and/or - // connection method is checked. If destination/connection method - // is protected ECapabilityNetworkControl is required from a - // client. - return EPass; - } - // *********** 9th range: 206-210 ************* - case ECMCreateConnMethod: - case ECMCreateConnMethodWithId: + case EDestSetIcon: { // ECapabilityWriteDeviceData is needed for writing return ( iCmmElements[1].iPolicy.CheckPolicy( aMessage ) ) ? EPass : EFail; } + // *********** 9th range: 206-210 ************* + + // ECapabilityWriteDeviceData is needed for writing + case ECMCreateConnMethod: + case ECMCreateConnMethodWithId: + + // At this phase all capabilities are not checked because of + // it's too heavy operation... + // At Session phase the protection of the destination and/or + // connection method is checked. If protected, + // ECapabilityNetworkControl is checked. case ECMCreateConnMethodToDest: case ECMCreateConnMethodToDestWithId: case ECMCreateCopyOfExisting: { - // At this phase capability is not checked because of - // it's too heavy operation... - // At Session phase the protection of the destination and/or - // connection method is checked. - return EPass; + return ( iCmmElements[1].iPolicy.CheckPolicy( aMessage ) ) ? + EPass : EFail; } // *********** 11th range: 215-220 ************* + // Protection of the CM is checked later(protected needs ECapabilityNetworkControl) case ECMSetIntAttribute: case ECMSetBoolAttribute: case ECMSetStringAttribute: @@ -235,7 +226,7 @@ case CMManager::EWlanWapiPsk: case CMManager::EWlanWapiPskFormat: // 802.1x: - case CMManager::EWlan802_1xAllowUnencrypted: //TODO, should this be here? + case CMManager::EWlan802_1xAllowUnencrypted: // Authentication: case CMManager::ECmIFAuthName: case CMManager::EPacketDataIFAuthName: @@ -257,7 +248,8 @@ case ECMDelete: case ECMUpdate: { - // ECapabilityWriteDeviceData + // ECapabilityWriteDeviceData (if protected, ECapabilityNetworkControl + // is checked later). return ( iCmmElements[1].iPolicy.CheckPolicy( aMessage ) ) ? EPass : EFail; } @@ -266,6 +258,50 @@ } } +/** + * This is for checking client's capabilities at later phase after + * protections of destination/connection method have been checked + * first. + */ +CPolicyServer::TCustomResult CCmmServer::CapabilityCheckWithProtection( + const RMessage2& aMessage ) + { + switch ( aMessage.Function() ) + { + case ECmmCopyConnMethod: + case ECmmMoveConnMethod: + case ECmmRemoveConnMethod: + case ECmmRemoveAllReferences: + case EDestAddConnMethod: + case EDestDeleteConnMethod: + case EDestAddEmbeddedDestination: + case EDestRemoveConnMethod: + case EDestModifyPriority: + case EDestSetName: + case EDestSetMetadata: + case EDestSetProtection: + case EDestSetHidden: + case EDestUpdate: + case EDestDelete: + case EDestSetIcon: + case ECMCreateConnMethodToDest: + case ECMCreateConnMethodToDestWithId: + case ECMUpdate: + case ECMDelete: + case ECMSetIntAttribute: + case ECMSetBoolAttribute: + case ECMSetStringAttribute: + case ECMSetString8Attribute: + { + // ECapabilityNetworkControl + return ( iCmmElements[3].iPolicy.CheckPolicy( aMessage ) ) ? EPass : EFail; + } + default: + // Execution should never come here. + return EFail; + } + } + CCmmServer::CCmmServer( TInt aPriority ) : CPolicyServer( aPriority, iCmmPolicy ) { OstTraceFunctionEntry0( CCMMSERVER_CCMMSERVER_ENTRY ); @@ -340,7 +376,10 @@ { OstTraceFunctionEntry0( CCMMSERVER_NEWSESSIONL_ENTRY ); - return CCmmSession::NewL( *const_cast( this ), iCmManager->Cache() ); + CSession2* session = CCmmSession::NewL( *const_cast( this ), iCmManager->Cache() ); + + OstTraceFunctionExit0( CCMMSERVER_NEWSESSIONL_EXIT ); + return session; } // ----------------------------------------------------------------------------- @@ -376,6 +415,7 @@ iShutdown->Start(); } } + OstTraceFunctionExit0( CCMMSERVER_DECREMENTSESSIONS_EXIT ); } @@ -387,7 +427,10 @@ { OstTraceFunctionEntry0( CCMMSERVER_NEWCONTAINERL_ENTRY ); - return iContainerIndex->CreateL(); + CObjectCon* container = iContainerIndex->CreateL(); + + OstTraceFunctionExit0( CCMMSERVER_NEWCONTAINERL_EXIT ); + return container; } // ----------------------------------------------------------------------------- @@ -419,7 +462,6 @@ ReStart(); OstTraceFunctionExit0( CCMMSERVER_RUNERROR_EXIT ); - return KErrNone; } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/cmmserver/src/cmmsession.cpp --- a/cmmanager/cmmgr/cmmserver/src/cmmsession.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/cmmserver/src/cmmsession.cpp Thu May 27 13:17:01 2010 +0300 @@ -207,6 +207,11 @@ GetSupportedBearersL( aMessage ); } break; + case ECmmGetUncategorizedIcon: + { + GetUncategorizedIconL( aMessage ); + } + break; case ECmmReadDefaultConnection: { ReadDefaultConnectionL( aMessage ); @@ -269,6 +274,7 @@ case EDestIsConnected: case EDestIsHidden: case EDestIsEqual: + case EDestGetIcon: case EDestAddConnMethod: case EDestAddEmbeddedDestination: case EDestDeleteConnMethod: @@ -280,6 +286,7 @@ case EDestSetHidden: case EDestUpdate: case EDestDelete: + case EDestSetIcon: { ServiceDestinationL( aMessage ); } @@ -682,7 +689,7 @@ CleanupStack::PushL( result ); TInt bufferLen = aMessage.GetDesMaxLength( 2 ); - if ( result && result->Length() > bufferLen ) + if ( result->Length() > bufferLen ) { User::Leave( KErrArgument ); } @@ -714,7 +721,7 @@ CleanupStack::PushL( result ); TInt bufferLen = aMessage.GetDesMaxLength( 2 ); - if ( result && result->Length() > bufferLen ) + if ( result->Length() > bufferLen ) { User::Leave( KErrArgument ); } @@ -782,7 +789,7 @@ CleanupStack::PushL( result ); TInt bufferLen = aMessage.GetDesMaxLength( 2 ); - if ( result && result->Length() > bufferLen ) + if ( result->Length() > bufferLen ) { User::Leave( KErrArgument ); } @@ -814,7 +821,7 @@ CleanupStack::PushL( result ); TInt bufferLen = aMessage.GetDesMaxLength( 2 ); - if ( result && result->Length() > bufferLen ) + if ( result->Length() > bufferLen ) { User::Leave( KErrArgument ); } @@ -1017,6 +1024,29 @@ } // ----------------------------------------------------------------------------- +// CCmmSession::GetUncategorizedIconL +// ----------------------------------------------------------------------------- +// +void CCmmSession::GetUncategorizedIconL( const RMessage2& aMessage ) + { + OstTraceFunctionEntry0( CCMMSESSION_GETUNCATEGORIZEDICONL_ENTRY ); + + HBufC* result = KNullDesC().AllocLC(); //TODO, Is there an uncategorized icon? + + TInt bufferLen = aMessage.GetDesMaxLength( 0 ); + if ( result->Length() > bufferLen ) + { + User::Leave( KErrArgument ); + } + + TPtrC resultPtr = result->Des(); + aMessage.WriteL( 0, resultPtr ); + CleanupStack::PopAndDestroy( result ); + + OstTraceFunctionExit0( CCMMSESSION_GETUNCATEGORIZEDICONL_EXIT ); + } + +// ----------------------------------------------------------------------------- // CCmmSession::ReadDefaultConnectionL // ----------------------------------------------------------------------------- // @@ -1249,7 +1279,20 @@ User::Leave( KErrArgument ); } - //TODO, capability check, what to do if anything is protected. + // Check the protection level of the destination. + // And based on that check the needed capabilities from the client. + CMManager::TProtectionLevel protLevel( CMManager::EProtLevel0 ); + destination->GetProtectionL( protLevel ); + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + if ( protLevel == CMManager::EProtLevel1 ) + { + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + } + + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } // Add connection method into destination. TInt index = destination->AddConnMethodL( *connMethod ); @@ -1313,7 +1356,38 @@ User::Leave( KErrInUse ); } - //TODO, capability checks, what to do if anything is protected. + // Check the protection level of the source and target destination. + // And based on those check the needed capabilities from the client. + TBool protectionExists( EFalse ); + CMManager::TProtectionLevel protLevelSource( CMManager::EProtLevel0 ); + sourceDestination->GetProtectionL( protLevelSource ); + if ( protLevelSource == CMManager::EProtLevel1 + || protLevelSource == CMManager::EProtLevel3 ) + { + protectionExists = ETrue; + } + + // If source destination is not protected check the target destination. + if ( !protectionExists ) + { + CMManager::TProtectionLevel protLevelTarget( CMManager::EProtLevel0 ); + targetDestination->GetProtectionL( protLevelTarget ); + if ( protLevelTarget == CMManager::EProtLevel1 ) + { + protectionExists = ETrue; + } + } + + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + if ( protectionExists ) + { + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + } + + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } // Add connection method into target destination and update it. attributesPckg().iIndex = targetDestination->AddConnMethodL( *connMethod ); @@ -1343,7 +1417,20 @@ CCmmConnMethodInstance* connMethodInstance = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int1() ); - //TODO, capability checks + // Check the protection level of the destination. + // And based on that check the needed capabilities from the client. + CMManager::TProtectionLevel protLevel( CMManager::EProtLevel0 ); + destinationInstance->GetProtectionL( protLevel ); + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + if ( protLevel == CMManager::EProtLevel1 || protLevel == CMManager::EProtLevel3 ) + { + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + } + + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } destinationInstance->RemoveConnMethodFromDestinationL( *connMethodInstance ); destinationInstance->UpdateL(); @@ -1363,6 +1450,20 @@ CCmmConnMethodInstance* connMethodInstance = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() ); + TBool capabilityCheckNeeded( EFalse ); + iCache.CheckIfConnMethodBelongsToProtectedDestinationL( + *connMethodInstance, + capabilityCheckNeeded ); + if ( capabilityCheckNeeded ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + iCache.CheckIfConnMethodReferencesCanBeRemovedL( *connMethodInstance ); iCache.RemoveAllReferencesToConnMethodL( *connMethodInstance ); @@ -1454,6 +1555,11 @@ DestinationIsEqualL( aMessage ); } break; + case EDestGetIcon: + { + GetDestinationIconL( aMessage ); + } + break; case EDestAddConnMethod: { DestAddConnMethodL( aMessage ); @@ -1509,6 +1615,11 @@ DeleteDestinationL( aMessage ); } break; + case EDestSetIcon: + { + SetDestinationIconL( aMessage ); + } + break; default: { User::Leave( KErrNotSupported ); @@ -1847,6 +1958,33 @@ } // ----------------------------------------------------------------------------- +// CCmmSession::GetDestinationIconL +// ----------------------------------------------------------------------------- +// +void CCmmSession::GetDestinationIconL( const RMessage2& aMessage ) + { + OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONICONL_ENTRY ); + + CCmmDestinationInstance* destinationInstance = + ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + + HBufC* icon = destinationInstance->GetDestinationIconL(); + CleanupStack::PushL( icon ); + TPtrC iconPtr( icon->Des() ); + + TInt bufferLen = aMessage.GetDesMaxLength( 0 ); + if ( iconPtr.Length() > bufferLen ) + { + User::Leave( KErrArgument ); + } + + aMessage.WriteL( 0, iconPtr ); + CleanupStack::PopAndDestroy( icon ); + + OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONICONL_EXIT ); + } + +// ----------------------------------------------------------------------------- // CCmmSession::GetDestinationIdL // ----------------------------------------------------------------------------- // @@ -2012,6 +2150,20 @@ CCmmDestinationInstance* destination = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destination->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + CCmmConnMethodInstance* connMethod = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() ); @@ -2035,12 +2187,26 @@ { OstTraceFunctionEntry0( CCMMSESSION_DESTADDEMBEDDEDDESTINATIONL_ENTRY ); - CCmmDestinationInstance* destination = + CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + CCmmDestinationInstance* embeddedDestination = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int0() ); - TInt index = destination->AddEmbeddedDestinationL( *embeddedDestination ); + TInt index = destinationInstance->AddEmbeddedDestinationL( *embeddedDestination ); TPckg indexPckg( index ); aMessage.WriteL( 1, indexPckg ); @@ -2059,8 +2225,25 @@ ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); CCmmConnMethodInstance* connMethodInstance = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() ); - - //TODO, capability checks + + // Check the protection of destination and if protected check the needed + // capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel3 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + + // Check the protection of CM and if protected check the needed + // capabilities. + CheckCapabilitiesForProtectedCML( aMessage, connMethodInstance ); destinationInstance->DeleteConnMethodFromDestinationL( *connMethodInstance ); @@ -2080,7 +2263,20 @@ CCmmConnMethodInstance* connMethodInstance = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() ); - //TODO, capability checks + // Check the protection of destination and if protected check the needed + // capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel3 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } destinationInstance->RemoveConnMethodFromDestinationL( *connMethodInstance ); @@ -2097,11 +2293,25 @@ CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + + // Check the protection of destination and if protected check the needed + // capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel3 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + CCmmConnMethodInstance* connMethodInstance = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() ); - //TODO, capability checks - // Index values start from 0 (0 meaning highest priority). TUint index( ( TUint )aMessage.Int1() ); @@ -2121,6 +2331,28 @@ CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + // Check that client does not try to change the name of the Internet Destination. + TUint32 metadata( 0 ); + destinationInstance->GetMetadataL( CMManager::ESnapMetadataPurpose, metadata ); + if ( metadata == CMManager::ESnapPurposeInternet ) + { + User::Leave( KErrPermissionDenied ); + } + + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel2 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + // Load and check name. TInt destNameLength = aMessage.GetDesLength( 0 ); if ( destNameLength <= 0 ) @@ -2147,6 +2379,48 @@ } // ----------------------------------------------------------------------------- +// CCmmSession::SetDestinationIconL +// ----------------------------------------------------------------------------- +// +void CCmmSession::SetDestinationIconL( const RMessage2& aMessage ) + { + OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONICONL_ENTRY ); + + CCmmDestinationInstance* destinationInstance = + ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); //TODO, check the current level can't be altered without proper capas. + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel2 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + + // Load and check name. + TInt destIconNameLength = aMessage.GetDesLength( 0 ); + if ( destIconNameLength < 0 || destIconNameLength > KCmmStringLengthMax ) + { + User::Leave( KErrArgument ); + } + + HBufC* newIconName = HBufC::NewLC( destIconNameLength ); + TPtr ptrNewIconName = newIconName->Des(); + aMessage.ReadL( 0, ptrNewIconName ); + + destinationInstance->SetDestinationIconL( *newIconName ); + CleanupStack::PopAndDestroy( newIconName ); + + OstTraceFunctionExit0( CCMMSESSION_SETDESTINATIONICONL_EXIT ); + } + +// ----------------------------------------------------------------------------- // CCmmSession::SetDestinationMetadataL // ----------------------------------------------------------------------------- // @@ -2154,11 +2428,23 @@ { OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONMETADATAL_ENTRY ); - //TODO, Capability check. Protection level or Internet destination. - CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel2 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + CMManager::TSnapMetadataField metadataField = ( CMManager::TSnapMetadataField )aMessage.Int0(); TUint32 metadata = aMessage.Int1(); @@ -2176,7 +2462,13 @@ { OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONPROTECTIONL_ENTRY ); - //TODO, Capability check: ECapabilityNetworkControl + // Check the needed capabilities. + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); @@ -2198,6 +2490,20 @@ CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel2 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + TBool hidden = aMessage.Int0(); destinationInstance->SetMetadataL( CMManager::ESnapMetadataHiddenAgent, hidden ); @@ -2214,6 +2520,22 @@ CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + + // Check the protection and if protected check the needed capabilities + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel2 || + protLevel == CMManager::EProtLevel3 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + destinationInstance->UpdateL(); OstTraceFunctionExit0( CCMMSESSION_UPDATEDESTINATIONL_EXIT ); @@ -2230,6 +2552,22 @@ CCmmDestinationInstance* destinationInstance = ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() ); + // Check the protection of destination and if protected check the needed + // capabilities. + CMManager::TProtectionLevel protLevel = + destinationInstance->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 || + protLevel == CMManager::EProtLevel2 || + protLevel == CMManager::EProtLevel3 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + iCache.CheckIfDestinationCanBeDeletedL( *destinationInstance ); iCache.DeleteDestinationL( *destinationInstance ); @@ -2380,13 +2718,14 @@ TUint32 bearerType( aMessage.Int0() ); - CCmmConnMethodInstance* connMethod = CCmmConnMethodInstance::NewLC( this, &iCache ); - iCache.CreateConnMethodL( *connMethod, NULL, bearerType, 0 ); - - iConnMethodContainer->AddL( ( CObject* ) connMethod ); - TInt handle = iConnMethodObjects->AddL( ( CObject* ) connMethod ); - connMethod->SetHandle( handle ); - CleanupStack::Pop( connMethod ); + CCmmConnMethodInstance* connMethodInstance = + CCmmConnMethodInstance::NewLC( this, &iCache ); + iCache.CreateConnMethodL( *connMethodInstance, NULL, bearerType, 0 ); + + iConnMethodContainer->AddL( ( CObject* ) connMethodInstance ); + TInt handle = iConnMethodObjects->AddL( ( CObject* ) connMethodInstance ); + connMethodInstance->SetHandle( handle ); + CleanupStack::Pop( connMethodInstance ); TPckg handlePckg( handle ); TInt error = aMessage.Write( 3, handlePckg ); @@ -2408,9 +2747,13 @@ { OstTraceFunctionEntry0( CCMMSESSION_UPDATECONNMETHODL_ENTRY ); - CCmmConnMethodInstance* connMethod = + CCmmConnMethodInstance* connMethodInstance = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() ); - connMethod->UpdateL(); + + // Check if the Client has capabilities to delete this CM. + CheckCapabilitiesForProtectedCML( aMessage, connMethodInstance ); + + connMethodInstance->UpdateL(); OstTraceFunctionExit0( CCMMSESSION_UPDATECONNMETHODL_EXIT ); } @@ -2435,7 +2778,7 @@ } // ----------------------------------------------------------------------------- -// CCmmSession::ConnMethodUpdateL +// CCmmSession::DeleteConnMethodL // ----------------------------------------------------------------------------- // void CCmmSession::DeleteConnMethodL( const RMessage2& aMessage ) @@ -2445,6 +2788,9 @@ CCmmConnMethodInstance* connMethodInstance = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() ); + // Check if the Client has capabilities to delete this CM. + CheckCapabilitiesForProtectedCML( aMessage, connMethodInstance ); + iCache.CheckIfConnMethodCanBeDeletedL( *connMethodInstance ); iCache.DeleteConnMethodL( *connMethodInstance ); // Ignore the boolean return value. It is always true, or the @@ -2583,7 +2929,7 @@ CleanupStack::PushL( value ); TPtrC valuePtr = value->Des(); - // check the buffer length of the given buffer + // Check the buffer length of the given buffer. TInt bufferLen = aMessage.GetDesMaxLength( 1 ); if ( valuePtr.Length() > bufferLen ) { @@ -2617,7 +2963,7 @@ CleanupStack::PushL( value ); TPtrC8 valuePtr = value->Des(); - // check the buffer length of the given buffer + // Check the buffer length of the given buffer. TInt bufferLen = aMessage.GetDesMaxLength( 1 ); if ( valuePtr.Length() > bufferLen ) { @@ -2641,6 +2987,10 @@ CCmmConnMethodInstance* cm = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() ); + // Check the capability needed if protected CM + // ECapabilityWriteDeviceData is checked earlier already. + CheckCapabilitiesForProtectedCML( aMessage, cm ); + TUint32 attribute( aMessage.Int0() ); TUint32 value( aMessage.Int1() ); @@ -2660,6 +3010,10 @@ CCmmConnMethodInstance* cm = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() ); + // Check the capability needed if protected CM + // ECapabilityWriteDeviceData is checked earlier already. + CheckCapabilitiesForProtectedCML( aMessage, cm ); + TUint32 attribute( aMessage.Int0() ); TBool value( aMessage.Int1() ); @@ -2679,6 +3033,10 @@ CCmmConnMethodInstance* cm = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() ); + // Check the capability needed if protected CM + // ECapabilityWriteDeviceData is checked earlier already. + CheckCapabilitiesForProtectedCML( aMessage, cm ); + TUint32 attribute( aMessage.Int0() ); HBufC* value = HBufC::NewLC( aMessage.GetDesLengthL( 1 ) ); @@ -2703,6 +3061,10 @@ CCmmConnMethodInstance* cm = ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() ); + // Check the capability needed if protected CM + // ECapabilityWriteDeviceData is checked earlier already. + CheckCapabilitiesForProtectedCML( aMessage, cm ); + TUint32 attribute( aMessage.Int0() ); HBufC8* value = HBufC8::NewLC( aMessage.GetDesLengthL( 1 ) ); @@ -2881,6 +3243,19 @@ CCmmDestinationInstance* destination = ( CCmmDestinationInstance* )iDestinationObjects->AtL( destinationHandle ); + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destination->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + CCmmConnMethodInstance* connMethod = CCmmConnMethodInstance::NewLC( this, &iCache ); iCache.CreateConnMethodL( *connMethod, destination, bearerType, 0 ); @@ -2917,6 +3292,19 @@ CCmmDestinationInstance* destination = ( CCmmDestinationInstance* )iDestinationObjects->AtL( destinationHandle ); + // Check the protection and if protected check the needed capabilities. + CMManager::TProtectionLevel protLevel = + destination->CurrentProtectionLevel(); + if ( protLevel == CMManager::EProtLevel1 ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + CCmmConnMethodInstance* connMethod = CCmmConnMethodInstance::NewLC( this, &iCache ); // Will check if ID is available. @@ -3061,4 +3449,28 @@ OstTraceFunctionExit0( CCMMSESSION_GETEMBEDDEDDESTINATIONL_EXIT ); } +// ----------------------------------------------------------------------------- +// Check if CM is protected and if so then check the needed capabilities. +// ----------------------------------------------------------------------------- +// +void CCmmSession::CheckCapabilitiesForProtectedCML( + const RMessage2& aMessage, + CCmmConnMethodInstance* aConnectionMethodInstance ) + { + OstTraceFunctionEntry0( CCMMSESSION_CHECKCAPABILITIESFORPROTECTEDCML_ENTRY ); + + TBool prot = aConnectionMethodInstance->GetBoolAttributeL( CMManager::ECmProtected ); + if ( prot ) + { + CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass ); + capabilities = iServer.CapabilityCheckWithProtection( aMessage ); + if ( capabilities == CPolicyServer::EFail ) + { + User::Leave( KErrPermissionDenied ); + } + } + + OstTraceFunctionExit0( CCMMSESSION_CHECKCAPABILITIESFORPROTECTEDCML_EXIT ); + } + // End of file diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cmmgr/database/group/cmmanagerdatabase.mmp --- a/cmmanager/cmmgr/database/group/cmmanagerdatabase.mmp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cmmgr/database/group/cmmanagerdatabase.mmp Thu May 27 13:17:01 2010 +0300 @@ -17,7 +17,6 @@ * */ -#include #include TARGET cmmanagerdatabase.dll @@ -42,9 +41,7 @@ MW_LAYER_SYSTEMINCLUDE LIBRARY euser.lib -//LIBRARY ECom.lib LIBRARY COMMSDAT.lib -//LIBRARY flogger.lib #if defined(ARMCC) diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/cpdestinationplugin.pro --- a/cmmanager/cpdestinationplugin/cpdestinationplugin.pro Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpdestinationplugin/cpdestinationplugin.pro Thu May 27 13:17:01 2010 +0300 @@ -10,14 +10,13 @@ # Contributors: # # Description: -# +# Control Panel Destinations & Access points plugin project file TEMPLATE = lib TARGET = cpdestinationplugin DEPENDPATH += . INCLUDEPATH += . CONFIG += hb plugin -CONFIG += debug MOC_DIR = moc OBJECTS_DIR = obj RCC_DIR = rcc diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/src/cpadddestinationentryitemdata.cpp --- a/cmmanager/cpdestinationplugin/src/cpadddestinationentryitemdata.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpdestinationplugin/src/cpadddestinationentryitemdata.cpp Thu May 27 13:17:01 2010 +0300 @@ -175,6 +175,7 @@ CmDestinationShim *destination = cmm->destination(destinationList[i]); if (0 == dest.compare(destination->name())) { retVal = false; + delete destination; break; } delete destination; diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/src/cpdestinationentryitem.cpp --- a/cmmanager/cpdestinationplugin/src/cpdestinationentryitem.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpdestinationplugin/src/cpdestinationentryitem.cpp Thu May 27 13:17:01 2010 +0300 @@ -571,6 +571,7 @@ if (0 == destination.compare(dest->name())) { destination = hbTrId("txt_occ_info_name_already_in_use"); retVal = false; + delete dest; break; } delete dest; @@ -692,7 +693,6 @@ try { cmm = new CmManagerShim(); if (isDestinationNameValid(destinationName, cmm)) { - cmm = new CmManagerShim(); destination = cmm->destination(mDestinationId); destination->setName(destinationName); destination->update(); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/src/cpiapitem.cpp --- a/cmmanager/cpdestinationplugin/src/cpiapitem.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpdestinationplugin/src/cpiapitem.cpp Thu May 27 13:17:01 2010 +0300 @@ -223,6 +223,7 @@ CmConnectionMethodShim *cm = destination->connectionMethodByID(mIapId); destination->deleteConnectionMethod(cm); destination->update(); + delete cm; delete destination; } else { CmConnectionMethodShim *cm = mCmm->connectionMethod(mIapId); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/hbautotest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/hbautotest.cpp Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,831 @@ +/* +* 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: +* +*/ + +#include "hbautotest.h" +#include +#include + + +const qreal STEP = 4; //How many pixels to drag before sending an event + +//Init static members +bool HbAutoTest::pointerPressed = false; +QPointF HbAutoTest::pressPoint = QPointF(); + +void HbAutoTest::mouseMove (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos, int delay) +{ + if (delay!=-1) { + QTest::qWait(delay); + } + QPointF targetPoint=QPointF(); + if (pos==QPointF()) { + targetPoint = middlePointOfWidget(widget); + } else { + targetPoint = widget->mapToScene(pos); + } + if (pointerPressed) { + //Now we should drag an item + drag(window, targetPoint); + HbAutoTestMouseEvent me ( + QEvent::MouseMove, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::NoButton, + Qt::NoButton, + Qt::NoModifier); + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->notify((window->viewport()), &me); + QCoreApplication::sendPostedEvents(); + QTest::qWait(1); + } else { + HbAutoTestMouseEvent me ( + QEvent::MouseMove, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::NoButton, + Qt::NoButton, + Qt::NoModifier); + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->notify((window->viewport()), &me); + QCoreApplication::sendPostedEvents(); + QTest::qWait(1); + + } + QTest::qWait(1); + QTest::qWait(1); +} + +void HbAutoTest::mousePress (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos, int delay) +{ + if (delay!=-1) { + QTest::qWait(delay); + } + pointerPressed=true; + QPointF targetPoint=QPointF(); + if (pos==QPointF()) { + targetPoint = middlePointOfWidget(widget); + } else { + targetPoint = widget->mapToScene(pos); + } + QCursor::setPos(window->mapToGlobal(targetPoint.toPoint())); + + pressPoint=targetPoint; + + HbAutoTestMouseEvent me ( + QEvent::MouseButtonPress, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::LeftButton, + Qt::LeftButton, + Qt::NoModifier); + + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->notify((window->viewport()), &me); + QCoreApplication::sendPostedEvents(); + QCoreApplication::sendPostedEvents(); + QTest::qWait(1); +} + +void HbAutoTest::mouseRelease (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos, int delay) +{ + if (delay!=-1) { + QTest::qWait(delay); + } + pointerPressed=false; + QPointF targetPoint=QPointF(); + if (pos==QPointF()) { + targetPoint = middlePointOfWidget(widget); + } else { + targetPoint = widget->mapToScene(pos); + } + QCursor::setPos(window->mapToGlobal(targetPoint.toPoint())); + pressPoint=QPointF(); + HbAutoTestMouseEvent me ( + QEvent::MouseButtonRelease, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::LeftButton, + Qt::NoButton, + Qt::NoModifier); + + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->notify((window->viewport()), &me); + QCoreApplication::sendPostedEvents(); + + QTest::qWait(1); + QTest::qWait(1); +} + +void HbAutoTest::mouseClick (HbAutoTestMainWindow *window, const HbWidget *widget, QPointF pos, int delay) +{ + if (delay!=-1) { + QTest::qWait(delay); + } + QPointF targetPoint=QPointF(); + if (pos==QPointF()) { + targetPoint = middlePointOfWidget(widget); + } else { + targetPoint = widget->mapToScene(pos); + } + + QCursor::setPos(window->mapToGlobal(targetPoint.toPoint())); + + HbAutoTestMouseEvent me ( + QEvent::MouseButtonPress, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::LeftButton, + Qt::LeftButton, + Qt::NoModifier); + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->notify((window->viewport()), &me); + QCoreApplication::sendPostedEvents(); + QTest::qWait(1); + + if (delay!=-1) { + QTest::qWait(delay); + } + HbAutoTestMouseEvent me2 ( + QEvent::MouseButtonRelease, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::LeftButton, + Qt::NoButton, + Qt::NoModifier); + + QSpontaneKeyEvent::setSpontaneous(&me2); + qApp->notify((window->viewport()), &me2); + QCoreApplication::sendPostedEvents(); + + QTest::qWait(1); + QTest::qWait(1); +} + +QPointF HbAutoTest::middlePointOfWidget( const HbWidget* widget) +{ + QRectF widgetRect = widget->rect(); + QRectF widgetSceneRect = widget->mapRectToScene(widgetRect); + qreal middleX = ((widgetSceneRect.right() - widgetSceneRect.left())/2)+widgetSceneRect.left(); + qreal middleY = ((widgetSceneRect.bottom() - widgetSceneRect.top())/2)+widgetSceneRect.top(); + return QPointF(middleX,middleY); +} + + + +void HbAutoTest::drag(HbAutoTestMainWindow *window, QPointF targetPoint) +{ + qreal tempX = targetPoint.x() - pressPoint.x(); + qreal tempY = targetPoint.y() - pressPoint.y(); + qreal totalTrip = sqrt ((tempX * tempX) + (tempY * tempY)); + + int numberOfSteps = qRound(totalTrip / STEP); + HbAutoTestMouseEvent me ( + QEvent::MouseMove, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::NoButton , + Qt::LeftButton, + Qt::NoModifier); + + QPointF nextPanPoint=pressPoint; + for (int i=1; imapToGlobal(nextPanPoint.toPoint())); + + me = HbAutoTestMouseEvent (QEvent::MouseMove, + nextPanPoint.toPoint(), + window->viewport()->mapToGlobal(nextPanPoint.toPoint()), + Qt::NoButton, + Qt::LeftButton, + Qt::NoModifier); + + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->notify((window->viewport()), &me); + QCoreApplication::sendPostedEvents(); + } + + QCursor::setPos(window->mapToGlobal(targetPoint.toPoint())); + + //One more (or the only one) step to the target + me = HbAutoTestMouseEvent (QEvent::MouseMove, + targetPoint.toPoint(), + window->viewport()->mapToGlobal(targetPoint.toPoint()), + Qt::NoButton, + Qt::LeftButton, + Qt::NoModifier); + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->notify((window->viewport()), &me); + QCoreApplication::sendPostedEvents(); +} + + +void HbAutoTest::simulateEvent(QWidget *widget, bool press, int code, + Qt::KeyboardModifiers modifier, QString text, bool repeat, int delay) + { + //Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + /*extern int Q_TESTLIB_EXPORT defaultKeyDelay(); + + if (delay == -1 || delay < defaultKeyDelay()) + delay = defaultKeyDelay(); + if(delay > 0) + QTest::qWait(delay);*/ + Q_UNUSED(delay); + QTest::qWait(10); //TODO: Remove this and reveal above out-commented code + + HbAutoTestKeyEvent a(press ? QEvent::KeyPress : QEvent::KeyRelease, code, modifier, text, repeat); + QSpontaneKeyEvent::setSpontaneous(&a); + if (!qApp->notify(widget, &a)) + QTest::qWarn("Keyboard event not accepted by receiving widget"); + } + +void HbAutoTest::sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code, + QString text, Qt::KeyboardModifiers modifier, int delay) + { + QTEST_ASSERT(qApp); + + if (!widget) + widget = QWidget::keyboardGrabber(); + if (!widget) { + if (QWidget *apw = QApplication::activePopupWidget()) + widget = apw->focusWidget() ? apw->focusWidget() : apw; + else + widget = QApplication::focusWidget(); + } + if (!widget) + widget = QApplication::activeWindow(); + + QTEST_ASSERT(widget); + + if (action == QTest::Click) { + QPointer ptr(widget); + sendKeyEvent(QTest::Press, widget, code, text, modifier, delay); + if (!ptr) { + // if we send key-events to embedded widgets, they might be destroyed + // when the user presses Return + return; + } + sendKeyEvent(QTest::Release, widget, code, text, modifier, delay); + return; + } + + bool repeat = false; + + if (action == QTest::Press) { + if (modifier & Qt::ShiftModifier) + simulateEvent(widget, true, Qt::Key_Shift, 0, QString(), false, delay); + + if (modifier & Qt::ControlModifier) + simulateEvent(widget, true, Qt::Key_Control, modifier & Qt::ShiftModifier, QString(), false, delay); + + if (modifier & Qt::AltModifier) + simulateEvent(widget, true, Qt::Key_Alt, + modifier & (Qt::ShiftModifier | Qt::ControlModifier), QString(), false, delay); + if (modifier & Qt::MetaModifier) + simulateEvent(widget, true, Qt::Key_Meta, modifier & (Qt::ShiftModifier + | Qt::ControlModifier | Qt::AltModifier), QString(), false, delay); + simulateEvent(widget, true, code, modifier, text, repeat, delay); + } else if (action == QTest::Release) { + simulateEvent(widget, false, code, modifier, text, repeat, delay); + + if (modifier & Qt::MetaModifier) + simulateEvent(widget, false, Qt::Key_Meta, modifier, QString(), false, delay); + if (modifier & Qt::AltModifier) + simulateEvent(widget, false, Qt::Key_Alt, modifier & + (Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier), QString(), false, delay); + + if (modifier & Qt::ControlModifier) + simulateEvent(widget, false, Qt::Key_Control, + modifier & (Qt::ShiftModifier | Qt::ControlModifier), QString(), false, delay); + + if (modifier & Qt::ShiftModifier) + simulateEvent(widget, false, Qt::Key_Shift, modifier & Qt::ShiftModifier, QString(), false, delay); + } + } + +void HbAutoTest::sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code, + char ascii, Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + QString text; + if (ascii) + text = QString(QChar::fromLatin1(ascii)); + sendKeyEvent(action, widget, code, text, modifier, delay); + } + +void HbAutoTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, + Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + sendKeyEvent(action, widget, asciiToKey(ascii), ascii, modifier, delay); + } + +void HbAutoTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, + Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + sendKeyEvent(action, widget, key, keyToAscii(key), modifier, delay); + } + +void HbAutoTest::keyClicks(QWidget *widget, const QString &sequence, + Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + for (int i=0; i < sequence.length(); i++) + keyEvent(QTest::Click, widget, sequence.at(i).toLatin1(), modifier, delay); + } + +void HbAutoTest::keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + keyEvent(QTest::Press, widget, key, modifier, delay); + } + +void HbAutoTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + keyEvent(QTest::Release, widget, key, modifier, delay); + } + +void HbAutoTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + keyEvent(QTest::Click, widget, key, modifier, delay); + } + +void HbAutoTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + keyEvent(QTest::Press, widget, key, modifier, delay); + } + +void HbAutoTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + keyEvent(QTest::Release, widget, key, modifier, delay); } + +void HbAutoTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier, int delay) + { + Q_ASSERT_X(dynamic_cast(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow"); + keyEvent(QTest::Click, widget, key, modifier, delay); + } + +Qt::Key HbAutoTest::asciiToKey(char ascii) +{ + switch ((unsigned char)ascii) { + case 0x08: return Qt::Key_Backspace; + case 0x09: return Qt::Key_Tab; + case 0x0b: return Qt::Key_Backtab; + case 0x0d: return Qt::Key_Return; + case 0x1b: return Qt::Key_Escape; + case 0x20: return Qt::Key_Space; + case 0x21: return Qt::Key_Exclam; + case 0x22: return Qt::Key_QuoteDbl; + case 0x23: return Qt::Key_NumberSign; + case 0x24: return Qt::Key_Dollar; + case 0x25: return Qt::Key_Percent; + case 0x26: return Qt::Key_Ampersand; + case 0x27: return Qt::Key_Apostrophe; + case 0x28: return Qt::Key_ParenLeft; + case 0x29: return Qt::Key_ParenRight; + case 0x2a: return Qt::Key_Asterisk; + case 0x2b: return Qt::Key_Plus; + case 0x2c: return Qt::Key_Comma; + case 0x2d: return Qt::Key_Minus; + case 0x2e: return Qt::Key_Period; + case 0x2f: return Qt::Key_Slash; + case 0x30: return Qt::Key_0; + case 0x31: return Qt::Key_1; + case 0x32: return Qt::Key_2; + case 0x33: return Qt::Key_3; + case 0x34: return Qt::Key_4; + case 0x35: return Qt::Key_5; + case 0x36: return Qt::Key_6; + case 0x37: return Qt::Key_7; + case 0x38: return Qt::Key_8; + case 0x39: return Qt::Key_9; + case 0x3a: return Qt::Key_Colon; + case 0x3b: return Qt::Key_Semicolon; + case 0x3c: return Qt::Key_Less; + case 0x3d: return Qt::Key_Equal; + case 0x3e: return Qt::Key_Greater; + case 0x3f: return Qt::Key_Question; + case 0x40: return Qt::Key_At; + case 0x41: return Qt::Key_A; + case 0x42: return Qt::Key_B; + case 0x43: return Qt::Key_C; + case 0x44: return Qt::Key_D; + case 0x45: return Qt::Key_E; + case 0x46: return Qt::Key_F; + case 0x47: return Qt::Key_G; + case 0x48: return Qt::Key_H; + case 0x49: return Qt::Key_I; + case 0x4a: return Qt::Key_J; + case 0x4b: return Qt::Key_K; + case 0x4c: return Qt::Key_L; + case 0x4d: return Qt::Key_M; + case 0x4e: return Qt::Key_N; + case 0x4f: return Qt::Key_O; + case 0x50: return Qt::Key_P; + case 0x51: return Qt::Key_Q; + case 0x52: return Qt::Key_R; + case 0x53: return Qt::Key_S; + case 0x54: return Qt::Key_T; + case 0x55: return Qt::Key_U; + case 0x56: return Qt::Key_V; + case 0x57: return Qt::Key_W; + case 0x58: return Qt::Key_X; + case 0x59: return Qt::Key_Y; + case 0x5a: return Qt::Key_Z; + case 0x5b: return Qt::Key_BracketLeft; + case 0x5c: return Qt::Key_Backslash; + case 0x5d: return Qt::Key_BracketRight; + case 0x5e: return Qt::Key_AsciiCircum; + case 0x5f: return Qt::Key_Underscore; + case 0x60: return Qt::Key_QuoteLeft; + case 0x61: return Qt::Key_A; + case 0x62: return Qt::Key_B; + case 0x63: return Qt::Key_C; + case 0x64: return Qt::Key_D; + case 0x65: return Qt::Key_E; + case 0x66: return Qt::Key_F; + case 0x67: return Qt::Key_G; + case 0x68: return Qt::Key_H; + case 0x69: return Qt::Key_I; + case 0x6a: return Qt::Key_J; + case 0x6b: return Qt::Key_K; + case 0x6c: return Qt::Key_L; + case 0x6d: return Qt::Key_M; + case 0x6e: return Qt::Key_N; + case 0x6f: return Qt::Key_O; + case 0x70: return Qt::Key_P; + case 0x71: return Qt::Key_Q; + case 0x72: return Qt::Key_R; + case 0x73: return Qt::Key_S; + case 0x74: return Qt::Key_T; + case 0x75: return Qt::Key_U; + case 0x76: return Qt::Key_V; + case 0x77: return Qt::Key_W; + case 0x78: return Qt::Key_X; + case 0x79: return Qt::Key_Y; + case 0x7a: return Qt::Key_Z; + case 0x7b: return Qt::Key_BraceLeft; + case 0x7c: return Qt::Key_Bar; + case 0x7d: return Qt::Key_BraceRight; + case 0x7e: return Qt::Key_AsciiTilde; + + // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06 + case 0xa0: return Qt::Key_nobreakspace; + case 0xa1: return Qt::Key_exclamdown; + case 0xa2: return Qt::Key_cent; + case 0xa3: return Qt::Key_sterling; + case 0xa4: return Qt::Key_currency; + case 0xa5: return Qt::Key_yen; + case 0xa6: return Qt::Key_brokenbar; + case 0xa7: return Qt::Key_section; + case 0xa8: return Qt::Key_diaeresis; + case 0xa9: return Qt::Key_copyright; + case 0xaa: return Qt::Key_ordfeminine; + case 0xab: return Qt::Key_guillemotleft; + case 0xac: return Qt::Key_notsign; + case 0xad: return Qt::Key_hyphen; + case 0xae: return Qt::Key_registered; + case 0xaf: return Qt::Key_macron; + case 0xb0: return Qt::Key_degree; + case 0xb1: return Qt::Key_plusminus; + case 0xb2: return Qt::Key_twosuperior; + case 0xb3: return Qt::Key_threesuperior; + case 0xb4: return Qt::Key_acute; + case 0xb5: return Qt::Key_mu; + case 0xb6: return Qt::Key_paragraph; + case 0xb7: return Qt::Key_periodcentered; + case 0xb8: return Qt::Key_cedilla; + case 0xb9: return Qt::Key_onesuperior; + case 0xba: return Qt::Key_masculine; + case 0xbb: return Qt::Key_guillemotright; + case 0xbc: return Qt::Key_onequarter; + case 0xbd: return Qt::Key_onehalf; + case 0xbe: return Qt::Key_threequarters; + case 0xbf: return Qt::Key_questiondown; + case 0xc0: return Qt::Key_Agrave; + case 0xc1: return Qt::Key_Aacute; + case 0xc2: return Qt::Key_Acircumflex; + case 0xc3: return Qt::Key_Atilde; + case 0xc4: return Qt::Key_Adiaeresis; + case 0xc5: return Qt::Key_Aring; + case 0xc6: return Qt::Key_AE; + case 0xc7: return Qt::Key_Ccedilla; + case 0xc8: return Qt::Key_Egrave; + case 0xc9: return Qt::Key_Eacute; + case 0xca: return Qt::Key_Ecircumflex; + case 0xcb: return Qt::Key_Ediaeresis; + case 0xcc: return Qt::Key_Igrave; + case 0xcd: return Qt::Key_Iacute; + case 0xce: return Qt::Key_Icircumflex; + case 0xcf: return Qt::Key_Idiaeresis; + case 0xd0: return Qt::Key_ETH; + case 0xd1: return Qt::Key_Ntilde; + case 0xd2: return Qt::Key_Ograve; + case 0xd3: return Qt::Key_Oacute; + case 0xd4: return Qt::Key_Ocircumflex; + case 0xd5: return Qt::Key_Otilde; + case 0xd6: return Qt::Key_Odiaeresis; + case 0xd7: return Qt::Key_multiply; + case 0xd8: return Qt::Key_Ooblique; + case 0xd9: return Qt::Key_Ugrave; + case 0xda: return Qt::Key_Uacute; + case 0xdb: return Qt::Key_Ucircumflex; + case 0xdc: return Qt::Key_Udiaeresis; + case 0xdd: return Qt::Key_Yacute; + case 0xde: return Qt::Key_THORN; + case 0xdf: return Qt::Key_ssharp; + case 0xe5: return Qt::Key_Aring; + case 0xe6: return Qt::Key_AE; + case 0xf7: return Qt::Key_division; + case 0xf8: return Qt::Key_Ooblique; + case 0xff: return Qt::Key_ydiaeresis; + default: QTEST_ASSERT(false); return Qt::Key(0); + } +} + +char HbAutoTest::keyToAscii(Qt::Key key) +{ + switch (key) { + case Qt::Key_Backspace: return 0x8; //BS + case Qt::Key_Tab: return 0x09; // HT + case Qt::Key_Backtab: return 0x0b; // VT + case Qt::Key_Enter: + case Qt::Key_Return: return 0x0d; // CR + case Qt::Key_Escape: return 0x1b; // ESC + case Qt::Key_Space: return 0x20; // 7 bit printable ASCII + case Qt::Key_Exclam: return 0x21; + case Qt::Key_QuoteDbl: return 0x22; + case Qt::Key_NumberSign: return 0x23; + case Qt::Key_Dollar: return 0x24; + case Qt::Key_Percent: return 0x25; + case Qt::Key_Ampersand: return 0x26; + case Qt::Key_Apostrophe: return 0x27; + case Qt::Key_ParenLeft: return 0x28; + case Qt::Key_ParenRight: return 0x29; + case Qt::Key_Asterisk: return 0x2a; + case Qt::Key_Plus: return 0x2b; + case Qt::Key_Comma: return 0x2c; + case Qt::Key_Minus: return 0x2d; + case Qt::Key_Period: return 0x2e; + case Qt::Key_Slash: return 0x2f; + case Qt::Key_0: return 0x30; + case Qt::Key_1: return 0x31; + case Qt::Key_2: return 0x32; + case Qt::Key_3: return 0x33; + case Qt::Key_4: return 0x34; + case Qt::Key_5: return 0x35; + case Qt::Key_6: return 0x36; + case Qt::Key_7: return 0x37; + case Qt::Key_8: return 0x38; + case Qt::Key_9: return 0x39; + case Qt::Key_Colon: return 0x3a; + case Qt::Key_Semicolon: return 0x3b; + case Qt::Key_Less: return 0x3c; + case Qt::Key_Equal: return 0x3d; + case Qt::Key_Greater: return 0x3e; + case Qt::Key_Question: return 0x3f; + case Qt::Key_At: return 0x40; + case Qt::Key_A: return 0x61; // 0x41 == 'A', 0x61 == 'a' + case Qt::Key_B: return 0x62; + case Qt::Key_C: return 0x63; + case Qt::Key_D: return 0x64; + case Qt::Key_E: return 0x65; + case Qt::Key_F: return 0x66; + case Qt::Key_G: return 0x67; + case Qt::Key_H: return 0x68; + case Qt::Key_I: return 0x69; + case Qt::Key_J: return 0x6a; + case Qt::Key_K: return 0x6b; + case Qt::Key_L: return 0x6c; + case Qt::Key_M: return 0x6d; + case Qt::Key_N: return 0x6e; + case Qt::Key_O: return 0x6f; + case Qt::Key_P: return 0x70; + case Qt::Key_Q: return 0x71; + case Qt::Key_R: return 0x72; + case Qt::Key_S: return 0x73; + case Qt::Key_T: return 0x74; + case Qt::Key_U: return 0x75; + case Qt::Key_V: return 0x76; + case Qt::Key_W: return 0x77; + case Qt::Key_X: return 0x78; + case Qt::Key_Y: return 0x79; + case Qt::Key_Z: return 0x7a; + case Qt::Key_BracketLeft: return 0x5b; + case Qt::Key_Backslash: return 0x5c; + case Qt::Key_BracketRight: return 0x5d; + case Qt::Key_AsciiCircum: return 0x5e; + case Qt::Key_Underscore: return 0x5f; + case Qt::Key_QuoteLeft: return 0x60; + + case Qt::Key_BraceLeft: return 0x7b; + case Qt::Key_Bar: return 0x7c; + case Qt::Key_BraceRight: return 0x7d; + case Qt::Key_AsciiTilde: return 0x7e; + + case Qt::Key_Delete: return 0; + case Qt::Key_Insert: return 0; // = 0x1006, + case Qt::Key_Pause: return 0; // = 0x1008, + case Qt::Key_Print: return 0; // = 0x1009, + case Qt::Key_SysReq: return 0; // = 0x100a, + + case Qt::Key_Clear: return 0; // = 0x100b, + + case Qt::Key_Home: return 0; // = 0x1010, // cursor movement + case Qt::Key_End: return 0; // = 0x1011, + case Qt::Key_Left: return 0; // = 0x1012, + case Qt::Key_Up: return 0; // = 0x1013, + case Qt::Key_Right: return 0; // = 0x1014, + case Qt::Key_Down: return 0; // = 0x1015, + case Qt::Key_PageUp: return 0; // = 0x1016, + case Qt::Key_PageDown: return 0; // = 0x1017, + case Qt::Key_Shift: return 0; // = 0x1020, // modifiers + case Qt::Key_Control: return 0; // = 0x1021, + case Qt::Key_Meta: return 0; // = 0x1022, + case Qt::Key_Alt: return 0; // = 0x1023, + case Qt::Key_CapsLock: return 0; // = 0x1024, + case Qt::Key_NumLock: return 0; // = 0x1025, + case Qt::Key_ScrollLock: return 0; // = 0x1026, + case Qt::Key_F1: return 0; // = 0x1030, // function keys + case Qt::Key_F2: return 0; // = 0x1031, + case Qt::Key_F3: return 0; // = 0x1032, + case Qt::Key_F4: return 0; // = 0x1033, + case Qt::Key_F5: return 0; // = 0x1034, + case Qt::Key_F6: return 0; // = 0x1035, + case Qt::Key_F7: return 0; // = 0x1036, + case Qt::Key_F8: return 0; // = 0x1037, + case Qt::Key_F9: return 0; // = 0x1038, + case Qt::Key_F10: return 0; // = 0x1039, + case Qt::Key_F11: return 0; // = 0x103a, + case Qt::Key_F12: return 0; // = 0x103b, + case Qt::Key_F13: return 0; // = 0x103c, + case Qt::Key_F14: return 0; // = 0x103d, + case Qt::Key_F15: return 0; // = 0x103e, + case Qt::Key_F16: return 0; // = 0x103f, + case Qt::Key_F17: return 0; // = 0x1040, + case Qt::Key_F18: return 0; // = 0x1041, + case Qt::Key_F19: return 0; // = 0x1042, + case Qt::Key_F20: return 0; // = 0x1043, + case Qt::Key_F21: return 0; // = 0x1044, + case Qt::Key_F22: return 0; // = 0x1045, + case Qt::Key_F23: return 0; // = 0x1046, + case Qt::Key_F24: return 0; // = 0x1047, + case Qt::Key_F25: return 0; // = 0x1048, // F25 .. F35 only on X11 + case Qt::Key_F26: return 0; // = 0x1049, + case Qt::Key_F27: return 0; // = 0x104a, + case Qt::Key_F28: return 0; // = 0x104b, + case Qt::Key_F29: return 0; // = 0x104c, + case Qt::Key_F30: return 0; // = 0x104d, + case Qt::Key_F31: return 0; // = 0x104e, + case Qt::Key_F32: return 0; // = 0x104f, + case Qt::Key_F33: return 0; // = 0x1050, + case Qt::Key_F34: return 0; // = 0x1051, + case Qt::Key_F35: return 0; // = 0x1052, + case Qt::Key_Super_L: return 0; // = 0x1053, // extra keys + case Qt::Key_Super_R: return 0; // = 0x1054, + case Qt::Key_Menu: return 0; // = 0x1055, + case Qt::Key_Hyper_L: return 0; // = 0x1056, + case Qt::Key_Hyper_R: return 0; // = 0x1057, + case Qt::Key_Help: return 0; // = 0x1058, + case Qt::Key_Direction_L: return 0; // = 0x1059, + case Qt::Key_Direction_R: return 0; // = 0x1060, + + // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06 + case Qt::Key_nobreakspace: return char(0xa0); + case Qt::Key_exclamdown: return char(0xa1); + case Qt::Key_cent: return char(0xa2); + case Qt::Key_sterling: return char(0xa3); + case Qt::Key_currency: return char(0xa4); + case Qt::Key_yen: return char(0xa5); + case Qt::Key_brokenbar: return char(0xa6); + case Qt::Key_section: return char(0xa7); + case Qt::Key_diaeresis: return char(0xa8); + case Qt::Key_copyright: return char(0xa9); + case Qt::Key_ordfeminine: return char(0xaa); + case Qt::Key_guillemotleft: return char(0xab); // left angle quotation mar + case Qt::Key_notsign: return char(0xac); + case Qt::Key_hyphen: return char(0xad); + case Qt::Key_registered: return char(0xae); + case Qt::Key_macron: return char(0xaf); + case Qt::Key_degree: return char(0xb0); + case Qt::Key_plusminus: return char(0xb1); + case Qt::Key_twosuperior: return char(0xb2); + case Qt::Key_threesuperior: return char(0xb3); + case Qt::Key_acute: return char(0xb4); + case Qt::Key_mu: return char(0xb5); + case Qt::Key_paragraph: return char(0xb6); + case Qt::Key_periodcentered: return char(0xb7); + case Qt::Key_cedilla: return char(0xb8); + case Qt::Key_onesuperior: return char(0xb9); + case Qt::Key_masculine: return char(0xba); + case Qt::Key_guillemotright: return char(0xbb); // right angle quotation mar + case Qt::Key_onequarter: return char(0xbc); + case Qt::Key_onehalf: return char(0xbd); + case Qt::Key_threequarters: return char(0xbe); + case Qt::Key_questiondown: return char(0xbf); + case Qt::Key_Agrave: return char(0xc0); + case Qt::Key_Aacute: return char(0xc1); + case Qt::Key_Acircumflex: return char(0xc2); + case Qt::Key_Atilde: return char(0xc3); + case Qt::Key_Adiaeresis: return char(0xc4); + case Qt::Key_Aring: return char(0xe5); + case Qt::Key_AE: return char(0xe6); + case Qt::Key_Ccedilla: return char(0xc7); + case Qt::Key_Egrave: return char(0xc8); + case Qt::Key_Eacute: return char(0xc9); + case Qt::Key_Ecircumflex: return char(0xca); + case Qt::Key_Ediaeresis: return char(0xcb); + case Qt::Key_Igrave: return char(0xcc); + case Qt::Key_Iacute: return char(0xcd); + case Qt::Key_Icircumflex: return char(0xce); + case Qt::Key_Idiaeresis: return char(0xcf); + case Qt::Key_ETH: return char(0xd0); + case Qt::Key_Ntilde: return char(0xd1); + case Qt::Key_Ograve: return char(0xd2); + case Qt::Key_Oacute: return char(0xd3); + case Qt::Key_Ocircumflex: return char(0xd4); + case Qt::Key_Otilde: return char(0xd5); + case Qt::Key_Odiaeresis: return char(0xd6); + case Qt::Key_multiply: return char(0xd7); + case Qt::Key_Ooblique: return char(0xf8); + case Qt::Key_Ugrave: return char(0xd9); + case Qt::Key_Uacute: return char(0xda); + case Qt::Key_Ucircumflex: return char(0xdb); + case Qt::Key_Udiaeresis: return char(0xdc); + case Qt::Key_Yacute: return char(0xdd); + case Qt::Key_THORN: return char(0xde); + case Qt::Key_ssharp: return char(0xdf); + case Qt::Key_division: return char(0xf7); + case Qt::Key_ydiaeresis: return char(0xff); + + // multimedia/internet keys - ignored by default - see QKeyEvent c'tor + + case Qt::Key_Back : return 0; // = 0x1061, + case Qt::Key_Forward : return 0; // = 0x1062, + case Qt::Key_Stop : return 0; // = 0x1063, + case Qt::Key_Refresh : return 0; // = 0x1064, + + case Qt::Key_VolumeDown: return 0; // = 0x1070, + case Qt::Key_VolumeMute : return 0; // = 0x1071, + case Qt::Key_VolumeUp: return 0; // = 0x1072, + case Qt::Key_BassBoost: return 0; // = 0x1073, + case Qt::Key_BassUp: return 0; // = 0x1074, + case Qt::Key_BassDown: return 0; // = 0x1075, + case Qt::Key_TrebleUp: return 0; // = 0x1076, + case Qt::Key_TrebleDown: return 0; // = 0x1077, + + case Qt::Key_MediaPlay : return 0; // = 0x1080, + case Qt::Key_MediaStop : return 0; // = 0x1081, + case Qt::Key_MediaPrevious : return 0; // = 0x1082, + case Qt::Key_MediaNext : return 0; // = 0x1083, + case Qt::Key_MediaRecord: return 0; // = 0x1084, + + case Qt::Key_HomePage : return 0; // = 0x1090, + case Qt::Key_Favorites : return 0; // = 0x1091, + case Qt::Key_Search : return 0; // = 0x1092, + case Qt::Key_Standby: return 0; // = 0x1093, + case Qt::Key_OpenUrl: return 0; // = 0x1094, + + case Qt::Key_LaunchMail : return 0; // = 0x10a0, + case Qt::Key_LaunchMedia: return 0; // = 0x10a1, + case Qt::Key_Launch0 : return 0; // = 0x10a2, + case Qt::Key_Launch1 : return 0; // = 0x10a3, + case Qt::Key_Launch2 : return 0; // = 0x10a4, + case Qt::Key_Launch3 : return 0; // = 0x10a5, + case Qt::Key_Launch4 : return 0; // = 0x10a6, + case Qt::Key_Launch5 : return 0; // = 0x10a7, + case Qt::Key_Launch6 : return 0; // = 0x10a8, + case Qt::Key_Launch7 : return 0; // = 0x10a9, + case Qt::Key_Launch8 : return 0; // = 0x10aa, + case Qt::Key_Launch9 : return 0; // = 0x10ab, + case Qt::Key_LaunchA : return 0; // = 0x10ac, + case Qt::Key_LaunchB : return 0; // = 0x10ad, + case Qt::Key_LaunchC : return 0; // = 0x10ae, + case Qt::Key_LaunchD : return 0; // = 0x10af, + case Qt::Key_LaunchE : return 0; // = 0x10b0, + case Qt::Key_LaunchF : return 0; // = 0x10b1, + + default: QTEST_ASSERT(false); return 0; + } +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/hbautotest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/hbautotest.h Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,279 @@ +/* +* 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 HBAUTOTEST_H +#define HBAUTOTEST_H + +#include +#include +#include + +class HbMainWindow; +class HbWidget; +class HbAutoTestMainWindow; +class HbAutoTest; +class HbAutoTestMouseEvent; +/* +INSTRUCTIONS: +The class HbAutoTest is meant to be used with Orbit applications auto testing instead of GUI testing APIs of QTestLib. + +The functions of this class is to used similarily to the related QTestLib functions. + +Use HbAutoTestMainWindow (defined below) instead of HbMainWindow to enble filtering. +Filterin filters out UI events that are not sent by function defined in HbAutoTest class. + +*/ + +class HbAutoTestMouseEvent : public QMouseEvent +{ +public: + HbAutoTestMouseEvent(Type type, const QPoint & pos, const QPoint & globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers ) + : QMouseEvent(type,pos,globalPos,button,buttons,modifiers){} +}; + +class HbAutoTestKeyEvent : public QKeyEvent +{ +public: + HbAutoTestKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers, const QString& text = QString(), + bool autorep = false, ushort count = 1 ) + : QKeyEvent(type, key, modifiers, text, autorep, count){} +}; + +class HbAutoTest +{ +public: + + static void mouseMove (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos = QPointF(), int delay = -1 ); + static void mousePress (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos = QPointF(), int delay = -1); + static void mouseRelease (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos = QPointF(), int delay = -1); + static void mouseClick (HbAutoTestMainWindow *window, const HbWidget *widget, QPointF pos = QPointF(), int delay = -1); + +private: + static void drag(HbAutoTestMainWindow *window, QPointF targetPoint); + static QPointF middlePointOfWidget( const HbWidget* widget); + + static bool pointerPressed; + static QPointF pressPoint; + +//Key event Part: copy-pasted from QTestLib and modified to support HbAutoTestKeyEvent to enable filtering. +//see HbAutoTestMainWindow below. +public: + + static Qt::Key asciiToKey(char ascii); + static char keyToAscii(Qt::Key key); + + static void simulateEvent(QWidget *widget, bool press, int code, + Qt::KeyboardModifiers modifier, QString text, bool repeat, int delay=-1); + + static void sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code, + QString text, Qt::KeyboardModifiers modifier, int delay=-1); + + static void sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code, + char ascii, Qt::KeyboardModifiers modifier, int delay=-1); + + static void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, + Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, + Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyClicks(QWidget *widget, const QString &sequence, + Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); + + static void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1); +}; + +class HbTestEvent +{ +public: + virtual void simulate(QWidget *w) = 0; + virtual HbTestEvent *clone() const = 0; + + virtual ~HbTestEvent() {} +}; + +class HbTestKeyEvent: public HbTestEvent +{ +public: + inline HbTestKeyEvent(QTest::KeyAction action, Qt::Key key, Qt::KeyboardModifiers modifiers, int delay) + : _action(action), _delay(delay), _modifiers(modifiers), _ascii(0), _key(key) {} + inline HbTestKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers, int delay) + : _action(action), _delay(delay), _modifiers(modifiers), + _ascii(ascii), _key(Qt::Key_unknown) {} + inline HbTestEvent *clone() const { return new HbTestKeyEvent(*this); } + + inline void simulate(QWidget *w) + { + if (_ascii == 0) + HbAutoTest::keyEvent(_action, w, _key, _modifiers, _delay); + else + HbAutoTest::keyEvent(_action, w, _ascii, _modifiers, _delay); + } + +protected: + QTest::KeyAction _action; + int _delay; + Qt::KeyboardModifiers _modifiers; + char _ascii; + Qt::Key _key; +}; + +class HbTestKeyClicksEvent: public HbTestEvent +{ +public: + inline HbTestKeyClicksEvent(const QString &keys, Qt::KeyboardModifiers modifiers, int delay) + : _keys(keys), _modifiers(modifiers), _delay(delay) {} + inline HbTestEvent *clone() const { return new HbTestKeyClicksEvent(*this); } + + inline void simulate(QWidget *w) + { + HbAutoTest::keyClicks(w, _keys, _modifiers, _delay); + } + +private: + QString _keys; + Qt::KeyboardModifiers _modifiers; + int _delay; +}; + +class HbTestDelayEvent: public HbTestEvent +{ +public: + inline HbTestDelayEvent(int msecs): _delay(msecs) {} + inline HbTestEvent *clone() const { return new HbTestDelayEvent(*this); } + + inline void simulate(QWidget * /*w*/) { QTest::qWait(_delay); } + +private: + int _delay; +}; + +class HbTestEventList: public QList +{ +public: + inline HbTestEventList() {} + inline HbTestEventList(const HbTestEventList &other): QList() + { for (int i = 0; i < other.count(); ++i) append(other.at(i)->clone()); } + inline ~HbTestEventList() + { clear(); } + inline void clear() + { qDeleteAll(*this); QList::clear(); } + + inline void addKeyClick(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { addKeyEvent(QTest::Click, qtKey, modifiers, msecs); } + inline void addKeyPress(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { addKeyEvent(QTest::Press, qtKey, modifiers, msecs); } + inline void addKeyRelease(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { addKeyEvent(QTest::Release, qtKey, modifiers, msecs); } + inline void addKeyEvent(QTest::KeyAction action, Qt::Key qtKey, + Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { append(new HbTestKeyEvent(action, qtKey, modifiers, msecs)); } + + inline void addKeyClick(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { addKeyEvent(QTest::Click, ascii, modifiers, msecs); } + inline void addKeyPress(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { addKeyEvent(QTest::Press, ascii, modifiers, msecs); } + inline void addKeyRelease(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { addKeyEvent(QTest::Release, ascii, modifiers, msecs); } + inline void addKeyClicks(const QString &keys, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { append(new HbTestKeyClicksEvent(keys, modifiers, msecs)); } + inline void addKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1) + { append(new HbTestKeyEvent(action, ascii, modifiers, msecs)); } + + inline void addDelay(int msecs) + { append(new HbTestDelayEvent(msecs)); } + + inline void simulate(QWidget *w) + { + for (int i = 0; i < count(); ++i) + at(i)->simulate(w); + } +}; + +class HbAutoTestMainWindow : public HbMainWindow +{ +public: + HbAutoTestMainWindow() : HbMainWindow() {} + + void mousePressEvent(QMouseEvent *event) + { + qDebug( + "HbAutoTestMainWindow::mousePressEvent: x(%d) y(%d)", + event->x(), + event->y()); + if ( dynamic_cast(event) ) { + HbMainWindow::mousePressEvent(event); + } else { + ;//Do nothing + } + } + + void mouseMoveEvent(QMouseEvent *event) + { + if ( dynamic_cast(event) ) { + HbMainWindow::mouseMoveEvent(event); + } else { + ;//Do nothing + } + } + + void mouseReleaseEvent(QMouseEvent *event) + { + if ( dynamic_cast(event) ) { + HbMainWindow::mouseReleaseEvent(event); + } else { + ;//Do nothing + } + } + + void keyPressEvent(QKeyEvent *event) + { + if ( dynamic_cast(event) ) { + HbMainWindow::keyPressEvent(event); + } else { + ;//Do nothing + } + } + void keyReleaseEvent(QKeyEvent *event) + { + if ( dynamic_cast(event) ) { + HbMainWindow::keyReleaseEvent(event); + } else { + ;//Do nothing + } + } + + void mouseDoubleClickEvent(QMouseEvent *event) + { + Q_UNUSED(event); + //Just ignore, not supported in Orbit + } +}; + + +Q_DECLARE_METATYPE(HbTestEventList) +#endif //HBAUTOTEST_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/testcpdestinationplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/testcpdestinationplugin.cpp Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,663 @@ +/* +* 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: +* Control Panel WLAN AP plugin unit testing. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//#include "cmapplsettingsui_p.h" +//#include "cmradiodialog.h" +//#include "cpdestinationplugin.h" + +#include "hbautotest.h" +#include "testcpdestinationplugin.h" + +// ----------------------------------------------------------------------------- +// STATIC TEST DATA +// ----------------------------------------------------------------------------- + +static const QString pluginDir = + "\\resource\\qt\\plugins\\controlpanel"; + +static const QString pluginName = "cpdestinationplugin.dll"; + +// Time to wait before continuing after an UI step +static const int waitTime = 10; + +static const QString navigationButton = "HbNavigationButton"; + +// UI coordinates +static const QPoint destinationGroup(175,30); +static const QPoint internetDestination(175,100); +static const QPoint internetFirstAp(175,130); +static const QPoint internetFirstApMove(175,160); +static const QPoint internetFirstApDelete(175,210); +static const QPoint internetFirstApShare(175,260); + +static const QPoint deleteDialogOk(100,300); + +static const QPoint tbButton(175,550); +static const QPoint arrangeFirstAp(175,30); +static const QPoint arrangeDragEnd(175,140); + +static const QPoint uncatDestination(175,455); +static const QPoint uncatAp(175,120); +static const QPoint uncatMenuMove(175,140); +static const QPoint uncatMenuDelete(175,180); + +static const QPoint destDialogOk(100,370); +static const QPoint destDialogSecond(100,255); +static const QPoint destDialogThird(100,315); +static const QPoint destDialogNewDest(100,345); + +static const QPoint addDestination(175,410); +static const QPoint addDialog(175,235); +static const QPoint addDialogOk(100,300); +static const QPoint newDestinationRename(175,445); +static const QPoint newDestinationDelete(175,490); + +static const QPoint addDialogKb(175,155); +static const QPoint addDialogOkKb(100,225); + +static const QPoint secondDestination(175,195); +static const QPoint thirdDestination(175,275); +static const QPoint fourthDestination(175,355); + + + +#if 0 +// Destination list item for Connection Method selection +static const QString dedicatedAccessPoint = "Dedicated access point"; + +static const QStringList allDestinations = QStringList() << + "Internet" << + "My Snap" << + dedicatedAccessPoint; + +static const QStringList allConnectionMethods = QStringList() + << "Home WLAN" + << "packet data 1" + << "packet data 2" + << "packet data 3" + << "Streaming" + << "WLAN IAP 1" + << "WLAN IAP 2" + << "WLAN IAP 3"; + +static const QStringList gprsConnectionMethods = QStringList() + << "packet data 1" + << "packet data 2" + << "packet data 3" + << "Streaming"; + +static const QStringList wlanConnectionMethods = QStringList() + << "Home WLAN" + << "WLAN IAP 1" + << "WLAN IAP 2" + << "WLAN IAP 3"; +#endif + +// ----------------------------------------------------------------------------- +// FRAMEWORK FUNCTIONS +// ----------------------------------------------------------------------------- + +/** + * Test main function. Runs all test cases. + */ +#ifndef TESTCMAPPLSETTINGSUI_NO_OUTPUT_REDIRECT +int main(int argc, char *argv[]) +{ + HbApplication app(argc, argv); + app.setApplicationName("TestCpDestinationPlugin"); + + char *pass[3]; + pass[0] = argv[0]; + pass[1] = "-o"; + pass[2] = "c:\\data\\TestCpDestinationPlugin.txt"; + + TestCpDestinationPlugin tc; + int res = QTest::qExec(&tc, 3, pass); + + return res; +} +#else +QTEST_MAIN(TestCpDestinationPlugin) +#endif + +/** + * This function is be called before the first test case is executed. + */ +void TestCpDestinationPlugin::initTestCase() +{ + mMainWindow = new HbAutoTestMainWindow; + mMainWindow->show(); + + // Load plugin + QDir dir(pluginDir); + QPluginLoader loader(dir.absoluteFilePath(pluginName)); + mPlugin = QSharedPointer + (qobject_cast(loader.instance())); + //QVERIFY(mPlugin != NULL); + + + // Create destinations view + subCreateSettingsView(); + + HbAutoTest::mouseClick(mMainWindow, mView, destinationGroup, waitTime); + QTest::qWait(200); +} + +/** + * This function is be called after the last test case was executed. + */ +void TestCpDestinationPlugin::cleanupTestCase() +{ + delete mMainWindow; + mMainWindow = 0; +} + +/** + * This function is be called before each test case is executed. + */ +void TestCpDestinationPlugin::init() +{ + // Expand settings group + // mTestView->mForm->setExpanded( + // mTestView->mModel->indexFromItem(mTestView->mApSettingsGroupItem), + // true); +} + +/** + * This function is be called after each test case is executed. + */ +void TestCpDestinationPlugin::cleanup() +{ + +} + +// ----------------------------------------------------------------------------- +// TEST CASES +// ----------------------------------------------------------------------------- +void TestCpDestinationPlugin::tcArrangeAps() +{ + // Open Internet destination + HbAutoTest::mouseClick(mMainWindow, mView, internetDestination, waitTime); + QTest::qWait(500); + + // Activate arrange mode + HbAutoTest::mouseClick(mMainWindow, mView, tbButton, waitTime); + QTest::qWait(500); + + // Drag + HbAutoTest::mousePress(mMainWindow, mView, arrangeFirstAp, waitTime); + QTest::qWait(300); + HbAutoTest::mouseMove(mMainWindow, mView, arrangeDragEnd, waitTime); + QTest::qWait(300); + HbAutoTest::mouseRelease(mMainWindow, mView, arrangeDragEnd, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mView, arrangeDragEnd, waitTime); + QTest::qWait(500); + + // Cancel + subClickWidget(navigationButton); + QTest::qWait(500); + + // Activate arrange mode again + HbAutoTest::mouseClick(mMainWindow, mView, tbButton, waitTime); + QTest::qWait(500); + + // Drag + HbAutoTest::mousePress(mMainWindow, mView, arrangeFirstAp, waitTime); + QTest::qWait(300); + HbAutoTest::mouseMove(mMainWindow, mView, arrangeDragEnd, waitTime); + QTest::qWait(300); + // HbAutoTest::mouseRelease(mMainWindow, mView, arrangeDragEnd, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mView, arrangeDragEnd, waitTime); + QTest::qWait(500); + + // OK + HbAutoTest::mouseClick(mMainWindow, mView, tbButton, waitTime); + QTest::qWait(500); + + // Back to main view + subClickWidget(navigationButton); + QTest::qWait(500); + +} + +void TestCpDestinationPlugin::tcMoveAp() +{ + // Open uncategorised aps + HbAutoTest::mouseClick(mMainWindow, mView, uncatDestination, waitTime); + QTest::qWait(500); + + // Activate context menu + HbAutoTest::mouseClick(mMainWindow, mView, uncatAp, 700); + QTest::qWait(50); + + // Select move + HbAutoTest::mouseClick(mMainWindow, mView, uncatMenuMove, waitTime); + QTest::qWait(300); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, destDialogOk, waitTime); + QTest::qWait(2000); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcShareDeleteAp() +{ + // Open Internet destination + HbAutoTest::mouseClick(mMainWindow, mView, internetDestination, waitTime); + QTest::qWait(500); + + // Activate context menu + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstAp, 700); + QTest::qWait(50); + + // Select share + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstApShare, waitTime); + QTest::qWait(300); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, destDialogOk, waitTime); + QTest::qWait(2000); + + // Activate context menu + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstAp, 700); + QTest::qWait(50); + + // Select share + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstApDelete, waitTime); + QTest::qWait(300); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, deleteDialogOk, waitTime); + QTest::qWait(2000); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcAddDestination() +{ + // Add Destination + HbAutoTest::mouseClick(mMainWindow, mView, addDestination, waitTime); + QTest::qWait(500); + + // Click OK -> Error note + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Click OK -> errorNote disappears + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Activate keyboard + HbAutoTest::mouseClick(mMainWindow, mView, addDialog, waitTime); + QTest::qWait(500); + + // Activate line-edit + HbAutoTest::mouseClick(mMainWindow, mView, addDialogKb, waitTime); + QTest::qWait(500); + + // Input text + HbAutoTest::keyClicks(mMainWindow, "Internet", 0, waitTime); + QTest::qWait(2000); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOkKb, waitTime); + QTest::qWait(500); + + // Select ok again -> Error note + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Click OK -> errorNote disappears + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Activate keyboard + HbAutoTest::mouseClick(mMainWindow, mView, addDialog, waitTime); + QTest::qWait(500); + + // Activate line-edit + HbAutoTest::mouseClick(mMainWindow, mView, addDialogKb, waitTime); + QTest::qWait(500); + + // Input text + HbAutoTest::keyClicks(mMainWindow, "foo", 0, waitTime); + QTest::qWait(2000); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOkKb, waitTime); + QTest::qWait(500); + + // Select ok again + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcDestinationRename() +{ + // Open context menu + HbAutoTest::mouseClick(mMainWindow, mView, addDestination, 700); + QTest::qWait(50); + + // Click OK -> Error note + HbAutoTest::mouseClick(mMainWindow, mView, newDestinationRename, waitTime); + QTest::qWait(300); + + // Click OK -> error note shown + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(300); + + // Click OK -> errorNote disappears + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Activate keyboard + HbAutoTest::mouseClick(mMainWindow, mView, addDialog, waitTime); + QTest::qWait(500); + + // Activate line-edit + HbAutoTest::mouseClick(mMainWindow, mView, addDialogKb, waitTime); + QTest::qWait(500); + + // Input text + HbAutoTest::keyClicks(mMainWindow, "Internet", 0, waitTime); + QTest::qWait(2000); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOkKb, waitTime); + QTest::qWait(500); + + // Select ok again -> Error note + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Click OK -> errorNote disappears + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Activate keyboard + HbAutoTest::mouseClick(mMainWindow, mView, addDialog, waitTime); + QTest::qWait(500); + + // Activate line-edit + HbAutoTest::mouseClick(mMainWindow, mView, addDialogKb, waitTime); + QTest::qWait(500); + + // Input text + HbAutoTest::keyClicks(mMainWindow, "bar", 0, waitTime); + QTest::qWait(2000); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOkKb, waitTime); + QTest::qWait(500); + + // Select ok again + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // TODO: remove + subClickWidget(navigationButton); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcDestinationDelete() +{ + // Open context menu + HbAutoTest::mouseClick(mMainWindow, mView, addDestination, 700); + QTest::qWait(50); + + // Click OK -> Error note + HbAutoTest::mouseClick(mMainWindow, mView, newDestinationDelete, waitTime); + QTest::qWait(300); + + // Click OK -> error note shown + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(1000); + + // TODO: remove + subClickWidget(navigationButton); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcCreateAndDeleteDestination() +{ + // Add Destination + HbAutoTest::mouseClick(mMainWindow, mView, addDestination, waitTime); + QTest::qWait(500); + + // Activate keyboard + HbAutoTest::mouseClick(mMainWindow, mView, addDialog, waitTime); + QTest::qWait(500); + + // Activate line-edit + HbAutoTest::mouseClick(mMainWindow, mView, addDialogKb, waitTime); + QTest::qWait(500); + + // Input text + HbAutoTest::keyClicks(mMainWindow, "foo", 0, waitTime); + QTest::qWait(2000); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOkKb, waitTime); + QTest::qWait(500); + + // Select ok again + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(500); + + // Open Internet destination + HbAutoTest::mouseClick(mMainWindow, mView, internetDestination, waitTime); + QTest::qWait(500); + + // Activate context menu + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstAp, 700); + QTest::qWait(50); + + // Select move + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstApMove, waitTime); + QTest::qWait(300); + + // Select destination + HbAutoTest::mouseClick(mMainWindow, mView, destDialogNewDest, waitTime); + QTest::qWait(300); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, destDialogOk, waitTime); + QTest::qWait(2000); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); + + // Open context menu + HbAutoTest::mouseClick(mMainWindow, mView, addDestination, 700); + QTest::qWait(50); + + // Click OK -> Error note + HbAutoTest::mouseClick(mMainWindow, mView, newDestinationDelete, waitTime); + QTest::qWait(300); + + // Click OK -> error note shown + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(1000); + + // TODO: remove + subClickWidget(navigationButton); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcOpenDestinations() +{ + // Open uncategorised aps + HbAutoTest::mouseClick(mMainWindow, mView, secondDestination, waitTime); + QTest::qWait(500); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); + + // Open uncategorised aps + HbAutoTest::mouseClick(mMainWindow, mView, thirdDestination, waitTime); + QTest::qWait(500); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); + + // Open uncategorised aps + HbAutoTest::mouseClick(mMainWindow, mView, fourthDestination, waitTime); + QTest::qWait(500); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); + + // Activate context menu + HbAutoTest::mouseClick(mMainWindow, mView, uncatAp, 700); + QTest::qWait(50); + + // TODO: remove + subClickWidget(navigationButton); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcDeleteUncat() +{ + // Open uncategorised aps + HbAutoTest::mouseClick(mMainWindow, mView, uncatDestination, waitTime); + QTest::qWait(500); + + // Activate context menu + HbAutoTest::mouseClick(mMainWindow, mView, uncatAp, 700); + QTest::qWait(50); + + // Select move + HbAutoTest::mouseClick(mMainWindow, mView, uncatMenuDelete, waitTime); + QTest::qWait(500); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(2000); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); +} + +void TestCpDestinationPlugin::tcMoveProtected() +{ + // Open Internet destination + HbAutoTest::mouseClick(mMainWindow, mView, internetDestination, waitTime); + QTest::qWait(500); + + // Activate context menu + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstAp, 700); + QTest::qWait(50); + + // Select move + HbAutoTest::mouseClick(mMainWindow, mView, internetFirstApMove, waitTime); + QTest::qWait(300); + + // Select destination + HbAutoTest::mouseClick(mMainWindow, mView, destDialogSecond, waitTime); + QTest::qWait(300); + + // Select ok + HbAutoTest::mouseClick(mMainWindow, mView, destDialogOk, waitTime); + QTest::qWait(2000); + + HbAutoTest::mouseClick(mMainWindow, mView, addDialogOk, waitTime); + QTest::qWait(2000); + + // Back to destination view + subClickWidget(navigationButton); + QTest::qWait(500); +} + +// ----------------------------------------------------------------------------- +// SUB TEST CASES +// ----------------------------------------------------------------------------- + +void TestCpDestinationPlugin::subCreateSettingsView() +{ + // Create settings view + HbView *view = new HbView(); + CpItemDataHelper *itemDataHelper = new CpItemDataHelper(); + itemDataHelper->setParent(view); + HbDataForm *form = new HbDataForm(); + HbDataFormModel *model = new HbDataFormModel; + CpPluginUtility::addCpItemPrototype(form); + QList list = mPlugin->createSettingFormItemData(*itemDataHelper); + HbDataFormModelItem *modelItem = NULL; + modelItem = list[0]; + model->appendDataFormItem(modelItem); + form->setModel(model); + model->setParent(form); + view->setWidget(form); + itemDataHelper->bindToForm(form); + + // Display the view + // TODO: connect aboutToClose() signal + mMainWindow->addView(view); + mMainWindow->setCurrentView(view); + + mView = view; +} + +void TestCpDestinationPlugin::subClickWidget(const QString &name) +{ + QList itemList = mMainWindow->scene()->items(); + + QGraphicsItem *target = 0; + foreach (QGraphicsItem* item, itemList) { + if (item->isWidget()) { + QString widgetClassName(static_cast(item)->metaObject()->className()); + qDebug() << widgetClassName; + + if (widgetClassName == name) { + target = item; + //break; + } + } + } + + Q_ASSERT(target); + HbAutoTest::mouseClick(mMainWindow, static_cast(target)); +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/testcpdestinationplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/testcpdestinationplugin.h Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,71 @@ +/* +* 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: +* Control Panel WLAN AP plugin unit testing. +*/ + +#include +#include +#include + +//#include "cmapplsettingsui.h" + +class HbDialog; +class HbMainWindow; +class HbAutoTestMainWindow; +class HbDataFormModelItem; +class CpBearerApPluginInterface; +class CpPluginInterface; +class HbView; + +class TestCpDestinationPlugin : public QObject +{ + Q_OBJECT + + public slots: + // Test framework functions + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + private slots: + // Test cases + void tcArrangeAps(); + void tcMoveAp(); + void tcShareDeleteAp(); + void tcAddDestination(); + void tcDestinationRename(); + void tcDestinationDelete(); + void tcCreateAndDeleteDestination(); + void tcDeleteUncat(); + void tcOpenDestinations(); + + private: + // Sub test cases + void subCreateSettingsView(); + void subClickWidget(const QString &name); + + // Not Run cases + void tcMoveProtected(); + + + private: + // Code references + + // Test data + HbAutoTestMainWindow *mMainWindow; + QSharedPointer mPlugin; + HbView *mView; +}; diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/testcpdestinationplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/testcpdestinationplugin.pro Thu May 27 13:17:01 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: +# Project file for Control Panel Destination plugin unit tests. + +TEMPLATE = app + +TARGET = testcpdestinationplugin + +CONFIG += hb qtestlib + +INCLUDEPATH += . ../../inc +DEPENDPATH += . + +HEADERS += \ + hbautotest.h \ + testcpdestinationplugin.h +SOURCES += \ + hbautotest.cpp \ + testcpdestinationplugin.cpp + +LIBS += \ + -lcpdestinationplugin \ + -lconnection_settings_shim \ + -lcpframework + +# -lconnection_settings_shim \ +# -lcmmanager +# -lcommsdat \ +# -lcommdb \ +# -lecom + +symbian: { + TARGET.CAPABILITY = ALL -TCB +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/tools/commsdat_restore.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/tools/commsdat_restore.bat Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem Script for restoring backup of commsdat. + +copy backup\cccccc00.cre \epoc32\winscw\c\private\10202be9\persists\cccccc00.cre diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/tools/commsdat_set.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/tools/commsdat_set.bat Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,19 @@ +@rem +@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem Script for setting test commsdat. + +md backup +copy \epoc32\winscw\c\private\10202be9\persists\cccccc00.cre backup\ +copy default.cre \epoc32\winscw\c\private\10202be9\persists\cccccc00.cre diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/tools/cpdestinationplugin_ctc.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cpdestinationplugin/tsrc/ut/tools/cpdestinationplugin_ctc.bat Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,92 @@ +:: +:: 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: +:: Script running Control Panel Destination plugin test cases with CTC analysis. + +@echo off + +:: ----------------------------------------------------------------------------- +:: Instructions +:: ----------------------------------------------------------------------------- +:: +:: Remember to use the test CommsDat that can be set and restored with the +:: helper scripts: +:: - commsdat_set.bat +:: - commsdat_restore.bat + +call .\commsdat_set.bat + +::----------------------------------------------------------------------------- +:: Set the local variables +::----------------------------------------------------------------------------- + +:: Control Panel Destination plugin base directory +set cpdestinationplugin_dir=..\..\.. +pushd %cpdestinationplugin_dir% + +:: CTC instrumentation excludes +set ctc_excludes=-C EXCLUDE=* -C NO_EXCLUDE=src\*.cpp -C SKIP_FUNCTION_NAME=CpAddDestinationEntryItemData::createSettingView,CpDestinationEntryItemData::showErrorNote,CpIapItem::showErrorNote + +::----------------------------------------------------------------------------- +:: Remove old coverage data +::----------------------------------------------------------------------------- + +echo Cleaning up... +del MON.* ctcerr.txt profile.txt +rd /s /q CTCHTML +echo ...done + +::----------------------------------------------------------------------------- +:: Build & instrument code +::----------------------------------------------------------------------------- + +echo Building code and instrumenting.. +call del MON.* ctcerr.txt profile.txt +call make distclean +call qmake +call ctcwrap -i d -2comp %ctc_excludes% sbs -c winscw_udeb +echo ...done + +::----------------------------------------------------------------------------- +:: Build test code +::----------------------------------------------------------------------------- + +echo Building test code... +call cd tsrc\ut +call make distclean +call qmake +call sbs -c winscw_udeb +echo ...done + +::----------------------------------------------------------------------------- +:: Execute the tests +::----------------------------------------------------------------------------- + +echo Running tests.. +cd ..\.. +call \epoc32\release\winscw\udeb\testcpdestinationplugin.exe +echo ...done + +::----------------------------------------------------------------------------- +:: Create coverage results +::----------------------------------------------------------------------------- + +echo Creating results... +call ctcpost -p profile.txt +call ctc2html -i profile.txt +echo ...done + +call .\commsdat_restore.bat + +popd diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpdestinationplugin/tsrc/ut/tools/default.cre Binary file cmmanager/cpdestinationplugin/tsrc/ut/tools/default.cre has changed diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpipsettingsplugin/inc/cpipsettingsplugin.h --- a/cmmanager/cpipsettingsplugin/inc/cpipsettingsplugin.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpipsettingsplugin/inc/cpipsettingsplugin.h Thu May 27 13:17:01 2010 +0300 @@ -12,6 +12,7 @@ * Contributors: * * Description: +* Control Panel "Network Settings" plugin header file. * */ @@ -20,12 +21,13 @@ // System includes #include +#include #include // User includes // Forward declarations -class QTranslator; +class HbTranslator; // External data types @@ -51,11 +53,13 @@ protected slots: private: + Q_DISABLE_COPY(CpIpSettingsPlugin) private slots: private: // data - QTranslator *mTranslator; + //! Translator instance + QSharedPointer mTranslator; }; #endif // CPIPSETTINGSPLUGIN_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpipsettingsplugin/inc/cpipsettingsview.h --- a/cmmanager/cpipsettingsplugin/inc/cpipsettingsview.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpipsettingsplugin/inc/cpipsettingsview.h Thu May 27 13:17:01 2010 +0300 @@ -47,6 +47,7 @@ protected slots: private: + Q_DISABLE_COPY(CpIpSettingsView) private slots: diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpipsettingsplugin/src/cpipsettingsplugin.cpp --- a/cmmanager/cpipsettingsplugin/src/cpipsettingsplugin.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpipsettingsplugin/src/cpipsettingsplugin.cpp Thu May 27 13:17:01 2010 +0300 @@ -12,13 +12,12 @@ * Contributors: * * Description: +* Control Panel "Network Settings" plugin implementation. * */ // System includes -#include -#include -#include +#include #include // User includes @@ -42,14 +41,9 @@ /*! Constructor. */ -CpIpSettingsPlugin::CpIpSettingsPlugin() +CpIpSettingsPlugin::CpIpSettingsPlugin() : + mTranslator(new HbTranslator("cpipsettingsplugin")) { - // Install localization - QString lang = QLocale::system().name(); - QString path = "z:/resource/qt/translations/"; - mTranslator = new QTranslator(this); - mTranslator->load(path + "cpipsettingsplugin_" + lang); - qApp->installTranslator(mTranslator); } /*! diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppacketdataapplugin/cppacketdataapplugin.pro --- a/cmmanager/cppacketdataapplugin/cppacketdataapplugin.pro Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cppacketdataapplugin/cppacketdataapplugin.pro Thu May 27 13:17:01 2010 +0300 @@ -20,6 +20,12 @@ DEPENDPATH += . INCLUDEPATH += . +# Temporary solution to fix tracecompiler +# When tracecompiler is fixed, this can be removed +symbian: { + MMP_RULES += "USERINCLUDE traces" +} + CONFIG += hb plugin MOC_DIR = moc @@ -37,6 +43,9 @@ src/cppacketdataapview.cpp \ src/cppacketdataapadvancedview.cpp +# Include plugin utilities +include(../cppluginutils/cppluginutils.pri) + TRANSLATIONS = cpapplugin.ts symbian: diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppacketdataapplugin/inc/cppacketdataapadvancedview.h --- a/cmmanager/cppacketdataapplugin/inc/cppacketdataapadvancedview.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cppacketdataapplugin/inc/cppacketdataapadvancedview.h Thu May 27 13:17:01 2010 +0300 @@ -20,13 +20,17 @@ #define CPPACKETDATAAPADVANCEDVIEW_H // System includes +#include +#include #include +#include // User includes // Forward declarations class HbDataForm; class HbDataFormModel; +class HbDataFormModelItem; class CmConnectionMethodShim; // External data types @@ -53,9 +57,59 @@ protected slots: private: + Q_DISABLE_COPY(CpPacketDataApAdvancedView) + + //! Network type + enum NetworkType { + NetworkTypeIpv4 = 0, + NetworkTypeIpv6 + }; + + //! IPv6 DNS type + enum Ipv6DnsType { + Ipv6DnsTypeAutomatic = 0, + Ipv6DnsTypeWellKnown, + Ipv6DnsTypeUserDefined + }; + void createAdvancedSettings(); + void createIpGroup(); + void updateIpGroup(); + void createIpv4SettingItems(); + void deleteIpv4SettingItems(); + void createIpv6SettingItems(); + void deleteIpv6SettingItems(); + void createProxyGroup(); + void updateProxyGroup(); + NetworkType getNetworkType(); + QString getIpAddress(CMManagerShim::ConnectionMethodAttribute attribute); + Ipv6DnsType getIpv6DnsType(); + void enableIpv4AddressFields(int state); + void enableIpv4DnsFields(int state); + void enableIpv6DnsFields(int selectionIndex); + bool validateAndSaveIpAddress( + HbDataFormModelItem *item, + CMManagerShim::ConnectionMethodAttribute attribute, + QAbstractSocket::NetworkLayerProtocol protocol); + void showMessageBox( + HbMessageBox::MessageBoxType type, + const QString &text); + bool tryUpdate(); + void handleUpdateError(); private slots: + void setEditorPreferences(const QModelIndex index); + void changeNetworkType(int type); + void changeIpv4AddressMode(int state); + void changeIpv4Address(); + void changeIpv4DnsMode(int state); + void changeIpv4PrimaryDnsAddress(); + void changeIpv4SecondaryDnsAddress(); + void changeIpv6DnsMode(int selectionIndex); + void changeIpv6PrimaryDnsAddress(); + void changeIpv6SecondaryDnsAddress(); + void changeProxyServer(); + void changeProxyPort(); private: // data //! Dataform @@ -64,6 +118,38 @@ HbDataFormModel *mModel; //! Connection Settings Shim connection method pointer CmConnectionMethodShim *mCmConnectionMethod; + //! "IP settings" group + HbDataFormModelItem *mIpGroup; + //! "Network type" (IPv4/IPv6) setting item + HbDataFormModelItem *mNetworkType; + //! "Automatic" setting item for phone IP address + HbDataFormModelItem *mIpv4Automatic; + //! "Phone IP address" setting item + HbDataFormModelItem *mIpv4Address; + //! "Automatic" setting item for IPv4 DNS addresses + HbDataFormModelItem *mIpv4DnsAutomatic; + //! "Primary name server" setting item + HbDataFormModelItem *mIpv4DnsAddress1; + //! "Secondary name server" setting item + HbDataFormModelItem *mIpv4DnsAddress2; + //! "Automatic" setting item for IPv6 DNS addresses + HbDataFormModelItem *mIpv6DnsAutomatic; + //! "Primary name server" setting item + HbDataFormModelItem *mIpv6DnsAddress1; + //! "Secondary name server" setting item + HbDataFormModelItem *mIpv6DnsAddress2; + //! "Proxy settings" group + HbDataFormModelItem *mProxyGroup; + //! "Proxy server address" setting item + HbDataFormModelItem *mProxyServer; + //! "Proxy port number" setting item + HbDataFormModelItem *mProxyPort; + //! Message box for info notes + QSharedPointer mMessageBox; + //! Flag for IPv6 support + bool mIpv6Supported; + //! Current network type (IPv4/IPv6) + NetworkType mCurrentNetworkType; }; #endif // CPPACKETDATAAPADVANCEDVIEW_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppacketdataapplugin/inc/cppacketdataapplugin.h --- a/cmmanager/cppacketdataapplugin/inc/cppacketdataapplugin.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cppacketdataapplugin/inc/cppacketdataapplugin.h Thu May 27 13:17:01 2010 +0300 @@ -21,12 +21,13 @@ // System includes #include +#include #include // User includes // Forward declarations -class QTranslator; +class HbTranslator; class CmManagerShim; class CmConnectionMethodShim; @@ -56,12 +57,13 @@ protected slots: private: + Q_DISABLE_COPY(CpPacketDataApPlugin) private slots: private: // data //! Translator instance - QTranslator *mTranslator; + QSharedPointer mTranslator; //! CM Manager Shim instance CmManagerShim *mCmManager; //! CM Connection Method Shim instance diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppacketdataapplugin/inc/cppacketdataapview.h --- a/cmmanager/cppacketdataapplugin/inc/cppacketdataapview.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cppacketdataapplugin/inc/cppacketdataapview.h Thu May 27 13:17:01 2010 +0300 @@ -59,6 +59,8 @@ protected slots: private: + Q_DISABLE_COPY(CpPacketDataApView) + void createAccessPointSettingsGroup(); void updateAccessPointSettingsGroup(); void showMessageBox( diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppacketdataapplugin/src/cppacketdataapadvancedview.cpp --- a/cmmanager/cppacketdataapplugin/src/cppacketdataapadvancedview.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cppacketdataapplugin/src/cppacketdataapadvancedview.cpp Thu May 27 13:17:01 2010 +0300 @@ -17,14 +17,31 @@ */ // System includes +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include -#include +#include // User includes +#include "cpipv4filter.h" +#include "cpipv6filter.h" #include "cppacketdataapadvancedview.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cppacketdataapadvancedviewTraces.h" +#endif + /*! \class CpPacketDataApAdvancedView \brief Implements the advanced settings view for packet data bearer @@ -48,16 +65,39 @@ CpBaseSettingView(0, parent), mForm(0), mModel(0), - mCmConnectionMethod(cmConnectionMethod) + mCmConnectionMethod(cmConnectionMethod), + mIpGroup(0), + mNetworkType(0), + mIpv4Automatic(0), + mIpv4Address(0), + mIpv4DnsAutomatic(0), + mIpv4DnsAddress1(0), + mIpv4DnsAddress2(0), + mIpv6DnsAutomatic(0), + mIpv6DnsAddress1(0), + mIpv6DnsAddress2(0), + mProxyGroup(0), + mProxyServer(0), + mProxyPort(0), + mMessageBox(0), + mIpv6Supported(false), + mCurrentNetworkType(NetworkTypeIpv4) { - // Construct packet data AP settings UI + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_ENTRY); + + // Construct packet data AP advanced settings UI mForm = new HbDataForm(); this->setWidget(mForm); mModel = new HbDataFormModel(mForm); mForm->setModel(mModel); - + + mIpv6Supported = mCmConnectionMethod->getBoolAttribute( + CMManagerShim::CmIPv6Supported); + // Add advanced settings groups createAdvancedSettings(); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_EXIT); } /*! @@ -65,12 +105,1104 @@ */ CpPacketDataApAdvancedView::~CpPacketDataApAdvancedView() { + OstTraceFunctionEntry0(DUP1_CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_ENTRY); + + OstTraceFunctionExit0(DUP1_CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_EXIT); +} + +/*! + Creates all advanced settings groups. +*/ +void CpPacketDataApAdvancedView::createAdvancedSettings() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_ENTRY); + + // Create settings groups + createIpGroup(); + createProxyGroup(); + + // Read values and update UI + updateIpGroup(); + updateProxyGroup(); + + // Connect signal to initialize settings item widgets + bool status = connect( + mForm, + SIGNAL(itemShown(const QModelIndex)), + this, + SLOT(setEditorPreferences(const QModelIndex))); + Q_ASSERT(status); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_EXIT); +} + +/*! + Creates the IP settings group. +*/ +void CpPacketDataApAdvancedView::createIpGroup() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPGROUP_ENTRY); + + // IP settings group + mIpGroup = new CpSettingFormItemData( + HbDataFormModelItem::GroupItem, + hbTrId("txt_occ_subhead_ip_settings")); + mModel->appendDataFormItem(mIpGroup); + + if (mIpv6Supported) { + // IPv6 supported + // Network type + mNetworkType = new CpSettingFormItemData( + HbDataFormModelItem::ComboBoxItem, + hbTrId("txt_occ_setlabel_network_type")); + QStringList networkTypeList; + networkTypeList + << hbTrId("txt_occ_setlabel_network_type_val_ipv4") + << hbTrId("txt_occ_setlabel_network_type_val_ipv6"); + mNetworkType->setContentWidgetData("items", networkTypeList); + mForm->addConnection( + mNetworkType, + SIGNAL(currentIndexChanged(int)), + this, + SLOT(changeNetworkType(int))); + mIpGroup->appendChild(mNetworkType); + + mCurrentNetworkType = getNetworkType(); + if (mCurrentNetworkType == NetworkTypeIpv4) { + // IPv4 + createIpv4SettingItems(); + } else { + // IPv6 + createIpv6SettingItems(); + } + } else { + // IPv6 not supported, create IPv4 settings items + createIpv4SettingItems(); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPGROUP_EXIT); +} + +/*! + Reads attribute values and updates the IP settings group. +*/ +void CpPacketDataApAdvancedView::updateIpGroup() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_UPDATEIPGROUP_ENTRY); + + // Network type + if (mNetworkType) { + // Every time update is called we check if network type (IPv4/IPv6) + // has changed and update items on UI if necessary. + + // Get network type from CommsDat + NetworkType newNetworkType = getNetworkType(); + if (newNetworkType != mCurrentNetworkType) { + // Network type has changed, update UI + if (newNetworkType == NetworkTypeIpv6) { + // IPv4 -> IPv6 + deleteIpv4SettingItems(); + createIpv6SettingItems(); + } else { + // IPv6 -> IPv4 + deleteIpv6SettingItems(); + createIpv4SettingItems(); + } + mCurrentNetworkType = newNetworkType; + } + mNetworkType->setContentWidgetData("currentIndex", newNetworkType); + } + + // Phone IP address (IPv4) + // "Automatic" checkbox + if (mIpv4Automatic) { + bool ipAddressFromServer = mCmConnectionMethod->getBoolAttribute( + CMManagerShim::PacketDataIPAddrFromServer); + Qt::CheckState state = Qt::Unchecked; + if (ipAddressFromServer) { + state = Qt::Checked; + } + mIpv4Automatic->setContentWidgetData("checkState", state); + + // Enable/disable user defined IP address fields + enableIpv4AddressFields(state); + } + + // Phone IP address (IPv4) + if (mIpv4Address) { + QString string = getIpAddress(CMManagerShim::CmIPAddress); + mIpv4Address->setContentWidgetData("text", string); + } + + // IPv4 DNS addresses + // "Automatic" checkbox + if (mIpv4DnsAutomatic) { + Qt::CheckState state = Qt::Unchecked; + if (mCmConnectionMethod->getBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer)) { + state = Qt::Checked; + } + mIpv4DnsAutomatic->setContentWidgetData("checkState", state); + + // Enable/disable user defined DNS address fields + enableIpv4DnsFields(state); + } + + // IPv4 primary DNS address + if (mIpv4DnsAddress1) { + QString string = getIpAddress(CMManagerShim::CmIPNameServer1); + mIpv4DnsAddress1->setContentWidgetData("text", string); + } + + // IPv4 secondary DNS address + if (mIpv4DnsAddress2) { + QString string = getIpAddress(CMManagerShim::CmIPNameServer2); + mIpv4DnsAddress2->setContentWidgetData("text", string); + } + + // IPv6 DNS addresses + // Automatic/well-known/user defined combobox + if (mIpv6DnsAutomatic) { + uint type = getIpv6DnsType(); + mIpv6DnsAutomatic->setContentWidgetData("currentIndex", type); + + // Enable/disable user defined DNS address fields + enableIpv6DnsFields(type); + } + + // IPv6 primary DNS address + if (mIpv6DnsAddress1) { + QString string = getIpAddress(CMManagerShim::CmIP6NameServer1); + mIpv6DnsAddress1->setContentWidgetData("text", string); + } + + // IPv6 secondary DNS address + if (mIpv6DnsAddress2) { + QString string = getIpAddress(CMManagerShim::CmIP6NameServer2); + mIpv6DnsAddress2->setContentWidgetData("text", string); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_UPDATEIPGROUP_EXIT); +} + +/*! + Creates the IPv4 setting items. +*/ +void CpPacketDataApAdvancedView::createIpv4SettingItems() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV4SETTINGITEMS_ENTRY); + + // Phone IP address + // "Automatic" checkbox + mIpv4Automatic = new CpSettingFormItemData( + HbDataFormModelItem::CheckBoxItem, + hbTrId("txt_occ_setlabel_phone_ip_address")); + mIpv4Automatic->setContentWidgetData( + "text", + hbTrId("txt_occ_setlabel_val_automatic")); + mForm->addConnection( + mIpv4Automatic, + SIGNAL(stateChanged(int)), + this, + SLOT(changeIpv4AddressMode(int))); + mIpGroup->appendChild(mIpv4Automatic); + + // Phone IP address + mIpv4Address = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_phone_ip_address")); + mForm->addConnection( + mIpv4Address, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4Address())); + mIpGroup->appendChild(mIpv4Address); + + // DNS addresses + // "Automatic" checkbox + mIpv4DnsAutomatic = new CpSettingFormItemData( + HbDataFormModelItem::CheckBoxItem, + hbTrId("txt_occ_setlabel_dns_addresses")); + mIpv4DnsAutomatic->setContentWidgetData( + "text", + hbTrId("txt_occ_setlabel_val_automatic")); + mForm->addConnection( + mIpv4DnsAutomatic, + SIGNAL(stateChanged(int)), + this, + SLOT(changeIpv4DnsMode(int))); + mIpGroup->appendChild(mIpv4DnsAutomatic); + + // Primary DNS address + mIpv4DnsAddress1 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_primary_name_server")); + mForm->addConnection( + mIpv4DnsAddress1, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4PrimaryDnsAddress())); + mIpGroup->appendChild(mIpv4DnsAddress1); + + // Secondary DNS address + mIpv4DnsAddress2 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_secondary_name_server")); + mForm->addConnection( + mIpv4DnsAddress2, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4SecondaryDnsAddress())); + mIpGroup->appendChild(mIpv4DnsAddress2); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV4SETTINGITEMS_EXIT); +} + +/*! + Deletes the IPv4 setting items. +*/ +void CpPacketDataApAdvancedView::deleteIpv4SettingItems() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV4SETTINGITEMS_ENTRY); + + // Phone IP address + // "Automatic" checkbox + if (mIpv4Automatic) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv4Automatic)); + mIpv4Automatic = NULL; + } + + // Phone IP address + if (mIpv4Address) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv4Address)); + mIpv4Address = NULL; + } + + // DNS addresses + // "Automatic" checkbox + if (mIpv4DnsAutomatic) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv4DnsAutomatic)); + mIpv4DnsAutomatic = NULL; + } + + // Primary DNS address + if (mIpv4DnsAddress1) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv4DnsAddress1)); + mIpv4DnsAddress1 = NULL; + } + + // Secondary DNS address + if (mIpv4DnsAddress2) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv4DnsAddress2)); + mIpv4DnsAddress2 = NULL; + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV4SETTINGITEMS_EXIT); +} + +/*! + Creates the IPv6 setting items. +*/ +void CpPacketDataApAdvancedView::createIpv6SettingItems() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV6SETTINGITEMS_ENTRY); + + // DNS addresses + // Automatic/well-known/user defined combobox + mIpv6DnsAutomatic = new CpSettingFormItemData( + HbDataFormModelItem::ComboBoxItem, + hbTrId("txt_occ_setlabel_dns_addresses")); + QStringList dnsModeList; + // Order of the list must match the Ipv6DnsType enum + dnsModeList + << hbTrId("txt_occ_setlabel_val_automatic") + << hbTrId("txt_occ_setlabel_dns_addresses_val_wellknown") + << hbTrId("txt_occ_setlabel_dns_addresses_val_user_defined"); + mIpv6DnsAutomatic->setContentWidgetData("items", dnsModeList); + mForm->addConnection( + mIpv6DnsAutomatic, + SIGNAL(currentIndexChanged(int)), + this, + SLOT(changeIpv6DnsMode(int))); + mIpGroup->appendChild(mIpv6DnsAutomatic); + + // Primary DNS address + mIpv6DnsAddress1 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_primary_name_server")); + mForm->addConnection( + mIpv6DnsAddress1, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv6PrimaryDnsAddress())); + mIpGroup->appendChild(mIpv6DnsAddress1); + + // Secondary DNS address + mIpv6DnsAddress2 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_secondary_name_server")); + mForm->addConnection( + mIpv6DnsAddress2, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv6SecondaryDnsAddress())); + mIpGroup->appendChild(mIpv6DnsAddress2); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV6SETTINGITEMS_EXIT); +} + +/*! + Deletes the IPv6 setting items. +*/ +void CpPacketDataApAdvancedView::deleteIpv6SettingItems() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV6SETTINGITEMS_ENTRY); + + // DNS addresses + // Automatic/well-known/user defined combobox + if (mIpv6DnsAutomatic) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv6DnsAutomatic)); + mIpv6DnsAutomatic = NULL; + } + + // Primary DNS address + if (mIpv6DnsAddress1) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv6DnsAddress1)); + mIpv6DnsAddress1 = NULL; + } + + // Secondary DNS address + if (mIpv6DnsAddress2) { + mIpGroup->removeChild(mIpGroup->indexOf(mIpv6DnsAddress2)); + mIpv6DnsAddress2 = NULL; + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV6SETTINGITEMS_EXIT); +} + +/*! + Creates the proxy settings group. +*/ +void CpPacketDataApAdvancedView::createProxyGroup() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEPROXYGROUP_ENTRY); + + // Proxy settings group + mProxyGroup = new CpSettingFormItemData( + HbDataFormModelItem::GroupItem, + hbTrId("txt_occ_subhead_proxy_settings")); + mModel->appendDataFormItem(mProxyGroup); + + // Proxy server address + mProxyServer = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_proxy_server_address")); + mForm->addConnection( + mProxyServer, + SIGNAL(editingFinished()), + this, + SLOT(changeProxyServer())); + mProxyGroup->appendChild(mProxyServer); + + // Proxy port number + mProxyPort = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_proxy_port_number")); + mForm->addConnection( + mProxyPort, + SIGNAL(editingFinished()), + this, + SLOT(changeProxyPort())); + mProxyGroup->appendChild(mProxyPort); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEPROXYGROUP_EXIT); +} + +/*! + Reads attribute values and updates the proxy settings group. +*/ +void CpPacketDataApAdvancedView::updateProxyGroup() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_UPDATEPROXYGROUP_ENTRY); + + // Proxy server address + QString serverAddress = mCmConnectionMethod->getStringAttribute( + CMManagerShim::CmProxyServerName); + mProxyServer->setContentWidgetData("text", serverAddress); + + // Proxy port number + uint portNumber = mCmConnectionMethod->getIntAttribute( + CMManagerShim::CmProxyPortNumber); + if (portNumber > 0) { + mProxyPort->setContentWidgetData("text", QVariant(portNumber)); + } else { + mProxyPort->setContentWidgetData("text", ""); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_UPDATEPROXYGROUP_EXIT); +} + +/*! + Reads network type (IPv4/IPv6) from CommsDat. +*/ +CpPacketDataApAdvancedView::NetworkType CpPacketDataApAdvancedView::getNetworkType() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_GETNETWORKTYPE_ENTRY); + + uint networkType = mCmConnectionMethod->getIntAttribute( + CMManagerShim::PacketDataPDPType); + + if (networkType == RPacketContext::EPdpTypeIPv6) { + OstTraceFunctionExit0(DUP1_CPPACKETDATAAPADVANCEDVIEW_GETNETWORKTYPE_EXIT); + return NetworkTypeIpv6; + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_GETNETWORKTYPE_EXIT); + return NetworkTypeIpv4; +} + +/*! + Reads an IP address from CommsDat with given attribute. If string is + empty, a zero address (0.0.0.0 or 0:0:0:0:0:0:0:0) is returned. +*/ +QString CpPacketDataApAdvancedView::getIpAddress( + CMManagerShim::ConnectionMethodAttribute attribute) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_GETIPADDRESS_ENTRY); + + QString ipAddress = mCmConnectionMethod->getStringAttribute(attribute); + + if (ipAddress.isEmpty()) { + // String is empty, return a zero address instead + switch (attribute) { + case CMManagerShim::CmIPAddress: + case CMManagerShim::CmIPNameServer1: + case CMManagerShim::CmIPNameServer2: + // IPv4 address + ipAddress = CMManagerShim::UnspecifiedIpv4Address; + break; + + case CMManagerShim::CmIP6NameServer1: + case CMManagerShim::CmIP6NameServer2: + // IPv6 address + ipAddress = CMManagerShim::DynamicIpv6Address; + break; + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_GETIPADDRESS_EXIT); + return ipAddress; +} + +/*! + Resolves IPv6 DNS address type. +*/ +CpPacketDataApAdvancedView::Ipv6DnsType CpPacketDataApAdvancedView::getIpv6DnsType() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_GETIPV6DNSTYPE_ENTRY); + + // Read "DNS address from server" flag + bool dnsAddressFromServer = mCmConnectionMethod->getBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer); + + // Read IPv6 DNS addresses from CommsDat + QString primaryAddress = mCmConnectionMethod->getStringAttribute( + CMManagerShim::CmIP6NameServer1); + QString secondaryAddress = mCmConnectionMethod->getStringAttribute( + CMManagerShim::CmIP6NameServer2); + + // Resolve IPv6 DNS address type + Ipv6DnsType type = Ipv6DnsTypeUserDefined; + if (dnsAddressFromServer) { + // Automatic + type = Ipv6DnsTypeAutomatic; + } else if (primaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer1 + && secondaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer2) { + // Well-known IPv6 DNS addresses + type = Ipv6DnsTypeWellKnown; + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_GETIPV6DNSTYPE_EXIT); + return type; +} + +/*! + Sets IPv4 address field enabled/disabled. +*/ +void CpPacketDataApAdvancedView::enableIpv4AddressFields(int state) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_ENTRY); + + if (state == Qt::Checked) { + // Automatic, disable text field + if (mIpv4Address) { + mIpv4Address->setEnabled(false); + } + } else { + // User defined, enable text field + if (mIpv4Address) { + mIpv4Address->setEnabled(true); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_EXIT); } /*! - Adds settings items to the model. + Sets IPv4 DNS address fields enabled/disabled. +*/ +void CpPacketDataApAdvancedView::enableIpv4DnsFields(int state) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_ENTRY); + + if (state == Qt::Checked) { + // Automatic, disable text fields + if (mIpv4DnsAddress1) { + mIpv4DnsAddress1->setEnabled(false); + } + if (mIpv4DnsAddress2) { + mIpv4DnsAddress2->setEnabled(false); + } + } else { + // User defined, enable text fields + if (mIpv4DnsAddress1) { + mIpv4DnsAddress1->setEnabled(true); + } + if (mIpv4DnsAddress2) { + mIpv4DnsAddress2->setEnabled(true); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_EXIT); +} + +/*! + Sets IPv6 DNS address fields enabled/disabled. +*/ +void CpPacketDataApAdvancedView::enableIpv6DnsFields(int selectionIndex) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_ENTRY); + + // Check combobox value + if (selectionIndex == Ipv6DnsTypeUserDefined) { + // User-defined, enable text fields + if (mIpv6DnsAddress1) { + mIpv6DnsAddress1->setEnabled(true); + } + if (mIpv6DnsAddress2) { + mIpv6DnsAddress2->setEnabled(true); + } + } else { + // Automatic or well-known, disable text fields + if (mIpv6DnsAddress1) { + mIpv6DnsAddress1->setEnabled(false); + } + if (mIpv6DnsAddress2) { + mIpv6DnsAddress2->setEnabled(false); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_EXIT); +} + +/*! + Validates an IP address and saves it to CommsDat in case it was a valid + address or an empty string. In case the address is not valid, an error + note is shown to the user and previous setting is restored to the UI. +*/ +bool CpPacketDataApAdvancedView::validateAndSaveIpAddress( + HbDataFormModelItem *item, + CMManagerShim::ConnectionMethodAttribute attribute, + QAbstractSocket::NetworkLayerProtocol protocol) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_ENTRY); + + bool success = false; + + // Check address + QString address = item->contentWidgetData("text").toString(); + QHostAddress hostAddress; + if (hostAddress.setAddress(address) + && hostAddress.protocol() == protocol) { + // Proper address, convert to lower case (IPv6) + address = hostAddress.toString().toLower(); + } else if (address.isEmpty()) { + // Empty string, replace with 0.0.0.0 or 0:0:0:0:0:0:0:0 + if (protocol == QAbstractSocket::IPv4Protocol) { + address = CMManagerShim::UnspecifiedIpv4Address; + } else { + address = CMManagerShim::DynamicIpv6Address; + } + } else { + // Invalid address + address.clear(); + } + + if (!address.isEmpty()) { + // Save to CommsDat + mCmConnectionMethod->setStringAttribute(attribute, address); + if (tryUpdate()) { + success = true; + item->setContentWidgetData("text", address); + } + } else { + // Inform user of invalid name + showMessageBox( + HbMessageBox::MessageTypeInformation, + hbTrId("txt_occ_info_invalid_input")); + // Restore previous setting + address = getIpAddress(attribute); + item->setContentWidgetData("text", address); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_EXIT); + return success; +} + +/*! + Shows message box with "OK" button using given text. +*/ +void CpPacketDataApAdvancedView::showMessageBox( + HbMessageBox::MessageBoxType type, + const QString &text) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_SHOWMESSAGEBOX_ENTRY); + + // Create a message box + mMessageBox = QSharedPointer(new HbMessageBox(type)); + mMessageBox->setText(text); + mMessageBox->setModal(true); + mMessageBox->setTimeout(HbPopup::NoTimeout); + mMessageBox->open(); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_SHOWMESSAGEBOX_EXIT); +} + +/*! + Tries to update connection method changes to CommsDat. + Returns "true" if success, "false" if some error happened. +*/ +bool CpPacketDataApAdvancedView::tryUpdate() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_TRYUPDATE_ENTRY); + + // Try update + try { + mCmConnectionMethod->update(); + } + catch (const std::exception&) { + // Handle error + handleUpdateError(); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_TRYUPDATE_EXIT); + return false; + } + + OstTraceFunctionExit0(DUP1_CPPACKETDATAAPADVANCEDVIEW_TRYUPDATE_EXIT); + return true; +} + +/*! + Handles failed CommsDat update. + */ +void CpPacketDataApAdvancedView::handleUpdateError() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_HANDLEUPDATEERROR_ENTRY); + + // Show error note to user + showMessageBox( + HbMessageBox::MessageTypeWarning, + hbTrId("txt_occ_info_unable_to_save_setting")); + // Reload settings from CommsDat and update UI + try { + mCmConnectionMethod->refresh(); + } + catch (const std::exception&) { + // Ignore error from refresh. Most likely this will not happen, but + // if it does, there isn't very much we can do. + OstTrace0( + TRACE_ERROR, + CPPACKETDATAAPPADVANCEDVIEW_HANDLEUPDATEERROR, + "Refresh failed"); + }; + updateIpGroup(); + updateProxyGroup(); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_HANDLEUPDATEERROR_EXIT); +} + +/*! + Initializes all settings groups. +*/ +void CpPacketDataApAdvancedView::setEditorPreferences(const QModelIndex index) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_SETEDITORPREFERENCES_ENTRY); + + HbDataFormViewItem *viewItem = qobject_cast + (mForm->itemByIndex(index)); + HbDataFormModelItem *modelItem = mModel->itemFromIndex(index); + + if (modelItem == mIpv4Address + || modelItem == mIpv4DnsAddress1 + || modelItem == mIpv4DnsAddress2 + || modelItem == mIpv6DnsAddress1 + || modelItem == mIpv6DnsAddress2 + || modelItem == mProxyServer + || modelItem == mProxyPort) { + // HbLineEdit items, get editor and editor interface + HbLineEdit *edit = qobject_cast + (viewItem->dataItemContentWidget()); + HbEditorInterface editorInterface(edit); + + if (modelItem == mIpv4Address + || modelItem == mIpv4DnsAddress1 + || modelItem == mIpv4DnsAddress2) { + // IPv4 IP address + editorInterface.setMode(HbInputModeNumeric); + editorInterface.setFilter(CpIpv4Filter::instance()); + edit->setMaxLength(CMManagerShim::CmIP4AddressLength); + } else if (modelItem == mIpv6DnsAddress1 + || modelItem == mIpv6DnsAddress2) { + // IPv6 IP address + editorInterface.setInputConstraints( + HbEditorConstraintLatinAlphabetOnly); + editorInterface.setFilter(CpIpv6Filter::instance()); + edit->setInputMethodHints( + Qt::ImhNoPredictiveText + | Qt::ImhPreferLowercase); + edit->setMaxLength(CMManagerShim::CmIP6NameServerLength); + } else if (modelItem == mProxyServer) { + // Proxy server address + editorInterface.setMode(HbInputModeNone); + editorInterface.setInputConstraints( + HbEditorConstraintLatinAlphabetOnly); + editorInterface.setFilter(HbUrlFilter::instance()); + editorInterface.setEditorClass(HbInputEditorClassUrl); + editorInterface.setDigitType(HbDigitTypeNone); + edit->setInputMethodHints( + Qt::ImhNoPredictiveText + | Qt::ImhPreferLowercase); + edit->setMaxLength(CMManagerShim::CmProxyServerNameLength); + } else { /* mProxyPort */ + // Proxy port number + editorInterface.setMode(HbInputModeNumeric); + edit->setInputMethodHints(Qt::ImhDigitsOnly); + edit->setMaxLength(CMManagerShim::CmProxyPortNumberLength); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_SETEDITORPREFERENCES_EXIT); +} + +/*! + Handles change to network type (IPv4/IPv6). +*/ +void CpPacketDataApAdvancedView::changeNetworkType(int type) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGENETWORKTYPE_ENTRY); + + // Save network type to CommsDat + int pdpType; + if (type == NetworkTypeIpv6) { + pdpType = RPacketContext::EPdpTypeIPv6; + } else { + pdpType = RPacketContext::EPdpTypeIPv4; + } + mCmConnectionMethod->setIntAttribute( + CMManagerShim::PacketDataPDPType, + pdpType); + if (tryUpdate()) + { + // This will handle updating the UI with correct setting items + updateIpGroup(); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGENETWORKTYPE_EXIT); +} + +/*! + Handles change to IPv4 address mode (automatic/user defined). */ -void CpPacketDataApAdvancedView::createAdvancedSettings() +void CpPacketDataApAdvancedView::changeIpv4AddressMode(int state) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_ENTRY); + + bool ipv4AddressFromServer; + if (state == Qt::Checked) { + ipv4AddressFromServer = true; + } else { + ipv4AddressFromServer = false; + } + + if (!ipv4AddressFromServer + && getIpAddress(CMManagerShim::CmIPAddress) == + CMManagerShim::UnspecifiedIpv4Address) { + // User defined IP address selected, but no valid address is stored. + // Just enable the UI IP editors, because CMManager will update the + // "IP address from server" flag by itself when a valid IP address + // is stored. + enableIpv4AddressFields(state); + } else { + // Save setting to CommsDat + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPAddrFromServer, + ipv4AddressFromServer); + if (tryUpdate()) { + enableIpv4AddressFields(state); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_EXIT); +} + +/*! + Saves IPv4 address to CommsDat. +*/ +void CpPacketDataApAdvancedView::changeIpv4Address() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv4Address, + CMManagerShim::CmIPAddress, + QAbstractSocket::IPv4Protocol)) { + // In case the IP address is empty or 0.0.0.0, CMManager changes the + // "IP address from server" flag to true. We need to refresh the UI to + // make sure we are in sync. + updateIpGroup(); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESS_EXIT); +} + +/*! + Handles change to IPv4 DNS mode (automatic/user defined). +*/ +void CpPacketDataApAdvancedView::changeIpv4DnsMode(int state) +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4DNSMODE_ENTRY); + + bool dnsAddressFromServer; + if (state == Qt::Checked) { + dnsAddressFromServer = true; + } else { + dnsAddressFromServer = false; + } + // Save setting to CommsDat + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer, + dnsAddressFromServer); + if (tryUpdate()) { + enableIpv4DnsFields(state); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4DNSMODE_EXIT); +} + +/*! + Saves IPv4 primary DNS address to CommsDat. +*/ +void CpPacketDataApAdvancedView::changeIpv4PrimaryDnsAddress() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv4DnsAddress1, + CMManagerShim::CmIPNameServer1, + QAbstractSocket::IPv4Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0.0.0.0, CMManager will + // check secondary DNS address and in case it is a valid address, + // move it to the primary DNS address. We need to refresh the + // UI to make sure we are in sync. If tryUpdate() fails it does + // the refresh automatically, so only success case is handled + // here. + updateIpGroup(); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_EXIT); +} + +/*! + Saves IPv4 secondary DNS address to CommsDat. +*/ +void CpPacketDataApAdvancedView::changeIpv4SecondaryDnsAddress() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv4DnsAddress2, + CMManagerShim::CmIPNameServer2, + QAbstractSocket::IPv4Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0.0.0.0, CMManager will + // write the address there instead of secondary DNS address, so we + // need to refresh the UI to make sure we are in sync. If + // tryUpdate() fails it does the refresh automatically, so only + // success case is handled here. + updateIpGroup(); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_EXIT); +} + +/*! + Handles change to IPv6 DNS mode (automatic/well-known/user defined). +*/ +void CpPacketDataApAdvancedView::changeIpv6DnsMode(int state) { - // TODO: Implement the advanced settings view. + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6DNSMODE_ENTRY); + + // Update "DNS address from server" flag + if (state == Ipv6DnsTypeAutomatic) { + // Automatic + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + true); + } else { + // User defined or well-known address + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + false); + + if (state == Ipv6DnsTypeWellKnown) { + // Well-known address, set DNS addresses and update UI + mCmConnectionMethod->setStringAttribute( + CMManagerShim::CmIP6NameServer1, + CMManagerShim::KnownIpv6NameServer1); + mIpv6DnsAddress1->setContentWidgetData( + "text", + CMManagerShim::KnownIpv6NameServer1); + mCmConnectionMethod->setStringAttribute( + CMManagerShim::CmIP6NameServer2, + CMManagerShim::KnownIpv6NameServer2); + mIpv6DnsAddress2->setContentWidgetData( + "text", + CMManagerShim::KnownIpv6NameServer2); + } + } + + if (tryUpdate()) { + enableIpv6DnsFields(state); + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6DNSMODE_EXIT); +} + +/*! + Saves IPv6 primary DNS address to CommsDat. +*/ +void CpPacketDataApAdvancedView::changeIpv6PrimaryDnsAddress() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv6DnsAddress1, + CMManagerShim::CmIP6NameServer1, + QAbstractSocket::IPv6Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0:0:0:0:0:0:0:0, + // CMManager will check secondary DNS address and in case it is a + // valid address, move it to the primary DNS address. We need to + // refresh the UI to make sure we are in sync. If tryUpdate() + // fails it does the refresh automatically, so only success case + // is handled here. + updateIpGroup(); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_EXIT); } + +/*! + Saves IPv6 secondary DNS address to CommsDat. +*/ +void CpPacketDataApAdvancedView::changeIpv6SecondaryDnsAddress() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv6DnsAddress2, + CMManagerShim::CmIP6NameServer2, + QAbstractSocket::IPv6Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0:0:0:0:0:0:0:0, + // CMManager will write the address there instead of secondary DNS + // address, so we need to refresh the UI to make sure we are in + // sync. If tryUpdate() fails it does the refresh automatically, + // so only success case is handled here. + updateIpGroup(); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_EXIT); +} + +/*! + Saves proxy server address to CommsDat. +*/ +void CpPacketDataApAdvancedView::changeProxyServer() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYSERVER_ENTRY); + + QString proxyServer = mProxyServer->contentWidgetData("text").toString(); + mCmConnectionMethod->setStringAttribute( + CMManagerShim::CmProxyServerName, + proxyServer); + (void)tryUpdate(); + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYSERVER_EXIT); +} + +/*! + Saves proxy port to CommsDat. +*/ +void CpPacketDataApAdvancedView::changeProxyPort() +{ + OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYPORT_ENTRY); + + uint proxyPort = mProxyPort->contentWidgetData("text").toInt(); + if (proxyPort <= 65535) { + if (proxyPort == 0) { + // Don't show zero + mProxyPort->setContentWidgetData("text", ""); + } + mCmConnectionMethod->setIntAttribute( + CMManagerShim::CmProxyPortNumber, + proxyPort); + (void)tryUpdate(); + } else { + // Inform user of invalid value + showMessageBox( + HbMessageBox::MessageTypeInformation, + hbTrId("txt_occ_info_invalid_input")); + // Restore previous setting + proxyPort = mCmConnectionMethod->getIntAttribute( + CMManagerShim::CmProxyPortNumber); + if (proxyPort > 0) { + mProxyPort->setContentWidgetData("text", QVariant(proxyPort)); + } else { + mProxyPort->setContentWidgetData("text", ""); + } + } + + OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYPORT_EXIT); +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppacketdataapplugin/src/cppacketdataapplugin.cpp --- a/cmmanager/cppacketdataapplugin/src/cppacketdataapplugin.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cppacketdataapplugin/src/cppacketdataapplugin.cpp Thu May 27 13:17:01 2010 +0300 @@ -17,9 +17,7 @@ */ // System includes -#include -#include -#include +#include #include #include @@ -49,19 +47,12 @@ Constructor. */ CpPacketDataApPlugin::CpPacketDataApPlugin() : - mTranslator(0), + mTranslator(new HbTranslator("cpapplugin")), mCmManager(0), mCmConnectionMethod(0) { OstTraceFunctionEntry0(CPPACKETDATAAPPLUGIN_CPPACKETDATAAPPLUGIN_ENTRY); - // Install localization - QString lang = QLocale::system().name(); - QString path = "z:/resource/qt/translations/"; - mTranslator = new QTranslator(this); - mTranslator->load(path + "cpapplugin_" + lang); - qApp->installTranslator(mTranslator); - OstTraceFunctionExit0(CPPACKETDATAAPPLUGIN_CPPACKETDATAAPPLUGIN_EXIT); } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppluginutils/cppluginutils.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cppluginutils/cppluginutils.pri Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,22 @@ +# +# 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 info include file for Control Panel plugin utilities. +# + +# Sources +HEADERS += $$PWD/inc/cpipv4filter.h \ + $$PWD/inc/cpipv6filter.h +SOURCES += $$PWD/src/cpipv4filter.cpp \ + $$PWD/src/cpipv6filter.cpp diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppluginutils/inc/cpipv4filter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cppluginutils/inc/cpipv4filter.h Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,59 @@ +/* +* 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: +* IPv4 input filter header file. +* +*/ + +#ifndef CPIPV4FILTER_H +#define CPIPV4FILTER_H + +// System includes +#include + +// User includes + +// Forward declarations + +// External data types + +// Constants + +// Class declaration +class CpIpv4Filter : public HbInputFilter +{ +public: + static CpIpv4Filter* instance(); + virtual ~CpIpv4Filter(); + virtual bool filter(QChar aChar); + +signals: + +public slots: + +protected: + +protected slots: + +private: + Q_DISABLE_COPY(CpIpv4Filter) + + CpIpv4Filter(); + +private slots: + +private: // data +}; + +#endif // CPIPV4FILTER_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppluginutils/inc/cpipv6filter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cppluginutils/inc/cpipv6filter.h Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,59 @@ +/* +* 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: +* IPv6 input filter header file. +* +*/ + +#ifndef CPIPV6FILTER_H +#define CPIPV6FILTER_H + +// System includes +#include + +// User includes + +// Forward declarations + +// External data types + +// Constants + +// Class declaration +class CpIpv6Filter : public HbInputFilter +{ +public: + static CpIpv6Filter* instance(); + virtual ~CpIpv6Filter(); + virtual bool filter(QChar aChar); + +signals: + +public slots: + +protected: + +protected slots: + +private: + Q_DISABLE_COPY(CpIpv6Filter) + + CpIpv6Filter(); + +private slots: + +private: // data +}; + +#endif // CPIPV6FILTER_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppluginutils/src/cpipv4filter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cppluginutils/src/cpipv4filter.cpp Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,74 @@ +/* +* 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: +* IPv4 input filter implementation. +* +*/ + +// System includes +#include + +// User includes +#include "cpipv4filter.h" + +/*! + \class CpIpv4Filter + \brief IPv4 input filter implementation. +*/ + +// External function prototypes + +// Local constants + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +/*! + Returns static instance of the class. +*/ +CpIpv4Filter* CpIpv4Filter::instance() +{ + static CpIpv4Filter myInstance; + return &myInstance; +} + +/*! + Constructor. +*/ +CpIpv4Filter::CpIpv4Filter() +{ +} + +/*! + Destructor. +*/ +CpIpv4Filter::~CpIpv4Filter() +{ +} + +/*! + Returns true if given character is valid for an IPv4 address. +*/ +bool CpIpv4Filter::filter(QChar aChar) +{ + if (aChar >= '0' && aChar <= '9') { + return true; + } + if (aChar == '.') { + return true; + } + + return false; +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cppluginutils/src/cpipv6filter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cppluginutils/src/cpipv6filter.cpp Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,76 @@ +/* +* 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: +* IPv6 input filter implementation. +* +*/ + +// System includes +#include + +// User includes +#include "cpipv6filter.h" + +/*! + \class CpIpv6Filter + \brief IPv6 input filter implementation. +*/ + +// External function prototypes + +// Local constants + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +/*! + Returns static instance of the class. +*/ +CpIpv6Filter* CpIpv6Filter::instance() +{ + static CpIpv6Filter myInstance; + return &myInstance; +} + +/*! + Constructor. +*/ +CpIpv6Filter::CpIpv6Filter() +{ +} + +/*! + Destructor. +*/ +CpIpv6Filter::~CpIpv6Filter() +{ +} + +/*! + Returns true if given character is valid for an IPv6 address. +*/ +bool CpIpv6Filter::filter(QChar aChar) +{ + if ((aChar >= 'a' && aChar <= 'f') + || (aChar >= 'A' && aChar <= 'F') + || (aChar >= '0' && aChar <= '9')) { + return true; + } + if (aChar == ':' || aChar == '.') { + return true; + } + + return false; +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/cpwlanapplugin.pro --- a/cmmanager/cpwlanapplugin/cpwlanapplugin.pro Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/cpwlanapplugin.pro Thu May 27 13:17:01 2010 +0300 @@ -20,6 +20,12 @@ DEPENDPATH += . INCLUDEPATH += . +# Temporary solution to fix tracecompiler +# When tracecompiler is fixed, this can be removed +symbian: { + MMP_RULES += "USERINCLUDE traces" +} + CONFIG += hb plugin MOC_DIR = moc @@ -37,6 +43,9 @@ src/cpwlanapview.cpp \ src/cpwlanapadvancedview.cpp +# Include plugin utilities +include(../cppluginutils/cppluginutils.pri) + symbian: { TARGET.EPOCALLOWDLLDATA = 1 diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/inc/cpwlanapadvancedview.h --- a/cmmanager/cpwlanapplugin/inc/cpwlanapadvancedview.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/inc/cpwlanapadvancedview.h Thu May 27 13:17:01 2010 +0300 @@ -20,13 +20,18 @@ #define CPWLANAPADVANCEDVIEW_H // System includes +#include +#include #include +#include // User includes // Forward declarations class HbDataForm; class HbDataFormModel; +class HbDataFormModelItem; +class HbValidator; class CmConnectionMethodShim; // External data types @@ -53,10 +58,52 @@ protected slots: private: + Q_DISABLE_COPY(CpWlanApAdvancedView) + + //! IPv6 DNS type + enum Ipv6DnsType { + Ipv6DnsTypeAutomatic = 0, + Ipv6DnsTypeWellKnown, + Ipv6DnsTypeUserDefined + }; + void createAdvancedSettings(); + void createIpv4Group(); + void updateIpv4Group(); + void createIpv6Group(); + void updateIpv6Group(); + void createProxyGroup(); + void updateProxyGroup(); + QString getIpAddress(CMManagerShim::ConnectionMethodAttribute attribute); + Ipv6DnsType getIpv6DnsType(); + void enableIpv4AddressFields(int state); + void enableIpv4DnsFields(int state); + void enableIpv6DnsFields(int selectionIndex); + bool validateAndSaveIpAddress( + HbDataFormModelItem *item, + CMManagerShim::ConnectionMethodAttribute attribute, + QAbstractSocket::NetworkLayerProtocol protocol); + void showMessageBox( + HbMessageBox::MessageBoxType type, + const QString &text); + bool tryUpdate(); + void handleUpdateError(); private slots: - + void setEditorPreferences(const QModelIndex index); + void changeIpv4AddressMode(int state); + void changeIpv4Address(); + void changeIpv4SubnetMask(); + void changeIpv4Gateway(); + void changeIpv4DnsMode(int state); + void changeIpv4PrimaryDnsAddress(); + void changeIpv4SecondaryDnsAddress(); + void changeIpv6DnsMode(int selectionIndex); + void changeIpv6PrimaryDnsAddress(); + void changeIpv6SecondaryDnsAddress(); + void changeProxyServer(); + void changeProxyPort(); + private: // data //! Dataform HbDataForm *mForm; @@ -64,6 +111,43 @@ HbDataFormModel *mModel; //! Connection Settings Shim connection method pointer CmConnectionMethodShim *mCmConnectionMethod; + //! "IPv4 settings" group + HbDataFormModelItem *mIpv4Group; + //! "Automatic" setting item for phone IP address + HbDataFormModelItem *mIpv4Automatic; + //! "Phone IP address" setting item + HbDataFormModelItem *mIpv4Address; + //! "Subnet mask" setting item + HbDataFormModelItem *mIpv4SubnetMask; + //! "Default gateway" setting item + HbDataFormModelItem *mIpv4Gateway; + //! "Automatic" setting item for IPv4 DNS addresses + HbDataFormModelItem *mIpv4DnsAutomatic; + //! "Primary name server" setting item + HbDataFormModelItem *mIpv4DnsAddress1; + //! "Secondary name server" setting item + HbDataFormModelItem *mIpv4DnsAddress2; + //! "IPv6 settings" group + HbDataFormModelItem *mIpv6Group; + //! "Automatic" setting item for IPv6 DNS addresses + HbDataFormModelItem *mIpv6DnsAutomatic; + //! "Primary name server" setting item + HbDataFormModelItem *mIpv6DnsAddress1; + //! "Secondary name server" setting item + HbDataFormModelItem *mIpv6DnsAddress2; + //! "Proxy settings" group + HbDataFormModelItem *mProxyGroup; + //! "Proxy server address" setting item + HbDataFormModelItem *mProxyServer; + //! "Proxy port number" setting item + HbDataFormModelItem *mProxyPort; + //! Message box for info notes + QSharedPointer mMessageBox; + //! Flag for IPv6 support + bool mIpv6Supported; + + // Friend classes + friend class TestCpWlanApPlugin; }; #endif // CPWLANAPADVANCEDVIEW_H diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/inc/cpwlanapplugin.h --- a/cmmanager/cpwlanapplugin/inc/cpwlanapplugin.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/inc/cpwlanapplugin.h Thu May 27 13:17:01 2010 +0300 @@ -21,12 +21,13 @@ // System includes #include +#include #include // User includes // Forward declarations -class QTranslator; +class HbTranslator; class CmManagerShim; class CmConnectionMethodShim; @@ -56,12 +57,13 @@ protected slots: private: + Q_DISABLE_COPY(CpWlanApPlugin) private slots: private: // data //! Translator instance - QTranslator *mTranslator; + QSharedPointer mTranslator; //! CM Manager Shim instance CmManagerShim *mCmManager; //! CM Connection Method Shim instance diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/inc/cpwlanapview.h --- a/cmmanager/cpwlanapplugin/inc/cpwlanapview.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/inc/cpwlanapview.h Thu May 27 13:17:01 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include // User includes @@ -60,21 +61,29 @@ protected slots: private: + Q_DISABLE_COPY(CpWlanApView) + void createAccessPointSettingsGroup(); void updateAccessPointSettingsGroup(); - void loadSecurityPlugins(); + void loadSecurityPlugins( + CMManagerShim::WlanConnMode networkMode); void updateSecurityGroup(int index); void showMessageBox( HbMessageBox::MessageBoxType type, const QString &text); bool tryUpdate(); void handleUpdateError(); - + void updateAdHocChannelItem( + CMManagerShim::WlanConnMode networkMode); + void updateSecurityModeItem( + CMManagerShim::WlanConnMode networkMode); + private slots: void connectionNameChanged(); void wlanNetworkNameChanged(); void networkStatusChanged(int index); void networkModeChanged(int index); + void adHocChannelChanged(int index); void securityModeChanged(int index); void homepageChanged(); void menuActionTriggered(HbAction *action); @@ -82,6 +91,10 @@ void setEditorPreferences(const QModelIndex modelIndex); private: // data + // WLAN ad-hoc channel minimum and maximum values + static const uint WlanAdHocChannelMinValue = 1; + static const uint WlanAdHocChannelMaxValue = 11; + //! Dataform HbDataForm *mForm; //! Dataform model @@ -98,6 +111,8 @@ HbDataFormModelItem *mNetworkStatusItem; //! "Network mode" setting item HbDataFormModelItem *mNetworkModeItem; + //! "Ad-hoc channel" setting item + HbDataFormModelItem *mAdHocChannelItem; //! "Security mode" setting item HbDataFormModelItem *mSecurityModeItem; //! "Homepage" setting item diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/src/cpwlanapadvancedview.cpp --- a/cmmanager/cpwlanapplugin/src/cpwlanapadvancedview.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/src/cpwlanapadvancedview.cpp Thu May 27 13:17:01 2010 +0300 @@ -11,20 +11,36 @@ * * Contributors: * -* Description: +* Description: * Control Panel WLAN AP advanced settings view implementation. * */ // System includes +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include #include // User includes +#include "cpipv4filter.h" +#include "cpipv6filter.h" #include "cpwlanapadvancedview.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cpwlanapadvancedviewTraces.h" +#endif + /*! \class CpWlanApAdvancedView \brief This class implements the WLAN AP Control Panel advanced @@ -48,16 +64,40 @@ CpBaseSettingView(0, parent), mForm(0), mModel(0), - mCmConnectionMethod(cmConnectionMethod) + mCmConnectionMethod(cmConnectionMethod), + mIpv4Group(0), + mIpv4Automatic(0), + mIpv4Address(0), + mIpv4SubnetMask(0), + mIpv4Gateway(0), + mIpv4DnsAutomatic(0), + mIpv4DnsAddress1(0), + mIpv4DnsAddress2(0), + mIpv6Group(0), + mIpv6DnsAutomatic(0), + mIpv6DnsAddress1(0), + mIpv6DnsAddress2(0), + mProxyGroup(0), + mProxyServer(0), + mProxyPort(0), + mMessageBox(0), + mIpv6Supported(false) { + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_ENTRY); + // Construct WLAN AP advanced settings UI mForm = new HbDataForm(); this->setWidget(mForm); mModel = new HbDataFormModel(mForm); mForm->setModel(mModel); + mIpv6Supported = mCmConnectionMethod->getBoolAttribute( + CMManagerShim::CmIPv6Supported); + // Add advanced settings groups createAdvancedSettings(); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_EXIT); } /*! @@ -65,6 +105,9 @@ */ CpWlanApAdvancedView::~CpWlanApAdvancedView() { + OstTraceFunctionEntry0(DUP1_CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_ENTRY); + + OstTraceFunctionExit0(DUP1_CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_EXIT); } /*! @@ -72,5 +115,973 @@ */ void CpWlanApAdvancedView::createAdvancedSettings() { - // TODO: Implement the advanced settings view. + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_ENTRY); + + // Create settings groups + createIpv4Group(); + if (mIpv6Supported) { + createIpv6Group(); + } + createProxyGroup(); + + // Read values and update UI + updateIpv4Group(); + if (mIpv6Supported) { + updateIpv6Group(); + } + updateProxyGroup(); + + // Connect signal to initialize settings item widgets + bool status = connect( + mForm, + SIGNAL(itemShown(const QModelIndex)), + this, + SLOT(setEditorPreferences(const QModelIndex))); + Q_ASSERT(status); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_EXIT); +} + +/*! + Creates the IPv4 settings group. +*/ +void CpWlanApAdvancedView::createIpv4Group() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEIPV4GROUP_ENTRY); + + // IPv4 settings group + mIpv4Group = new CpSettingFormItemData( + HbDataFormModelItem::GroupItem, + hbTrId("txt_occ_subhead_ipv4_settings")); + mModel->appendDataFormItem(mIpv4Group); + + // Phone IP address + // "Automatic" checkbox + mIpv4Automatic = new CpSettingFormItemData( + HbDataFormModelItem::CheckBoxItem, + hbTrId("txt_occ_setlabel_phone_ip_address")); + mIpv4Automatic->setContentWidgetData( + "text", + hbTrId("txt_occ_setlabel_val_automatic")); + mForm->addConnection( + mIpv4Automatic, + SIGNAL(stateChanged(int)), + this, + SLOT(changeIpv4AddressMode(int))); + mIpv4Group->appendChild(mIpv4Automatic); + + // Phone IP address + mIpv4Address = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_phone_ip_address")); + mForm->addConnection( + mIpv4Address, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4Address())); + mIpv4Group->appendChild(mIpv4Address); + + // Subnet mask + mIpv4SubnetMask = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_subnet_mask")); + mForm->addConnection( + mIpv4SubnetMask, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4SubnetMask())); + mIpv4Group->appendChild(mIpv4SubnetMask); + + // Gateway + mIpv4Gateway = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_default_gateway")); + mForm->addConnection( + mIpv4Gateway, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4Gateway())); + mIpv4Group->appendChild(mIpv4Gateway); + + // DNS addresses + // "Automatic" checkbox + mIpv4DnsAutomatic = new CpSettingFormItemData( + HbDataFormModelItem::CheckBoxItem, + hbTrId("txt_occ_setlabel_dns_addresses")); + mIpv4DnsAutomatic->setContentWidgetData( + "text", + hbTrId("txt_occ_setlabel_val_automatic")); + mForm->addConnection( + mIpv4DnsAutomatic, + SIGNAL(stateChanged(int)), + this, + SLOT(changeIpv4DnsMode(int))); + mIpv4Group->appendChild(mIpv4DnsAutomatic); + + // Primary DNS address + mIpv4DnsAddress1 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_primary_name_server")); + mForm->addConnection( + mIpv4DnsAddress1, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4PrimaryDnsAddress())); + mIpv4Group->appendChild(mIpv4DnsAddress1); + + // Secondary DNS address + mIpv4DnsAddress2 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_secondary_name_server")); + mForm->addConnection( + mIpv4DnsAddress2, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv4SecondaryDnsAddress())); + mIpv4Group->appendChild(mIpv4DnsAddress2); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEIPV4GROUP_EXIT); +} + +/*! + Reads attribute values and updates the IPv4 settings group. +*/ +void CpWlanApAdvancedView::updateIpv4Group() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_UPDATEIPV4GROUP_ENTRY); + + // Phone IP address + // "Automatic" checkbox + bool ipAddressFromServer = mCmConnectionMethod->getBoolAttribute( + CMManagerShim::CmIPAddrFromServer); + Qt::CheckState state = Qt::Unchecked; + if (ipAddressFromServer) { + state = Qt::Checked; + } + mIpv4Automatic->setContentWidgetData("checkState", state); + + // Enable/disable user defined IP address fields + enableIpv4AddressFields(state); + + // Phone IP address + QString string = getIpAddress(CMManagerShim::CmIPAddress); + mIpv4Address->setContentWidgetData("text", string); + + // Subnet mask + string = getIpAddress(CMManagerShim::CmIPNetmask); + mIpv4SubnetMask->setContentWidgetData("text", string); + + // Gateway + string = getIpAddress(CMManagerShim::CmIPGateway); + mIpv4Gateway->setContentWidgetData("text", string); + + // DNS addresses + // "Automatic" checkbox + state = Qt::Unchecked; + if (mCmConnectionMethod->getBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer)) { + state = Qt::Checked; + } + mIpv4DnsAutomatic->setContentWidgetData("checkState", state); + + // Enable/disable user defined DNS address fields + enableIpv4DnsFields(state); + + // Primary DNS address + string = getIpAddress(CMManagerShim::CmIPNameServer1); + mIpv4DnsAddress1->setContentWidgetData("text", string); + + // Secondary DNS address + string = getIpAddress(CMManagerShim::CmIPNameServer2); + mIpv4DnsAddress2->setContentWidgetData("text", string); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_UPDATEIPV4GROUP_EXIT); +} + +/*! + Creates the IPv6 settings group. +*/ +void CpWlanApAdvancedView::createIpv6Group() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEIPV6GROUP_ENTRY); + + // IPv6 settings group + mIpv6Group = new CpSettingFormItemData( + HbDataFormModelItem::GroupItem, + hbTrId("txt_occ_subhead_ipv6_settings")); + mModel->appendDataFormItem(mIpv6Group); + + // DNS addresses + // Automatic/well-known/user defined combobox + mIpv6DnsAutomatic = new CpSettingFormItemData( + HbDataFormModelItem::ComboBoxItem, + hbTrId("txt_occ_setlabel_dns_addresses")); + QStringList dnsModeList; + // Order of the list must match the Ipv6DnsType enum + dnsModeList + << hbTrId("txt_occ_setlabel_val_automatic") + << hbTrId("txt_occ_setlabel_dns_addresses_val_wellknown") + << hbTrId("txt_occ_setlabel_dns_addresses_val_user_defined"); + mIpv6DnsAutomatic->setContentWidgetData("items", dnsModeList); + mForm->addConnection( + mIpv6DnsAutomatic, + SIGNAL(currentIndexChanged(int)), + this, + SLOT(changeIpv6DnsMode(int))); + mIpv6Group->appendChild(mIpv6DnsAutomatic); + + // Primary DNS address + mIpv6DnsAddress1 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_primary_name_server")); + mForm->addConnection( + mIpv6DnsAddress1, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv6PrimaryDnsAddress())); + mIpv6Group->appendChild(mIpv6DnsAddress1); + + // Secondary DNS address + mIpv6DnsAddress2 = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_secondary_name_server")); + mForm->addConnection( + mIpv6DnsAddress2, + SIGNAL(editingFinished()), + this, + SLOT(changeIpv6SecondaryDnsAddress())); + mIpv6Group->appendChild(mIpv6DnsAddress2); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEIPV6GROUP_EXIT); +} + +/*! + Reads attribute values and updates the IPv6 settings group. +*/ +void CpWlanApAdvancedView::updateIpv6Group() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_UPDATEIPV6GROUP_ENTRY); + + // DNS addresses + // Automatic/well-known/user defined combobox + uint type = getIpv6DnsType(); + mIpv6DnsAutomatic->setContentWidgetData("currentIndex", type); + + // Enable/disable user defined DNS address fields + enableIpv6DnsFields(type); + + // Primary DNS address + QString string = getIpAddress(CMManagerShim::CmIP6NameServer1); + mIpv6DnsAddress1->setContentWidgetData("text", string); + + // Secondary DNS address + string = getIpAddress(CMManagerShim::CmIP6NameServer2); + mIpv6DnsAddress2->setContentWidgetData("text", string); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_UPDATEIPV6GROUP_EXIT); +} + +/*! + Creates the proxy settings group. +*/ +void CpWlanApAdvancedView::createProxyGroup() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEPROXYGROUP_ENTRY); + + // Proxy settings group + mProxyGroup = new CpSettingFormItemData( + HbDataFormModelItem::GroupItem, + hbTrId("txt_occ_subhead_proxy_settings")); + mModel->appendDataFormItem(mProxyGroup); + + // Proxy server address + mProxyServer = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_proxy_server_address")); + mForm->addConnection( + mProxyServer, + SIGNAL(editingFinished()), + this, + SLOT(changeProxyServer())); + mProxyGroup->appendChild(mProxyServer); + + // Proxy port number + mProxyPort = new CpSettingFormItemData( + HbDataFormModelItem::TextItem, + hbTrId("txt_occ_setlabel_proxy_port_number")); + mForm->addConnection( + mProxyPort, + SIGNAL(editingFinished()), + this, + SLOT(changeProxyPort())); + mProxyGroup->appendChild(mProxyPort); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEPROXYGROUP_EXIT); +} + +/*! + Reads attribute values and updates the proxy settings group. +*/ +void CpWlanApAdvancedView::updateProxyGroup() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_UPDATEPROXYGROUP_ENTRY); + + // Proxy server address + QString serverAddress = mCmConnectionMethod->getStringAttribute( + CMManagerShim::CmProxyServerName); + mProxyServer->setContentWidgetData("text", serverAddress); + + // Proxy port number + uint portNumber = mCmConnectionMethod->getIntAttribute( + CMManagerShim::CmProxyPortNumber); + if (portNumber > 0) { + mProxyPort->setContentWidgetData("text", QVariant(portNumber)); + } else { + mProxyPort->setContentWidgetData("text", ""); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_UPDATEPROXYGROUP_EXIT); +} + +/*! + Reads an IP address from CommsDat with given attribute. If string is + empty, a zero address (0.0.0.0 or 0:0:0:0:0:0:0:0) is returned. +*/ +QString CpWlanApAdvancedView::getIpAddress( + CMManagerShim::ConnectionMethodAttribute attribute) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_GETIPADDRESS_ENTRY); + + QString ipAddress = mCmConnectionMethod->getStringAttribute(attribute); + + if (ipAddress.isEmpty()) { + // String is empty, return a zero address instead + switch (attribute) { + case CMManagerShim::CmIP6NameServer1: + case CMManagerShim::CmIP6NameServer2: + // IPv6 address + ipAddress = CMManagerShim::DynamicIpv6Address; + break; + default: + // IPv4 address + ipAddress = CMManagerShim::UnspecifiedIpv4Address; + break; + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_GETIPADDRESS_EXIT); + return ipAddress; +} + +/*! + Resolves IPv6 DNS address type. +*/ +CpWlanApAdvancedView::Ipv6DnsType CpWlanApAdvancedView::getIpv6DnsType() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_GETIPV6DNSTYPE_ENTRY); + + // Read "DNS address from server" flag + bool dnsAddressFromServer = mCmConnectionMethod->getBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer); + + // Read IPv6 DNS addresses from CommsDat + QString primaryAddress = mCmConnectionMethod->getStringAttribute( + CMManagerShim::CmIP6NameServer1); + QString secondaryAddress = mCmConnectionMethod->getStringAttribute( + CMManagerShim::CmIP6NameServer2); + + // Resolve IPv6 DNS address type + Ipv6DnsType type = Ipv6DnsTypeUserDefined; + if (dnsAddressFromServer) { + // Automatic + type = Ipv6DnsTypeAutomatic; + } else if (primaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer1 + && secondaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer2) { + // Well-known IPv6 DNS addresses + type = Ipv6DnsTypeWellKnown; + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_GETIPV6DNSTYPE_EXIT); + return type; +} + +/*! + Sets IPv4 address field enabled/disabled. +*/ +void CpWlanApAdvancedView::enableIpv4AddressFields(int state) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_ENTRY); + + if (state == Qt::Checked) { + // Automatic, disable text field + mIpv4Address->setEnabled(false); + mIpv4SubnetMask->setEnabled(false); + mIpv4Gateway->setEnabled(false); + } else { + // Manual, enable text field + mIpv4Address->setEnabled(true); + mIpv4SubnetMask->setEnabled(true); + mIpv4Gateway->setEnabled(true); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_EXIT); +} + +/*! + Sets IPv4 DNS address fields enabled/disabled. +*/ +void CpWlanApAdvancedView::enableIpv4DnsFields(int state) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_ENTRY); + + if (state == Qt::Checked) { + // Automatic, disable text fields + mIpv4DnsAddress1->setEnabled(false); + mIpv4DnsAddress2->setEnabled(false); + } else { + // Manual, enable text fields + mIpv4DnsAddress1->setEnabled(true); + mIpv4DnsAddress2->setEnabled(true); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_EXIT); +} + +/*! + Sets IPv6 DNS address fields enabled/disabled. +*/ +void CpWlanApAdvancedView::enableIpv6DnsFields(int selectionIndex) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_ENTRY); + + // Check combobox value + if (selectionIndex == Ipv6DnsTypeUserDefined) { + // User-defined, enable text fields + mIpv6DnsAddress1->setEnabled(true); + mIpv6DnsAddress2->setEnabled(true); + } else { + // Automatic or well-known, disable text fields + mIpv6DnsAddress1->setEnabled(false); + mIpv6DnsAddress2->setEnabled(false); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_EXIT); } + +/*! + Validates an IP address and saves it to CommsDat in case it was a valid + address or an empty string. In case the address is not valid, an error + note is shown to the user and previous setting is restored to the UI. +*/ +bool CpWlanApAdvancedView::validateAndSaveIpAddress( + HbDataFormModelItem *item, + CMManagerShim::ConnectionMethodAttribute attribute, + QAbstractSocket::NetworkLayerProtocol protocol) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_ENTRY); + + bool success = false; + + // Check address + QString address = item->contentWidgetData("text").toString(); + QHostAddress hostAddress; + if (hostAddress.setAddress(address) + && hostAddress.protocol() == protocol) { + // Proper address, convert to lower case (IPv6) + address = hostAddress.toString().toLower(); + } else if (address.isEmpty()) { + // Empty string, replace with 0.0.0.0 or 0:0:0:0:0:0:0:0 + if (protocol == QAbstractSocket::IPv4Protocol) { + address = CMManagerShim::UnspecifiedIpv4Address; + } else { + address = CMManagerShim::DynamicIpv6Address; + } + } else { + // Invalid address + address.clear(); + } + + if (!address.isEmpty()) { + // Save to CommsDat + mCmConnectionMethod->setStringAttribute(attribute, address); + if (tryUpdate()) { + success = true; + item->setContentWidgetData("text", address); + } + } else { + // Inform user of invalid name + showMessageBox( + HbMessageBox::MessageTypeInformation, + hbTrId("txt_occ_info_invalid_input")); + // Restore previous setting + address = getIpAddress(attribute); + item->setContentWidgetData("text", address); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_EXIT); + return success; +} + +/*! + Shows message box with "OK" button using given text. +*/ +void CpWlanApAdvancedView::showMessageBox( + HbMessageBox::MessageBoxType type, + const QString &text) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_SHOWMESSAGEBOX_ENTRY); + + // Create a message box + mMessageBox = QSharedPointer(new HbMessageBox(type)); + mMessageBox->setText(text); + mMessageBox->setModal(true); + mMessageBox->setTimeout(HbPopup::NoTimeout); + mMessageBox->setDismissPolicy(HbPopup::NoDismiss); + mMessageBox->open(); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_SHOWMESSAGEBOX_EXIT); +} + +/*! + Tries to update connection method changes to CommsDat. + Returns "true" if success, "false" if some error happened. +*/ +bool CpWlanApAdvancedView::tryUpdate() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_TRYUPDATE_ENTRY); + + // Try update + bool success = true; + try { + mCmConnectionMethod->update(); + } + catch (const std::exception&) { + // Handle error + handleUpdateError(); + + success = false; + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_TRYUPDATE_EXIT); + return success; +} + +/*! + Handles failed CommsDat update. + */ +void CpWlanApAdvancedView::handleUpdateError() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_HANDLEUPDATEERROR_ENTRY); + + // Show error note to user + showMessageBox( + HbMessageBox::MessageTypeWarning, + hbTrId("txt_occ_info_unable_to_save_setting")); + // Reload settings from CommsDat and update UI + try { + mCmConnectionMethod->refresh(); + } + catch (const std::exception&) { + // Ignore error from refresh. Most likely this will not happen, but + // if it does, there isn't very much we can do. + OstTrace0( + TRACE_ERROR, + CPWLANAPPADVANCEDVIEW_HANDLEUPDATEERROR, + "Refresh failed"); + }; + updateIpv4Group(); + if (mIpv6Supported) { + updateIpv6Group(); + } + updateProxyGroup(); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_HANDLEUPDATEERROR_EXIT); +} + +/*! + Initializes all settings groups. +*/ +void CpWlanApAdvancedView::setEditorPreferences(const QModelIndex index) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_SETEDITORPREFERENCES_ENTRY); + + HbDataFormViewItem *viewItem = qobject_cast + (mForm->itemByIndex(index)); + HbDataFormModelItem *modelItem = mModel->itemFromIndex(index); + + if (modelItem == mIpv4Address + || modelItem == mIpv4SubnetMask + || modelItem == mIpv4Gateway + || modelItem == mIpv4DnsAddress1 + || modelItem == mIpv4DnsAddress2 + || modelItem == mIpv6DnsAddress1 + || modelItem == mIpv6DnsAddress2 + || modelItem == mProxyServer + || modelItem == mProxyPort) { + // HbLineEdit items, get editor and editor interface + HbLineEdit *edit = qobject_cast + (viewItem->dataItemContentWidget()); + HbEditorInterface editorInterface(edit); + + if (modelItem == mIpv4Address + || modelItem == mIpv4SubnetMask + || modelItem == mIpv4Gateway + || modelItem == mIpv4DnsAddress1 + || modelItem == mIpv4DnsAddress2) { + // IPv4 IP address + editorInterface.setMode(HbInputModeNumeric); + editorInterface.setFilter(CpIpv4Filter::instance()); + edit->setMaxLength(CMManagerShim::CmIP4AddressLength); + } else if (modelItem == mIpv6DnsAddress1 + || modelItem == mIpv6DnsAddress2) { + // IPv6 IP address + editorInterface.setInputConstraints( + HbEditorConstraintLatinAlphabetOnly); + editorInterface.setFilter(CpIpv6Filter::instance()); + edit->setInputMethodHints( + Qt::ImhNoPredictiveText + | Qt::ImhPreferLowercase); + edit->setMaxLength(CMManagerShim::CmIP6NameServerLength); + } else if (modelItem == mProxyServer) { + // Proxy server address + editorInterface.setMode(HbInputModeNone); + editorInterface.setInputConstraints( + HbEditorConstraintLatinAlphabetOnly); + editorInterface.setFilter(HbUrlFilter::instance()); + editorInterface.setEditorClass(HbInputEditorClassUrl); + editorInterface.setDigitType(HbDigitTypeNone); + edit->setInputMethodHints( + Qt::ImhNoPredictiveText + | Qt::ImhPreferLowercase); + edit->setMaxLength(CMManagerShim::CmProxyServerNameLength); + } else { /* mProxyPort */ + // Proxy port number + editorInterface.setMode(HbInputModeNumeric); + edit->setInputMethodHints(Qt::ImhDigitsOnly); + edit->setMaxLength(CMManagerShim::CmProxyPortNumberLength); + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_SETEDITORPREFERENCES_EXIT); +} + +/*! + Handles change to IPv4 address mode (automatic/user defined). +*/ +void CpWlanApAdvancedView::changeIpv4AddressMode(int state) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_ENTRY); + + bool ipv4AddressFromServer; + if (state == Qt::Checked) { + ipv4AddressFromServer = true; + } else { + ipv4AddressFromServer = false; + } + + if (!ipv4AddressFromServer + && getIpAddress(CMManagerShim::CmIPAddress) == + CMManagerShim::UnspecifiedIpv4Address) { + // User defined IP address selected, but no valid address is stored. + // Just enable the UI IP editors, because CMManager will update the + // "IP address from server" flag by itself when a valid IP address + // is stored. + enableIpv4AddressFields(state); + } else { + // Save setting to CommsDat + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPAddrFromServer, + ipv4AddressFromServer); + if (tryUpdate()) { + enableIpv4AddressFields(state); + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_EXIT); +} + +/*! + Saves IPv4 address to CommsDat. +*/ +void CpWlanApAdvancedView::changeIpv4Address() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv4Address, + CMManagerShim::CmIPAddress, + QAbstractSocket::IPv4Protocol)) { + // In case the IP address is empty or 0.0.0.0, CMManager changes the + // "IP address from server" flag to true. We need to refresh the UI to + // make sure we are in sync. + updateIpv4Group(); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESS_EXIT); +} + +/*! + Saves IPv4 subnet mask to CommsDat. +*/ +void CpWlanApAdvancedView::changeIpv4SubnetMask() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SUBNETMASK_ENTRY); + + (void)validateAndSaveIpAddress( + mIpv4SubnetMask, + CMManagerShim::CmIPNetmask, + QAbstractSocket::IPv4Protocol); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SUBNETMASK_EXIT); +} + +/*! + Saves IPv4 gateway to CommsDat. +*/ +void CpWlanApAdvancedView::changeIpv4Gateway() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4GATEWAY_ENTRY); + + (void)validateAndSaveIpAddress( + mIpv4Gateway, + CMManagerShim::CmIPGateway, + QAbstractSocket::IPv4Protocol); + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4GATEWAY_EXIT); +} + +/*! + Handles change to IPv4 DNS mode (automatic/user defined). +*/ +void CpWlanApAdvancedView::changeIpv4DnsMode(int state) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4DNSMODE_ENTRY); + + bool dnsAddressFromServer; + if (state == Qt::Checked) { + dnsAddressFromServer = true; + } else { + dnsAddressFromServer = false; + } + // Save setting to CommsDat + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer, + dnsAddressFromServer); + if (tryUpdate()) { + enableIpv4DnsFields(state); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4DNSMODE_EXIT); +} + +/*! + Saves IPv4 primary DNS address to CommsDat. +*/ +void CpWlanApAdvancedView::changeIpv4PrimaryDnsAddress() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv4DnsAddress1, + CMManagerShim::CmIPNameServer1, + QAbstractSocket::IPv4Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0.0.0.0, CMManager will + // check secondary DNS address and in case it is a valid address, + // move it to the primary DNS address. We need to refresh the + // UI to make sure we are in sync. If tryUpdate() fails it does + // the refresh automatically, so only success case is handled + // here. + updateIpv4Group(); + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_EXIT); +} + +/*! + Saves IPv4 secondary DNS address to CommsDat. +*/ +void CpWlanApAdvancedView::changeIpv4SecondaryDnsAddress() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv4DnsAddress2, + CMManagerShim::CmIPNameServer2, + QAbstractSocket::IPv4Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIPDNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0.0.0.0, CMManager will + // write the address there instead of secondary DNS address, so we + // need to refresh the UI to make sure we are in sync. If + // tryUpdate() fails it does the refresh automatically, so only + // success case is handled here. + updateIpv4Group(); + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_EXIT); +} + +/*! + Handles change to IPv6 DNS mode (automatic/well-known/user defined). +*/ +void CpWlanApAdvancedView::changeIpv6DnsMode(int state) +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV6DNSMODE_ENTRY); + + // Update "DNS address from server" flag + if (state == Ipv6DnsTypeAutomatic) { + // Automatic + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + true); + } else { + // User defined or well-known address + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + false); + + if (state == Ipv6DnsTypeWellKnown) { + // Well-known address, set DNS addresses and update UI + mCmConnectionMethod->setStringAttribute( + CMManagerShim::CmIP6NameServer1, + CMManagerShim::KnownIpv6NameServer1); + mIpv6DnsAddress1->setContentWidgetData( + "text", + CMManagerShim::KnownIpv6NameServer1); + mCmConnectionMethod->setStringAttribute( + CMManagerShim::CmIP6NameServer2, + CMManagerShim::KnownIpv6NameServer2); + mIpv6DnsAddress2->setContentWidgetData( + "text", + CMManagerShim::KnownIpv6NameServer2); + } + } + + if (tryUpdate()) { + enableIpv6DnsFields(state); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV6DNSMODE_EXIT); +} + +/*! + Saves IPv6 primary DNS address to CommsDat. +*/ +void CpWlanApAdvancedView::changeIpv6PrimaryDnsAddress() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv6DnsAddress1, + CMManagerShim::CmIP6NameServer1, + QAbstractSocket::IPv6Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0:0:0:0:0:0:0:0, + // CMManager will check secondary DNS address and in case it is a + // valid address, move it to the primary DNS address. We need to + // refresh the UI to make sure we are in sync. If tryUpdate() + // fails it does the refresh automatically, so only success case + // is handled here. + updateIpv6Group(); + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_EXIT); +} + +/*! + Saves IPv6 secondary DNS address to CommsDat. +*/ +void CpWlanApAdvancedView::changeIpv6SecondaryDnsAddress() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_ENTRY); + + if (validateAndSaveIpAddress( + mIpv6DnsAddress2, + CMManagerShim::CmIP6NameServer2, + QAbstractSocket::IPv6Protocol)) { + // Address saved successfully, update "DNS address from server" flag + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::CmIP6DNSAddrFromServer, + false); + if (tryUpdate()) { + // In case primary DNS address is empty or 0:0:0:0:0:0:0:0, + // CMManager will write the address there instead of secondary DNS + // address, so we need to refresh the UI to make sure we are in + // sync. If tryUpdate() fails it does the refresh automatically, + // so only success case is handled here. + updateIpv6Group(); + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_EXIT); +} + +/*! + Saves proxy server address to CommsDat. +*/ +void CpWlanApAdvancedView::changeProxyServer() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEPROXYSERVER_ENTRY); + + QString proxyServer = mProxyServer->contentWidgetData("text").toString(); + mCmConnectionMethod->setStringAttribute( + CMManagerShim::CmProxyServerName, + proxyServer); + if (tryUpdate()) { + // If proxy server name is empty, CMManager will also clear the + // proxy port. Therefore UI needs to be updated. + updateProxyGroup(); + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEPROXYSERVER_EXIT); +} + +/*! + Saves proxy port to CommsDat. +*/ +void CpWlanApAdvancedView::changeProxyPort() +{ + OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEPROXYPORT_ENTRY); + + uint proxyPort = mProxyPort->contentWidgetData("text").toInt(); + if (proxyPort <= 65535) { + if (proxyPort == 0) { + // Don't show zero + mProxyPort->setContentWidgetData("text", ""); + } + mCmConnectionMethod->setIntAttribute( + CMManagerShim::CmProxyPortNumber, + proxyPort); + (void)tryUpdate(); + } else { + // Inform user of invalid value + showMessageBox( + HbMessageBox::MessageTypeInformation, + hbTrId("txt_occ_info_invalid_input")); + // Restore previous setting + proxyPort = mCmConnectionMethod->getIntAttribute( + CMManagerShim::CmProxyPortNumber); + if (proxyPort > 0) { + mProxyPort->setContentWidgetData("text", QVariant(proxyPort)); + } else { + mProxyPort->setContentWidgetData("text", ""); + } + } + + OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEPROXYPORT_EXIT); +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/src/cpwlanapplugin.cpp --- a/cmmanager/cpwlanapplugin/src/cpwlanapplugin.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/src/cpwlanapplugin.cpp Thu May 27 13:17:01 2010 +0300 @@ -17,7 +17,7 @@ */ // System includes -#include +#include #include #include @@ -46,19 +46,12 @@ Constructor. */ CpWlanApPlugin::CpWlanApPlugin() : - mTranslator(0), + mTranslator(new HbTranslator("cpapplugin")), mCmManager(0), mCmConnectionMethod(0) { OstTraceFunctionEntry0(CPWLANAPPLUGIN_CPWLANAPPLUGIN_ENTRY); - // Install localization - QString lang = QLocale::system().name(); - QString path = "z:/resource/qt/translations/"; - mTranslator = new QTranslator(this); - mTranslator->load(path + "cpapplugin_" + lang); - qApp->installTranslator(mTranslator); - OstTraceFunctionExit0(CPWLANAPPLUGIN_CPWLANAPPLUGIN_EXIT); } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/src/cpwlanapview.cpp --- a/cmmanager/cpwlanapplugin/src/cpwlanapview.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/src/cpwlanapview.cpp Thu May 27 13:17:01 2010 +0300 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -79,6 +80,7 @@ mWlanNetworkNameItem(0), mNetworkStatusItem(0), mNetworkModeItem(0), + mAdHocChannelItem(0), mSecurityModeItem(0), mHomepageItem(0), mSecuritySettingsGroupItem(0), @@ -221,28 +223,15 @@ SLOT(networkModeChanged(int))); mApSettingsGroupItem->appendChild(mNetworkModeItem); + // Ad-hoc channel + // Added dynamically according to set network mode + // Security mode mSecurityModeItem = new CpSettingFormItemData( HbDataFormModelItem::ComboBoxItem, hbTrId("txt_occ_setlabel_wlan_security_mode")); - // Load WLAN security plugins and construct map - mSecurityModeMap.insert(0, NULL); // open mode - // Load all security plugins and construct map - loadSecurityPlugins(); - // Add items to combobox - QStringList securityModeItems; - foreach (CpWlanSecurityPluginInterface *plugin, mSecurityModeMap) { - if (plugin) { - // Add security mode from plugin - securityModeItems - << hbTrId(plugin->securityModeTextId().toLatin1()); - } else { - // Add open mode - securityModeItems - << hbTrId("txt_occ_setlabel_wlan_security_mode_val_open"); - } - } - mSecurityModeItem->setContentWidgetData("items", securityModeItems); + // Security modes added dynamically according to set network mode + // Connect signal and add item to group mForm->addConnection( mSecurityModeItem, @@ -296,28 +285,19 @@ mNetworkStatusMap.key(scanSsid)); // Network mode - int networkMode = mCmConnectionMethod->getIntAttribute( - CMManagerShim::WlanConnectionMode); + CMManagerShim::WlanConnMode networkMode = + static_cast + (mCmConnectionMethod->getIntAttribute( + CMManagerShim::WlanConnectionMode)); mNetworkModeItem->setContentWidgetData( "currentIndex", mNetworkModeMap.key(networkMode)); + // Ad-hoc channel + updateAdHocChannelItem(networkMode); + // Security mode - QVariant securityMode = mCmConnectionMethod->getIntAttribute( - CMManagerShim::WlanSecurityMode); - // Iterate through the map to find correct security plugin and set - // mode index - int securityModeIndex = 0; - QMapIterator i(mSecurityModeMap); - while (i.hasNext()) { - i.next(); - if (i.value() - && i.value()->securityMode() == securityMode.toInt()) { - securityModeIndex = i.key(); - } - } - mSecurityModeItem->setContentWidgetData("currentIndex", - securityModeIndex); + updateSecurityModeItem(networkMode); // Homepage QString homepage = mCmConnectionMethod->getStringAttribute( @@ -330,7 +310,8 @@ /*! Loads all WLAN security plugins. */ -void CpWlanApView::loadSecurityPlugins() +void CpWlanApView::loadSecurityPlugins( + CMManagerShim::WlanConnMode networkMode) { OstTraceFunctionEntry0(CPWLANAPVIEW_LOADSECURITYPLUGINS_ENTRY); @@ -357,12 +338,16 @@ } } - // Add security plugins to map + // Add security plugins to map. If network mode is ad-hoc, only WEP + // is allowed. int i; i = mSecurityModeMap.size(); foreach (CpWlanSecurityPluginInterface *plugin, plugins) { - mSecurityModeMap.insert(i, plugin); - i++; + if (networkMode != CMManagerShim::Adhoc + || plugin->securityMode() == CMManagerShim::WlanSecModeWep) { + mSecurityModeMap.insert(i, plugin); + i++; + } } OstTraceFunctionExit0(CPWLANAPVIEW_LOADSECURITYPLUGINS_EXIT); @@ -473,6 +458,132 @@ } /*! + Updates Ad-hoc channel item. Setting item is shown if network mode is + ad-hoc, otherwise it is not shown. + */ +void CpWlanApView::updateAdHocChannelItem( + CMManagerShim::WlanConnMode networkMode) +{ + if (networkMode == CMManagerShim::Infra) { + // Infrastructure + if (mAdHocChannelItem) { + mApSettingsGroupItem->removeChild( + mApSettingsGroupItem->indexOf(mAdHocChannelItem)); + mAdHocChannelItem = NULL; + } + } else { + // Ad-hoc + if (!mAdHocChannelItem) { + // Ad-hoc channel item not shown, add it + mAdHocChannelItem = new CpSettingFormItemData( + HbDataFormModelItem::ComboBoxItem, + hbTrId("txt_occ_setlabel_adhoc_channel")); + // Add items to combobox + QStringList adHocChannelItems; + adHocChannelItems + << hbTrId("txt_occ_setlabel_adhoc_channel_val_automatic"); + for (int i = WlanAdHocChannelMinValue; + i <= WlanAdHocChannelMaxValue; + i++) { + QString channel; + channel.setNum(i); + adHocChannelItems << HbStringUtil::convertDigits(channel); + } + mAdHocChannelItem->setContentWidgetData( + "items", + adHocChannelItems); + // Connect signal and add item to group + mForm->addConnection( + mAdHocChannelItem, + SIGNAL(currentIndexChanged(int)), + this, + SLOT(adHocChannelChanged(int))); + // Add item after the network mode item + mApSettingsGroupItem->insertChild( + mApSettingsGroupItem->indexOf(mNetworkModeItem) + 1, + mAdHocChannelItem); + } + // Update ad-hoc item + int adHocChannelId = mCmConnectionMethod->getIntAttribute( + CMManagerShim::WlanChannelID); + mAdHocChannelItem->setContentWidgetData( + "currentIndex", + adHocChannelId); + } +} + +/*! + Updates security mode item. + */ +void CpWlanApView::updateSecurityModeItem( + CMManagerShim::WlanConnMode networkMode) +{ + // Load WLAN security plugins and construct map + mSecurityModeMap.clear(); + mSecurityModeMap.insert(0, NULL); // open mode + loadSecurityPlugins(networkMode); + + // Add items to combobox + QStringList securityModeItems; + foreach (CpWlanSecurityPluginInterface *plugin, mSecurityModeMap) { + if (plugin) { + // Add security mode from plugin + securityModeItems + << hbTrId(plugin->securityModeTextId().toLatin1()); + } else { + // Add open mode + securityModeItems + << hbTrId("txt_occ_setlabel_wlan_security_mode_val_open"); + } + } + // Remove connection before setting new content, because combobox + // will emit currentIndexChanged signal and we don't want that. + mForm->removeConnection( + mSecurityModeItem, + SIGNAL(currentIndexChanged(int)), + this, + SLOT(securityModeChanged(int))); + mSecurityModeItem->setContentWidgetData("items", securityModeItems); + mForm->addConnection( + mSecurityModeItem, + SIGNAL(currentIndexChanged(int)), + this, + SLOT(securityModeChanged(int))); + + uint securityMode = mCmConnectionMethod->getIntAttribute( + CMManagerShim::WlanSecurityMode); + // Iterate through the map to find correct security plugin and set + // mode index + int securityModeIndex = 0; + QMapIterator i(mSecurityModeMap); + while (i.hasNext()) { + i.next(); + if (i.value() + && i.value()->securityMode() == securityMode) { + securityModeIndex = i.key(); + } + } + mSecurityModeItem->setContentWidgetData("currentIndex", + securityModeIndex); + + if (securityMode != CMManagerShim::WlanSecModeOpen + && securityModeIndex == 0) { + // Security plugin implementing the selected security mode not found, + // set security mode to open also in CommsDat + mCmConnectionMethod->setIntAttribute( + CMManagerShim::WlanSecurityMode, + CMManagerShim::WlanSecModeOpen); + // Try update + try { + mCmConnectionMethod->update(); + } + catch (const std::exception&) { + // Error in update, but can't show error notes at this point + } + } +} + +/*! Stores connection name. */ void CpWlanApView::connectionNameChanged() @@ -547,7 +658,8 @@ OstTraceFunctionEntry0(CPWLANAPVIEW_NETWORKSTATUSCHANGED_ENTRY); // Update to CommsDat - mCmConnectionMethod->setBoolAttribute(CMManagerShim::WlanScanSSID, + mCmConnectionMethod->setBoolAttribute( + CMManagerShim::WlanScanSSID, mNetworkStatusMap.value(index)); (void)tryUpdate(); @@ -562,11 +674,36 @@ OstTraceFunctionEntry0(CPWLANAPVIEW_NETWORKMODECHANGED_ENTRY); // Update to CommsDat - mCmConnectionMethod->setIntAttribute(CMManagerShim::WlanConnectionMode, + mCmConnectionMethod->setIntAttribute( + CMManagerShim::WlanConnectionMode, mNetworkModeMap.value(index)); + if (tryUpdate()) { + // If mode is ad-hoc, ad-hoc channel item must be shown + CMManagerShim::WlanConnMode networkMode = + static_cast + (mNetworkModeMap.value(index)); + updateAdHocChannelItem(networkMode); + // Also security mode list may need updating + updateSecurityModeItem(networkMode); + } + + OstTraceFunctionExit0(CPWLANAPVIEW_NETWORKMODECHANGED_EXIT); +} + +/*! + Stores ad-hoc channel ID. +*/ +void CpWlanApView::adHocChannelChanged(int index) +{ + OstTraceFunctionEntry0(CPWLANAPVIEW_ADHOCCHANNELCHANGED_ENTRY); + + // Update to CommsDat + mCmConnectionMethod->setIntAttribute( + CMManagerShim::WlanChannelID, + index); (void)tryUpdate(); - OstTraceFunctionExit0(CPWLANAPVIEW_NETWORKMODECHANGED_EXIT); + OstTraceFunctionExit0(CPWLANAPVIEW_ADHOCCHANNELCHANGED_EXIT); } /*! @@ -580,10 +717,12 @@ CpWlanSecurityPluginInterface *plugin = mSecurityModeMap.value(index); // Update to CommsDat if (plugin) { - mCmConnectionMethod->setIntAttribute(CMManagerShim::WlanSecurityMode, + mCmConnectionMethod->setIntAttribute( + CMManagerShim::WlanSecurityMode, plugin->securityMode()); } else { - mCmConnectionMethod->setIntAttribute(CMManagerShim::WlanSecurityMode, + mCmConnectionMethod->setIntAttribute( + CMManagerShim::WlanSecurityMode, CMManagerShim::WlanSecModeOpen); } (void)tryUpdate(); diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/tsrc/ut/hbautotest.cpp --- a/cmmanager/cpwlanapplugin/tsrc/ut/hbautotest.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/tsrc/ut/hbautotest.cpp Thu May 27 13:17:01 2010 +0300 @@ -48,8 +48,7 @@ Qt::NoButton, Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me); - qApp->notify((window->viewport()), &me); - QCoreApplication::sendPostedEvents(); + QCoreApplication::sendEvent(window->viewport(), &me); QTest::qWait(1); } else { HbAutoTestMouseEvent me ( @@ -60,8 +59,7 @@ Qt::NoButton, Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me); - qApp->notify((window->viewport()), &me); - QCoreApplication::sendPostedEvents(); + QCoreApplication::sendEvent(window->viewport(), &me); QTest::qWait(1); } @@ -94,9 +92,7 @@ Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me); - qApp->notify((window->viewport()), &me); - QCoreApplication::sendPostedEvents(); - QCoreApplication::sendPostedEvents(); + QCoreApplication::sendEvent(window->viewport(), &me); QTest::qWait(1); } @@ -123,8 +119,7 @@ Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me); - qApp->notify((window->viewport()), &me); - QCoreApplication::sendPostedEvents(); + QCoreApplication::sendEvent(window->viewport(), &me); QTest::qWait(1); QTest::qWait(1); @@ -152,15 +147,12 @@ Qt::LeftButton, Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me); - qApp->notify((window->viewport()), &me); - QCoreApplication::sendPostedEvents(); - //QTime currentTime = QTime::currentTime(); - //qDebug() << currentTime.toString("hh:mm:ss.zzz") << ": Left button down"; - QTest::qWait(1); + QCoreApplication::sendEvent(window->viewport(), &me); if (delay!=-1) { QTest::qWait(delay); } + HbAutoTestMouseEvent me2 ( QEvent::MouseButtonRelease, targetPoint.toPoint(), @@ -170,10 +162,7 @@ Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me2); - qApp->notify((window->viewport()), &me2); - QCoreApplication::sendPostedEvents(); - //currentTime = QTime::currentTime(); - //qDebug() << currentTime.toString("hh:mm:ss.zzz") << ": Left button up"; + QCoreApplication::sendEvent(window->viewport(), &me2); QTest::qWait(1); QTest::qWait(1); @@ -221,8 +210,8 @@ Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me); - qApp->notify((window->viewport()), &me); - QCoreApplication::sendPostedEvents(); + QCoreApplication::sendEvent(window->viewport(), &me); + QTest::qWait(1); } QCursor::setPos(window->mapToGlobal(targetPoint.toPoint())); @@ -235,8 +224,7 @@ Qt::LeftButton, Qt::NoModifier); QSpontaneKeyEvent::setSpontaneous(&me); - qApp->notify((window->viewport()), &me); - QCoreApplication::sendPostedEvents(); + QCoreApplication::sendEvent(window->viewport(), &me); } @@ -255,7 +243,7 @@ HbAutoTestKeyEvent a(press ? QEvent::KeyPress : QEvent::KeyRelease, code, modifier, text, repeat); QSpontaneKeyEvent::setSpontaneous(&a); - if (!qApp->notify(widget, &a)) + if (!QCoreApplication::sendEvent(widget, &a)) QTest::qWarn("Keyboard event not accepted by receiving widget"); } diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/tsrc/ut/testcpwlanapplugin.cpp --- a/cmmanager/cpwlanapplugin/tsrc/ut/testcpwlanapplugin.cpp Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/tsrc/ut/testcpwlanapplugin.cpp Thu May 27 13:17:01 2010 +0300 @@ -24,12 +24,16 @@ #include #include #include +#include +#include +#include #include #include #include #include #include "cpwlanapview.h" +#include "cpwlanapadvancedview.h" #include "hbautotest.h" #include "testcpwlanapplugin.h" @@ -55,33 +59,23 @@ static const int waitTime = 10; // UI coordinates -static const QPoint connectionNameLabel(175, 70); - -static const QPoint connectionNameLineEdit(330, 110); - -static const QPoint wlanNetworkNameLineEdit(330, 190); +static const QPoint scrollMiddle(350, 280); +static const QPoint scrollTop(350, 50); +static const QPoint scrollBottom(350, 520); -static const QPoint networkStatusComboBox(175, 270); -static const QPoint networkStatusPublic(175, 325); -static const QPoint networkStatusHidden(175, 375); - -static const QPoint networkModeComboBox(175, 365); -static const QPoint networkModeIntrastructure(175, 415); -static const QPoint networkModeAdHoc(175, 465); +// Use positive offset if dropdown opens under the combobox +static const QPoint comboBoxItemOffset(0, 55); +// Use negative offset if dropdown opens above the combobox +static const QPoint comboBoxItemNegativeOffset(0, -50); -static const QPoint securityModeComboBox(175, 460); -#ifndef WLAN_SECURITY_PLUGINS_AVAILABLE -static const QPoint securityModeOpen(175, 510); -#else -static const QPoint securityModeOpen(175, 260); -static const QPoint securityModeWep(175, 305); -static const QPoint securityModeWpaWpa2(175, 355); -static const QPoint securityModeWpa2(175, 405); -#endif +static const QPoint exitEditorOffset(-10, -20); + +static const QPoint messageBoxOkButtonOffset(160, 140); -static const QPoint homepageLineEdit(330, 545); - -static const QPoint messageBoxOkButton(170, 320); +// Advanced settings groups +static const QPoint ipv4Group(160, 10); +static const QPoint ipv6Group(160, 60); +static const QPoint proxyGroup(160, 110); // ----------------------------------------------------------------------------- // FRAMEWORK FUNCTIONS @@ -121,8 +115,8 @@ // Load plugin QDir dir(pluginDir); - QPluginLoader loader(dir.absoluteFilePath(pluginName)); - mPlugin = qobject_cast(loader.instance()); + mPluginLoader = new QPluginLoader(dir.absoluteFilePath(pluginName)); + mPlugin = qobject_cast(mPluginLoader->instance()); QVERIFY(mPlugin != NULL); // Verify plugin bearer type @@ -130,6 +124,8 @@ // Create WLAN settings view (connection method ID given) subCreateSettingsView(testApId); + + subGetUiWidgets(); } /** @@ -139,6 +135,11 @@ { delete mMainWindow; mMainWindow = 0; + + // Force unloading of plugin + mPluginLoader->unload(); + delete mPluginLoader; + mPluginLoader = 0; } /** @@ -168,15 +169,16 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::CmNameLength); + QString text = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLabel); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -212,15 +214,20 @@ QString previous = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget); + // Erase old string - subClearLineEdit(CMManagerShim::CmNameLength); + QString text = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLabel); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget, exitEditorOffset); QTest::qWait(100); // Dismiss messagebox - HbAutoTest::mouseClick(mMainWindow, mTestView, messageBoxOkButton); + HbAutoTest::mouseClick( + mMainWindow, + mTestView->mMessageBox.data(), + messageBoxOkButtonOffset); // Verify both commsdat and UI widget subVerifyString( @@ -237,15 +244,16 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, wlanNetworkNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mWlanNetworkNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::WlanSSIDLength); + QString text = mTestView->mWlanNetworkNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLabel); + HbAutoTest::mouseClick(mMainWindow, mWlanNetworkNameWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -281,16 +289,20 @@ QString previous = mTestView->mWlanNetworkNameItem->contentWidgetData("text").toString(); - HbAutoTest::mouseClick(mMainWindow, mTestView, wlanNetworkNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mWlanNetworkNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::WlanSSIDLength); + QString text = mTestView->mWlanNetworkNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLabel); + HbAutoTest::mouseClick(mMainWindow, mWlanNetworkNameWidget, exitEditorOffset); QTest::qWait(100); // Dismiss messagebox - HbAutoTest::mouseClick(mMainWindow, mTestView, messageBoxOkButton); + HbAutoTest::mouseClick( + mMainWindow, + mTestView->mMessageBox.data(), + messageBoxOkButtonOffset); // Verify both commsdat and UI widget subVerifyString( @@ -304,14 +316,17 @@ */ void TestCpWlanApPlugin::tcChangeNetworkStatus() { + QPointF publicPointOffset = comboBoxItemOffset; + QPointF hiddenPointOffset = comboBoxItemOffset * 2; + // Set network status to hidden - HbAutoTest::mouseClick(mMainWindow, mTestView, networkStatusComboBox, 100); - HbAutoTest::mouseClick(mMainWindow, mTestView, networkStatusHidden, 100); + HbAutoTest::mouseClick(mMainWindow, mNetworkStatusWidget); + HbAutoTest::mouseClick(mMainWindow, mNetworkStatusWidget, hiddenPointOffset, 100); subVerifyNetworkStatus(HiddenStatus); // Set network status to public - HbAutoTest::mouseClick(mMainWindow, mTestView, networkStatusComboBox, 100); - HbAutoTest::mouseClick(mMainWindow, mTestView, networkStatusPublic, 100); + HbAutoTest::mouseClick(mMainWindow, mNetworkStatusWidget); + HbAutoTest::mouseClick(mMainWindow, mNetworkStatusWidget, publicPointOffset, 100); subVerifyNetworkStatus(PublicStatus); } @@ -320,14 +335,17 @@ */ void TestCpWlanApPlugin::tcChangeNetworkMode() { + QPointF infraPointOffset = comboBoxItemOffset; + QPointF adHocPointOffset = comboBoxItemOffset * 2; + // Set network mode to ad-hoc - HbAutoTest::mouseClick(mMainWindow, mTestView, networkModeComboBox, 100); - HbAutoTest::mouseClick(mMainWindow, mTestView, networkModeAdHoc, 100); + HbAutoTest::mouseClick(mMainWindow, mNetworkModeWidget); + HbAutoTest::mouseClick(mMainWindow, mNetworkModeWidget, adHocPointOffset, 100); subVerifyUint(CMManagerShim::WlanConnectionMode, CMManagerShim::Adhoc); // Set network mode to infrastructure - HbAutoTest::mouseClick(mMainWindow, mTestView, networkModeComboBox, 100); - HbAutoTest::mouseClick(mMainWindow, mTestView, networkModeIntrastructure, 100); + HbAutoTest::mouseClick(mMainWindow, mNetworkModeWidget); + HbAutoTest::mouseClick(mMainWindow, mNetworkModeWidget, infraPointOffset, 100); subVerifyUint(CMManagerShim::WlanConnectionMode, CMManagerShim::Infra); } @@ -337,37 +355,52 @@ void TestCpWlanApPlugin::tcChangeSecurityMode() { #ifdef WLAN_SECURITY_PLUGINS_AVAILABLE - // Ensure security mode is open - HbAutoTest::mouseClick(mMainWindow, mTestView, securityModeComboBox, 100); + QPointF openPointOffset = comboBoxItemNegativeOffset * 4; + QPointF wepPointOffset = comboBoxItemNegativeOffset * 3; + QPointF wpaPointOffset = comboBoxItemNegativeOffset * 2; + QPointF wpa2PointOffset = comboBoxItemNegativeOffset; +#else + QPointF openPointOffset = comboBoxItemNegativeOffset; +#endif + +#ifdef WLAN_SECURITY_PLUGINS_AVAILABLE + // Set security mode to WEP + HbAutoTest::mouseClick(mMainWindow, mSecurityModeWidget); QTest::qWait(100); - HbAutoTest::mouseClick(mMainWindow, mTestView, securityModeOpen, 100); - subVerifyUint( - CMManagerShim::WlanSecurityMode, - CMManagerShim::WlanSecModeOpen); - - QTest::qWait(1000); - - // Set security mode to WEP - HbAutoTest::mouseClick(mMainWindow, mTestView, securityModeComboBox, 100); - QTest::qWait(100); - HbAutoTest::mouseClick(mMainWindow, mTestView, securityModeWep, 100); + HbAutoTest::mouseClick(mMainWindow, mSecurityModeWidget, wepPointOffset, 100); subVerifyUint( CMManagerShim::WlanSecurityMode, CMManagerShim::WlanSecModeWep); QTest::qWait(1000); #endif - // Set security mode to open - HbAutoTest::mouseClick(mMainWindow, mTestView, securityModeComboBox, 100); + HbAutoTest::mouseClick(mMainWindow, mSecurityModeWidget); QTest::qWait(100); - HbAutoTest::mouseClick(mMainWindow, mTestView, securityModeOpen, 100); + HbAutoTest::mouseClick(mMainWindow, mSecurityModeWidget, openPointOffset, 100); subVerifyUint( CMManagerShim::WlanSecurityMode, CMManagerShim::WlanSecModeOpen); } /** + * Scrolls the tested view to the bottom. + */ +void TestCpWlanApPlugin::tcScrollToBottom() +{ + subScrollToBottom(); +} + +/** + * Gets UI widget pointers because homepage view item may have been + * created before it was visible on the UI. + */ +void TestCpWlanApPlugin::tcGetUiWidgets() +{ + subGetUiWidgets(); +} + +/** * Tests changing of homepage. */ void TestCpWlanApPlugin::tcChangeHomepage() @@ -375,7 +408,7 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, homepageLineEdit); + HbAutoTest::mouseClick(mMainWindow, mHomepageWidget); // Erase old string QString text = mTestView->mHomepageItem->contentWidgetData("text").toString(); @@ -384,7 +417,7 @@ // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLabel); + HbAutoTest::mouseClick(mMainWindow, mHomepageWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -401,10 +434,9 @@ QTest::addColumn("string"); QTest::addColumn("result"); -// Doesn't work always, view goes blank sometimes, Orbit bug? -// QTest::newRow("long") -// << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html" -// << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html"; + QTest::newRow("long") + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html" + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html"; QTest::newRow("basic") // last one should always fit on one line in UI << "http://www.symbian.org/" << "http://www.symbian.org/"; @@ -414,9 +446,9 @@ } /** - * Tests advanced settings view (which is currently empty). + * Opens advanced settings view. */ -void TestCpWlanApPlugin::tcAdvancedSettings() +void TestCpWlanApPlugin::tcOpenAdvancedSettingsView() { // Launch advanced settings view bool status = connect( @@ -426,9 +458,781 @@ SLOT(menuActionTriggered(HbAction *))); Q_ASSERT(status); emit menuActionTriggered(mTestView->mAdvancedSettingsAction); + + QTest::qWait(1000); + + mTestViewAdvanced = static_cast(mMainWindow->currentView()); +} - QTest::qWait(2000); +/** + * Expands the IPv4 settings group and gets UI widget pointers. + */ +void TestCpWlanApPlugin::tcExpandIpv4SettingsAndGetUiWidgets() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, ipv4Group); + + QTest::qWait(500); + + subGetAdvancedUiWidgets(0); +} + +/** + * Tests enabling of automatic phone IP address. + */ +void TestCpWlanApPlugin::tcEnableAutomaticIpv4Address() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4Automatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IP address + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressAutomaticWidget); + } + // Enable automatic IP address + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressAutomaticWidget); + subVerifyBool( + CMManagerShim::CmIPAddrFromServer, + true); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv4SubnetMaskWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv4GatewayWidget); +} + +/** + * Tests disabling of automatic phone IP address. + */ +void TestCpWlanApPlugin::tcEnableUserDefinedIpv4Address() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4Automatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IP address + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressAutomaticWidget); + } + // Can't verify the setting from CommsDat here, because CMManager will + // set it back to true if no valid IP address is yet defined. The flag + // is verified in tcChangeIpAddress(). +} + +/** + * Tests changing of IP address. + */ +void TestCpWlanApPlugin::tcChangeIpAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4Address->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPAddress, + mTestViewAdvanced->mIpv4Address, + result); + subVerifyBool( + CMManagerShim::CmIPAddrFromServer, + false); +} + +/** + * Test data for IP address change test case. + */ +void TestCpWlanApPlugin::tcChangeIpAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("too long") + << "255.255.255.2551234" + << "255.255.255.255"; + QTest::newRow("normal") + << "192.168.0.1" + << "192.168.0.1"; +} + +/** + * Tests changing of subnet mask. + */ +void TestCpWlanApPlugin::tcChangeSubnetMask() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mIpv4SubnetMaskWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4SubnetMask->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4SubnetMaskWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPNetmask, + mTestViewAdvanced->mIpv4SubnetMask, + result); +} + +/** + * Test data for subnet mask change test case. + */ +void TestCpWlanApPlugin::tcChangeSubnetMask_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("empty") + << "" + << "0.0.0.0"; + QTest::newRow("zero") + << "0.0.0.0" + << "0.0.0.0"; + QTest::newRow("too long") + << "255.255.255.2551234" + << "255.255.255.255"; + QTest::newRow("normal") + << "192.168.0.1" + << "192.168.0.1"; +} + +/** + * Tests invalid subnet mask. + */ +void TestCpWlanApPlugin::tcInvalidSubnetMask() +{ + QString previous = + mTestViewAdvanced->mIpv4SubnetMask->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mIpv4SubnetMaskWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4SubnetMask->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "999.999.999.999", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4SubnetMaskWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPNetmask, + mTestViewAdvanced->mIpv4SubnetMask, + previous); +} + +/** + * Tests changing of gateway. + */ +void TestCpWlanApPlugin::tcChangeGateway() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mIpv4GatewayWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4Gateway->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4GatewayWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPGateway, + mTestViewAdvanced->mIpv4Gateway, + result); +} + +/** + * Test data for gateway change test case. + */ +void TestCpWlanApPlugin::tcChangeGateway_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("empty") + << "" + << "0.0.0.0"; + QTest::newRow("zero") + << "0.0.0.0" + << "0.0.0.0"; + QTest::newRow("too long") + << "255.255.255.2551234" + << "255.255.255.255"; + QTest::newRow("normal") + << "192.168.0.1" + << "192.168.0.1"; +} + +/** + * Tests invalid gateway address. + */ +void TestCpWlanApPlugin::tcInvalidGateway() +{ + QString previous = + mTestViewAdvanced->mIpv4Gateway->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mIpv4GatewayWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4Gateway->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "999.999.999.999", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4GatewayWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPGateway, + mTestViewAdvanced->mIpv4Gateway, + previous); +} + +/** + * Scrolls the tested view to the bottom. + */ +void TestCpWlanApPlugin::tcScrollToBottom2() +{ + subScrollToBottom(); +} + +/** + * Tests enabling of automatic IPv4 DNS addresses. + */ +void TestCpWlanApPlugin::tcEnableAutomaticIpv4DnsAddress() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4DnsAutomatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IPv4 DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4DnsAddressAutomaticWidget); + } + // Enable automatic IPv4 DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4DnsAddressAutomaticWidget); + subVerifyBool( + CMManagerShim::CmIPDNSAddrFromServer, + true); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv4SecondaryDnsAddressWidget); +} + +/** + * Tests disabling of automatic IPv4 DNS addresses. + */ +void TestCpWlanApPlugin::tcEnableUserDefinedIpv4DnsAddress() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4DnsAutomatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IPv4 DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4DnsAddressAutomaticWidget); + } + // Can't verify the setting from CommsDat here, because CMManager will + // set it back to true if no valid IP address is yet defined. The flag + // is verified in tcChangeIpv4DnsAddress(). +} + +/** + * Tests changing of IPv4 DNS addresses. + */ +void TestCpWlanApPlugin::tcChangeIpv4DnsAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + // Primary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPNameServer1, + mTestViewAdvanced->mIpv4DnsAddress1, + result); + + // Secondary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4SecondaryDnsAddressWidget); + + // Erase old string + text = mTestViewAdvanced->mIpv4DnsAddress2->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4SecondaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPNameServer2, + mTestViewAdvanced->mIpv4DnsAddress2, + result); + + // Verify user defined address is in use + subVerifyBool( + CMManagerShim::CmIPDNSAddrFromServer, + false); +} + +/** + * Test data for IPv4 DNS address change test case. + */ +void TestCpWlanApPlugin::tcChangeIpv4DnsAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("too long") + << "255.255.255.2551234" + << "255.255.255.255"; + QTest::newRow("normal") + << "192.168.0.1" + << "192.168.0.1"; +} + +/** + * Tests invalid IPv4 DNS address. + */ +void TestCpWlanApPlugin::tcInvalidIpv4DnsAddress() +{ + QString previous = + mTestViewAdvanced->mIpv4DnsAddress1->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "999.999.999.999", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIPNameServer1, + mTestViewAdvanced->mIpv4DnsAddress1, + previous); +} + +/** + * Scrolls the tested view to the top. + */ +void TestCpWlanApPlugin::tcScrollToTop() +{ + subScrollToTop(); +} + +/** + * Collapses the IPv4 settings group. + */ +void TestCpWlanApPlugin::tcCollapseIpv4Settings() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, ipv4Group); +} + +/** + * Expands the IPv6 settings group and gets UI widget pointers. + */ +void TestCpWlanApPlugin::tcExpandIpv6SettingsAndGetUiWidgets() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, ipv6Group); + + QTest::qWait(500); + + subGetAdvancedUiWidgets(1); +} + +/** + * Tests enabling of automatic IPv6 DNS addresses. + */ +void TestCpWlanApPlugin::tcEnableAutomaticIpv6DnsAddress() +{ + // Enable automatic IPv6 DNS address + QPointF automaticPointOffset = comboBoxItemOffset; + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget, automaticPointOffset, 100); + QTest::qWait(100); + subVerifyBool( + CMManagerShim::CmIP6DNSAddrFromServer, + true); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget); +} + +/** + * Tests enabling of well-known IPv6 DNS addresses. + */ +void TestCpWlanApPlugin::tcEnableWellKnownIpv6DnsAddress() +{ + // Enable well-known IPv6 DNS address + QPointF wellKnownPointOffset = comboBoxItemOffset * 2; + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget, wellKnownPointOffset, 100); + QTest::qWait(100); + subVerifyBool( + CMManagerShim::CmIP6DNSAddrFromServer, + false); + subVerifyString( + CMManagerShim::CmIP6NameServer1, + mTestViewAdvanced->mIpv6DnsAddress1, + "fec0:000:0000:ffff::1"); + subVerifyString( + CMManagerShim::CmIP6NameServer2, + mTestViewAdvanced->mIpv6DnsAddress2, + "fec0:000:0000:ffff::2"); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget); +} + +/** + * Tests enabling of user defined IPv6 DNS addresses. + */ +void TestCpWlanApPlugin::tcEnableUserDefinedIpv6DnsAddress() +{ + // Select user defined IPv6 DNS address + QPointF userDefinedPointOffset = comboBoxItemOffset * 3; + //QPointF userDefinedPointOffset(0, 160); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget, userDefinedPointOffset, 100); + QTest::qWait(100); + // Can't verify the setting from CommsDat here, because CMManager will + // set it back to true if no valid IP address is yet defined. The flag + // is verified in tcChangeIpv4DnsAddress(). +} + +/** + * Tests changing of IPv6 DNS addresses. + */ +void TestCpWlanApPlugin::tcChangeIpv6DnsAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + // Primary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv6DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIP6NameServer1, + mTestViewAdvanced->mIpv6DnsAddress1, + result); + + // Secondary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget); + + // Erase old string + text = mTestViewAdvanced->mIpv6DnsAddress2->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIP6NameServer2, + mTestViewAdvanced->mIpv6DnsAddress2, + result); + + // Verify user defined address is in use + subVerifyBool( + CMManagerShim::CmIP6DNSAddrFromServer, + false); +} + +/** + * Test data for IPv6 DNS address change test case. + */ +void TestCpWlanApPlugin::tcChangeIpv6DnsAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("normal") + << "2001:db8:85a3::8a2e:370:7334" + << "2001:db8:85a3:0:0:8a2e:370:7334"; +} + +/** + * Tests invalid IPv6 DNS address. + */ +void TestCpWlanApPlugin::tcInvalidIpv6DnsAddress() +{ + QString previous = + mTestViewAdvanced->mIpv6DnsAddress1->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv6DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "abcdef:fedcba", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmIP6NameServer1, + mTestViewAdvanced->mIpv6DnsAddress1, + previous); +} + +/** + * Collapses the IPv6 settings group. + */ +void TestCpWlanApPlugin::tcCollapseIpv6Settings() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, ipv6Group); +} + +/** + * Expands the proxy settings group and gets UI widget pointers. + */ +void TestCpWlanApPlugin::tcExpandProxySettingsAndGetUiWidgets() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, proxyGroup); + + QTest::qWait(500); + + subGetAdvancedUiWidgets(2); +} + +/** + * Tests changing of proxy server address. + */ +void TestCpWlanApPlugin::tcChangeProxyServerAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mProxyServerAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mProxyServer->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mProxyServerAddressWidget, exitEditorOffset); + + QTest::qWait(100); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmProxyServerName, + mTestViewAdvanced->mProxyServer, + result); + // Verify user defined address flag is set correctly + if (result.isEmpty()) { + subVerifyBool( + CMManagerShim::CmProxyUsageEnabled, + false); + } else { + subVerifyBool( + CMManagerShim::CmProxyUsageEnabled, + true); + } +} + +/** + * Test data for proxy server address change test case. + */ +void TestCpWlanApPlugin::tcChangeProxyServerAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("long") + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html" + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html"; + QTest::newRow("empty") + << "" + << ""; + QTest::newRow("basic") // last one should always fit on one line in UI + << "http://www.symbian.org/" + << "http://www.symbian.org/"; +} + +/** + * Tests changing of proxy port number. + */ +void TestCpWlanApPlugin::tcChangeProxyPortNumber() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget); + + // Erase old string + QString text = mTestViewAdvanced->mProxyPort->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget, exitEditorOffset); + + QTest::qWait(100); + + // Verify both commsdat and UI widget + subVerifyUint( + CMManagerShim::CmProxyPortNumber, + result.toInt()); + QCOMPARE( + mTestViewAdvanced->mProxyPort->contentWidgetData("text").toInt(), + result.toInt()); +} + +/** + * Test data for proxy port number change test case. + */ +void TestCpWlanApPlugin::tcChangeProxyPortNumber_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("basic") + << "8080" + << "8080"; + QTest::newRow("too long") + << "1234567890" + << "12345"; + QTest::newRow("zero") + << "0" + << ""; + QTest::newRow("empty") + << "" + << ""; +} + +/** + * Tests invalid proxy port number. + */ +void TestCpWlanApPlugin::tcInvalidProxyPortNumber() +{ + int previous = + mTestViewAdvanced->mProxyPort->contentWidgetData("text").toInt(); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget); + + // Erase old string + QString text = mTestViewAdvanced->mProxyPort->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "65536", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyUint( + CMManagerShim::CmProxyPortNumber, + previous); + QCOMPARE( + mTestViewAdvanced->mProxyPort->contentWidgetData("text").toInt(), + previous); +} + +/** + * Collapses the proxy settings group. + */ +void TestCpWlanApPlugin::tcCollapseProxySettings() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, proxyGroup); +} + +/** + * Returns from advanced settings view. + */ +void TestCpWlanApPlugin::tcCloseAdvancedSettingsView() +{ // Return from advanced settings view subClickWidget("HbNavigationButton"); } @@ -438,6 +1242,108 @@ // ----------------------------------------------------------------------------- /** + * Gets UI widget pointers. + */ +void TestCpWlanApPlugin::subGetUiWidgets() +{ + HbModelIterator iterator(mTestView->mModel); + + // Get "Access point settings" group item + QModelIndex apGroupIndex = iterator.index(0); + + // Get UI widgets + mConnectionNameWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(0, apGroupIndex)); + mWlanNetworkNameWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(1, apGroupIndex)); + mNetworkStatusWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(2, apGroupIndex)); + mNetworkModeWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(3, apGroupIndex)); + mSecurityModeWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(4, apGroupIndex)); + mHomepageWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(5, apGroupIndex)); +} + +/** + * Gets advanced settings view UI widget pointers by group index. + */ +void TestCpWlanApPlugin::subGetAdvancedUiWidgets( + uint index) +{ + // Get the group item + HbModelIterator iterator(mTestViewAdvanced->mModel); + QModelIndex groupIndex = iterator.index(index); + + // Get UI widgets + if (index == 0) { + // IPv4 settings group + mIpv4AddressAutomaticWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(0, groupIndex)); + mIpv4AddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(1, groupIndex)); + mIpv4SubnetMaskWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(2, groupIndex)); + mIpv4GatewayWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(3, groupIndex)); + mIpv4DnsAddressAutomaticWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(4, groupIndex)); + mIpv4PrimaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(5, groupIndex)); + mIpv4SecondaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(6, groupIndex)); + } else if (index == 1) { + // IPv6 settings group + mIpv6DnsAddressAutomaticWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(0, groupIndex)); + mIpv6PrimaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(1, groupIndex)); + mIpv6SecondaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(2, groupIndex)); + } else { + // Proxy settings group + mProxyServerAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(0, groupIndex)); + mProxyPortNumberWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(1, groupIndex)); + } +} + +/** + * Gets an UI widget from HbDataForm by index. + */ +HbWidget *TestCpWlanApPlugin::subGetWidgetByIndex( + HbDataForm *form, + const QModelIndex &index) +{ + HbDataFormViewItem *viewItem = qobject_cast + (form->itemByIndex(index)); + HbWidget *widget = viewItem->dataItemContentWidget(); + //QString widgetClassName(widget->metaObject()->className()); + //qDebug() << widgetClassName; + return widget; +} + +/** * Verifies that given string is correctly stored in CommsDat and shown on UI. */ void TestCpWlanApPlugin::subVerifyString( @@ -503,17 +1409,15 @@ void TestCpWlanApPlugin::subClearLineEdit( uint length) { - // Erase old string - QTest::qWait(5000); // TODO: Remove this when item specific menu doesn't pop up anymore - // Move cursor to end of string - //HbAutoTest::keyClick(mMainWindow, Qt::Key_End, 0, waitTime); // doesn't seem to do anything? + //HbAutoTest::keyClick(mMainWindow, Qt::Key_End, Qt::ControlModifier, waitTime); // doesn't seem to do anything? HbAutoTest::keyClick(mMainWindow, Qt::Key_Down, 0, waitTime); HbAutoTest::keyClick(mMainWindow, Qt::Key_Down, 0, waitTime); HbAutoTest::keyClick(mMainWindow, Qt::Key_Down, 0, waitTime); for (int i=0; i<25; i++) { HbAutoTest::keyClick(mMainWindow, Qt::Key_Right, 0, waitTime); } + // Erase string for (int i=0; i(target)); } + +/** + * Returns the middle point of a widget. + */ +QPointF TestCpWlanApPlugin::subMiddlePointOfWidget(const HbWidget *widget) +{ + QRectF widgetRect = widget->rect(); + QRectF widgetSceneRect = widget->mapRectToScene(widgetRect); + qreal middleX = ((widgetSceneRect.right() - widgetSceneRect.left()) / 2) + widgetSceneRect.left(); + qreal middleY = ((widgetSceneRect.bottom() - widgetSceneRect.top()) / 2) + widgetSceneRect.top(); + + return QPointF(middleX, middleY); +} + +/** + * Verifies that given attribute contains expected boolean value in CommsDat. + */ +void TestCpWlanApPlugin::subVerifyBool( + CMManagerShim::ConnectionMethodAttribute attribute, + bool expected) +{ + // Read attribute value from CommsDat + QScopedPointer cmManager(new CmManagerShim); + QScopedPointer connectionMethod( + cmManager->connectionMethod(testApId)); + bool commsdat = connectionMethod->getBoolAttribute(attribute); + + QCOMPARE(commsdat, expected); +} + +/** + * Scrolls the tested view to the bottom. + */ +void TestCpWlanApPlugin::subScrollToBottom() +{ + // Scroll to the bottom of the view + HbAutoTest::mousePress(mMainWindow, mTestView, scrollMiddle); + QTest::qWait(1000); + HbAutoTest::mouseMove(mMainWindow, mTestView, scrollTop); + HbAutoTest::mouseRelease(mMainWindow, mTestView, scrollTop); +} + +/** + * Scrolls the tested view to the top. + */ +void TestCpWlanApPlugin::subScrollToTop() +{ + // Scroll to the top of the view + HbAutoTest::mousePress(mMainWindow, mTestView, scrollMiddle); + QTest::qWait(1000); + HbAutoTest::mouseMove(mMainWindow, mTestView, scrollBottom); + HbAutoTest::mouseRelease(mMainWindow, mTestView, scrollBottom); +} diff -r 7ec726f93df1 -r 489cf6208544 cmmanager/cpwlanapplugin/tsrc/ut/testcpwlanapplugin.h --- a/cmmanager/cpwlanapplugin/tsrc/ut/testcpwlanapplugin.h Fri May 14 16:15:46 2010 +0300 +++ b/cmmanager/cpwlanapplugin/tsrc/ut/testcpwlanapplugin.h Thu May 27 13:17:01 2010 +0300 @@ -19,12 +19,16 @@ #include #include +class HbWidget; class HbDialog; class HbMainWindow; class HbAutoTestMainWindow; +class HbDataForm; class HbDataFormModelItem; +class HbDataFormViewItem; class HbAction; class CpWlanApView; +class CpWlanApAdvancedView; class CpBearerApPluginInterface; enum NetworkStatus { @@ -58,12 +62,54 @@ void tcChangeNetworkStatus(); void tcChangeNetworkMode(); void tcChangeSecurityMode(); + void tcScrollToBottom(); + void tcGetUiWidgets(); void tcChangeHomepage(); void tcChangeHomepage_data(); - void tcAdvancedSettings(); + void tcOpenAdvancedSettingsView(); + void tcExpandIpv4SettingsAndGetUiWidgets(); + void tcEnableAutomaticIpv4Address(); + void tcEnableUserDefinedIpv4Address(); + void tcChangeIpAddress(); + void tcChangeIpAddress_data(); + void tcChangeSubnetMask(); + void tcChangeSubnetMask_data(); + void tcInvalidSubnetMask(); + void tcChangeGateway(); + void tcChangeGateway_data(); + void tcInvalidGateway(); + void tcScrollToBottom2(); + void tcEnableAutomaticIpv4DnsAddress(); + void tcEnableUserDefinedIpv4DnsAddress(); + void tcChangeIpv4DnsAddress(); + void tcChangeIpv4DnsAddress_data(); + void tcInvalidIpv4DnsAddress(); + void tcScrollToTop(); + void tcCollapseIpv4Settings(); + void tcExpandIpv6SettingsAndGetUiWidgets(); + void tcEnableAutomaticIpv6DnsAddress(); + void tcEnableWellKnownIpv6DnsAddress(); + void tcEnableUserDefinedIpv6DnsAddress(); + void tcChangeIpv6DnsAddress(); + void tcChangeIpv6DnsAddress_data(); + void tcInvalidIpv6DnsAddress(); + void tcCollapseIpv6Settings(); + void tcExpandProxySettingsAndGetUiWidgets(); + void tcChangeProxyServerAddress(); + void tcChangeProxyServerAddress_data(); + void tcChangeProxyPortNumber(); + void tcChangeProxyPortNumber_data(); + void tcInvalidProxyPortNumber(); + void tcCollapseProxySettings(); + void tcCloseAdvancedSettingsView(); private: // Sub test cases + void subGetUiWidgets(); + void subGetAdvancedUiWidgets(uint index); + HbWidget *subGetWidgetByIndex( + HbDataForm *form, + const QModelIndex &index); void subVerifyString( CMManagerShim::ConnectionMethodAttribute attribute, HbDataFormModelItem *item, @@ -76,12 +122,43 @@ void subClearLineEdit(uint length); void subCreateSettingsView(uint connetionMethodId); void subClickWidget(const QString &name); + QPointF subMiddlePointOfWidget(const HbWidget *widget); + void subVerifyBool( + CMManagerShim::ConnectionMethodAttribute attribute, + bool expected); + void subScrollToBottom(); + void subScrollToTop(); private: // Code references CpWlanApView *mTestView; + CpWlanApAdvancedView *mTestViewAdvanced; + // "Access point settings" UI widgets + HbWidget *mConnectionNameWidget; + HbWidget *mWlanNetworkNameWidget; + HbWidget *mNetworkStatusWidget; + HbWidget *mNetworkModeWidget; + HbWidget *mSecurityModeWidget; + HbWidget *mHomepageWidget; + // "Advanced settings" UI widgets + HbDataFormViewItem *mIpv4GroupViewItem; + HbDataFormViewItem *mIpv6GroupViewItem; + HbDataFormViewItem *mProxyGroupViewItem; + HbWidget *mIpv4AddressAutomaticWidget; + HbWidget *mIpv4AddressWidget; + HbWidget *mIpv4SubnetMaskWidget; + HbWidget *mIpv4GatewayWidget; + HbWidget *mIpv4DnsAddressAutomaticWidget; + HbWidget *mIpv4PrimaryDnsAddressWidget; + HbWidget *mIpv4SecondaryDnsAddressWidget; + HbWidget *mIpv6DnsAddressAutomaticWidget; + HbWidget *mIpv6PrimaryDnsAddressWidget; + HbWidget *mIpv6SecondaryDnsAddressWidget; + HbWidget *mProxyServerAddressWidget; + HbWidget *mProxyPortNumberWidget; // Test data HbAutoTestMainWindow *mMainWindow; + QPluginLoader *mPluginLoader; CpBearerApPluginInterface *mPlugin; }; diff -r 7ec726f93df1 -r 489cf6208544 connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp --- a/connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp Fri May 14 16:15:46 2010 +0300 +++ b/connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp Thu May 27 13:17:01 2010 +0300 @@ -209,17 +209,14 @@ else if ( indicatorInfo[0].toInt() && (indicatorInfo.count() >= 2)) { // Only one connection -> show name of the iap - QString iapName; - iapName = indicatorInfo[1].toString(); - QString str = QString(hbTrId("txt_occ_dblist_cellular_data_val_1_connected")); - ret = str.arg(iapName); + ret = indicatorInfo[1].toString(); } } break; case DecorationNameRole: // Return the icon - ret = HbIcon("qtg_small_gprs"); + ret = QString("qtg_small_gprs"); break; default: diff -r 7ec726f93df1 -r 489cf6208544 connectionmonitoring/connectionview/connectionview.pro --- a/connectionmonitoring/connectionview/connectionview.pro Fri May 14 16:15:46 2010 +0300 +++ b/connectionmonitoring/connectionview/connectionview.pro Thu May 27 13:17:01 2010 +0300 @@ -16,7 +16,10 @@ # TEMPLATE = app TARGET = connview -CONFIG += hb no_icon + +CONFIG += hb no_icon mobility +MOBILITY+=bearer + DEPENDPATH += . inc src INCLUDEPATH += . @@ -34,8 +37,6 @@ SYMBIAN_PLATFORMS = WINSCW ARMV5 -LIBS += -lqtbearer - symbian { TARGET.CAPABILITY = NetworkServices NetworkControl TARGET.UID3 = 0x2002C36A diff -r 7ec726f93df1 -r 489cf6208544 connectionmonitoring/connectionview/inc/connectionview.h --- a/connectionmonitoring/connectionview/inc/connectionview.h Fri May 14 16:15:46 2010 +0300 +++ b/connectionmonitoring/connectionview/inc/connectionview.h Thu May 27 13:17:01 2010 +0300 @@ -135,9 +135,6 @@ /* The toolbar on the view */ HbToolBar *mToolBar; - /* The toolbar action which can be used to disconnect all the connections */ - HbAction *mDisconnectAction; - /* The id of the timer used to close the application */ int mClosingTimer; diff -r 7ec726f93df1 -r 489cf6208544 connectionmonitoring/connectionview/src/connectionview.cpp --- a/connectionmonitoring/connectionview/src/connectionview.cpp Fri May 14 16:15:46 2010 +0300 +++ b/connectionmonitoring/connectionview/src/connectionview.cpp Thu May 27 13:17:01 2010 +0300 @@ -143,10 +143,12 @@ // Create the toolbar and the disconnection action mToolBar = new HbToolBar(); HbIcon icon("qtg_mono_disconnect"); - mDisconnectAction = mToolBar->addAction(icon, hbTrId("txt_occ_button_disconnect_all")); + HbAction *disconnectAction = new HbAction(mToolBar); + disconnectAction->setIcon(icon); + mToolBar->addAction(disconnectAction); mMainView->setToolBar(mToolBar); bool connectStatus = connect( - mDisconnectAction, + disconnectAction, SIGNAL(triggered(bool)), this, SLOT(disconnectAll())); diff -r 7ec726f93df1 -r 489cf6208544 connectionmonitoring/indicatorobserver/indicatorobserver.pro --- a/connectionmonitoring/indicatorobserver/indicatorobserver.pro Fri May 14 16:15:46 2010 +0300 +++ b/connectionmonitoring/indicatorobserver/indicatorobserver.pro Thu May 27 13:17:01 2010 +0300 @@ -16,14 +16,14 @@ TEMPLATE = app TARGET = indicatorobserver -CONFIG += hb \ - no_icon +CONFIG += hb no_icon mobility +MOBILITY += bearer INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \ ./inc \ ./traces -LIBS += -lqtbearer -lxqsettingsmanager +LIBS += -lxqsettingsmanager QT += core \ network diff -r 7ec726f93df1 -r 489cf6208544 connectionmonitoring/indicatorobserver/src/indicatorobserver.cpp --- a/connectionmonitoring/indicatorobserver/src/indicatorobserver.cpp Fri May 14 16:15:46 2010 +0300 +++ b/connectionmonitoring/indicatorobserver/src/indicatorobserver.cpp Thu May 27 13:17:01 2010 +0300 @@ -80,11 +80,8 @@ KWlanOnOff); //Read current status of WLAN radio - //mWlanEnabled = mSettingsManager->readItemValue(wlanKey).toInt() ? true : false; - mWlanEnabled = true; - //TODO: Replace above code with commented code when WlanOnOff implementation is in release. - //TODO: Remeber to add check for read failure(call error() method from settings manager). - + mWlanEnabled = mSettingsManager->readItemValue(wlanKey).toInt() ? true : false; + mSettingsManager->startMonitoring(wlanKey); initializeIndicators(); @@ -147,10 +144,7 @@ Q_UNUSED(key); // Inform about WLAN ON/OFF status change - Q_UNUSED(value); //TODO: to be removed with final implementation. To keep compiler satisfied. - // mWlanEnabled = value.toInt() ? true : false; - - mWlanEnabled = true; //TODO: Replace with above code when WlanOnOff implementation is in release + mWlanEnabled = value.toInt() ? true : false; if (mWlanEnabled == false) { deactivateWlanIndicatorPlugin(); diff -r 7ec726f93df1 -r 489cf6208544 connectionutilities/ConnectionDialogs/ConnectionUiUtilities/src/connectionstatuspopup.cpp --- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/src/connectionstatuspopup.cpp Fri May 14 16:15:46 2010 +0300 +++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/src/connectionstatuspopup.cpp Thu May 27 13:17:01 2010 +0300 @@ -48,9 +48,9 @@ const TInt KErrGenConnNoGPRSNetwork = -3609; // Icons representing bearer -_LIT( KIconCellular, "pri_small_wlan.svg" ); -_LIT( KIconWlan, "pri_small_gprs.svg" ); -_LIT( KIconVpn, "pri_small_vpn.svg" ); +_LIT( KIconCellular, "qtg_small_wlan.svg" ); +_LIT( KIconWlan, "qtg_small_gprs.svg" ); +_LIT( KIconVpn, "qtg_small_vpn.svg" ); _LIT( KIconNone, "" ); // Empty text diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Inc/cdcprocessordn.h --- a/dbcreator/commsdatcreator/Inc/cdcprocessordn.h Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Inc/cdcprocessordn.h Thu May 27 13:17:01 2010 +0300 @@ -114,14 +114,7 @@ * Writes the actual created access point to the log file. */ void DoLogL(); - - private: - /** - * Tells whether the current destination has the internet metadata set. - * @return ETrue if the destination is Internet, EFalse otherwise. - */ -// TBool IsInternet(); - + private: // @var The destiantion that is created @@ -147,4 +140,4 @@ #endif PROCESSOR_DN_H -// End of File. \ No newline at end of file +// End of File. diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Inc/cdcprocessorglobal.h --- a/dbcreator/commsdatcreator/Inc/cdcprocessorglobal.h Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Inc/cdcprocessorglobal.h Thu May 27 13:17:01 2010 +0300 @@ -65,9 +65,6 @@ RPointerArray< HBufC >& aDestNames, RPointerArray< HBufC >& aDefCon ); - // Stores the default connection values - // void SetDefaultConnectionL(); - /** * Destructor. */ diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Inc/cdcprocessorvpn.h --- a/dbcreator/commsdatcreator/Inc/cdcprocessorvpn.h Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Inc/cdcprocessorvpn.h Thu May 27 13:17:01 2010 +0300 @@ -84,12 +84,8 @@ RPointerArray< HBufC >& aUnderLying ); /** - * From CProcessorBase. Processes the actual tag. - * @param aFieldIDPresent shows if field id is read from input file - * @return the result of the process, KErrNone if the actual tag is - * valid. + * From CProcessorBase. */ - ////virtual void ProcessTagL( TBool aFieldIDPresent ); virtual void ProcessSpecialFieldsL( TInt aField, HBufC* aTagPtr, TInt aDx ); private: @@ -105,4 +101,4 @@ #endif PROCESSOR_VPN_H -// End of File. \ No newline at end of file +// End of File. diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Inc/cdcprocessorwlan.h --- a/dbcreator/commsdatcreator/Inc/cdcprocessorwlan.h Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Inc/cdcprocessorwlan.h Thu May 27 13:17:01 2010 +0300 @@ -264,25 +264,6 @@ */ void SetExpandedEapListL( CMDBGenericRecord* aGeneric ); - /* - * Creates expanded Eap list from the common Eap list - * @param aEapList the common Eap list from which the expanded list - * will be created - * @param aEnabledNeed indicates the type of the result expanded - * Eap list. If it is ETrue then the enabled expanded - * Eap list will be created. Else the disbled one. - * @return The created expanded Eap list. It can be empty. - */ - HBufC8* ExpandedEapListLC( HBufC16* aEapList, TBool aEnabledNeed ); - - /* - * Adds one item to the expanded Eap list - * @param aExpandedEapList to which the new item will be added. - * @param aSlice the common Eap list slice containing one - * 3 digit long number with sign. - */ - void AddToList( HBufC8* aExpandedEapList, TPtrC16 aSlice ); - private: void AddSecurityDataL( TInt aField, HBufC* aPtrTag, TBool aIsWep ); @@ -298,13 +279,6 @@ TUint FindCertificateEntryL( const CertificateEntry::TCertType aCertType, const TInt aEapIndex ); void ConvertSubjectKeyIdToBinaryL( const HBufC16* const aSubjectKeyIdString, TDes& aBinaryKey); - /* - // @var Stores indexes of WEP fields - TInt iWEPIndex[KWEPKeyNumOfFields]; - - // @var Stores indexes of WPA fields - TInt iWPAIndex[KWPAKeyNumOfFields]; - */ // @var Indicates the WLAN security mode TDbCreatorSecurityMode iSecurityMode; @@ -322,15 +296,9 @@ // @var HBufC for empty WEP and WPA tags HBufC* iEmptyTag; - - // @var Stores indexes of WEP fields - ////RPointerArray< HBufC > iWepData; HBufC* iWepData[KWEPKeyNumOfFields]; - // @var Stores indexes of WPA fields - ////RPointerArray< HBufC > iWpaData; - HBufC* iWpaData[KWPAKeyNumOfFields]; TInt iDataStart; @@ -343,4 +311,4 @@ #endif PROCESSOR_WLAN_H -// End of File. \ No newline at end of file +// End of File. diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Src/cdccommsdatcreator.cpp --- a/dbcreator/commsdatcreator/Src/cdccommsdatcreator.cpp Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Src/cdccommsdatcreator.cpp Thu May 27 13:17:01 2010 +0300 @@ -150,8 +150,6 @@ CLOG_WRITE( "Processing started...\n" ) CLOG_WRITE( "=====================\n" ) - iCmManager.OpenL(); - TDbCreatorInputCharSet charSet( ECharSetUnknown );//input character set //Creates access points @@ -325,7 +323,7 @@ // Updates the IAPs that are not in destinations. - UpdateUncatCmsL( iCmInDest /*, iPluginNames, iPluginArray*/ ); + UpdateUncatCmsL( iCmInDest ); // Sets the underlying IAP/SNAPS for vpn IAPs SetUnderlyingIapL( iUnderLying ); @@ -349,9 +347,6 @@ // Sets linger settings SetLingerSettingsL( iLingerSettings ); - // Sets the default connection -// SetDefaultConnectionL( iDefCon ); - // Logs IAPs in UDEB mode #ifdef _DEBUG LogIapIdsL(); @@ -435,7 +430,9 @@ FeatureManager::InitializeLibL(); iIsWlanS = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan ); FeatureManager::UnInitializeLib(); - CLOG_WRITE( "FeatureManager closed\n" ) + CLOG_WRITE( "FeatureManager closed\n" ) + + iCmManager.OpenL(); } //------------------------------------------------ @@ -583,34 +580,6 @@ } } -// --------------------------------------------------------- -// CCdcCommsDatCreator::ProcessDNL -// --------------------------------------------------------- -// -/*void CCdcCommsDatCreator::SetDefaultConnectionL( RPointerArray< HBufC >& aDefCon ) - { - // Sets the default connection - if( aDefCon.Count() > 0 ) - { - CLOG_WRITE_FORMAT( "SetDefaultConnectionL: %d\n", aDefCon.Count() ) - CLOG_WRITE( "--------------------------------------\n" ) - - CProcessorGlobal* glb = CProcessorGlobal::NewL( iReader, - iCmManager, - iPluginArray, - iPluginNames, - iDestArray, - iDestNames, - aDefCon ); - - CleanupStack::PushL( glb ); - glb->SetDefaultConnectionL(); - - CleanupStack::PopAndDestroy( glb ); - - CLOG_WRITE( "--------------------------------------\n" ) - } - }*/ // --------------------------------------------------------- // CCdcCommsDatCreator::SetUnderlyingIapL diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Src/cdcprocessordn.cpp --- a/dbcreator/commsdatcreator/Src/cdcprocessordn.cpp Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Src/cdcprocessordn.cpp Thu May 27 13:17:01 2010 +0300 @@ -187,18 +187,6 @@ } } break; - // SetIconL API removed from new cmmgr implementation - //case EDN_Icon: - // { - // TPtrC16 iconPtr = ptrTag->Right( ptrTag->Length() ); - // TLex16 lex( iconPtr ); - // TUint32 icon( 0 ); - // if ( lex.Val( icon, EDecimal ) == KErrNone ) - // { - // iDestination.SetIconL( icon ); - // } - // } - //break; case EDN_Metadata: { if( !ptrTag->Compare( KPurposeUnknown ) ) diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Src/cdcprocessorwlan.cpp --- a/dbcreator/commsdatcreator/Src/cdcprocessorwlan.cpp Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Src/cdcprocessorwlan.cpp Thu May 27 13:17:01 2010 +0300 @@ -379,7 +379,7 @@ //WPA case EWPAPresharedKey: case EWPAKeyLength: - case EWPAListOfEAPs: + case EWPAEapMethod: case EWPAUseOfPresharedKey: { if( iSecurityMode != ESecurityModeWEP && iSecurityMode != ESecurityModeOpen ) @@ -638,6 +638,7 @@ eapType->SetConfigurationL( *eap->iEapSettings ); CLOG_WRITE( "eapType->SetConfiguration success!" ); CleanupStack::PopAndDestroy( eapType ); + REComSession::FinalClose(); } } @@ -1248,15 +1249,9 @@ secModeField->SetL( iSecurityMode ); CLOG_WRITE( "Wrote securityMode" ); + // Save EAP list - CMDBField* wlanEapsField = static_cast*> - ( generic->GetFieldByIdL( KCDTIdWlanEaps ) ); - wlanEapsField->SetL( WPAFieldData( EWPAListOfEAPs )->Des() ); - - CLOG_WRITE( "Wrote EAPList" ); - SetExpandedEapListL( generic ); - CLOG_WRITE( "Wrote expandedEapList" ); // Save PreShared Key @@ -1298,118 +1293,40 @@ // void CProcessorWlan::SetExpandedEapListL( CMDBGenericRecord* generic ) { + CLOG_WRITE( "CProcessorWlan::SetExpandedEapListL" ) // Gets the text format eap list - HBufC16* eapList = WPAFieldData( EWPAListOfEAPs ); + HBufC16* eapList = WPAFieldData( EWPAEapMethod ); if ( eapList != NULL && 0 < eapList->Length() ) { - - // Creates the expanded eap lists - HBufC8* enabledEapList = ExpandedEapListLC( eapList, ETrue ); - HBufC8* disabledEapList = ExpandedEapListLC( eapList, EFalse ); - - // Save enabled EAP list + + // Read EAP method and save it as enabled eap list. + // Fills expandedForm with 8 bytes: 0xFE, 6 zeros and EAP ID. + // That's the format expected by EAPOL. + TBuf8<8> expandedForm; + expandedForm.AppendFill( 0xFE, 1 ); + expandedForm.AppendFill( 0x00, 6 ); + + TUint8 resultByte; + TLex16 lex( eapList->Ptr() ); + User::LeaveIfError( lex.Val( resultByte, EDecimal ) ); + expandedForm.AppendFill( resultByte, 1 ); + CLOG_WRITE_FORMAT( "CProcessorWlan::SetExpandedEapListL: EAP %d", + (int)resultByte) + CMDBField* wlanEnabledEapsField = static_cast*> ( generic->GetFieldByIdL( KCDTIdWlanEnabledEaps ) ); - wlanEnabledEapsField->SetL( enabledEapList->Des() ); + wlanEnabledEapsField->SetL( expandedForm ); - // Save disabled EAP list + // Save empty disabled EAP list + HBufC8* disabledEapList = HBufC8::NewLC(0); CMDBField* wlanDisabledEapsField = static_cast*> ( generic->GetFieldByIdL( KCDTIdWlanDisabledEaps ) ); wlanDisabledEapsField->SetL( disabledEapList->Des() ); - CleanupStack::PopAndDestroy( disabledEapList ); - CleanupStack::PopAndDestroy( enabledEapList ); - } } -// --------------------------------------------------------- -// CProcessorWlan::ExpandedEapListLC -// --------------------------------------------------------- -// -HBufC8* CProcessorWlan::ExpandedEapListLC( HBufC16* aEapList, TBool aEnabledNeed ) - { - // The eap list has a well defined form - // so this parser supposes this concrete form like this: - // "+018,-023,+026,-021,-006" - - // Lenght of a 3 digit long signed number - const TInt sliceLength = 4; - - // Max lenght of the resulted list. - // Adding one "," then divide the lenght of a slice+1 - TInt maxLenght = ( ( aEapList->Length()+1 ) / 5 ) * 8; - - HBufC8* expandedEapList = HBufC8::NewLC( maxLenght ); - - TInt pos = 0; - while ( pos + sliceLength <= aEapList->Length() ) - { - // Getting a slice - TPtrC16 slice = aEapList->Mid( pos, sliceLength ); - - // Checks the sign - if( slice[0] == '+' ) - { - if( aEnabledNeed ) - { - AddToList( expandedEapList, slice ); - } - } - else if( slice[0] == '-' ) - { - if( !aEnabledNeed ) - { - AddToList( expandedEapList, slice ); - } - } - else - { - CLOG_WRITE_FORMAT( "! Error : Wrong Eap list format %S", aEapList ); - } - - // Step over one slice and "," e.g. "+023," - pos+=5; - - } - if( pos != aEapList->Length() + 1) - { - CLOG_WRITE_FORMAT( "! Warning : possible wrong Eap list format %S", aEapList ); - } - - return expandedEapList; - } - -// --------------------------------------------------------- -// CProcessorWlan::AddToList -// --------------------------------------------------------- -// -void CProcessorWlan::AddToList( HBufC8* aExpandedEapList, TPtrC16 aSlice ) - { - // Fills the 8 byte form with "0xFE000000000000" - TBuf8<8> expandedForm; - expandedForm.AppendFill( 0xFE, 1 ); - expandedForm.AppendFill( 0x00, 6 ); - - // Leave the "sign" - TPtrC16 number = aSlice.Mid( 1 ); - TUint8 resultByte; - TLex16 lex( number ); - - if( KErrNone == lex.Val( resultByte, EDecimal ) ) - { - expandedForm.AppendFill( resultByte, 1 ); - } - else - { - expandedForm.AppendFill( 0x00, 1 ); - CLOG_WRITE( "! Error : Unlexed Eap number. 0 is addded" ); - } - - aExpandedEapList->Des().Append( expandedForm ); - } - // --------------------------------------------------------- // CProcessorWlan::WPAIndex diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreator/Src/cdcreaderxml.cpp --- a/dbcreator/commsdatcreator/Src/cdcreaderxml.cpp Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreator/Src/cdcreaderxml.cpp Thu May 27 13:17:01 2010 +0300 @@ -169,7 +169,7 @@ //--------------- //WPAPresharedKey string WPA/WPA2 pre-shared key in plain text. //WPAKeyLength integer The length of the WPA/WPA2 pre-shared key. -//WPAListOfEAPs string A list of EAPs in use +//WPAEapMethod string A EAP method in use //WPAUseOfPresharedKey string WPA/WPA2 pre-shared key usage. //============= //VPN specific: @@ -323,7 +323,7 @@ //WPA security _LIT16( KWPAPresharedKey, "WPAPresharedKey" ); _LIT16( KWPAKeyLength, "WPAKeyLength" ); -_LIT16( KWPAListOfEAPs, "WPAListOfEAPs" ); +_LIT16( KWPAEapMethod, "WPAEapMethod"); _LIT16( KWPAUseOfPresharedKey, "WPAUseOfPresharedKey" ); //EAP security @@ -494,15 +494,6 @@ _LIT16( KWlanPowerMode, "WlanPowerMode" ); -//maximum number of PacketData AP parameters -const TInt KMaxPacketDataParam = 28; -const TInt KMaxLANParam = 26; -const TInt KMaxWLANParam = 125; -const TInt KMaxGlobalParam = 42; -const TInt KMaxVPNParam = 12; -const TInt KMaxDNParam = 19; - - // ================= MEMBER FUNCTIONS ======================= // --------------------------------------------------------- @@ -912,26 +903,32 @@ if ( iLine->FindF( KFeatureHeadPacketData ) != KErrNotFound ) { + CLOG_WRITE( "CReaderXML::DetectFeatureHead(): EFeaturePacketData" ); feature = EFeaturePacketData; } else if ( iLine->FindF( KFeatureHeadWLAN ) != KErrNotFound ) { + CLOG_WRITE( "CReaderXML::DetectFeatureHead(): EFeatureWLAN" ); feature = EFeatureWLAN; } else if ( iLine->FindF( KFeatureHeadLAN ) != KErrNotFound ) { + CLOG_WRITE( "CReaderXML::DetectFeatureHead(): EFeatureLAN" ); feature = EFeatureLAN; } else if ( iLine->FindF( KFeatureHeadVPN ) != KErrNotFound ) { + CLOG_WRITE( "CReaderXML::DetectFeatureHead(): EFeatureVPN" ); feature = EFeatureVPN; } else if ( iLine->FindF( KFeatureHeadDN ) != KErrNotFound ) { + CLOG_WRITE( "CReaderXML::DetectFeatureHead(): EFeatureDN" ); feature = EFeatureDN; } else if ( iLine->FindF( KFeatureHeadGlobal ) != KErrNotFound ) { + CLOG_WRITE( "CReaderXML::DetectFeatureHead(): EFeatureGlobal" ); feature = EFeatureGlobal; iFoundGlobal = ETrue; } @@ -1020,7 +1017,6 @@ // TInt CReaderXML::DetectParam() { - TInt maxParam( 0 ); //maximum nunber of params in array TInt fieldId( KErrNotFound ); //field id of detected parameter RArray *params( NULL ); //pointer to the table used //for or detection @@ -1028,27 +1024,21 @@ switch ( CurrentFeature() ) { case EFeaturePacketData: - maxParam = KMaxPacketDataParam; params = &iPDParams; break; case EFeatureWLAN: - maxParam = KMaxWLANParam; params = &iWLanParams; break; case EFeatureLAN: - maxParam = KMaxLANParam; params = &iLanParams; break; case EFeatureVPN: - maxParam = KMaxVPNParam; params = &iVpnParams; break; case EFeatureDN: - maxParam = KMaxDNParam; params = &iDNParams; break; case EFeatureGlobal: - maxParam = KMaxGlobalParam; params = &iGlobalParams; break; default: @@ -1057,14 +1047,13 @@ //looks for parameter match HBufC16* paramName = ReadParam( EParamName ); - TBool found ( EFalse ); - if ( paramName == NULL ) { return fieldId; } - for ( TInt idx = 0; idx < maxParam && !found; idx++ ) + TBool found ( EFalse ); + for ( TInt idx = 0; idx < params->Count() && !found; idx++ ) { if ( paramName->CompareF( (*params)[idx].iParam ) == 0 ) { @@ -1127,6 +1116,18 @@ CLOG_WRITE_FORMAT( "! Warning: tag could not be allocated %S:", &tag ); } +// Debugging help; commented out for clearer log. +// else +// { +// if (aSegment == EParamValue) +// { +// CLOG_WRITE_FORMAT( "CReaderXML::ReadParam: value %S", &tag ); +// } +// else if (aSegment == EParamName) +// { +// CLOG_WRITE_FORMAT( "CReaderXML::ReadParam: name %S", &tag ); +// } +// } } return ret; } @@ -1642,7 +1643,7 @@ iWLanParams.Append( EInputParams( EWEPKey4Data, KWEPKey4Data ) ); iWLanParams.Append( EInputParams( EWPAPresharedKey, KWPAPresharedKey ) ); iWLanParams.Append( EInputParams( EWPAKeyLength, KWPAKeyLength ) ); - iWLanParams.Append( EInputParams( EWPAListOfEAPs, KWPAListOfEAPs ) ); + iWLanParams.Append( EInputParams( EWPAEapMethod, KWPAEapMethod ) ); iWLanParams.Append( EInputParams( EWPAUseOfPresharedKey, KWPAUseOfPresharedKey ) ); iWLanParams.Append( EInputParams( EEapGtcUsername, KEapGtcUsername ) ); iWLanParams.Append( EInputParams( EEapGtcSessionValidityTime, KEapGtcSessionValidityTime ) ); diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatcreatorrfsplugin/src/cdccommsdatcreatorrfsplugin.cpp --- a/dbcreator/commsdatcreatorrfsplugin/src/cdccommsdatcreatorrfsplugin.cpp Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatcreatorrfsplugin/src/cdccommsdatcreatorrfsplugin.cpp Thu May 27 13:17:01 2010 +0300 @@ -18,7 +18,6 @@ #include -#include "cdccommsdatcreatorcrkeys.h" #include "cdccommsdatcreatorrfsplugin.h" #include "cdclogger.h" diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatstartup/Inc/cdccommsdatstartup.h --- a/dbcreator/commsdatstartup/Inc/cdccommsdatstartup.h Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatstartup/Inc/cdccommsdatstartup.h Thu May 27 13:17:01 2010 +0300 @@ -67,17 +67,6 @@ */ void CheckCreatorUIdL(); - /* - * Reads the database descriptor input file name - * @param out: Name of the database descriptor file - */ - void GetInputFileNameL( TFileName &aFileName ); - - /* - * Creates repository - */ - void CreateRepositoryL(); - /** * Resets the commsdat repository. This causes the default Commsdat * from z to be copied to c @@ -89,15 +78,6 @@ */ void ResetEAPSettingsL(); - /* - * Sets the startup status - * @param startup status to be set. - */ - void SetStartupStatusL( TInt aStatus ); - - // Repository - CRepository *iRepository; - }; diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatstartup/Src/cdccommsdatstartup.cpp --- a/dbcreator/commsdatstartup/Src/cdccommsdatstartup.cpp Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/commsdatstartup/Src/cdccommsdatstartup.cpp Thu May 27 13:17:01 2010 +0300 @@ -27,7 +27,6 @@ #include #include -#include "cdccommsdatcreatorcrkeys.h" #include "cdccommsdatstartup.h" #include "cdccommsdatcreator.h" @@ -37,6 +36,7 @@ // CONSTANTS const TUid KCRUidCommsDb = { 0xcccccc00 }; +_LIT( KVariantXmlFile, "Z:\\private\\10281BC3\\VariantData_commsdat.xml" ); //------------------------------------------------ // CCdcCommsDatStartup::DoStartL @@ -50,11 +50,6 @@ CheckCreatorUIdL(); - CreateRepositoryL(); - - // Set status to not initialised - SetStartupStatusL( ECommsDatInitialisationFailed ); - CLOG_WRITE( "CCdcCommsDatStartup::ResetCommsDatToDefaultL()" ); // In all RFS cases CommsDat must be reset ResetCommsDatToDefaultL(); @@ -71,136 +66,40 @@ // In all RFS cases CommsDat tables must be checked/created cdc->CreateTablesL(); - TFileName fileName; - GetInputFileNameL( fileName ); - - // CommsDatCreator feature is supported if input file name - // lenght is not 0. However file name lenght at least 5. (x.xml) - if( fileName.Length() > 0 ) + // If variant XML file exists, read it and create settings + TFileName fileName( KVariantXmlFile ); + RFs fs; + User::LeaveIfError( fs.Connect() ); + RFile file; + if ( KErrNone == file.Open( fs, fileName, EFileRead ) ) { + file.Close(); CLOG_WRITE( "CCdcCommsDatStartup::CommsDat generation enabled" ); - - TFileName path( _L("Z:\\private\\10281BC3\\" ) ); - path.Append( fileName ); + + TRAPD(err, cdc->CreateCommsDatL( fileName ) ); + if ( err != KErrNone ) + { + // CommsDat creation leaved so something must be wrong. + // Reset CommsDat and EAP settings. + ResetCommsDatToDefaultL(); + ResetEAPSettingsL(); + cdc->CreateTablesL(); + User::Leave( err ); + } - CLOG_WRITE( "CCdcCommsDatStartup::CreateCommsDatL begin" ); - - TRAPD(err, cdc->CreateCommsDatL( path ) ); - if(err != KErrNone ) - { - // CommsDat creation leaved so something must be wrong. - // Reset CommsDat and EAP settings. - ResetCommsDatToDefaultL(); - ResetEAPSettingsL(); - cdc->CreateTablesL(); - User::Leave( err ); - } - - CLOG_WRITE( "CCdcCommsDatStartup::CreateCommsDatL end" ); + CLOG_WRITE( "CCdcCommsDatStartup::CommsDat generation done" ); } - else - { - CLOG_WRITE( "CCdcCommsDatStartup::CommsDat generation disabled" ); - } - - // If nothing has leaved then everything is okay (both in disabled and - // enabled cases. - SetStartupStatusL( ECommsDatInitialised ); + else + { + CLOG_WRITE( "CCdcCommsDatStartup::CommsDat generation disabled" ); + } + fs.Close(); CleanupStack::PopAndDestroy( cdc ); CLOG_WRITE( "CCdcCommsDatStartup::DoStartL end" ); } // ---------------------------------------------------------------------------- -// CCdcCommsDatStartup::CreateRepositoryL() -// ---------------------------------------------------------------------------- -// -void CCdcCommsDatStartup::CreateRepositoryL() - { - CLOG_WRITE( "CCdcCommsDatStartup::CreateRepositoryL()" ); - - TRAPD( err, iRepository = CRepository::NewL( KCRUidCommsDatCreator ) ); - - // Log is important now, because repository cannot contain the - // error value if it cannot be used - if( err != KErrNone ) - { - CLOG_WRITE_FORMAT( "Repository could not created err : %d", err ); - User::Leave( err ); - } - } - -// ---------------------------------------------------------------------------- -// CCdcCommsDatStartup::SetStartupStatusL() -// ---------------------------------------------------------------------------- -// -void CCdcCommsDatStartup::SetStartupStatusL( TInt aResult ) - { - CLOG_WRITE_FORMAT( "CCdcCommsDatStartup::SetStartupStatusL() %d", aResult ); - - TInt err = iRepository->Set( KCommsDatCreatorStartupStatus, aResult ); - if( err != KErrNone ) - { - CLOG_WRITE_FORMAT( - "Value could not write to repository err : %d", err ); - User::Leave( err ); - } - - CLOG_WRITE_FORMAT( "CCdcCommsDatStartup::SetStartupStatusL() %d", aResult ); - } - -// ---------------------------------------------------------------------------- -// CCdcCommsDatStartup::GetInputFileNameL() -// ---------------------------------------------------------------------------- -// -void CCdcCommsDatStartup::GetInputFileNameL( TFileName &aFileName ) - { - CLOG_WRITE( "CCdcCommsDatStartup::GetInputFileNameL()" ); - - TInt err = iRepository->Get( KCommsDatCreatorInputFileName, aFileName ); - if( err != KErrNone ) - { - CLOG_WRITE_FORMAT( - "Value could not red from repository err : %d", err ); - User::Leave( err ); - } - - CLOG_WRITE( "Input filename red" ); - - HBufC *fileName = aFileName.AllocLC(); - - CLOG_WRITE_FORMAT( "Input filename value : %S", fileName ); - - CleanupStack::PopAndDestroy( fileName ); - - // Check if file exists. If it doesn't reset filename. - RFs fs; - err = fs.Connect();//check - - if( err == KErrNone ) - { - RFile file; - - TFileName path( _L("Z:\\private\\10281BC3\\" ) ); - path.Append( aFileName ); - - err = file.Open(fs, path, EFileRead); - if( err != KErrNone ) - { - CLOG_WRITE( "CCdcCommsDatStartup::GetInputFileNameL() File does not exist"); - aFileName.Zero(); - } - else - { - file.Close(); - } - fs.Close(); - } - - CLOG_WRITE( "CCdcCommsDatStartup::GetInputFileNameL()" ); - } - -// ---------------------------------------------------------------------------- // CCdcCommsDatStartup::CheckCreatorUIdL() // ---------------------------------------------------------------------------- // @@ -211,7 +110,7 @@ CLOG_WRITE( "CCdcCommsDatStartup::CheckCreatorUIdL" ); - TUid creatorId = User::CreatorIdentity(); + TUid creatorId = User::CreatorSecureId(); CLOG_WRITE_FORMAT( "CreatorId : %x", creatorId ); @@ -229,10 +128,6 @@ // CCdcCommsDatStartup::~CCdcCommsDatStartup() { - if( iRepository ) - { - delete iRepository; - } } // ---------------------------------------------------------------------------- diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/commsdatstartup/cenrep/keys_commsdatcreator.xls Binary file dbcreator/commsdatstartup/cenrep/keys_commsdatcreator.xls has changed diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/conf/commsdatcreator.confml Binary file dbcreator/conf/commsdatcreator.confml has changed diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/conf/commsdatcreator.content --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbcreator/conf/commsdatcreator.content Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,9 @@ + + + Copy commsdat content + + + + + + diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/conf/commsdatcreator.ruleml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbcreator/conf/commsdatcreator.ruleml Thu May 27 13:17:01 2010 +0300 @@ -0,0 +1,14 @@ + + + + + + APs.AP or + VPN_APs.VPN_AP or + LAN_APs.LAN_AP or + WLAN_APs.WLAN_AP or + configures + CIA_KCRUidCommsDatCreator.CommsdatInputPath ='/epoc32/data/Z/private/10202be9' + + + diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/conf/commsdatcreator_10281BC8.crml Binary file dbcreator/conf/commsdatcreator_10281BC8.crml has changed diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/group/bld.inf --- a/dbcreator/group/bld.inf Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/group/bld.inf Thu May 27 13:17:01 2010 +0300 @@ -24,7 +24,8 @@ PRJ_EXPORTS ../conf/commsdatcreator.confml MW_LAYER_CONFML(commsdatcreator.confml) ../conf/commsdatcreator_01.gcfml MW_LAYER_GCFML(commsdatcreator_01.gcfml) -../conf/commsdatcreator_10281BC8.crml MW_LAYER_CRML(commsdatcreator_10281BC8.crml) +../conf/commsdatcreator.content MW_LAYER_CRML(commsdatcreator.content) +../conf/commsdatcreator.ruleml MW_LAYER_CRML(commsdatcreator.ruleml) ../rom/commsdatcreator.iby CORE_MW_LAYER_IBY_EXPORT_PATH(commsdatcreator.iby) diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/inc/cdccommon.h --- a/dbcreator/inc/cdccommon.h Fri May 14 16:15:46 2010 +0300 +++ b/dbcreator/inc/cdccommon.h Thu May 27 13:17:01 2010 +0300 @@ -162,7 +162,7 @@ { EWPAPresharedKey = 0x00002000, // Preshared key EWPAKeyLength = 0x00002001, // Key length - EWPAListOfEAPs = 0x00002002, // List of EA plugins + EWPAEapMethod = 0x00002002, // EAP Method EWPAUseOfPresharedKey =0x00002003,// Use of preshared key }; diff -r 7ec726f93df1 -r 489cf6208544 dbcreator/inc/cdccommsdatcreatorcrkeys.h --- a/dbcreator/inc/cdccommsdatcreatorcrkeys.h Fri May 14 16:15:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2007 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: Commsdatcreator related central repository keys -* -*/ - - - -#ifndef __CDC_COMMSDAT_CREATOR_CR_KEYS_H__ -#define __CDC_COMMSDAT_CREATOR_CR_KEYS_H__ - -/** CommsDatCreator API */ -/** Provides access CDCCommsDatCreator Startup Status CenRep key*/ - -const TUid KCRUidCommsDatCreator= {0x10281BC8}; - - -/** -* Defines the status of the CommsDat creation. -* -* Integer type -* -* Default value: 0 -*/ -const TUint32 KCommsDatCreatorStartupStatus = 0x00000001; - - -/** -* Defines the input file name for CommsDat creation. -* -* String type -* -* Default value: VariantData.xml -*/ -const TUint32 KCommsDatCreatorInputFileName = 0x00000002; - -/** -* Possible statuses of the CommsDat creation. -* -* enum type -* -* Default value: 0 -*/ - -enum TCommsDatCreatorStartupStatus - { - ECommsDatNotInitialised, - ECommsDatInitialised, - ECommsDatInitialisationFailed - }; - - - -#endif // __CDC_COMMSDAT_CREATOR_CR_KEYS_H__ \ No newline at end of file diff -r 7ec726f93df1 -r 489cf6208544 group/bld.inf --- a/group/bld.inf Fri May 14 16:15:46 2010 +0300 +++ b/group/bld.inf Thu May 27 13:17:01 2010 +0300 @@ -26,7 +26,6 @@ ../inc/meshpreface1.cfg /epoc32/release/winscw/udeb/z/system/data/meshpreface1.cfg PRJ_MMPFILES -#include "../accesspointcontrol/apcontrollistplugin/group/bld.inf" #include "../alwayson_net_plugin/group/bld.inf" #include "../apengine/group/bld.inf" #include "../bearermanagement/group/bld.inf" diff -r 7ec726f93df1 -r 489cf6208544 ipcm_plat/bearer_settings_plugin_api/inc/cmpluginbaseeng.h --- a/ipcm_plat/bearer_settings_plugin_api/inc/cmpluginbaseeng.h Fri May 14 16:15:46 2010 +0300 +++ b/ipcm_plat/bearer_settings_plugin_api/inc/cmpluginbaseeng.h Thu May 27 13:17:01 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006-2010 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" @@ -63,14 +63,14 @@ /** * Record indexes for generic iap records in the Client instance table. */ -const TInt KIapRecordIndex = 0; -const TInt KServiceRecordIndex = 1; -const TInt KNetworkRecordIndex = 2; -const TInt KWAPAPRecordIndex = 3; -const TInt KWAPBearerRecordIndex = 4; -const TInt KMetaDataRecordIndex = 5; -const TInt KLocationRecordIndex = 6; -const TInt KProxyRecordIndex = 7; +const TInt KIapRecordIndex = 0; // Mandatory record +const TInt KServiceRecordIndex = 1; // Mandatory record +const TInt KNetworkRecordIndex = 2; // Mandatory record +const TInt KWAPAPRecordIndex = 3; // Mandatory record +const TInt KWAPBearerRecordIndex = 4; // Mandatory record +const TInt KMetaDataRecordIndex = 5; // Mandatory record +const TInt KLocationRecordIndex = 6; // Optional record +const TInt KProxyRecordIndex = 7; // Mandatory record (flag in record tells if in use) // DATA TYPES @@ -80,8 +80,8 @@ ECmInt, ECmText, ECmText8 - }TCMFieldTypes; - + } TCMFieldTypes; + // Attributes that are related to bearer plugin creation enum TBearerCreationCommonAttributes { @@ -90,13 +90,13 @@ * bearer creation related * attributes */ - + ECmExtensionLevel, /**< - * Return the extension level of the given + * Return the extension level of the given * bearer type. 1 means the level 1st. * (TUint32 - default: none - read only) */ - + ECmBearerCreationCommonAttributesEnd = 9999 /**< * Marks the end of bearer * creation related attributes @@ -106,9 +106,9 @@ /** * Flags for Iap metadata to indicate: * EMetaHighlight: If it's set it indicates that a connection method is - * highlighted in Agent dialog. Only one connection + * highlighted in Agent dialog. Only one connection * method can have this flag set. - * EMetaHiddenAgent: If it's set it indicates that an connection method is + * EMetaHiddenAgent: If it's set it indicates that an connection method is * hidden connection method in Agent dialog. */ enum TCmMetaDataFields @@ -120,7 +120,7 @@ // FORWARD DECLARATIONS class CCmPluginBaseEng; class CCDIAPMetadataRecord; - + // CLASS DECLARATION /** * Initialisation instance for plugin creation. Used in plugin @@ -134,18 +134,18 @@ * @param aSessionRef Reference for open Session handle to CommsDat. */ IMPORT_C TCmPluginInitParam( CommsDat::CMDBSession& aSessionRef ); - + public: /** * Reference to CommsDat session handle. */ CommsDat::CMDBSession& iSessionRef; - + /** * Reserved for future. */ - TAny* iNotused1; - TAny* iNotused2; + TAny* iNotused1; + TAny* iNotused2; }; // CLASS DECLARATION @@ -167,7 +167,7 @@ * CCmClientPluginInstance object. */ IMPORT_C static CCmClientPluginInstance* NewLC(); - + /** * Destructor */ @@ -178,7 +178,7 @@ * Default constructor. */ CCmClientPluginInstance(); - + /** * Second phase constructor. */ @@ -187,7 +187,7 @@ public: /** * Pointer array for generic record pointers. Those are copies - * from CommsDat versions for the client usage. + * from CommsDat versions for the client usage. */ RPointerArray iGenRecordArray; @@ -197,15 +197,15 @@ * the different plugins. */ RPointerArray iBearerSpecRecordArray; - + /** Naming way of the CM. e.g. ENamingUnique */ - CMManager::TNamingMethod iNamingMethod; - + CMManager::TNamingMethod iNamingMethod; + /** Boolean to keep the information if location is enabled */ - TBool iLocationEnabled; - + TBool iLocationEnabled; + /** Iap Record id of this Connection Method */ - TUint32 iIapId; + TUint32 iIapId; }; /** @@ -219,11 +219,11 @@ class CCmPluginBaseEng : public CBase { public: - /** + /** * Destructor. */ IMPORT_C virtual ~CCmPluginBaseEng(); - + /** * Create a new instance of the given bearer type plugin. * Used from CMM server to avoid using slow ECom framework. @@ -231,28 +231,28 @@ * @return Returns CCmPluginBaseEng type pointer which represents pure * bearer instance for the CMM server. */ - virtual CCmPluginBaseEng* - CreateInstanceL( TCmPluginInitParam& aInitParam ) const = 0; + virtual CCmPluginBaseEng* CreateInstanceL( + TCmPluginInitParam& aInitParam ) const = 0; /** - * Following GetBearerInfoXXXL methods return the values of the + * Following GetBearerInfoXXXL methods return the values of the * requested attributes. These values are bearerspecific so they * don't vary between CMs with same bearer type. * @param aAttribute An attribute identifier. * @return Returns the value requested. If not found leaves with - * KErrNotFound error code. + * KErrNotFound error code. */ - IMPORT_C virtual TUint32 GetBearerInfoIntL( - TUint32 aAttribute ) const = 0; - - IMPORT_C virtual TBool GetBearerInfoBoolL( - TUint32 aAttribute ) const = 0; + IMPORT_C virtual TUint32 GetBearerInfoIntL( + TUint32 aAttribute ) const = 0; + + IMPORT_C virtual TBool GetBearerInfoBoolL( + TUint32 aAttribute ) const = 0; - IMPORT_C virtual HBufC* GetBearerInfoStringL( - TUint32 aAttribute ) const = 0; - - IMPORT_C virtual HBufC8* GetBearerInfoString8L( - TUint32 aAttribute ) const = 0; + IMPORT_C virtual HBufC* GetBearerInfoStringL( + TUint32 aAttribute ) const = 0; + + IMPORT_C virtual HBufC8* GetBearerInfoString8L( + TUint32 aAttribute ) const = 0; /** * Checks if the plug-in can handle the Connection Method identified @@ -261,14 +261,14 @@ * @return ETrue if plug-in can handle the IAP, otherwise EFalse. */ virtual TBool CanHandleIapIdL( TUint32 aIapId ) const = 0; - + /** * Checks if the plug-in can handle the given IAP record. * @param aIapRecord IAP record to be checked * @return ETrue if plug-in can handle the IAP, otherwise EFalse. */ - virtual TBool CanHandleIapIdL( - CommsDat::CCDIAPRecord* aIapRecord ) const = 0; + virtual TBool CanHandleIapIdL( + CommsDat::CCDIAPRecord* aIapRecord ) const = 0; public: // Client interface /** @@ -284,37 +284,37 @@ IMPORT_C void ReLoadL(); /** - * Creates a new Connection Method in memory. Call UpdateL() to store + * Creates a new Connection Method in memory. Call UpdateL() to store * it in CommsDat. No CommsDat transaction operation is needed for this. - * @param aCmId Predefined iapid to be used when saving to CommsDat. + * @param aCmId Predefined iapid to be used when saving to CommsDat. * 0 means that CommsDat gives the id. */ IMPORT_C void CreateNewL( TUint32 aCmId ); - + /** * Creates a copy of an existing Connection Method. * @param aClientPluginInstance The source data to create the copy from. * @return CCmPluginBaseEng type pointer to an object which represents * the new plugin to the CMM server. */ - IMPORT_C CCmPluginBaseEng* CreateCopyL( - CCmClientPluginInstance* aClientPluginInstance ); + IMPORT_C CCmPluginBaseEng* CreateCopyL( + CCmClientPluginInstance* aClientPluginInstance ); /** * Updates all records to commsdat. Data is copied from the client's copy * to the original data. - * This method does not open/rollback/commit transaction to CommsDat. + * This method does not open/rollback/commit transaction to CommsDat. * Caller must handle transactions. */ - IMPORT_C virtual void UpdateL( + IMPORT_C virtual void UpdateL( CCmClientPluginInstance* aClientPluginInstance ); /* - * Deletes all the records of this CM from the database. - * All the preventing conditions must be checked before calling this. - * This method does not open/rollback/commit transaction to CommsDat. + * Deletes all the records of this CM from the database. + * All the preventing conditions must be checked before calling this. + * This method does not open/rollback/commit transaction to CommsDat. * Caller must handle transactions. - */ + */ IMPORT_C virtual void DeleteL(); /** @@ -322,53 +322,61 @@ * @param aClientPluginInstance An object where to copy the data. */ IMPORT_C void GetPluginDataL( CCmClientPluginInstance* aClientPluginInstance ); - + /** - * Following GetXXXXAttributeL methods return the values of the + * Following GetXXXXAttributeL methods return the values of the * requested attributes. Attributes are returned from the client's * copy of the data. These values are CM specific. * @param aAttribute An attribute identifier. * @param aClientPluginInstance Client's copy of the data where * to get the return value. * @return Returns the value requested. If not found leaves with - * KErrNotFound error code. + * KErrNotFound error code. */ - IMPORT_C TUint32 GetIntAttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C TBool GetBoolAttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C HBufC* GetStringAttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C HBufC8* GetString8AttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); + IMPORT_C TUint32 GetIntAttributeL( + TUint32 aAttribute, + CCmClientPluginInstance* aClientPluginInstance ); + + IMPORT_C TBool GetBoolAttributeL( + TUint32 aAttribute, + CCmClientPluginInstance* aClientPluginInstance ); + + IMPORT_C HBufC* GetStringAttributeL( + TUint32 aAttribute, + CCmClientPluginInstance* aClientPluginInstance ); + + IMPORT_C HBufC8* GetString8AttributeL( + TUint32 aAttribute, + CCmClientPluginInstance* aClientPluginInstance ); /** - * Following SetXXXXAttributeL methods set the given values - * identified with attributes. Attributes are set to the + * Following SetXXXXAttributeL methods set the given values + * identified with attributes. Attributes are set to the * client's copy of the data. * @param aAttribute An attribute identifier. * @param aValue Value to set. * @param aClientPluginInstance Client's copy of the data where * to set the given value. */ - IMPORT_C void SetIntAttributeL( TUint32 aAttribute, TUint32 aValue, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C void SetBoolAttributeL( TUint32 aAttribute, TBool aValue, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C void SetStringAttributeL( TUint32 aAttribute, const TDesC16& aValue, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C void SetString8AttributeL( TUint32 aAttribute, const TDesC8& aValue, - CCmClientPluginInstance* aClientPluginInstance ); + IMPORT_C void SetIntAttributeL( + TUint32 aAttribute, + TUint32 aValue, + CCmClientPluginInstance* aClientPluginInstance ); + + IMPORT_C void SetBoolAttributeL( + TUint32 aAttribute, + TBool aValue, + CCmClientPluginInstance* aClientPluginInstance ); + + IMPORT_C void SetStringAttributeL( + TUint32 aAttribute, + const TDesC16& aValue, + CCmClientPluginInstance* aClientPluginInstance ); + + IMPORT_C void SetString8AttributeL( + TUint32 aAttribute, + const TDesC8& aValue, + CCmClientPluginInstance* aClientPluginInstance ); /** * Requests CommsDat table ids to be observed for changes by the cmm @@ -386,99 +394,99 @@ * @param aTableIdArray A reference to an array where plugin must add * the ids of the tables it want's to be observed. */ - IMPORT_C virtual void GetBearerTableIdsToBeObservedL( + IMPORT_C virtual void GetBearerTableIdsToBeObservedL( RArray& aTableIdArray ) const = 0; public: // plugin interface /** * Creates a copy of all bearer specific CommsDat data for the client. * Called as result of GetPluginDataL(). - * @param aRecordArray An array where the copy the records. Only + * @param aRecordArray An array where the copy the records. Only * the bearer specific implementation knows the amount and order * of these records in the array. */ - virtual void GetBearerSpecificRecordsL( + virtual void GetBearerSpecificRecordsL( RPointerArray& aRecordArray ) = 0; /** * Following GetBearerXXXXAttribute methods get only the * fields in records in pointer arrays(parameters). * @param aAttribute Identifier of the requested value. - * @param aGenRecordArray An array containing pointers to generic + * @param aGenRecordArray An array containing pointers to generic * records of the Connection Method. * @param aBearerSpecRecordArray An array containing pointers to bearer * specific records of the Connection Method. aAttribute * parameter should identify one field(integer, boolean string) - * in one of these records. - * @return Returns the requested value. In error case leaves with + * in one of these records. + * @return Returns the requested value. In error case leaves with * system-wide error code. */ - virtual TUint32 GetBearerIntAttributeL( - TUint32 aAttribute, + virtual TUint32 GetBearerIntAttributeL( + TUint32 aAttribute, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual TBool GetBearerBoolAttributeL( - TUint32 aAttribute, + + virtual TBool GetBearerBoolAttributeL( + TUint32 aAttribute, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual HBufC* GetBearerStringAttributeL( - TUint32 aAttribute, + + virtual HBufC* GetBearerStringAttributeL( + TUint32 aAttribute, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual HBufC8* GetBearerString8AttributeL( - TUint32 aAttribute, + + virtual HBufC8* GetBearerString8AttributeL( + TUint32 aAttribute, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; /** * Following SetBearerXXXXAttribute methods set only the - * fields in records in pointer arrays(parameters). They are not + * fields in records in pointer arrays(parameters). They are not * allowed to update the original records in plugins. * @param aAttribute Identifier of the field to set. * @param aValue The value to set. - * @param aGenRecordArray An array containing pointers to generic + * @param aGenRecordArray An array containing pointers to generic * records of the Connection Method. * @param aBearerSpecRecordArray An array containing pointers to bearer * specific records of the Connection Method. aAttribute * parameter should identify one field(integer, boolean string) - * in one of these records. + * in one of these records. * @return None. */ - virtual void SetBearerIntAttributeL( - TUint32 aAttribute, - TUint32 aValue, + virtual void SetBearerIntAttributeL( + TUint32 aAttribute, + TUint32 aValue, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual void SetBearerBoolAttributeL( - TUint32 aAttribute, + + virtual void SetBearerBoolAttributeL( + TUint32 aAttribute, TBool aValue, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual void SetBearerStringAttributeL( - TUint32 aAttribute, + + virtual void SetBearerStringAttributeL( + TUint32 aAttribute, const TDesC16& aValue, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; - virtual void SetBearerString8AttributeL( - TUint32 aAttribute, - const TDesC8& aValue, + virtual void SetBearerString8AttributeL( + TUint32 aAttribute, + const TDesC8& aValue, RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; /** - * Inherited class can make some preraration before CCmPluginBaseEng + * Inherited class can make some preraration before CCmPluginBaseEng * would start loading bearer specific records. */ virtual void PreparePluginToLoadRecordsL() = 0; - + /** * Gives the plugin a possibility to do some preparing operations * if needed. @@ -487,10 +495,10 @@ virtual void PrepareToCopyDataL( CCmPluginBaseEng* aCopyInstance ) = 0; /** - * Inherited class can make some preraration before CCmPluginBaseEng + * Inherited class can make some preraration before CCmPluginBaseEng * would start to update all the records. * @param aGenRecordArray Reference to generic records pointer array. - * @param aBearerSpecRecordArray Reference to bearer specific records + * @param aBearerSpecRecordArray Reference to bearer specific records * pointer array. */ virtual void PreparePluginToUpdateRecordsL( @@ -498,14 +506,14 @@ RPointerArray& aBearerSpecRecordArray ) = 0; /** - * Plugin can prepare to delete the Connection Method with this - * function. Called from DeleteL() before any record would be + * Plugin can prepare to delete the Connection Method with this + * function. Called from DeleteL() before any record would be * deleted. No records are deleted here. */ virtual void PrepareToDeleteRecordsL(){}; /** - * Loads the service record. Service record type is known and loaded by + * Loads the service record. Service record type is known and loaded by * plugin(bearer specific) part of the implementation even if the record * is saved to the generic side. Service record is linked to IAP record. */ @@ -519,17 +527,17 @@ /** * Update service record. * @param aGenRecordArray Reference to generic records pointer array. - * @param aBearerSpecRecordArray Reference to bearer specific records + * @param aBearerSpecRecordArray Reference to bearer specific records * pointer array. */ - virtual void UpdateServiceRecordL( + virtual void UpdateServiceRecordL( RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; /** * Copies the service record. Bearer specific part knows the type of it's * service record. - * @return Returns the service record pointer. + * @return Returns the service record pointer. */ virtual CommsDat::CCDRecordBase* CopyServiceRecordL() = 0; @@ -541,14 +549,14 @@ /** * Returns the service record name of the Connection Method. - * @param aServiceName Name of the service record the CM's iap record + * @param aServiceName Name of the service record the CM's iap record * points to. */ virtual void ServiceRecordNameLC( HBufC* &aServiceName ) = 0; /** - * Inherited class loads all the bearer specific records after - * loading generic records. Called from LoadL(). + * Inherited class loads all the bearer specific records after + * loading generic records. Called from LoadL(). */ virtual void LoadBearerRecordsL() = 0; @@ -560,9 +568,9 @@ /** * Update bearer specific records. * @param aGenRecordArray Reference to generic records pointer array. - * @param aBearerSpecRecordArray Reference to bearer specific records + * @param aBearerSpecRecordArray Reference to bearer specific records */ - virtual void UpdateBearerRecordsL( + virtual void UpdateBearerRecordsL( RPointerArray& aGenRecordArray, RPointerArray& aBearerSpecRecordArray ) = 0; @@ -572,50 +580,50 @@ */ virtual void DeleteBearerRecordsL() = 0; - /** - * Resets the bearer specific records. + /** + * Resets the bearer specific records. */ virtual void ResetBearerRecords() = 0; /** - * Copies the bearer specific records to copy instance given as - * parameter. + * Copies the bearer specific records to copy instance given as + * parameter. * @param aCopyInstance Pointer to instance where to copy. */ virtual void CopyBearerRecordsL( CCmPluginBaseEng* aCopyInstance ) = 0; /** * Returns the bearer record id of the Connection Method. - * @param aRecordId Id of the bearer record this CM's iap record + * @param aRecordId Id of the bearer record this CM's iap record * points to. */ virtual void BearerRecordIdL( TUint32& aRecordId ) = 0; /** * Returns the bearer record name of the Connection Method. - * @param aBearerName Name of the bearer record this CM's iap record + * @param aBearerName Name of the bearer record this CM's iap record * points to. */ virtual void BearerRecordNameLC( HBufC* &aBearerName ) = 0; protected: - /** - * Constructor + /** + * Constructor */ IMPORT_C CCmPluginBaseEng( TCmPluginInitParam *aInitParam ); - - /** + + /** * Second phase constructor */ IMPORT_C virtual void ConstructL(); - + /** * Checks if the ECmName attribute was set since the last update. * If so, name is updated in passed record * @param aSrcRecord record to be checked against * @param aDestRecord record to be checked against aSrcRecord */ - IMPORT_C void CheckIfNameModifiedL( + IMPORT_C void CheckIfNameModifiedL( CommsDat::CCDRecordBase* aSrcRecord, CommsDat::CCDRecordBase* aDestRecord ) const; @@ -629,8 +637,8 @@ * @param aDNS1 first DNS server address * @param aDNS1 secord DNS server address * @param aDNSFromServer DNS address from server flag - */ - IMPORT_C void CheckDNSServerAddressL( + */ + IMPORT_C void CheckDNSServerAddressL( TBool aIPv6, CommsDat::CMDBField& aDNS1, CommsDat::CMDBField& aDNS2, @@ -638,7 +646,7 @@ private: /** - * Handles all the Connection Method data copying to instance given as + * Handles all the Connection Method data copying to instance given as * parameter. This is called from CreateCopyL(). * @ param aCopyInstance Pointer to plugin to copy the data. */ @@ -654,28 +662,41 @@ /** * Copies the record identified by aRecordIdentifier to copy instance. * @param aRecordIdentifier Identifies the record which is copied copy. - * @param aCopyInstance Pointer to plugin to copy the data. + * @param aCopyInstance Pointer to plugin to copy the data. */ - void CopyRecordDataL( TUint32 aRecordIdentifier, - CCmPluginBaseEng* aCopyInstance ); + void CopyRecordDataL( + TUint32 aRecordIdentifier, + CCmPluginBaseEng* aCopyInstance ); + + /** + * Copies the values and attributes of all fields from aSource-record + * into aDestination record. + * Does not copy the record element ID. Also, does not touch any field + * in aDestination-record that is NULL in aSource-record. + * @param aSource The record that is copied from. + * @param aDestination The record that is copied to. + */ + void CopyRecordFieldsL( + CommsDat::CMDBRecordBase& aSource, + CommsDat::CMDBRecordBase& aDestination ); /** * Creates proxy record and sets the proxy settings enabled for this * Connection Method. */ void EnableProxyL( TBool aEnable ); - + /** - * Creates location record and sets the location enabled for this + * Creates location record and sets the location enabled for this * Connection Method. */ void EnableLocationL( TBool aEnable ); /** - * Calls all the loading methods. + * Calls all the loading methods. */ void DoLoadL( TUint32 aIapId ); - + /** * Loads IAP record. * @param aIapId Identifies the IAP record to load. @@ -693,7 +714,7 @@ * of calling LoadL(). */ void LoadNetworkRecordL(); - + /** * Loads location record related to this IAP. This is called as a result * of calling LoadL(). @@ -711,12 +732,12 @@ * of calling LoadL(). */ void LoadMetadataRecordL(); - + /** * Following methods are called as a result of calling method UpdateL(). * Each method overwrites the original data in memory with the client copy * of that data. Client data has all the possible changes set by client. - * After overwrite the data is written to CommsDat. + * After overwrite the data is written to CommsDat. * @param aClientPluginInstance The client copy of the original data with the * possible changes. */ @@ -728,14 +749,14 @@ void UpdateWapRecordL( CCmClientPluginInstance* aClientPluginInstance ); void UpdateMetadataRecordL( CCmClientPluginInstance* aClientPluginInstance ); void UpdateServiceRecordL( CCmClientPluginInstance* aClientPluginInstance ); - + /** * Creates new wap records. */ void NewWapRecordL(); /** - * Searches the WAP records related to this iap. This is called as a + * Searches the WAP records related to this iap. This is called as a * result of LoadL(). * @return Returns pointer to WAP IP record. If it's not found NULL is * returned. @@ -748,14 +769,14 @@ * @return Returns metadata record pointer. */ CCDIAPMetadataRecord* NewMetadataRecordL( TBool aSetDef ); - + /** - * Searches the metadata record belonging to this iap. This is called as a + * Searches the metadata record belonging to this iap. This is called as a * result of LoadL(). * @return Returns pointer to WAP IP record. If it's not found NULL is * returned. */ - CCDIAPMetadataRecord* FindMetadataRecordL(); + CCDIAPMetadataRecord* FindMetadataRecordL(); //TODO, check comment, return value... /** * Set attribute flag on the given record. @@ -763,19 +784,21 @@ * @param aAttribute Attribute to be set. * @param aSet ETrue to set, EFalse to clear */ - void SetAttribute( CommsDat::CCDRecordBase* aRecord, - TUint32 aAttribute, - TBool aSet ); - + void SetAttribute( + CommsDat::CCDRecordBase* aRecord, + TUint32 aAttribute, + TBool aSet ); + /** * Copy the attributes of the source record to the destination. * @param aSrcRecord record of which attributes are copied * @param ADstRecord record of which attributes are set */ - void CopyAttributes( CommsDat::CCDRecordBase* aSrcRecord, - CommsDat::CCDRecordBase* aDstRecord ); + void CopyAttributes( + CommsDat::CCDRecordBase* aSrcRecord, + CommsDat::CCDRecordBase* aDstRecord ); - + /** * Returns the default location record id. * @return Returns the default location record id. @@ -785,16 +808,16 @@ private: /** - * Gives a possibility to make some prerarations before + * Gives a possibility to make some prerarations before * starting to load bearer specific records. */ void PrepareToLoadRecordsL(); /** - * Gives a possibility to make some prerarations before + * Gives a possibility to make some prerarations before * starting to update bearer specific records. */ - void PrepareToUpdateRecordsL( + void PrepareToUpdateRecordsL( CCmClientPluginInstance* aClientPluginInstance ); /** @@ -802,7 +825,7 @@ * @return Returns the element id of the iap record. */ CommsDat::TMDBElementId IAPRecordElementId() const; - + /** * Checks the protection attribute of the IAP. * @return Returns ETrue if the IAP is protected. Otherwise returns @@ -813,36 +836,35 @@ /** * Sets the name of the proxy server to proxy record. If name's * length is 0, proxyport is set to 0 and proxyserver usage - * boolean is set to EFalse. If the name is longer than 0, + * boolean is set to EFalse. If the name is longer than 0, * boolean is set to ETrue. * @param aProxyServer Address to be set. * @param Record pointer where to set. */ - void SetProxyServerNameL( const TDesC& aProxyServer, - CommsDat::CCDRecordBase* aProxyRecord ); + void SetProxyServerNameL( + const TDesC& aProxyServer, + CommsDat::CCDRecordBase* aProxyRecord ); /** * Sets a name to IAP. * @param aName Name to set. - * @param aClientPluginInstance Client copy of data where to set the + * @param aClientPluginInstance Client copy of data where to set the * name. UpdateL() updates the name to the CommsDat. */ - void SetNameL( const TDesC& aName, - CommsDat::CCDRecordBase* aIapRecord, - const CMManager::TNamingMethod aNamingMethod ); + void SetNameL( + const TDesC& aName, + CommsDat::CCDRecordBase* aIapRecord, + const CMManager::TNamingMethod aNamingMethod ); /** * Following methods are called as a result of SetNameL() to * make a valid name of the given string. */ - HBufC* DoMakeValidNameL( const TDesC& aName, - const TUint32& aIapId ); - HBufC* EnsureMaxLengthLC( const TDesC& aName, - TBool& aChanged ); + HBufC* DoMakeValidNameL( const TDesC& aName, const TUint32& aIapId ); + HBufC* EnsureMaxLengthLC( const TDesC& aName, TBool& aChanged ); TPtrC GetPrefix( const TDesC& aName ); TInt GetPostfix( const TDesC& aName, const TDesC& aPrefix ); - TBool IsValidNameL( const TDesC& aNameText, - const TUint32& aIapId ); + TBool IsValidNameL( const TDesC& aNameText, const TUint32& aIapId ); HBufC* EscapeTextLC( const TDesC& aLiteral ); void SetDefaultNameL( const TDesC& aName ); @@ -854,8 +876,8 @@ /** * Check if the passed IP address is one of these: - * - empty string - - * - '0:0:0:0:0:0:0:0' + * - empty string - + * - '0:0:0:0:0:0:0:0' * - 'fec0:000:0000:ffff::1' * - 'fec0:000:0000:ffff::2' * @param aIpAddress IP address to be checked @@ -863,7 +885,7 @@ CMManager::TIPv6Types ClassifyIPv6Address( const TDesC& aIpv6Address ); public: // Data - + // Required attribute for the framework // (An identifier used during destruction) TUid iDtor_ID_Key; @@ -877,7 +899,7 @@ CommsDat::CMDBSession& iSession; /** - * Generic record pointers. + * Generic record pointers. */ CommsDat::CCDIAPRecord* iIapRecord; CommsDat::CCDProxiesRecord* iProxyRecord; @@ -887,29 +909,29 @@ CommsDat::CCDWAPAccessPointRecord* iWapAPRecord; CommsDat::CCDWAPIPBearerRecord* iWapIPBearerRecord; CCDIAPMetadataRecord* iMetaDataRecord; - + private: /** * IAP record id of the CM. 0 means that this is not stored to CommsDat - * yet. If in UpdateL phase iap record has an id but iIapId == 0 --> + * yet. If in UpdateL phase iap record has an id but iIapId == 0 --> * predefined iap id */ - TUint32 iIapId; + TUint32 iIapId; /** * Naming method of the CM. */ - CMManager::TNamingMethod iNamingMethod; - + CMManager::TNamingMethod iNamingMethod; + /** - * Table id of the iap metadata table. + * Table id of the iap metadata table. */ - CommsDat::TMDBElementId iMetadataTableId; - + CommsDat::TMDBElementId iMetadataTableId; + /** * Identifies if the location is enabled. */ - TBool iLocationEnabled; + TBool iLocationEnabled; }; - + #endif // CMPLUGINBASEENG_H diff -r 7ec726f93df1 -r 489cf6208544 ipcm_plat/connection_settings_shim_api/inc/cmmanagerdefines_shim.h --- a/ipcm_plat/connection_settings_shim_api/inc/cmmanagerdefines_shim.h Fri May 14 16:15:46 2010 +0300 +++ b/ipcm_plat/connection_settings_shim_api/inc/cmmanagerdefines_shim.h Thu May 27 13:17:01 2010 +0300 @@ -1,19 +1,19 @@ /* - * 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: - * Defines for data types and attributes used in CmManagerShim interface. - */ +* 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: +* Defines for data types and attributes used in CmManagerShim interface. +*/ #ifndef CMMANAGERDEFINES_SHIM_H #define CMMANAGERDEFINES_SHIM_H @@ -220,6 +220,8 @@ //! From TConnectionMethodWlanSpecificAttributes in cmpluginwlandef.h WlanScanSSID = CMManager::EWlanScanSSID, //! From TConnectionMethodWlanSpecificAttributes in cmpluginwlandef.h + WlanChannelID = CMManager::EWlanChannelID, + //! From TConnectionMethodWlanSpecificAttributes in cmpluginwlandef.h WlanWepKey1InHex = CMManager::EWlanWepKey1InHex, //! From TConnectionMethodWlanSpecificAttributes in cmpluginwlandef.h WlanWepKey2InHex = CMManager::EWlanWepKey2InHex,