wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h
changeset 0 c40eb8fe8501
child 7 0abc8c98be24
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,1044 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Main class for core server
+*
+*/
+
+/*
+* %version: 54 %
+*/
+
+#ifndef CORE_SERVER_H
+#define CORE_SERVER_H
+
+#include "am_platform_libraries.h"
+#include "abs_core_server.h"
+#include "abs_core_server_callback.h"
+#include "abs_core_driverif.h"
+#include "abs_core_driverif_callback.h"
+#include "core_operation_base.h"
+#include "core_type_list.h"
+#include "core_settings.h"
+#include "core_connection_data.h"
+#include "core_timer_counter_measures.h"
+#include "core_scan_list.h"
+#include "abs_core_wpx_adaptation.h"
+#include "core_operation_handle_bss_lost.h"
+#include "core_wlan_eapol_interface.h"
+
+class ScanList;
+class abs_core_timer_c;
+class abs_wlan_eapol_callback_interface_c;
+class abs_core_frame_handler_c;
+class abs_core_event_handler_c;
+class abs_core_protected_setup_handler_c;
+class core_eapol_handler_c;
+
+/**
+ * core server class for WLAN management functionality.
+ *
+ * @lib wlmserversrv.lib
+ * @since S60 v3.1
+ */
+NONSHARABLE_CLASS( core_server_c ) :
+    public abs_core_server_c,
+    public abs_core_driverif_callback_c
+    {
+
+public: 
+
+    /**
+     * Constructor.
+     *
+     * @param callback External service interface.
+     * @param drivers Driver interface
+     * @param settings Wlan Device Settings
+     * @param mac_address MAC address of the device.
+     * @param features Bitmask of enabled features.
+     */
+    core_server_c(
+        abs_core_server_callback_c& callback,
+        abs_core_driverif_c& drivers,
+        const core_device_settings_s& settings,
+        const core_mac_address_s& mac_address,
+        u32_t features );
+
+    /**
+     * Destructor.
+     */
+    virtual ~core_server_c();
+
+    /**
+     * Perform the necessary initialization procedures after construction.
+     * 
+     * @since S60 v3.1
+     * @return An error code if initialization fails, core_error_ok otherwise.
+     * @note This method MUST be called after the construction of this object.
+     */
+    core_error_e init();
+
+    /**
+     * Get a reference to device settings.
+     *
+     * @since S60 v3.1
+     * @return Reference to device settings.
+     */
+    core_device_settings_s& get_device_settings();
+   
+    /**
+     * Get a reference to core engine settings.
+     *
+     * @since S60 v3.1
+     * @return Reference to core engine settings.
+     */   
+    core_settings_c& get_core_settings();
+    
+    /**
+     * Get a reference to connection data.
+     *
+     * @since S60 v3.1
+     * @return Pointer to connection data.
+     */   
+    core_connection_data_c* get_connection_data();
+
+    /**
+     * Get a reference to EAPOL instance.
+     *
+     * @since S60 v3.1
+     * @return Reference to EAPOL instance.
+     */   
+    core_wlan_eapol_interface_c& get_eapol_instance();
+   
+    /**
+     * Direct the callbacks from EAPOL to the given handler.
+     *
+     * @since S60 v3.1
+     * @param New handler of EAPOL callbacks.
+     */   
+    void set_eapol_handler(
+        abs_wlan_eapol_callback_interface_c* handler );
+   
+    /**
+     * Return the device MAC address.
+     *
+     * @since S60 v3.1
+     * @return The device MAC address.
+     */        
+    core_mac_address_s& own_mac_addr();
+
+    /**
+     * Queue the given internal operation. This method should be used
+     * when queueing operations from inside other operations.
+     *
+     * @param operation Operation to be queued.
+     * @return core_error_ok if successfully queued, an error otherwise.
+     * @note Ownership of the operation instance is transferred immediately
+     *       to this method. If there's an error, the instance is automatically
+     *       deleted.
+     */
+    core_error_e queue_int_operation(
+        core_operation_base_c* operation );
+
+    /**
+     * Queue the given internal operation and run the next operation if
+     * no operation is executing.
+     *
+     * @param operation Operation to be queued.
+     * @return core_error_ok if successfully queued, an error otherwise.
+     * @note Ownership of the operation instance is transferred immediately
+     *       to this method. If there's an error, the instance is automatically
+     *       deleted.
+     */
+    core_error_e queue_int_operation_and_run_next(
+        core_operation_base_c* operation );
+
+    /**
+     * Check whether WPA counter measures are active.
+     *
+     * @since S60 v3.1
+     * @return Whether WPA counter measures are active.
+     */
+    bool_t is_cm_active();
+
+    /**
+     * Initialize the connection related data structures.
+     * @param iap_data The settings used for establishing the connection.
+     * @param device_settings Handle to device settings.
+     * @since S60 v3.1
+     */
+    core_error_e init_connection_data(
+        const core_iap_data_s& iap_data,
+        const core_device_settings_s& device_settings );
+
+    /**
+     * Cleans up connection related data structures from core engine
+     * @since S60 v3.1
+     */
+    void clear_connection_data();
+
+    /**
+     * Schedule roaming timer.
+     *
+     * @since S60 v3.1
+     * @param delay Expiration time in micro seconds.
+     */    
+    void schedule_roam_timer(
+        u32_t delay );
+
+    /**
+     * Cancel the roaming timer.
+     *
+     * @since S60 v3.1
+     */
+    void cancel_roam_timer();
+    
+    /**
+     * Schedule operation timer.     
+     *
+     * @since S60 v3.1
+     * @param delay Expiration time in micro seconds.
+     * @note This timer should never be used while running a sub-operation
+     *       since it's possible the sub-operation will also try to the use
+     *       the same timer.
+     */    
+    void schedule_operation_timer(
+        u32_t delay );
+
+    /**
+     * Cancel the operation timer.
+     *
+     * @since S60 v3.1
+     */
+    void cancel_operation_timer();
+
+    /**
+     * Check whether DHCP timer is active.
+     * 
+     * @since S60 v5.0
+     * @return true_t if timer is active, false_t otherwise.
+     */
+    bool_t is_dhcp_timer_active();
+
+    /**
+     * Schedule the DHCP timer.
+     *
+     * @since S60 v3.1
+     * @param delay Expiration time in micro seconds.
+     */    
+    void schedule_dhcp_timer(
+        u32_t delay );
+
+    /**
+     * Cancel the DHCP timer.
+     *
+     * @since S60 v3.1
+     */
+    void cancel_dhcp_timer();
+
+    /**
+     * Schedule the driver unload timer.
+     * 
+     * @since S60 v3.1
+     * @param delay Expiration time in micro seconds.
+     */
+    void schedule_unload_timer(
+        u32_t delay );
+
+    /**
+     * Cancel the driver unload timer.
+     *
+     * @since S60 v3.1
+     */
+    void cancel_unload_timer();
+
+    /**
+     * Check whether an operation with the given flags is in queue.
+     *
+     * @param feature_flags Feature flags to check for.
+     * @return Whether an operation with the given flags is in queue.
+     */
+    bool_t is_operation_in_queue_with_flags(
+        u32_t feature_flags );
+
+    /**
+     * Check whether an operation of the given type is in queue.
+     *
+     * @param type Type of the operation to search for.
+     * @return Whether an operation of the given type is in queue.
+     */
+    bool_t is_operation_in_queue_with_type(
+        u32_t type );
+
+    /**
+     * Cancels all the operations in the queue that have
+     * the given feature flags enabled. Does not touch
+     * the currently executing operation.
+     *
+     * @since S60 v3.1
+     * @param feature_flags Feature flags to check for.
+     */    
+    void cancel_operations_with_flags(
+        u32_t feature_flags );
+
+    /**
+     * Cancels all the operations of the given type in the queue.
+     * Does not touch the currently executing operation.
+     *
+     * @since S60 v3.2
+     * @param type Operation type to check for.
+     */    
+    void cancel_operations_with_type(
+        u32_t type );
+
+    /**
+     * Cancels all the operations in the queue including
+     * the currently executing operation.
+     *
+     * @since S60 v3.2
+     * @param is_graceful_cancel Whether cancel should be graceful or forced.     
+     */
+    void cancel_all_operations(
+        bool_t is_graceful_cancel );
+
+    /**
+     * Creates an instance of EAPOL if needed.
+     *
+     * @since S60 v3.1
+     * @param mode Operating mode to use.
+     * @return true_t if an instance is successfully created or it already exists, false_t otherwise.
+     */
+    bool_t create_eapol_instance(
+        core_eapol_operating_mode_e mode );
+
+    /**
+     * Return the current frame handler.
+     *
+     * @since S60 v3.2
+     * @return Pointer to the current frame handler.
+     */
+    abs_core_frame_handler_c* frame_handler();
+
+    /**
+     * Register a handler for received frames.
+     *
+     * @since S60 v5.0
+     * @param handler Pointer to the new handler.
+     */
+    void register_frame_handler(
+        abs_core_frame_handler_c* handler );
+
+    /**
+     * Unregister a handler for received frames.
+     *
+     * @since S60 v5.0
+     * @param handler Pointer to the registered handler.
+     */
+    void unregister_frame_handler(
+        abs_core_frame_handler_c* handler );
+
+    /**
+     * Return a reference to the scan list.
+     *
+     * @since S60 v3.1
+     * @return A reference to the scan list.
+     */
+    core_scan_list_c& get_scan_list();
+
+    /**
+     * Return the current event handler.
+     *
+     * @since S60 v3.2
+     * @return Pointer to the current event handler.
+     */
+    abs_core_event_handler_c* event_handler();
+
+    /**
+     * Register a handler for received indications.
+     *
+     * @since S60 v5.0
+     * @param handler Pointer to the new handler.
+     */
+    void register_event_handler(
+        abs_core_event_handler_c* handler );
+
+    /**
+     * Unregister a handler for received indications.
+     *
+     * @since S60 v5.0
+     * @param handler Pointer to the registered handler.
+     */
+    void unregister_event_handler(
+        abs_core_event_handler_c* handler );
+
+    /**
+     * Forces the engine to roam to any available AP.
+     * 
+     * @since S60 v3.1
+     * @param reason Reason to roam.
+     */
+    void schedule_roam(
+        core_operation_handle_bss_lost_c::core_bss_lost_reason_e reason );
+
+    /**
+     * Send a management frame.
+     *
+     * @since S60 v3.2
+     * @param frame_type The type of the frame to send.
+     * @param frame_length The length of the frame.
+     * @param frame_data Pointer to the frame data.
+     * @param destination Destination MAC address.
+     * @return true_t if frame was successfully sent, false_t otherwise.
+     */
+    bool_t send_management_frame(
+        core_frame_type_e frame_type,
+        const u16_t frame_length,
+        const u8_t* const frame_data,
+        const core_mac_address_s& destination );
+
+    /**
+     * Send a data frame.
+     *
+     * @since S60 v3.2
+     * @param ap_data AP data is being sent to.
+     * @param frame_type The type of the frame to send.
+     * @param frame_length The length of the frame.
+     * @param frame_data Pointer to the frame data.
+     * @param frame_priority Desired priority of the frame.
+     * @param destination Destination MAC address.
+     * @param send_unencrypted Whether the frame must be sent unencrypted.    
+     * @return true_t if frame was successfully sent, false_t otherwise.
+     */
+    bool_t send_data_frame(
+        const core_ap_data_c& ap_data,
+        core_frame_type_e frame_type,
+        const u16_t frame_length,
+        const u8_t* const frame_data,
+        core_access_class_e frame_priority,
+        const core_mac_address_s& destination,
+        bool_t send_unencrypted = false_t );
+
+    /**
+     * Get a reference to WPX adaptation instance.
+     *
+     * @since S60 v3.1
+     * @return Reference to WPX adaptation instance.
+     */   
+    abs_core_wpx_adaptation_c& get_wpx_adaptation_instance();
+
+    /**
+     * Direct the Protected Setup events to the given handler.
+     *
+     * @since S60 v3.2
+     * @param New handler of Protected Setup events.
+     */  
+    void set_protected_setup_handler(
+        abs_core_protected_setup_handler_c* handler );
+
+public: // abs_core_server_c
+
+    /**
+     * Connect to a network.
+     *
+     * @since S60 v3.1
+     * @param request_id An unique identification for the request.
+     * @param settings The settings used for establishing the connection.
+     * @param connect_status contains the error code of connection attempt
+     *        on completion
+     * @param ssid_list List of possible secondary SSIDs.
+     */
+    void connect(
+        u32_t request_id,
+        const core_iap_data_s& settings,
+        core_connect_status_e& connect_status,
+        core_type_list_c<core_ssid_entry_s>* ssid_list = NULL );
+
+    /**
+     * Disconnect an active connection.
+     * 
+     * @since S60 v3.1
+     * @param request_id An unique identification for the request.
+     */
+    void release(
+        u32_t request_id );
+
+    /**
+     * Request available networks with the given SSID.
+     * 
+     * @since S60 v3.1
+     * @param request_id An unique identification for the request.
+     * @param scan_mode Defines whether active or passive scan is performed.
+     * @param scan_ssid Name of the network to scan for.
+     * @param scan_channels Channels to scan.
+     * @param scan_max_age Maximum age of returned scan results in seconds.     
+     * @param scan_data Scan results are stored here.
+     * @param is_current_ap_added Whether the current AP needs to be added during an ongoing
+     *                            connection if not otherwise found in the scan.
+     * @note If the length of the SSID is zero, a broadcast scan is performed.
+     */
+    void get_scan_result(
+        u32_t request_id,
+        core_scan_mode_e scan_mode,
+        const core_ssid_s& scan_ssid,
+        const core_scan_channels_s& scan_channels,
+        u8_t scan_max_age,
+        ScanList& scan_data,
+        bool_t is_current_ap_added = true_t );
+
+    /**
+     * Find which iaps from the given list are currently available.
+     * @since S60 v3.1
+     * @param request_id An unique identification for the request.
+     * @param is_active_scan_allowed specifies whether active scanning is allowed.
+     * @param iap_data_list containing list of iap data structures.
+     * @param iap_id_list list of iap ids are stored here on completion.
+     * @param iap_ssid_list List of possible secondary SSIDs.
+     * @param scan_data contains the scan results
+     */
+    void get_available_iaps(
+        u32_t request_id,
+        bool_t is_active_scan_allowed,
+        core_type_list_c<core_iap_data_s>& iap_data_list,
+        core_type_list_c<u32_t>& iap_id_list,
+        core_type_list_c<core_ssid_entry_s>* iap_ssid_list,
+        ScanList& scan_data );
+
+    /**
+     * Get the current RCPI value of the connection.
+     * 
+     * @since S60 v3.1
+     * @param request_id An unique identification for the request.
+     * @param rcpi Current channel power indicator (RCPI).
+     */
+    void get_current_rcpi(
+        u32_t request_id,
+        u32_t& rcpi );
+
+    /**
+     * Disable all WLAN activity.
+     *
+     * Disconnects the active connection and prevents any further
+     * WLAN activity until enable_wlan() is called.
+     *
+     * @since S60 v3.1
+     * @param request_id An unique identification for the request.
+     */        
+    void disable_wlan(
+        u32_t request_id );
+        
+    /**
+     * Allow WLAN activity after disabled_wlan().
+     *
+     * @since S60 v3.1     
+     * @param request_id An unique identification for the request.
+     */
+    void enable_wlan(
+        u32_t request_id );
+
+    /**
+     * Schedule an immediate driver unload.
+     *
+     * @since S60 v3.1     
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e unload_drivers();
+
+    /**
+     * Get packet statistics of the current connection.
+     *
+     * @since S60 v3.2
+     * @param request_id An unique identification for the request.
+     * @param statistics Packet statistics of the current connection.     
+     */
+    void get_packet_statistics(
+        u32_t request_id,
+        core_packet_statistics_s& statistics );
+
+    /**
+     * Request creation of a virtual traffic stream.
+     *
+     * @since S60 v3.2
+     * @param request_id An unique identification for the request.
+     * @param tid TID of the virtual traffic stream.
+     * @param user_priority User Priority of the virtual traffic stream.
+     * @param is_automatic_stream Whether the virtual traffic stream
+     *                            has been created automatically.
+     * @param params Parameters of the virtual traffic stream.
+     * @param stream_id ID assigned to this virtual traffic stream on
+     *                  successful completion.
+     * @param stream_status Status of the virtual traffic stream on
+     *                      successful completion. 
+     * @note If the TID has been defined as TRAFFIC_STREAM_ID_NONE,
+     *       core server will select the next free ID.
+     */
+    void create_traffic_stream(
+        u32_t request_id,
+        u8_t tid,
+        u8_t user_priority,
+        bool_t is_automatic_stream,
+        const core_traffic_stream_params_s& params,
+        u32_t& stream_id,
+        core_traffic_stream_status_e& stream_status );
+
+    /**
+     * Request deletion of a virtual traffic stream.
+     *
+     * @since S60 v3.2
+     * @param request_id An unique identification for the request.
+     * @param stream_id ID of the virtual traffic stream.
+     */
+    void delete_traffic_stream(
+        u32_t request_id,
+        u32_t stream_id );   
+
+    /**
+     * Start Protected Setup.
+     * 
+     * @since S60 v3.2
+     * @param request_id An unique identification for the request.
+     * @param iap_data IAP data used for running Protected Setup.
+     * @param iap_data_list IAP data results from a successful Protected Setup operation.
+     * @param protected_setup_status contains the error code of Protected Setup attempt
+     *        on completion.
+     */
+    void run_protected_setup(
+        u32_t request_id,
+        const core_iap_data_s& iap_data,
+        core_type_list_c<core_iap_data_s>& iap_data_list,
+        core_protected_setup_status_e& protected_setup_status );
+
+    /**
+     * Initiate a roam to the given BSSID.
+     * 
+     * @since S60 v3.2
+     * @param request_id An unique identification for the request.
+     * @param bssid BSSID to roam to. If BSSID is set to BROADCAST_MAC_ADDR,
+     *              search for a better BSS is initiated.
+     * @note This method does not guarantee that the a roam to the given BSSID
+     *       will occur. If the roam succeeds, the request will be completed
+     *       with core_error_ok, otherwise with an error code.  
+     */
+    void directed_roam(
+        u32_t request_id,
+        const core_mac_address_s& bssid );    
+
+    /**
+     * Get the BSSID of the access point currently connected to.
+     * 
+     * @since S60 v3.1
+     * @param bssid BSSID of the access point.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_current_bssid(
+        core_mac_address_s& bssid );
+
+    /**
+     * Get the name of the network (SSID) currently connected to.
+     * 
+     * @since S60 v3.1
+     * @param ssid Current SSID.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_current_ssid(
+        core_ssid_s& ssid );
+
+    /**
+     * Get the current security mode of the connection.
+     * 
+     * @since S60 v3.1
+     * @param mode Current security mode.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_current_security_mode(
+        core_connection_security_mode_e& mode );
+
+    /**
+     * Get the current connection state.
+     * 
+     * @since S60 v3.1
+     * @param state Current connection state.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_current_connection_state(
+        core_connection_state_e& state );
+
+    /**
+     * Inform core server about updated device settings.
+     * 
+     * @since S60 v3.1     
+     * @param settings Updated device settings.
+     * @return core_error_ok if success, an error code otherwise.
+     * @note This method does not guarantee that the new parameters
+     * are taken into use immediately.     
+     */
+    core_error_e update_device_settings(
+        core_device_settings_s& settings );
+
+    /**
+     * Set the preferred power save mode.
+     * 
+     * @since S60 v3.1
+     * @param mode Preferred power save mode.
+     * @return core_error_ok if success, an error code otherwise.
+     * @note This method does not guarantee that the new parameters
+     *       are taken into use immediately.
+     */
+    core_error_e set_power_save_mode(
+        const core_power_save_mode_s& mode );
+
+    /**
+     * Add a BSSID to the rogue list.
+     *
+     * Prevents roaming to the given BSSID and hides it from
+     * the scan results.
+     *
+     * @since S60 v3.1
+     * @param bssid BSSID to add to the list.
+     * @return core_error_ok if success, an error code otherwise.
+     * @note The list entry will be persistent, meaning it will not
+     * be cleared when the connection is closed.
+     */
+    core_error_e add_bssid_to_rogue_list(
+        const core_mac_address_s& bssid );
+
+    /**
+     * Remove a BSSID from the rogue list.
+     *
+     * @since S60 v3.1
+     * @param bssid BSSID to remove from the list.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e remove_bssid_from_rogue_list(
+        const core_mac_address_s& bssid );
+
+    /**
+     * Return a list of BSSIDs on the rogue list.
+     *
+     * @since S60 v3.2
+     * @param rogue_list List of BSSIDs on the rogue list.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_rogue_list(
+        core_type_list_c<core_mac_address_s>& rogue_list );
+
+    /**
+     * Set the RCP level notification boundary.
+     *
+     * When the signal strength is getting worse (RCPI value is getting smaller),
+     * the core server will indicate core_notification_e::core_notification_rcp_changed
+     * when the RCPI value gets smaller than the the rcp_level_boundary value.
+     *
+     * When the signal strength is getting better, the core server will indicate
+     * core_notification_e::core_notification_rcp_changed when the RCPI value
+     * gets bigger than the combined value of rcp_level_boundary and hysteresis.
+     *
+     * @since S60 v3.1
+     * @param rcp_level_boundary RCP level notification boundary.
+     * @param hysteresis Specifies the difference between boundaries when 
+     *                   the RCP level is rising vs. descending
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e set_rcp_level_notification_boundary(
+        const i32_t rcp_level_boundary,
+        const i32_t hysteresis );
+
+    /**
+     * Clear packet statistics of the current connection.
+     *
+     * @since S60 v3.2
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e clear_packet_statistics();
+
+    /**
+     * Get the current U-APSD settings.
+     *
+     * @since S60 v3.2
+     * @param settings Current U-APSD settings.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_uapsd_settings(
+        core_uapsd_settings_s& settings );
+
+    /**
+     * Set the U-APSD settings.
+     *
+     * @since S60 v3.2
+     * @param settings Current U-APSD settings to be set.
+     * @return core_error_ok if success, an error code otherwise.
+     * @note This method does not guarantee that the new parameters
+     * are taken into use immediately.     
+     */
+    core_error_e set_uapsd_settings(
+        const core_uapsd_settings_s& settings );
+
+    /**
+     * Get the current power save settings.
+     *
+     * @since S60 v3.2
+     * @param settings Current power save settings.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_power_save_settings(
+        core_power_save_settings_s& settings );
+
+    /**
+     * Set the power save settings.
+     *
+     * @since S60 v3.2
+     * @param settings Current power save settings to be set.
+     * @return core_error_ok if success, an error code otherwise.
+     * @note This method does not guarantee that the new parameters
+     * are taken into use immediately.     
+     */
+    core_error_e set_power_save_settings(
+        const core_power_save_settings_s& settings );
+
+    /**
+     * Get information about the current AP.
+     *
+     * @since S60 v3.2
+     * @param info Information about the current AP.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_current_ap_info(
+        core_ap_information_s& info ); 
+
+    /**
+     * Get roam metrics of the current connection.
+     *
+     * @since S60 v3.2
+     * @param roam_metrics Roam metrics of the current connection.
+     */
+    void get_roam_metrics(
+        core_roam_metrics_s& roam_metrics );
+
+    /**
+     * Set the arp filter.
+     *
+     * @since S60 v5.0
+     * @param filter Current ARP filter to be set.
+     * @return core_error_ok if success, an error code otherwise.
+     * @note This method does not guarantee that the new filter
+     *       is taken into use immediately.
+     */
+    core_error_e set_arp_filter(
+        const core_arp_filter_s& filter );
+
+    /**
+     * Delivers multicast MAC address to drivers.
+     *
+     * @since S60 v3.1
+     * @param join_group is set true_t if adding a multicast address
+     *        otherwise the address will be removed.
+     * @param multicast_addr contains the MAC address to add/remove
+     * @return core_error_ok if success, an error code otherwise.
+     * @note This method does not guarantee that the new address
+     *       is taken into use immediately.
+     */
+    core_error_e configure_multicast_group(
+        bool_t join_group,
+        const core_mac_address_s& multicast_addr );
+
+    /**
+     * Get information about current traffic statuses and traffic modes for
+     * access classes.
+     *
+     * @since S60 v3.2
+     * @param info Information about the current traffic statuses and traffic modes.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e get_current_ac_traffic_info(
+        core_ac_traffic_information_s& info );
+
+    /**
+     * An asynchronous request from the core server has been completed.
+     *
+     * @since S60 v3.1
+     * @param request_id Identification of the corresponding request.
+     * @param status Completion status of the request.
+     */
+    void request_complete(
+        u32_t request_id,
+        core_error_e status );
+
+    /**
+     * Cancel a pending asynchronous request.
+     * 
+     * @since S60 v3.1
+     * @param request_id Identification of the corresponding request.
+     */
+    void cancel_request(
+        u32_t request_id );
+
+public: // abs_core_driverif_callback_c
+
+    /**
+     * Inform the core server about a new received frame.
+     *
+     * @since S60 v3.1
+     * @param frame_type The type of the frame received.
+     * @param frame_length The length of the frame.
+     * @param frame_data Pointer to the frame data.     
+     * @param frame_rcpi RCPI value of the frame.
+     */
+    void receive_frame(
+        core_frame_type_e frame_type,
+        const u16_t frame_length,
+        const u8_t* const frame_data,
+        u8_t frame_rcpi );
+
+    /**
+     * Notify the core server about an adaptation layer event.
+     *
+     * @note received notification is never related to an existing operation,
+     * but it may lead to starting a new one.
+     *
+     * @since S60 v3.1
+     * @param indication Adaptation layer event.
+     */
+    void notify(
+        core_am_indication_e indication );
+
+private:
+
+    /**
+     * Called by the timer framework when timer expires.
+     * @param pointer to 'this' (note: the static method)
+     */
+    static void queue_timer_expired(
+        void* this_ptr );
+
+    /**
+     * Called by the driver unload timer when it expires
+     * @param pointer to 'this' (note: the static method)
+     */
+    static void unload_timer_expired(
+        void* this_ptr );
+
+    /**
+     * Called by the roaming timer when it expires
+     * @param pointer to 'this' (note: the static method)
+     */
+    static void roam_timer_expired(
+        void* this_ptr );    
+
+    /**
+     * Called by the operation timer when it expires
+     * @param pointer to 'this' (note: the static method)
+     */
+    static void operation_timer_expired(
+        void* this_ptr );    
+
+    /**
+     * Called by the DHCP timer when it expires
+     *
+     * @since S60 v3.1
+     * @param pointer to 'this' (note: the static method)
+     */
+    static void dhcp_timer_expired(
+        void* this_ptr );    
+
+    /**
+     * Schedule the next operation to be run. If the queue is empty
+     * or there's already a running operation, do nothing.
+     */
+    void schedule_operation();
+
+    /**
+     * Queue the given external operation and run the next operation if
+     * no operation is executing.
+     *
+     * @param operation Operation to be queued.
+     * @param request_id ID of the operation.
+     * @note Ownership of the operation instance is transferred immediately
+     *       to this method. If there's an error, the instance is automatically
+     *       deleted.
+     */
+    void queue_ext_operation_and_run_next(
+        core_operation_base_c* operation,
+        u32_t request_id );
+
+    /**
+     * Notify EAPOL about a MIC failure.
+     *
+     * @param is_group_key_fail Is this a group or pairwise key failure.
+     */
+    void mic_failure(
+        bool_t is_group_key_fail );
+
+    /**
+     * Queue an operation to unload the drivers.
+     */
+    void queue_unload_drivers();
+
+private: // data
+
+    abs_core_server_callback_c& callback_m;
+    
+    abs_core_driverif_c& drivers_m;
+
+    /** Device settings. */
+    core_device_settings_s device_settings_m;
+
+    /** Queue for operations to be performed. */
+    core_type_list_c<core_operation_base_c> queue_m;
+    
+    /** Timer for running queue operations. */
+    abs_core_timer_c* queue_timer_m;
+    
+    /** Timer for unloading drivers */
+    abs_core_timer_c* driver_unload_timer_m;
+    
+    /** Core engine settings and statuses. */
+    core_settings_c core_settings_m;
+    
+    /** Connection data */
+    core_connection_data_c* connection_data_m;
+    
+    /** Device MAC address. */
+    core_mac_address_s own_mac_addr_m;
+    
+    /** Handler to EAPOL callbacks. */
+    core_eapol_handler_c* eapol_handler_m;
+    
+    /** EAPOL */
+    core_wlan_eapol_interface_c* eapol_m;
+
+    /** Timer for WPA TKIP counter measures. */
+    core_timer_counter_measures_c cm_timer_m;
+
+    /** Timer for romaing. */
+    abs_core_timer_c* roam_timer_m;
+
+    /** Timer for currently active operation's purposes */
+    abs_core_timer_c* operation_timer_m;
+
+    /** Timer for enabling power save after DHCP is done. */
+    abs_core_timer_c* driver_dhcp_timer_m;
+
+    /** Handler for received frames. Not owned by this pointer. */
+    abs_core_frame_handler_c* frame_handler_m;
+    
+    /** Handler for received indications. Not owned by this pointer. */
+    abs_core_event_handler_c* event_handler_m;
+
+    /** Scan list for storing beacons/probe responses. */
+    core_scan_list_c scan_list_m;
+
+    /** WPX adaptation instance. */
+    abs_core_wpx_adaptation_c* wpx_adaptation_m;
+
+    };
+
+#endif // CORE_SERVER_H