--- a/browserplugins/browseraudiovideoplugin/group/BLD.INF Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +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 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: Project build file for BrowserAudioVideoPlugin
-*
-*/
-
-
-#include <platform_paths.hrh>
-#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-// export localization files
-../loc/browseraudiovideoplugin.loc APP_LAYER_LOC_EXPORT_PATH(browseraudiovideoplugin.loc)
-../rom/BrowserAudioVideoPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPlugin.iby)
-../rom/BrowserAudioVideoPluginResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPluginResources.iby)
-
-#ifdef __SERIES60_32__
-
-PRJ_MMPFILES
-gnumakefile BrowserAudioVideoPluginIcon.mk
-
-BrowserAudioVideoPluginEcom.mmp // Plugin mmp file
-
-#else
-
-PRJ_EXTENSIONS
-START EXTENSION s60/mifconv
-OPTION TARGETFILE BrowserAudioVideoPlugin_aif.mif
-OPTION HEADERFILE BrowserAudioVideoPlugin.mbg
-OPTION SOURCEFILE iconlist.txt
-END
-
-PRJ_MMPFILES
-
-BrowserAudioVideoPluginEcom.mmp // Plugin mmp file
-
-#endif
-
-// End of File
-
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/group/bld.inf Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* 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 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: Project build file for BrowserAudioVideoPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+// export localization files
+../loc/browseraudiovideoplugin.loc APP_LAYER_LOC_EXPORT_PATH(browseraudiovideoplugin.loc)
+../rom/BrowserAudioVideoPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPlugin.iby)
+../rom/BrowserAudioVideoPluginResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPluginResources.iby)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+gnumakefile BrowserAudioVideoPluginIcon.mk
+
+BrowserAudioVideoPluginEcom.mmp // Plugin mmp file
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE BrowserAudioVideoPlugin_aif.mif
+OPTION HEADERFILE BrowserAudioVideoPlugin.mbg
+OPTION SOURCEFILE iconlist.txt
+END
+
+PRJ_MMPFILES
+
+BrowserAudioVideoPluginEcom.mmp // Plugin mmp file
+
+#endif
+
+// End of File
+
+
--- a/browserplugins/browseraudiovideoplugin/loc/BrowserAudioVideoPlugin.loc Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +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 the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: This is a localisation file for BAVP
-*
-*/
-
-
-// LOCALISATION STRINGS
-
-//d:Invalid clip information note.
-//d:Shown when media could not be opened.
-//w:
-//l:popup_note_window
-//r:2.8
-//
-#define qtn_mp_note_invalid_clip "Invalid Clip. Operation canceled."
-
-//d:Menu item for Video option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_video "Video"
-
-
-//d:Menu item for Video play option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_play "Play"
-
-//d:Menu item for Video stop option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_stop "Stop"
-
-//d:Menu item for Video pause option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_pause "Pause"
-
-//d:Menu item for Video fullscreen option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_fullscreen "FullScreen"
-
-//d:Menu item for Video volume change option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_volume_down "Volume Down"
-
-//d:Menu item for Video volume change option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_volume_up "Volume Up"
-
-//d:Menu item for Video Fast Forward option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_fast_forward "Fast Forward"
-
-//d:Menu item for Video Rewind option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_rewind "Rewind"
-
-//d:Menu item for Video Skip Forward option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_skip_forward "Skip Forward"
-
-//d:Menu item for Video Skip Backward option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_skip_backward "Skip Backward"
-
-//d:Menu item for Video volume mute option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_mute "Mute"
-
-//d:Menu item for Video Full Screen option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_full_screen "Full Screen"
-
-// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/loc/browseraudiovideoplugin.loc Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* 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 the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is a localisation file for BAVP
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d:Invalid clip information note.
+//d:Shown when media could not be opened.
+//w:
+//l:popup_note_window
+//r:2.8
+//
+#define qtn_mp_note_invalid_clip "Invalid Clip. Operation canceled."
+
+//d:Menu item for Video option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_video "Video"
+
+
+//d:Menu item for Video play option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_play "Play"
+
+//d:Menu item for Video stop option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_stop "Stop"
+
+//d:Menu item for Video pause option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_pause "Pause"
+
+//d:Menu item for Video fullscreen option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_fullscreen "FullScreen"
+
+//d:Menu item for Video volume change option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_volume_down "Volume Down"
+
+//d:Menu item for Video volume change option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_volume_up "Volume Up"
+
+//d:Menu item for Video Fast Forward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_fast_forward "Fast Forward"
+
+//d:Menu item for Video Rewind option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_rewind "Rewind"
+
+//d:Menu item for Video Skip Forward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_skip_forward "Skip Forward"
+
+//d:Menu item for Video Skip Backward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_skip_backward "Skip Backward"
+
+//d:Menu item for Video volume mute option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_mute "Mute"
+
+//d:Menu item for Video Full Screen option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_full_screen "Full Screen"
+
+// End of File
--- a/browserplugins/browsergpsplugin/group/BLD.INF Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +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 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: Project build file for BrowserLocationPlugin
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-../rom/BrowserGpsPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserGpsPlugin.iby)
-
-PRJ_MMPFILES
-GpsPluginEcom.mmp // Plugin mmp file
-
-// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/group/bld.inf Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* 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 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: Project build file for BrowserLocationPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/BrowserGpsPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserGpsPlugin.iby)
+
+PRJ_MMPFILES
+GpsPluginEcom.mmp // Plugin mmp file
+
+// End of File
--- a/browserplugins/browsersysteminfoplugin/group/BLD.INF Wed Sep 01 12:31:04 2010 +0100
+++ /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 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: Project build file for BrowserSystemPlugin
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-../rom/BrowserSystemInfoPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserSystemInfoPlugin.iby)
-
-PRJ_MMPFILES
-SystemInfoPluginEcom.mmp // Plugin mmp file
-
-// End of File
-
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/group/bld.inf Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* 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 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: Project build file for BrowserSystemPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/BrowserSystemInfoPlugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserSystemInfoPlugin.iby)
+
+PRJ_MMPFILES
+SystemInfoPluginEcom.mmp // Plugin mmp file
+
+// End of File
+
+
--- a/browserui/browser/loc/BrowserHp.loc Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-/*
-* Copyright (c) 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:
-*
-*/
-//d: Local home page title
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_title "Web Browser for S60"
-
-
-
-//d: Local home search web
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_search_web "Web"
-
-//d: Local home search images
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_search_images "Images"
-
-
-
-
-//d: Local home my top links
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_my_top "My Top Links"
-
-
-//d: Local home Shortcut Keys
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_shortcut_keys "Shortcut Keys"
-
-
-//d: Local home alt text selection key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_selection_key "Selection key"
-
-
-//d: Local home selection key label
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_selection_key_label "Open link, or start entering text in a form input field"
-
-
-//d: Local home label c key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_c_key_label "If more than one window is open, closes the current window"
-
-
-
-//d: Local home label 1 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_1_key_label "Show bookmarks"
-
-
-//d: Local home label 2 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_2_key_label "Text search in current page"
-
-
-
-//d: Local home label 3 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_3_key_label "Back one page"
-
-
-//d: Local home label 5 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_5_key_label "List windows"
-
-
-//d: Local home label 8 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_8_key_label "Show Page Overview"
-
-
-
-//d: Local home label 9 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_9_key_label "Go to address"
-
-
-
-//d: Local home label star key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_star_key_label "Zoom images out"
-
-//d: Local home label hash key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_hash_key_label "Zoom images in"
-
-//d: Local home shortcut keys note
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_note "Note"
-
-//d: Local home shortcut keys unavailable
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_shortcut_unavailable "Shortcut keys not available while entering text"
-
-//d: Local home browser forum title
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_browser_forum "Browser Forum"
-
-//d: Local home join discussion label 1
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_join_discussion_1 "Join the discussion at"
-
-//d: Local home join discussion label 2
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_join_discussion_2 "the S60 user community forum!"
-
-//d: Local home unused key label
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_unused_key_label "Not used"
-
--- a/browserui/browser/loc/Feeds.loc Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,552 +0,0 @@
-/*
-* Copyright (c) 2002-2007 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: Localized strings.
-*
-*/
-
-
-// APPLICATION INFORMATION
-
-/* Application related */
-/* -------------------------------------------------------------------- */
-//d:application name
-//l:list_single_large_graphic_pane_t1
-//w:
-//r:3.0
-#define qtn_apps_feeds_list "Web Feeds"
-//d:application name
-//l:cell_app_pane_t1
-//w:
-//r:3.0
-#define qtn_apps_feeds_grid "Web Feeds"
-
-
-/* Options Menu */
-/* -------------------------------------------------------------------- */
-//d: Menu text to update the selected feed.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_feeds_update "Update"
-
-//d: Menu text to update all feed.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_feeds_update_all "Update All"
-
-//d: Menu text for the manage sub-menu
-//l:list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-#define qtn_feeds_manage "Manage"
-
-//d: Menu text to open the associated web page in the browser.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_feeds_open_full_story "Open Full Story"
-
-
-/* Manage Sub-Menu */
-/* -------------------------------------------------------------------- */
-//d: Menu text to create a new feed.
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_new_feed "Add feed"
-
-//d: Menu text to edit the current feed.
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_edit "Edit feed"
-
-/* Info Sub-Menu */
-/* -------------------------------------------------------------------- */
-//d: Menu text to view the about info.
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_about "About"
-
-
-/* Folder View */
-/* -------------------------------------------------------------------- */
-//d: The title of the folder-view when the top-level folder is showing.
-//l:title_pane_t2/opt9
-//w:
-//r:3.0
-#define qtn_feeds_folder_view_title "Web Feeds"
-
-/* -------------------------------------------------------------------- */
-//d: The text displayed in the folder view when there are no feeds or folders.
-//l:main_list_empty_pane
-//w:
-//r:3.1
-#define qtn_feeds_no_feeds "No Web Feeds"
-
-/* Feeds View */
-/* -------------------------------------------------------------------- */
-//d: The text string at the end of a feed that's associated with the
-//d: item's full story -- the browser is launched when this text is selected.
-//l:None
-//w:
-//r:3.0
-#define qtn_feeds_feeds_view_see_full_story "See full story"
-
-/* -------------------------------------------------------------------- */
-//d: The default title of enclosures. The title is used to display the
-//d: the enclosure in content area of the Feeds View.
-//l:None
-//w:
-//r:3.1
-#define qtn_feeds_feeds_view_enclosure "Podcast"
-
-
-// -----------------------------------------------------------------
-// Touch Toolbar Button strings
-// -----------------------------------------------------------------
-
-//---------------------------------
-// Feeds Folder View Toolbar Strings
-//---------------------------------
-// Update Selected Feed
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_folder_update_selected_tt "Update Selected Feed"
-
-// Update All Feed
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_folder_update_all_tt "Update All Feeds"
-
-// Open into article listing view
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_folder_open_tt "Open into article listing view"
-
-
-//---------------------------------
-// Feeds Topic View Toolbar Strings
-//---------------------------------
-// Update Feed
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_topic_update_tt "Update Feed"
-
-// Back to Page
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_topic_back_to_page_tt "Back to Page"
-
-// Open into detail view
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_topic_open_tt "Open into detail view"
-
-//---------------------------------
-// Feeds Feed View Toolbar Strings
-//---------------------------------
-// Previous Article
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_feed_previous_article_tt "Previous Article"
-
-// Show Full Story
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_feed_show_full_story_tt "Show Full Story"
-
-// Next Article
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_feed_next_article_tt "Next Article"
-
-
-/* Wait Dialog */
-/* -------------------------------------------------------------------- */
-//d: Information text when a feed is updating.
-//l:popup_note_wait_window
-//w:
-//r:3.0
-#define qtn_feeds_updating_wait_dialog_text "Updating"
-
-//d: Information text when a feed is opening.
-//l:popup_note_wait_window
-//w:
-//r:5.0
-#define qtn_feeds_opening_wait_dialog_text "Opening"
-/* -------------------------------------------------------------------- */
-//d: Information text when all feeds are updating.
-//l:popup_note_wait_window
-//w:
-//r:3.1
-#define qtn_feeds_updating_all_wait_dialog "Updating all feeds"
-
-
-/* Delete Dialog */
-/* -------------------------------------------------------------------- */
-//d: Information text when the user chooses to delete a feed.
-//d: The text follows this form, "Delete %U?", where %U is
-//d: the name of the feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_delete_dialog_text "Delete %U?"
-
-//d: Information text when the user chooses to delete multiple feeds.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_delete_multiple_dialog_text "Delete selected feeds?"
-
-
-/* Edit/Add Feed/Folder Dialog */
-/* -------------------------------------------------------------------- */
-//d: Header test for the feed's name.
-//l:list_double_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_name_dialog_text "Title"
-
-//d: Header test for the feed's url.
-//l:list_double_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_url_dialog_text "Address"
-
-//d: Text displayed in the New feed dialog.
-//l:list_single_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_new_feed_item "New feed"
-
-//d:Header text for Automatic updating of web feeds
-//l:list_setting_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_autoupdating_text "Automatic updating"
-
-//d: Selectable text for the Automatic updating setting
-//d: If Off is selected, automatic updating does not occur
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_autoupdating_off "Off"
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 15 minutes
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_15min "Every 15 minutes"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every hour
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_hourly "Every hour"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 4 hours
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_4hours "Every 4 hours"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done daily
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_daily "Every day"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done weekly
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_weekly "Every week"
-
-
-//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
-//d: noting that turning the feature on may cost them money
-//l: popup_note_window
-//w:
-//r:7.1
-//
-#define qtn_feeds_new_feed_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
-
-
-/* Import/Export Feed Strings */
-/* -------------------------------------------------------------------- */
-
-
-
-//d: Menu text to import selected or marked feeds from a file
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 3.2
-#define qtn_options_import_feeds "Import Feeds"
-
-//d: Popup waiting note when searching for feed files
-//d: stored on the phone
-//l: popup_note_wait_window
-//w:
-//r: 3.2
-#define qtn_wait_searching_for_feeds "Searching for feeds..."
-
-//d: When the search for feeds has completed, a header
-//d: over the list of results
-//l: heading_pane_t1
-//w:
-//r: 3.2
-#define qtn_popup_title_feeds_files_found "Feeds Files Found:"
-
-//d: When the search for feeds has completed, if no
-//d: feeds are found on the device, this error is shown
-//l: popup_note_window/opt1
-//w:
-//r: 3.2
-#define qtn_feeds_no_feeds_found_on_device "No feeds found on device"
-
-//d: A wait screen for when the phone is importing a feed file
-//l: popup_note_wait_window
-//w:
-//r: 3.2
-#define qtn_wait_importing_feeds "Importing Feeds..."
-
-//d: Menu text to export selected or marked feeds to a file
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 3.2
-#define qtn_options_export_feeds "Send"
-
-//d: When exporting some feeds to a file, header on a popup
-//d: asking the user to name the file
-//l: popup_query_data_window/opt1
-//w:
-//r: 3.2
-#define qtn_feeds_name_exported_file "Name the file to be sent:"
-
-//d: When exporting some feeds to a file, if the
-//l: popup_note_window
-//w:
-//r: 3.2
-#define qtn_feeds_export_opml_title_needed "You must enter a name for the file."
-
-//d: Wait window as feeds are exported into a file
-//l: popup_note_wait_window
-//w:
-//r: 3.2
-#define qtn_wait_processing "Processing..."
-
-//d: Confirmation to import feeds from an OPML file
-//d: that has been downloaded or received from another application
-//d: The %U referes to the filename of the OPML file
-//l: popup_note_window
-//w:
-//r: 3.2
-#define qtn_feeds_query_import_now "Import feeds from %U now?"
-
-
-/* Error Strings */
-/* -------------------------------------------------------------------- */
-//d: Information text for the error dialog. Displayed when the user
-//d: doesn't include a title when editing or adding a feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_title_needed "Title needed"
-
-//d: Information text for the error dialog. Displayed when the user
-//d: doesn't include a url when editing or adding a feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_address_needed "Address needed"
-
-//d: Information text for the error dialog. Displayed when the user
-//d: enters a single quote character anywhere in the feed title.
-//l:popup_note_window
-//w:
-//r:7.0
-#define qtn_feeds_title_single_quote_not_allowed "Single quote character (’) is not allowed in the title"
-
-//d: Information text for the error dialog. Displayed when the user
-//d: tries to add the same feed a second time.
-//d: %U is the name of the feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_duplicate_feed_error_dialog_text "%U already subscribed"
-
-//d: Information text for the error dialog. Displayed when the user
-//d: tries to add/edit a feed that has a non-unique title.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_duplicate_title_error_dialog_text "Title must be unique"
-
-//d: Information text for the error dialog. Displayed when a requested
-//d: feed is malformed(corrupted/empty).
-//l:popup_note_window
-//w:
-//r:5.0
-#define qtn_feeds_malformed_dialog_text "Feed cannot be processed"
-
-//d: Information text for the main pane. Displayed when a requested
-//d: feed couldn't be fetched from the network.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_network_error_main_pane_text "Couldn't update feed"
-
-//d: Information text for the main pane. Displayed when a requested
-//d: feed is malformed.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_malformed_main_pane_text "Can't process feed"
-
-//d: Information text for the main pane. Displayed when a requested
-//d: feed is in an unsupported format.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_unsupported_main_pane_text "Feed format is not supported"
-
-//d: Information text for the main pane. Displayed when a requested
-//d: feed has invalid URL.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_invalid_url_main_pane_text "Invalid web address"
-
-//d: Information text for the main pane. Displayed when a requested
-//d: feed fails for some other reason.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_general_error_main_pane_text "An unkown error occurred"
-
-//d: Information text for the error dialog. Displayed when a requested
-//d: feed fails for some other reason.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_general_error_dialog_text "An unkown error occurred"
-
-//d: Information text for the error dialog. Displayed when an OPML file
-//d: somehow gets deleted after it is found and displayed in the list, and the
-#define qtn_feeds_malformed_dialog_text "Can't process feed"
-
-//d: Information text for the error dialog. Displayed when a requested
-//d: feed is in an unsupported format.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_unsupported_dialog_text "Feed format is not supported"
-//d: user then tries to select and import it.
-//l:popup_note_window
-//w:
-//r:7.1
-#define qtn_feeds_file_not_found_dialog_text "File Not Found"
-
-/* Misc Strings */
-/* -------------------------------------------------------------------- */
-//d: Text displayed in the Topic-View when an item's name isn't available.
-//l:list_single_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_unnamed_item "Unnamed item"
-
-
-/* Strings copied from wmlbrowser.loc */
-/* -------------------------------------------------------------------- */
-//d:DO element menu item
-//l:list_single_popup_submenu_pane_t1
-//
-#define text_wml_option_back "Back"
-
-//d:Menu item in Bookmarks View: activate highlighted bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmlbm_load_bm "Activate"
-
-// WmlBrowser Settings/Session listbox items
-
-//d:Browser settings session list item texts
-//l:heading_pane_t1
-//
-#define qtn_wmls_session_info "Session info"
-
-//d:Format title text in session view.
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_ap "Access point name:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_bearer_type "Bearer type:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_max_speed "Max. connection speed:"
-
-//d:Text in About Product information note's heading
-//l:heading_pane_t1
-#define qtn_browsers_title_about "Name and Version"
-
-//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
-//l:popup_info_list_pane_t1
-#define qtn_browsers_about_version_label "Version: %0U (%1U)"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_browser_set_bearer_hscsd "HSCSD"
-
-//d: Information text for the error dialog. Displayed when a requested
-//d: feed couldn't be fetched from the network.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_network_error_dialog_text "Couldn't update feed"
-
-
--- a/browserui/browser/loc/WmlBrowser.loc Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3229 +0,0 @@
-/*
-* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* This is a localisation file.
-* A .loc file is the one and only place where the logical strings
-* to be localised are defined.
-*
-*
-*/
-
-
-
-// LOCALISATION STRINGS
-
-//d:Information note text
-//l:popup_note_window
-//
-#define qtn_wml_informationnote_unable_to_retrieve "Unable to retrieve"
-
-//d:Move - cancel softkey, Softkey used when moving the bookmark to folder
-//l:control_pane_t1/opt7
-//
-#define text_softkey_move "Move"
-
-//d:application name
-//l:list_single_large_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_apps_browserng_list "BrowserNG"
-
-//d: application name
-//l: cell_app_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_apps_browserng_grid "BrowserNG"
-
-
-//d:Confirmation query text on exiting Browser
-//l:popup_note_window
-//
-#define text_wml_exit_confirm "Quit browsing?"
-
-// strings for main menu for multipurpose browser display
-
-//d:Open selected deck
-//d:Open focused anchor node.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_open "Open"
-
-
-//d:Menu item for DO elements' parent menu text
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_list_history "History"
-
-
-//d:Menu item for DO elements' parent menu text
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_srv_opts "Service options"
-
-//d:Menu item to get access to the bookmarks
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_wml_faves "Bookmarks"
-
-//d:Menu item to
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browser_list_close "Close browser"
-
-//d: main menu item to rotate the display orientation
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_rotate_display "Rotate display"
-
-
-//d:Menu access to navigation submenu
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wml_list_navigation "Navigation functions"
-
-
-//d:Menu item to change connection
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_change_connection "Change connection"
-
-//d:Menu item brings up input field for custom URL address
-//d:Menu item in bookmark favorites view
-//l:list_single_pane_t1_cp2
-//
-#define text_wml_option_goto "Go to address"
-
-//d:Text in middle soft key (goto address function)
-//l:control_pane_t3/opt7
-//w:
-//r:3.2
-#define qtn_browser_msk_goto "Go to"
-
-//d:Menu item to create a bookmark
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-//
-#define qtn_wmlbm_fav_saveas_bm "Add bookmark"
-
-//d:SubMenu item to create a bookmark
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:5.0 & 3.2.3
-//
-#define qtn_wmlbm_fav_saveas_bm_sm "Add bookmark"
-
-//d:Menu item to show the zoom slider
-//l:list_single_pane_t1_cp2
-//r:5.0
-//
-#define qtn_wml_list_zoom_slider_show "Show Zoom Slider"
-
-//d:Menu item to hide the zoom slider
-//l:list_single_pane_t1_cp2
-//r:5.0
-//
-#define qtn_wml_list_zoom_slider_hide "Hide Zoom Slider"
-
-//d:Menu item to reload currently showed card
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_reload "Reload"
-
-//d:Menu item the user can get different kind of information
-//d:about service in use
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wml_option_infoview "Info"
-
-//d:Menu item to terminate network connection
-//d:about service in use
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_dconn "Disconnect"
-
-//d:Menu item to load and show unloaded image
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_fetch_img "Show Images"
-
-//d:Menu item to entirely clear the cache
-//l:list_single_popup_submenu_pane_t1
-//
-#define text_wml_option_empty_cache "Clear cache"
-
-//d:Menu item to save current card
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_save_pgs "Save"
-
-//d:Menu item to view/change browsing settings
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmls_browser_opt_sett "Preferences"
-
-//d:Browser main menu
-//l:list_single_pane_t1_cp2
-//
-#define text_wml_option_help "Help"
-
-//d:Browser main menu
-//l: list_single_pane_t1_cp2/opt3
-//
-#define qtn_browser_options_help "Help"
-
-//d:Options menu item to open Downloads List.
-//l:list_single_pane_t1_cp2
-//w:
-//
-#define qtn_browser_list_downloads "Downloads"
-
-//d:Browser main menu
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_view_images "View Images"
-
-//d:Menu access to tools submenu
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_browser_list_folder_tools "Tools"
-
-//d:Strings for page info submenu
-//l:list_single_popup_submenu_pane_t1
-#define qtn_browser_list_page_info "Page info"
-
-//d:Strings for Info submenu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_opt_smenu_session "Session"
-
-//d:Strings for Info submenu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_opt_smenu_security "Security"
-
-//d:open new page query
-//l:popup_note_window
-//
-#define qtn_wml_query_dwnl "Downloading ongoing. Cancel previous downloading?"
-
-//d:External app started browser with an invalid bookmark id
-//l:popup_note_window
-//
-#define qtn_wml_bookmark_not_found "Bookmark does not exist!"
-
-//d:Information note text
-//l:popup_note_window
-//
-#define text_wml_cache_emptied_note "Cache cleared"
-
-//d:Text to display if the current access point is invalid while editing bookmark
-//l:list_single_heading_pane_t1
-#define qtn_wmlbm_text_ap_invalid "Invalid"
-
-
-//d:Error note message: Invalid accesspoint is defined in a bookmark
-//l:popup_note_window
-#define qtn_wml_info_invalid_ap "Invalid access point. Edit bookmark."
-
-//d:Error note message: Invalid accesspoint is defined in a saved deck
-//l:popup_note_window
-#define qtn_wml_confquery_invalid_ap "Invalid access point. Use default?"
-
-//d:Command text associated to a softkey in the control pane.
-//d:Go to root level (folder).
-//l:control_pane_t1/opt7
-//
-#define text_softkey_root_level "Root level"
-
-// Authentication Dialog
-
-//d:label for bookmark name query
-//l:popup_query_data_window
-#define qtn_wml_query_bookmark_title "Enter bookmark name"
-//d:label for saved deck name query
-//l:popup_query_data_window
-#define qtn_wml_query_savedpage_title "Enter name for saved page"
-
-//d:title of bookmark favorites view
-//l:title_pane_t2/opt9
-//
-#define text_wml_option_bookmarks "Bookmarks"
-
-
-//d:Empty list text in Bookmarks View (displayed if no bookmarks exist)
-//l:main_list_empty_pane
-//
-#define text_wml_no_bookmarks "No bookmarks"
-
-//d:Prompt for renaming a saved deck in Saved Decks View.
-//l:popup_query_data_window
-//
-#define qtn_wml_prmpt_edit_name "Edit name:"
-
-//d:Information note text in Bookmarks View: could not move items due to name collision
-//d:Information note text in Saved Decks View: could not move items due to name collision
-//l:popup_note_window
-//
-#define qtn_fldr_names_in_use_rename "Some of the names are already in use. Please rename those items"
-
-//d:Menu item in Bookmarks View: create new bookmark
-//l:list_single_pane_t1_cp2
-//
-#define text_wmlbm_option_enter_new "Add bookmark"
-
-//d:Menu item in Bookmarks View: activate highlighted bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmlbm_load_bm "Activate"
-
-//d:Menu item in Bookmarks View: edit highlighted bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmlbm_edit_bm "Edit bookmark"
-
-
-//d:Menu item in Bookmarks View: set prefered bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_list_set_as_preferred "Set as preferred"
-
-//d:Menu item in Bookmarks View: set un prefered bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_list_unset_from_preferred "Unset from preferred"
-
-//d:Menu access to bookmark management submenu (Bookmarks view)
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wmlbm_manage_bm "Edit"
-
-//d:Bookmark Edit Form title editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_bmtitle "Title"
-
-//d:Bookmark Edit Form URL editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_bmadrs "Address"
-
-//d:Bookmark Edit Form Access Point selector label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_wapap "Access point"
-
-//d:Name for "Default" Access Point
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmlbm_default_wapap "Default"
-
-//d:Text to display if there are no Access Points
-//l:list_single_heading_pane_t1
-//
-#define qtn_wmlbm_text_ap_none "None"
-
-//d:Bookmark Edit Form user name editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_username "User name"
-
-//d:Bookmark Edit Form password editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_passwd "Password"
-
-//d:Error note message: attempt to select AP when no such exist.
-//l:popup_note_window
-//
-#define qtn_wmlbm_info_no_valid_ap "No valid access point available. Please add one to preferences."
-
-//d:Error note message: database is inaccessible.
-//l:popup_note_window
-//
-#define qtn_wmlbm_err_db_inaccessible "Cannot access\ndatabase.\nTry again later."
-
-//d:Info note message: bookmark was saved.
-//l:popup_note_window
-//
-#define text_wml_bm_saved "Bookmark saved"
-
-//d:Error note message: bookmark was not saved.
-//l:popup_note_window
-//
-#define qtn_wmlbm_bm_not_saved "Bookmark not saved"
-
-//d:Default name for new bookmark.
-//l:list_single_heading_pane_t1
-//
-#define qtn_wmlbm_default_bm_title "New bookmark"
-
-//d:Left softkey: (accept typing and activate typed URL address)
-//l:control_pane_t1/opt7
-//
-#define qtn_wml_softk_go "Go to"
-
-//d:Confirmation query prompt if no URL specified for a bookmark.
-//l:popup_note_window
-//
-#define qtn_wmlbm_query_address "Address needed.\nAdd an address?"
-
-//d:Information note text in Bookmarks View: name is conflicting with existing name.
-//d:Information note text in Saved Decks View: name is conflicting with existing name.
-//l:popup_note_window
-//
-#define qtn_wmlbm_name_already_used "Name already in use"
-
-//Saved Pages.
-
-//d:Confirmation query text in Bookmarks View
-//d:Confirmation query text in Saved Decks View
-//l:popup_note_window
-//
-#define qtn_wml_quest_overwrite "Page already exists\Overwrite?"
-
-//d:Menu item in Saved Decks View
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_refresh "Refresh"
-
-//d:Menu access to saved page management submenu (Saved Pages view)
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wml_list_manage_sp "Manage saved pages"
-
-//d:Title for Saved Decks View
-//l:title_pane_t2/opt9
-//
-#define qtn_wml_title_svd_pgs "Saved pages"
-
-//d:Empty list text for Saved Decks View: displayed if there are no saved pages.
-//l:main_list_empty_pane
-//
-#define qtn_wml_no_svd_pgs "No saved pages"
-
-//d:Information note text in Saved Decks View: page saved
-//l:popup_note_window
-//
-#define qtn_wml_conf_pages_saved "Page saved"
-
-//d:Information note text in Saved Decks View
-//l:popup_note_window
-//
-#define qtn_wml_conf_pages_refreshed "Page refreshed"
-
-//d: Wait note while refreshing a saved deck
-//l: popup_note_wait_window
-//
-#define qtn_wml_page_refreshing "Refreshing page"
-
-//d:Menu item in Bookmarks View: go back to Browser View
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_list_ret_page "Back to page"
-
-//
-// Settings texts
-//
-
-
-//d:Browser page info title text
-//l:heading_pane_t1
-#define qtn_browser_query_current_page "Current page"
-
-
-//d: Browser page info item text
-//l:popup_info_list_pane_t1
-#define qtn_browser_query_current_page_url "URL"
-
-
-// WmlBrowser Settings/Session listbox items
-
-//d:Browser settings session list item texts
-//l:heading_pane_t1
-//
-#define qtn_wmls_session_info "Session info"
-
-//d:Format title text in session view.
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_ap "Access point name:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_bearer_type "Bearer type:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_max_speed "Max. connection speed:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_set_bearer_data_call "Data call"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_set_bearer_packet_data "Packet data"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_browser_set_bearer_hscsd "HSCSD"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_set_auto_detect "Auto detect"
-
-//d:Browser security item texts
-//l:heading_pane_t1
-//
-#define qtn_wmlsec_security_info "Security info"
-
-//d:Browser security item texts
-//l:heading_pane_t1
-//
-#define qtn_wmlsec_cert_details "Certificate details"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_serialno "Serial number:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_contype "Connection:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_issuer "Issuer:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_cert_owner "Owner:\n%U"
-
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_valid_from "Valid from:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_valid_to "Valid to:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_fingerprint "Fingerprint:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_server "Server authentication:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_con_secur "Secure"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_con_unsec "Unsecure"
-
-//d: A list box item referring to settings categorised as Page
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_general "General"
-
-//d: A list box item referring to settings categorised as General
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_page "Page"
-
-//d: A list box item referring to settings categorised as Privacy
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_privacy "Privacy"
-
-//d: When the General Settings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_general "General Settings"
-
-//d: When the PageSettings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_page "Page settings"
-
-//d: When the Privacy Settings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_privacy "Privacy settings"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_local_set_default_ap "Default access point"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:2.8
-//
-#define qtn_browsers_sett_autoload_objects "Autoload images and objects"
-
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_wmls_local_set_pageoverview "Mini map"
-
-//d: Selectable text for the Page Overview setting
-//d: Page Overview is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_pageoverview_on "On"
-
-//d: Selectable text for the Page Overview setting
-//d: Page Overview is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_pageoverview_off "Off"
-
-//d:Browser settings main list item texts
-//d:Back list is the History list
-//l:list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_back_list "Back list"
-
-//d: Selectable text for the Back list setting
-//d: If On is selected, back list is shown when SK2 Back
-//d: is pressed in page view.
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_back_list_on "On"
-
-//d: Selectable text for the Back list setting
-//d: If Off is selected, back list is not shown when SK2 Back
-//d: is pressed in page view.
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_back_list_off "Off"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_auto_refresh "Automatic page refresh"
-
-//d: Selectable text for the Automatic page refresh setting
-//d: Automatic page refresh is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_auto_refresh_on "On"
-
-//d: Selectable text for the Automatic page refresh setting
-//d: Automatic page refresh is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_auto_refresh_off "Off"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_all_small "Smallest"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_smaller "Small"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_normal "Normal"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-
-#define qtn_xhtml_settings_larger "Large"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_all_large "Largest"
-
-//d: Browser character encoding in browser settings: ISO 8859-2
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_2 "ISO 8859-2"
-
-//d: Browser character encoding in browser settings: ISO 8859-4
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_4 "ISO 8859-4"
-
-//d: Browser character encoding in browser settings: ISO 8859-5
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_5 "ISO 8859-5"
-
-//d: Browser character encoding in browser settings: ISO 8859-7
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_7 "ISO 8859-7"
-
-//d: Browser character encoding in browser settings: ISO 8859-9
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_9 "ISO 8859-9"
-
-
-//d: Browser default character encoding in browser settings: ISO 8859-6 (Arabic)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_88596 "Arabic (ISO)"
-
-
-//d: Browser default character encoding in browser settings: Windows-1256 (Arabic)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1256 "Arabic (Windows)"
-
-
-//d: Browser default character encoding in browser settings: ISO 8859-8 (Hebrew)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_88598 "Hebrew (ISO-Visual)"
-
-
-//d: Browser default character encoding in browser settings: ISO 8859-8-i (Hebrew)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_88598_i "Hebrew (ISO-Logical)"
-
-//d: Browser default character encoding in browser settings: Windows-1255 (Hebrew)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1255 "Hebrew (Windows)"
-
-//d: Browser default character encoding in browser settings: Windows-1250
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1250 "Windows-1250"
-
-//d: Browser default character encoding in browser settings: Windows-1251
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1251 "Windows-1251"
-
-//d: Browser default character encoding in browser settings: Windows-1253
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1253 "Windows-1253"
-
-//d: Browser default character encoding in browser settings: Windows-1254
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1254 "Windows-1254"
-
-//d: Browser default character encoding in browser settings: Windows-1257
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1257 "Windows-1257"
-
-//d: Browser default character encoding in browser settings: Windows-1258
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1258 "Windows-1258"
-
-//d: Browser default character encoding in browser settings: Automatic
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_automatic "Automatic"
-
-//d: Browser default character encoding in browser settings: Tis-620
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_tis_620 "Thai"
-
-
-//d: Browser default character encoding in browser settings: Windows-874
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_874 "Thai (Windows-874)"
-
-
-//d: Browser default character encoding in browser settings: Shift_JIS
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_shift_jis "shift_jis"
-
-//d: Browser default character encoding in browser settings: euc-jp
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_euc_jp "euc-jp"
-
-//d: Browser default character encoding in browser settings: iso-2022-jp
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_2022_jp "iso-2022-jp"
-
-//d: Browser default character encoding in browser settings: Ucs-2
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_ucs_2 "Unicode (ucs-2)"
-
-//d: Browser default character encoding in browser settings: KOI8-R
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_shift_koi8_r "KOI8-R"
-
-//d: Browser default character encoding in browser settings: KOI8-U
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_shift_koi8_u "KOI8-U"
-
-//d: Browser default character encoding in browser settings: ISCII
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iscii "ISCII"
-
-//d: Browser default character encoding in browser settings: Korean (Euc-Kr)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_euc_kr "Korean (Euc-Kr)"
-
-//d: Browser default character encoding in browser settings: Korean (KSC5601)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_ksc_5601 "Korean (KSC5601)"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_save_receipt "Save receipt"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_set_wallet_auto "Automatic eWallet use"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_cookie_allow "Allow"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_cookie_reject "Reject"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wtai_dtmf_alcon "Always confirm"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wtai_dtmf_one "Confirm once"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_save_to_notepad "To notepad"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_save_not "Never"
-
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wall_auto_on "On"
-
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wall_auto_off "Off"
-
-
-// Settings Menu texts
-
-//d:Browser settings main menu
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmls_local_set_opt_change "Change"
-
-//d:Invalid certificate indicator dialog's message body
-//l:popup_query_wml_sign_window_2
-//
-// #define qtn_wmlsec_invalid_cert "Server could not be authenticated\nReason:\n%U"
-
-//d:Certificate error: Server certificate not valid yet
-//l:popup_query_wml_sign_window_2
-//
-// #define text_wml_certificate_sc_not_val "Server certificate not valid yet"
-
-//d:Authentication of the WML card failed.
-//l:popup_note_window
-#define text_wml_auth_fail_retry_query "Authorisation failed. Try again?"
-
-//d:if the secured connection established.
-//l:popup_note_window
-#define qtn_wmlsec_conn_secured "Connection secured to %U"
-
-//d:when anonymous connection established to server
-//l:popup_note_window
-#define qtn_wmlsec_conn_sec_unk_serv "Connection secured to unknown server"
-
-//d:Confirmation note text about the closure of the active connection
-//l:popup_note_window
-//
-#define qtn_ics_cnote_disconn_from_service "Connection to service is closed"
-
-//d:Browser settings font size
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_pref_fontsize "Font size"
-
-//d:Browser settings cookies
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_sett_cookies "Cookies"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_image_on "On"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_image_off "Off"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_expand_on "On"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_expand_off "Off"
-
-//d:Confirmation query shown if the Search Menu item is selected, and the Search Web Setting value is empty
-//d: Accepting this query opens the search page setting for editing
-//l: popup_note_window
-#define qtn_browser_query_search_url "Search page address is missing. Define now?"
-
-//d: Prompt dialog shown to enter a url for the Search Page setting
-//l: popup_query_data_window
-#define qtn_wml_prompt_search_url "Search page address"
-
-//d: Browser default character encoding in browser settings
-//l: list_setting_pane_t1
-//
-#define qtn_brow_sett_defenc "Default encoding"
-
-// Text used by Progress bar
-
-//d: Percent mark ("%") to be used in the progress bar to indicate the percentage of the data loaded at the moment.
-//d: %N is replaced by the actual percentage number.
-//l: none
-#define qtn_wml_unit_percent "%N %"
-
-
-//d: Size of data in kilo bytes
-//d: text used by progress bar
-//l: none
-#define qtn_wml_unit_kb "%N kB"
-
-//d: Size of data in mega bytes
-//d: text used by progress bar
-//l: none
-#define qtn_wml_unit_mb "%U MB"
-
-//d: Browser default character encoding in browser settings: ISO 8859-1 (Latin 1)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_latin1 "Latin"
-
-//d: Browser default character encoding in browser settings: GB 2312 (Simplified Chinese)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_gb2312 "Simplified Chinese"
-
-//d: Browser default character encoding in browser settings: Big5 (Traditional Chinese)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_big5 "Traditional Chinese"
-
-//d: Browser default character encoding in browser settings: UTF-8 (Unicode)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_utf8 "Unicode (UTF-8)"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_full_screen "Full screen"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_full_screen_normal "Normal"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_full_screen_full_screen "Full screen"
-
-//d:Browser settings to display softkeys
-//l:list_setting_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_softkeys "Display softkeys"
-
-//d: Selectable text for the softkey setting
-//d: Will display the softkeys if on
-//l: set_value_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_softkeys_on "On"
-
-//d: Selectable text for the softkey setting
-//d: Will not display the softkeys if off
-//l: set_value_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_softkeys_off "Off"
-
-//d:Browser settings main list item texts
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_search "Search page address"
-
-//d:Browser settings main list item texts
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_url_suffix "URL Suffix"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_media_volume "Media volume"
-
-//d:Browser settings selectable item texts volume muted
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_muted "Muted"
-
-//d:Browser settings selectable item texts volume level 1
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_1 "Level 1"
-
-//d:Browser settings selectable item texts volume level 2
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_2 "Level 2"
-
-//d:Browser settings selectable item texts volume level 3
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_3 "Level 3"
-
-//d:Browser settings selectable item texts volume level 4
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_4 "Level 4"
-
-//d: Setting for showing or hiding security related warnings
-//l: list_setting_pane_t1
-#define qtn_browser_sett_security "Security notifications"
-
-//d: Show security related warnings
-//l: list_set_graphic_pane_t1
-#define qtn_browser_sett_item_show_all "Show"
-
-//d: Hide security related warnings
-//l: list_set_graphic_pane_t1
-#define qtn_browser_sett_item_hide_all "Hide"
-
-//d: Setting for open downloading files progressively
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_open_loading "Open while loading"
-
-//d: Automatically open downloaded files progressively
-//l: list_set_graphic_pane_t1
-#define qtn_brow_sett_open_downloads_yes "Yes"
-//
-#define qtn_browser_list_check_for_updates "Update Browser"
-
-//d:Browser main menu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_browser_version "Browser Version"
-
-//d:Browser main menu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_browser_help "Browser Help"
-//
-#define qtn_brow_sett_product_update_manual "Manual"
-#define qtn_brow_sett_product_update_auto "Automatic"
-
-//d: Not automatically open downloaded files progressively
-//l: list_set_graphic_pane_t1
-#define qtn_brow_sett_open_downloads_no "No"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
- //
-#define qtn_wmls_local_set_imei_notif "IMEI notification"
-
-//d:Enables IMEI sending
-//d:Browser settings selectable item text
-//l:list_set_graphic_pane_t1
-#define qtn_wmls_local_set_imei_notif_enabled "Enabled"
-
-
-//d:Disables IMEI sending
-//d:Browser settings selectable item text
-//l:list_set_graphic_pane_t1
-#define qtn_wmls_local_set_imei_notif_disabled "Disabled"
-
-
-//d: Boomark folder "Download applications"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_applications "Download applications"
-
-//d: Boomark folder "Download images"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_images "Download images"
-
-//d: Boomark folder "Download tones"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_tones "Download tones"
-
-//d: Boomark folder "Download videos"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_videos "Download videos"
-
-//d: Boomark folder "Download skins"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_skins "Download skins"
-
-//d: Boomark folder "Download Music"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_music "Download music"
-
-//d: Boomark folder title "Download applications"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_applications "Download applications"
-
-//d: Boomark folder title "Download images"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_images "Download images"
-
-//d: Boomark folder title "Download tones"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_tones "Download tones"
-
-//d: Boomark folder title "Download videos"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_videos "Download videos"
-
-//d: Boomark folder title "Download skins"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_skins "Download skins"
-
-//d: Boomark folder title "Download music"
-//l: title_pane_t2/opt9
-//w:
-//r:3.0
-//
-#define qtn_browserbm_folder_title_download_music "Download music"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_adaptive_bookmarks "Recent URLs"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_adaptive_bookmarks_on "On"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_adaptive_bookmarks_hide_folder "Hide folder"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_adaptive_bookmarks_off "Off"
-
-
-//d:Empty list text for Recent URLs Folder: displayed if there are no Recent URLs.
-//l:main_list_empty_pane
-//
-#define qtn_browserbm_no_adaptive_bookmarks "No recent URLs"
-
-//d:Text for Recent URLs Folder in Bookmarks view.
-//l:list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_adaptive_bookmarks "Recent URLs"
-
-//d: Title of Recent URLs view
-//l: title_pane_t2/opt9
-//w:
-//r:3.2
-//
-#define qtn_browserbm_title_adaptive_bookmarks "Recent URLs"
-
-//d: Confirmation query shown before deleting all Recent URLs.
-//l:popup_note_window
-//
-#define qtn_browserbm_query_delete_adap_bookmarks "Delete all recent URLs?"
-
-//d: Options menu item for copying Recent URLs to Bookmarks Folder.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_options_copy_to_bookmarks "Copy to bookmarks"
-
-//d: Options submenu item for copying Recent URLs to Bookmarks Folder.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browserbm_options_copy_to_bookmarks_sm "Copy to bookmarks"
-//d: Options menu item for deleting all Recent URLs.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_options_clear_adaptive_bookmarks "Clear Recent URLs"
-
-//d: Confirmation note shown when 1 Adaptive Bookmark has been copied to root level of Bookmarks View.
-//l:popup_note_window
-//
-#define qtn_browserbm_note_adaptive_bookmark_copied "Copied to bookmarks"
-
-//d: Confirmation note shown when more than one Recent URLs (%N is the number of Recent URLs) has been copied to root level of Bookmarks View.
-//l:popup_note_window
-//
-#define qtn_browserbm_note_adaptive_bookmarks_copied "%N items copied to bookmarks"
-
-//d: Options menu item for restarting the browser
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_opt_restart "Restart"
-
-//d:Exit confirmation in browser settings
-//l:list_setting_pane_t1
-//
-#define qtn_wml_setting_exit_confirm "Exit confirmation"
-
-//d:Selectable item texts for Exit confirmation setting
-//d:Activate the exit confirmation prompt.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_exit_on "On"
-
-//d:Selectable item texts for Exit confirmation setting
-//d:Deactivate the exit confirmation prompt.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_exit_off "Off"
-
-//d:Send referrer heading in browser settings
-//l:list_setting_pane_t1
-#define qtn_wml_setting_referrer "Send referrer heading"
-
-//d:Selectable item texts for Send referrer setting.
-//d:Activate the sending of the referrer header.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_refer_on "On"
-
-//d:Selectable item texts for Send referrer setting.
-//d:Deactivate the sending of the referrer header.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_refer_off "Off"
-
-//d: This is a setting item which controls
-//d: whether external style sheets are fetched
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_external_css "Rendering quality"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_scripting "Java/Ecma Script"
-
-//d: Enables Java and ECMA scripts to be executed in browser
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_scripting_enable "Enable"
-
-//d: Disables Java and ECMA scripts to be executed in browser
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_scripting_disable "Disable"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//r: 3.2
-//
-#define qtn_browsers_sett_scriptlog "Javascript notifications"
-
-//d: Disables Java and ECMA script logging output in browser
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_disable "No notification"
-
-//d: Enables Java and ECMA script log to be output to a log file
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_to_file "Log to file"
-
-//d: Enables Java and ECMA script log to be output to GUI console
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_to_console "Pop-up notes"
-
-//d: Enables Java and ECMA script log to be output to both GUI console and file
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_to_console_file "Log to file and as pop-up notes"
-
-
-//d:Menu item to clear all window(s) page script logging
-//l: list_single_popup_submenu_pane_t1
-//r: 3.2
-//
-#define qtn_browser_list_clear_scriptlog "Clear Javascript Log"
-
-//d: Browser Privacy main menu
-//l: list_single_pane_t1_cp2/opt3
-// will contain 5 submenu options
-#define qtn_browser_list_privacy "Privacy"
-
-
-//d:Menu item to clear all privacy related data (cache, cookies, history, form & password data)
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_privacy_clear_all "Clear all privacy data"
-
-
-//d:Menu item to clear all the stored cookies
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_delete_cookies "Clear cookies"
-
-//d:Menu item to clear all window(s) page load history data
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_clear_history "Clear history"
-
-
-//d:Menu item to clear all form and password data
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_privacy_clear_form_data "Clear form data"
-
-
-//d:Information note text after clearing history
-//l: popup_note_window
-//
-#define qtn_browser_note_history_cleared "History and recent URLs cleared"
-
-
-//d:Information note text after clearing form data
-//l: popup_note_window
-//
-#define qtn_browser_note_form_and_passwd_data_cleared "Form and password data cleared"
-
-
-//d:Information note text after deleting cookies
-//l:popup_note_window
-//
-#define qtn_browser_note_cookies_deleted "Cookies deleted"
-
-//d:Information note text after clearing all privacy data
-//l: popup_note_window
-//
-#define qtn_browser_note_clear_all_privacy_done "All privacy data cleared"
-
-
-//d:Menu item in Preferences->Options->Info menu
-//l:list_single_pane_t1_cp2
-#define qtn_wml_opt_about_product "Name and version"
-//d:Text in About Product information note's heading
-//l:heading_pane_t1
-#define qtn_browsers_title_about "Name and Version"
-
-//d:Menu item in Preferences->Options->Info menu
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_wml_opt_about_product_oss "About product"
-
-//d:Text in About Product information note's heading
-//l:heading_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_about_oss "About product"
-
-//d:Text in About Product information note, shown in the first line
-//l:popup_info_list_pane_t1
-#define qtn_browsers_browser_name "Series 60 Mobile Browser"
-
-//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
-//l: heading_pane_t1
-#define qtn_browsers_about_version_label "Version: %0U (%1U)"
-
-//d:Browser main menu
-//l:heading_pane_t1
-#define qtn_browser_query_browser_version "Browser Version"
-
-//d:Text in About Product information note, the list of installed plugins comes after this
-//l:popup_info_list_pane_t1
-#define qtn_browsers_plugins_label "Plug-Ins:"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-#define qtn_browsers_sett_homepage "Home page"
-
-//d:Browser settings main list item texts for OSS browser
-//l:list_setting_pane_t1
-//w:
-//r: 3.0
-//
-#define qtn_browsers_sett_startpage "Startpage"
-
-//d:Browser settings selectable item texts access point home page
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_ap_home_page "Access point home page"
-
-//d:Browser settings selectable item texts user-defined home page
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_own_home_page "New address"
-
-//d:Browser settings selectable item texts for selecting bookmark view
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_homepage_bookmarks "Bookmarks"
-
-//d:Browser submenu item for Set as Home page
-//l:list_single_pane_t1_cp2
-#define qtn_browserbm_list_set_as_home_page "Set as Home Page"
-
-//d:Browser submenu item for Set as Home page
-//l:list_single_popup_submenu_pane_t1
-#define qtn_browserbm_list_set_as_home_page_sm "Set as Home Page"
-
-//d:Browser menu item for Home page launch
-//l:list_single_popup_submenu_pane_t1
-#define qtn_browser_list_home "Home"
-
-//d: Prompt dialog shown to enter a url for the Home Page setting
-//l: popup_query_data_window
-#define qtn_wml_prompt_homepage_url "New address"
-
-//d: Confirmation query shown before setting new home page
-//l:popup_note_window
-#define qtn_browserbm_query_set_as_home_page "Do you want to use this bookmark as home page?"
-
-//d:Browser settings selectable item texts user-defined home page
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_use_current_home_page "Use current page"
-
-
-//d:Text in upload progress note.
-//l:popup_note_window
-#define qtn_browser_upload_progressnote_uploaded "Uploaded:\n%0U / %1U "
-
-//d:Unit in upload progress note.
-//l:popup_note_window
-#define qtn_browser_upload_progressnote_unit_kbyte "kB"
-
-//d:Unit in upload progress note.
-//l:popup_note_window
-#define qtn_browser_upload_progressnote_unit_mb "MB"
-
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_wml_settings_access_point_user_defined "User defined"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_wml_settings_access_point_always_ask "Always ask"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_wml_settings_access_point_ask_when_needed "Ask when needed"
-
-//d:Browser gotopane default text
-//l:query_popup_data_pane_t1/opt4
-#define qtn_browser_goto_text_enter_address "Enter address"
-
-//d:Download already in progress info note.
-//l:popup_note_window
-//w:
-//r:2.8
-//
-#define qtn_browser_note_object_downloading "Downloading"
-
-//=============================================================================
-// OSS Browser Support
-//=============================================================================
-
-// ==========================================================
-// Finding
-// ==========================================================
-//d: Browser Find main menu
-//l: list_single_popup_menu_pane_1
-//w:
-//r:3.0
-//
-// #define qtn_options_find "Find item"
-
-//d: Menu item for searching for a keyword
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_find_keyword "Keyword"
-
-//d: Menu item for searching for a keyword
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_browser_find_keyword_mm "Find Keyword"
-
-//d: Menu item for searching the next matching string in the page
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.0
-//
-#define qtn_browser_find_keyword_search_for_next "Search for next"
-
-//d: Menu item for searching the previous matching string in the page
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.0
-//
-#define qtn_browser_find_keyword_search_for_previous "Search for previous"
-
-//d: Tooltip shown when there were no matches of the search
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_keyword_find_no_matches "No matches"
-
-//d: Tooltip shownwhen the search has reached the end of the page
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_keyword_find_wraparound "Wraparound"
-
-//d: Tooltip shownwhen the search has reached the starting point
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_keyword_find_all_content_searched "All the content searched"
-
-// ==========================================================
-// Zooming
-// ==========================================================
-
-//d: Browser zooming main menu
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-//
-#define qtn_wml_option_zoom "Zoom"
-
-//d: Options menu list item for the new Zoom Mode. Options>View>Zoom
-//l: list_single_popup_submenu_pane_t1
-//r: Browser 7.x
-//
-#define qtn_browser_list_zoom_mode "Zoom"
-
-//d: When zoom level of images change, new level is shown in title pane
-//l: navi_navi_text_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_zoom_level "Zoom level: %U%"
-
-//d: Zoom levels displayed as zoom menu subitems
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_image_zoom_level "%U%"
-
-
-//d: When zoom level of text change, new level is shown in title pane
-//l: navi_navi_text_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_text_size "Text size: %U%"
-
-//d: When zoom level of text changes, new level is shown in tooltip
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_text_size_tooltip "Text size: %U%"
-
-//d: When zoom level of images change, new level is shown in tooltip
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_zoom_level_tooltip "Zoom level: %U%"
-
-//d: Tooltip that displays when the maximum zoom level has been reached
-//l: popup_preview_text_window/opt3
-//r: 3.2.3, 5.0+, browser 7.x
-//
-#define qtn_browser_zoom_level_tooltip_maximum "Maximum zoom level"
-
-//d: Tooltip that displays when the minimum zoom level has been reached
-//l: popup_preview_text_window/opt3
-//r: 3.2.3, 5.0+, browser 7.x
-//
-#define qtn_browser_zoom_level_tooltip_minimum "Minimum zoom level"
-
-//=============================================================================
-// Multiple Windows Support
-//=============================================================================
-
-
-//d: menu item. Selecting this will open the current url link
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_list_open_link_main "Open link"
-
-
-//d: Submenu item. Selecting this will open the current url link in
-//d: a new window
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_list_open_in_new_window "Open link in new window"
-
-//d: Download main menu, contains download page menuitems.
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.1
-//
-#define qtn_browserbm_options_submenu_download "Download"
-
-//d: Selecting this will open the current url link.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browserbm_options_download_page "Download page"
-
-//d: Selecting this will open the current url link in a new window.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browserbm_options_download_in_new_window "Download page in new window"
-
-//d: Menu access to pop-ups submenu
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_list_windows "Windows"
-
-//d: Opens a selection dialog which will allow the
-//d: the user to switch between all open windows.
-//d: Only shown if more than one window is opened.
-//l: list_single_popup_submenu_pane_t1
-//r:3.0
-//
-#define qtn_browser_list_switch_window "Windows"
-
-//d: Closes the current window.
-//l: list_single_pane_t1_cp2
-//r:3.0
-//
-#define qtn_browser_list_close_window "Close"
-
-//d: Submenu item. Selecting this item allows pop-up windows to be opened from
-//d: the current webpage's domain. This applies to non-user initiated pop-ups.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_list_windows_allow "Allow pop-ups"
-
-//d: Submenu item. Selecting this item blocks pop-up windows being opened from
-//d: the current webpage's domain. This applies to non-user initiated pop-ups.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_list_windows_block "Block pop-ups"
-
-//d: The header for an option list dialog. The list contains
-//d: all open windows, selection will make that window active.
-//l: heading_pane_t1
-//r:3.0
-//
-#define qtn_browser_query_switch_window_header "Switch to:"
-
-//d: A confirmation dialog responding to a user
-//d: request to close the current window
-//l: popup_note_window
-//r:3.0
-//
-#define qtn_browser_query_close_window "Close current window?"
-
-//d: A pop-up note to indicate to the user that the maximum number
-//d: of popup windows allowed has been reached, no more may be opened
-//l: popup_note_window
-//w:
-//r:3.0
-//
-#define qtn_browser_note_pop_up_max_reached "Cannot open pop-up, maximum number reached."
-
-//d: An information note, indicating that a new window is being opened
-//d: will be added to the whitelist
-//l: popup_preview_text_window/opt3
-//r:3.0
-//
-#define qtn_browser_note_pop_up_window_opened "Opening new window"
-
-//-----------------------------------------------------------------------------
-// Settings for Multiple Windows
-//
-//d: Browser setting for enabling popup blocking
-//l: list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_brow_sett_pop_up_blocking "Pop-up blocking"
-
-//d: Selectable text for the Popup blocking setting
-//d: Popup blocking is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_brow_sett_pop_up_blocking_on "Enabled"
-
-//d: Selectable text for the Popup blocking setting
-//d: Popup blocking is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_brow_sett_pop_up_blocking_off "Disabled"
-
-// ==========================================================
-// Subscribe to
-// ==========================================================
-
-//d: Browser Subscribe to main menu
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_list_subscribe_to "Subscribe to feeds"
-
-//-----------------------------------------------------------------------------
-// Popup dialog - stored preference data
-//
-
-//d: Tooltip note notifying the user that pop-ups have been disabled
-//d: and indicating to the user that they must use the options menu
-//d: to allow pop-ups for the current page
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_multiple_windows_tooltip "Pop-up window was blocked. Pop-ups can be enabled from Options"
-
-//d:Text for RSS Folder in Bookmarks view.
-//l:list_single_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_apps_feeds_list "Web feeds"
-
-//----------------------------------------------------------------------------
-// Show Miniature
-//
-
-//d:Menu item to show Thumbnail view of the currently visited page.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_list_miniature_show_mini "Page overview"
-
-//--------------------------------------------------------------------------------
-// Smart Text recognition
-//
-
-//d:Browser setting for smart link detection
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_smartlink "Smart text recognition"
-
-//d: Enables automatic detection of phone numbers and email addresses when scrolling
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_brow_sett_smartlink_on "On"
-
-//d: Disables Jutomatic detection of phone numbers and email addresses when scrolling
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_brow_sett_smartlink_off "Off"
-
-
-//----------------------------------------------------------------------------
-// Page overview
-//
-
-//d:Tooltip when the Page Overview is switched on by Shortcut key 7.
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.0
-//
-#define qtn_browser_tooltip_page_overview_on "Mini map on"
-
-//d:Tooltip when the Page Overview is switched off by Shortcut key 7.
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.0
-//
-#define qtn_browser_tooltip_page_overview_off "Mini map off"
-
-//-----------------------------------------------------------------------------
-// Form Data Saving
-//
-
-//d: Browser setting for Form data saving
-//l: list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_form_data_saving "Form data saving"
-
-//d: Selectable text for the Form data saving setting
-//d: Saving passwords is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_brow_sett_form_data_saving_on "Form and password data"
-
-//d: Selectable text for the Form data saving setting
-//d: Saving passwords is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_brow_sett_form_data_saving_off "Off"
-
-//d: Selectable text for the Form data saving setting
-//d: Saving passwords is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_brow_sett_form_data_saving_only "Form data only"
-
-//d:Clear history and Recent URLs query string
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_privacy_query_clear_history "Clear history and recent URLs?"
-
-
-//d:Delete Form Data and Password query string
-//l:popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_form_data_delete_all "Clear form and password data?"
-
-//d:Delete all privacy data query string
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_privacy_delete_all "Clear all privacy data?"
-
-
-//d:Delete Form Password Data query string
-//l:popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_form_data_delete_password "Clear password data?"
-//----------------------------------------------------------------------------
-// Window selection
-//
-
-//d:Menu item to selects the focused window.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_list_select_window "Select"
-
-//d:Menu item to close all windows except the current one.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_list_close_all_but_this "Close all but this window"
-
-//----------------------------------------------------------------------------
-// Web feeds settings
-//
-
-//d: A list box item referring to settings categorised as Web Feeds
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_feeds "Web feeds"
-
-//d: When the Web feeds Settings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_feeds "Web feeds settings"
-
-//d:Browser settings main list item texts for Automatic updating of web feeds
-//l:list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_autoupdating "Automatic updating"
-
-//d: Selectable text for the Automatic updating setting
-//d: If Off is selected, automatic updating does not occur
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_autoupdating_off "Off"
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 15 minutes
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_15min "Every 15 minutes"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every hour
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_hourly "Every hour"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 4 hours
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_4hours "Every 4 hours"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done daily
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_daily "Every day"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done weekly
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_weekly "Every week"
-
-//d:Browser settings main list item texts for Automatic updating of web feeds
-//l:list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_autoupdating_ap "Update via access point"
-
-//d:Browser settings main list item texts for Automatic updating of web feeds while roaming
-//l: list_setting_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_autoupdating_roaming "Update while roaming"
-
-//d: Selectable text for the Automatic update setting while roaming
-//d: If On is selected, automatic update happens even if the user is roaming
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_val_autoupdating_roaming_on "On"
-
-//d: Selectable text for the Automatic update setting while roaming
-//d: If Off is selected, automatic update does not occur while roaming
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_val_autoupdating_roaming_off "Off"
-
-//d:Browser settings main list item texts
-//l:popup_note_window
-//
-
-#define qtn_browsers_sett_dataquery_autoupdate_ap "The access point has to be defined to enable automatic updating."
-
-//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
-//d: noting that turning the feature on may cost them money
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
-//d: Query user to close existing WML page when activating a link to a WML page
-//d: from another window. Only one WML page can be opened at once.
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_multiple_windows_wml "WML page in another window needs to be closed to proceed, close it?"
-
-//----------------------------------------------------------------------------
-// ToolBar Strings
-//
-//d: view sub menu item to show the toolbar
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_list_toolbar "Toolbar"
-//d: Tooltip that is showns when the toolbar is activated via the Options menu
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_tooltip_toolbar "Click an empty area of the page to show the toolbar"
-
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_objects "Load content"
-
-
-//d: Selectable text for the Load Content setting
-//d: Only text is loaded if this option is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_text "Text only"
-
-
-//d: Selectable text for the Load Content setting
-//d: Images are loaded if this option is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_images_no_flash "Images no flash"
-
-
-//d: Selectable text for the Load Content setting
-//d: All content is loaded if this option is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_all "All"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an anchor
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_list_show_address "Show address"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_save_image_to_gallery "Save to gallery"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_list_open_to_viewer "Open to viewer"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on a phone number
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_options_call "Call"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on a phone number
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_create_sms "Create text message"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on a phone number or e-mail
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_options_contacts "Add to contacts"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an e-mail
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_create_email "Create e-mail message"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_load_image "Load image"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_load_all_images "Load all images"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_enable_autoload_images "Enable images"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_enable_autoload_all "Enable images and flash"
-
-
-
-//d: Confirmation query shown before setting new home page
-//l:popup_note_window
-#define qtn_browser_query_set_as_home_page "Set as home page?"
-
-
-
-// -----------------------------------------------------------------
-// Toolbar related strings
-// -----------------------------------------------------------------
-
-//d: Tooltip that is showns when the toolbar is activated via the Options menu
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_tooltip_toolbar "Click an empty area of the page to show the toolbar"
-
-
-
-// -----------------------------------------------------------------
-// Toolbar Button Command Settings Labels
-// -----------------------------------------------------------------
-
-//d: Toolbar Button 1 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button1 "Button 1"
-
-//d: Toolbar Button 2 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button2 "Button 2"
-
-//d: Toolbar Button 3 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button3 "Button 3"
-
-//d: Toolbar Button 4 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button4 "Button 4"
-
-//d: Toolbar Button 5 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button5 "Button 5"
-
-//d: Toolbar Button 6 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button6 "Button 6"
-
-//d: Toolbar Button 7 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button7 "Button 7"
-
-
-// -----------------------------------------------------------------
-// Toolbar Button Command Values
-// -----------------------------------------------------------------
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_show_keymap "Display key map"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_go_to_web_address "Go to web address"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_list_bookmarks "Bookmarks" //(toolbar only)
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_save_as_bookmark "Save as bookmark"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_recent_urls "Recent URLs" //(toolbar only)
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_find_keyword "Find keyword"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_reload "Reload"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_miniature_show "Page overview"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_previous_page "Back one page"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_go_to_hompage "Go to homepage"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_zoom_in "Zoom in"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_zoom_out "Zoom out"
-
-//d: Preferences for Zoom Mode: Options>Preferences>Shortcut keys><N>Key > Zoom Mode
-//l: list_set_graphic_pane_t1
-//r: Browser 7.x
-//
-#define qtn_browser_setting_zoom_mode "Zoom Mode"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_settings "Settings"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_rotate_screen "Rotate screen"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_subscribe_to_feeds "Subscribe to feeds"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_manage_bookmarks "Manage bookmarks"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_visual_history "History"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_view_images "View images"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_save_page "Save page"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_send "Send"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_switch_window "Switch window"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_show_toolbar "Display toolbar" // (keymap only)
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_show_help "Help"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_none "None"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_full_screen "Full screen"
-
-// -----------------------------------------------------------------
-// Toolbar Error Message
-// -----------------------------------------------------------------
-
-//d: Pop Up note if all toolbar buttons are set to "None"
-//l: popup_note_window
-//r: 5.0
-#define qtn_browser_setting_toolbar_save_dialog "You must assign a function to at least one of the toolbar buttons!"
-
-
-// -----------------------------------------------------------------
-// Toolbar On/Off Setting Values
-// -----------------------------------------------------------------
-
-//d:Setting for Enabling or Disabling the Toolbar
-//l: list_setting_pane_t1
-//r: 5.0
-#define qtn_browser_setting_toolbar_on_off "Toolbar On/Off"
-
-//d: Selectable text for the Toolbar On/Off setting
-//l: set_value_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_toolbar_on "On"
-
-//d: Selectable text for the Toolbar On/Off setting
-//l: set_value_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_toolbar_off "Off"
-
-
-// -----------------------------------------------------------------
-// Toolbar Settings group label and title strings
-// -----------------------------------------------------------------
-//d: Toolbar Settings group label
-//l:list_single_graphic_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_group_toolbar "Toolbar"
-
-//Toolbar Settings Group Title Pane
-//l: title_pane_t2/opt9
-//r:5.0
-//
-#define qtn_browser_setting_group_title_toolbar "Toolbar settings"
-
-
-// -----------------------------------------------------------------
-// ShortCut Keys Settings group label and title strings
-// -----------------------------------------------------------------
-
-//Shortcut Keys Settings group label
-//l:list_single_graphic_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_group_shortcuts "Shortcut keys"
-
-//Shortcut Keys Settings Group Title Pane
-//l: title_pane_t2/opt9
-//r:5.0
-//
-#define qtn_browser_setting_group_title_shortcuts "Shortcut key settings"
-
-
-// Shortcut Keys labels for settings
-
-//d: Shortcut key setting label for key "1"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key1 "1 Key"
-
-//d: Shortcut key setting label for key "2"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key2 "2 Key"
-
-//d: Shortcut key setting label for key "3"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key3 "3 Key"
-
-//d: Shortcut key setting label for key "4"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key4 "4 Key"
-
-//d: Shortcut key setting label for key "5"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key5 "5 Key"
-
-//d: Shortcut key setting label for key "6"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key6 "6 Key"
-
-//d: Shortcut key setting label for key "7"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key7 "7 Key"
-
-//d: Shortcut key setting label for key "8"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key8 "8 Key"
-
-//d: Shortcut key setting label for key "9"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key9 "9 Key"
-
-//d: Shortcut key setting label for key "0"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key0 "0 Key"
-
-//d: Shortcut key setting label for key "*"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_starkey "* Key"
-
-//d: Shortcut key setting label for key "#"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_hashkey "# Key"
-
-//d:List of feeds to choose from .
-//l:heading_pane_t1
-//r:5.0
-//
-#define qtn_browser_subscribe_list "Subscribe to"
-
-//d: Options menu item for displaying the shortcut keymap in a browser submenu
-//l: list_single_popup_submenu_pane_t1
-//r: 3.2.3, 5.0+
-#define qtn_browser_list_show_shortcut_keymap "Show Shortcut Keymap"
-
-//d: Options menu list item for displaying the shortcut keymap in the top level browser menu
-//l: list_single_pane_t1_cp2
-//r: 3.2.3, 5.0+, browser 7.x
-#define qtn_browser_list_main_show_shortcuts "Show shortcuts"
-
-//d:Command text associated to a softkey in the control pane.
-//d:Configure Keymap functionality.
-//l:control_pane_t1/opt7
-//
-#define text_softkey_configure "Configure"
-
-// -----------------------------------------------------------------
-// ShortCut Keymap text strings
-// -----------------------------------------------------------------
-
-//d: Shortcut key function Display Keymap
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_show_keymap "Show Keymap"
-
-//d: Shortcut key function Go To Web Address
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_go_to_web_address "Go to Web Address"
-
-//d: Shortcut key function Save as bookmark
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_save_as_bookmark "Save as Bookmark"
-
-//d: Shortcut key function Find Keyword
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_find_keyword "Find Keyword"
-
-//d: Shortcut key function Reload
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_reload "Reload"
-
-//d: Shortcut key function Page Overview
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_miniature_show "Page Overview"
-
-//d: Shortcut key function Back One Page
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_previous_page "Back One Page"
-
-//d: Shortcut key function Go to Homepage
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_go_to_homepage "Go to Homepage"
-
-//d: Shortcut key function Zoom In
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_zoom_in "Zoom In"
-
-//d: Shortcut key function Zoom Out
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_zoom_out "Zoom Out"
-
-//d: Shortcut key function Zoom Mode
-//l: cell_scut_pane
-//r: Browser 7.x
-//
-#define qtn_browser_keymap_text_zoom_mode "Zoom Mode"
-
-//d: Shortcut key function Settings
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_settings "Settings"
-
-//d: Shortcut key function Rotate Screen
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_rotate_screen "Rotate Screen"
-
-//d: Shortcut key function Subscribe To Feeds
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_subscribe_to_feeds "Subscribe To Feeds"
-
-//d: Shortcut key function Manage Bookmarks
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_manage_bookmarks "Manage Bookmarks"
-
-//d: Shortcut key function History
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_visual_history "History"
-
-//d: Shortcut key function View Images
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_view_images "View Images"
-
-//d: Shortcut key function Save Page
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_save_page "Save Page"
-
-//d: Shortcut key function Switch Window
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_switch_window "Switch Window"
-
-//d: Shortcut key function Display Toolbar
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_show_toolbar "Display Toolbar"
-
-//d: Shortcut key function Help
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_show_help "Help"
-
-//d: Shortcut key function None
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_none "None"
-
-//d: Shortcut key function Full Screen
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_full_screen "Full Screen"
-
-// -----------------------------------------------------------------
-// Touch Toolbar Button strings
-// -----------------------------------------------------------------
-
-//---------------------------------
-// Main Toolbar Strings
-//---------------------------------
-// Goto Address Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_gotoaddress_tt "Goto Address"
-
-// Show Zoom Slider Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_zoomshow_tt "Show Zoom Slider"
-
-// Hide Zoom Slider Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_zoomhide_tt "Hide Zoom Slider"
-
-//---------------------------------
-// Extended Toolbar Strings
-//---------------------------------
-//d:Extended Toolbar Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_tt "Expand toolbar"
-
-//d:Bookmarks Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_bm "Bookmarks"
-
-//d:Bookmarks Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_bm_tt "Bookmarks"
-
-//d:Home Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_home "Home"
-
-//d:Home Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_home_tt "Home"
-
-//d:Settings Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_settings "Settings"
-
-//d:Settings Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_settings_tt "Settings"
-
-
-//d:Save Bookmark Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_save_bookmark "Save Bookmark"
-
-//d:Save Bookmark Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_save_bookmark_tt "Save Bookmark"
-
-
-//d:Find Keyword Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_find_keyword "Find Keyword"
-
-//d:Find Keyword Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_find_keyword_tt "Find Keyword"
-
-//d:Find Next Keyword Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_findnext_tt "Find Next"
-
-//d:Find Previous Keyword Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_findprevious_tt "Find Previous"
-
-//d:Navigate Back in History Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_history_back_tt "Back"
-
-//d:Navigate Forward in History Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_history_forward_tt "Forward"
-
-//d:Subscribe Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_subscribe_list "Subscribe"
-
-//d:Subscribe Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_subscribe_list_tt "Subscribe"
-
-//d:Reload Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_reload "Reload"
-
-//d:Reload Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_reload_tt "Reload"
-
-//d:Page Overview Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_miniature_show "Show Miniature"
-
-//d:Page Overview Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_miniature_show_tt "Show Miniature"
-
-//d:Help Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_help "Help"
-
-//d:Help Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_help_tt "Help"
-
-//d:Goto Address Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_gotoaddress "Goto Address"
-
-//d:Show Zoom Slider Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_zoomshow "Show Zoom Slider"
-
-//d:Full Screen Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_full_screen "Full Screen"
-
-//d:Full Screen Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_full_screen_tt "Full Screen"
-
-//d:Send Url Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_send_url "Send Url"
-
-//d:Send Url Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_send_url_tt "Send Url"
-//d:Rotate Display Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_rotate "Rotate Display"
-
-//d:Rotate Display Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_rotate_tt "Rotate Display"
-
-//d:View Feeds Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_view_feeds "View Feeds"
-
-//d:View Feeds Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_view_feeds_tt "View Feeds"
-
-//d:Switch Window Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_switch_win "Switch Window"
-
-//d:Switch Window Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_switch_win_tt "Switch Window"
-
-
-//---------------------------------
-// Bookmark Toolbar Strings
-//---------------------------------
-//d:Add Bookmark Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_tb_add_bookmark "Add Bookmark"
-
-//d:Delete Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_tb_del_bookmark "Delete"
-
-// Add Bookmark Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_add_bookmark_tt "Add Bookmark"
-
-// Delete Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_del_bookmark_tt "Delete"
-
-// -----------------------------------------------------------------
-// Option menu sub-options
-// -----------------------------------------------------------------
-
-//d: "Go to" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_goto "Go to"
-
-//d: "Page Actions" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_pageactions "Page actions"
-
-//d: "Bookmark Actions" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_bmactions "Bookmark actions"
-
-//d: "Feeds Actions" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_feedsactions "Feeds actions"
-
-//d: "Edit" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_edit "Edit"
-
-//d: "Mark/Unmark" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_markunmark "Mark/Unmark"
-
-//d: "View" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_view "View"
-
-//d: "Clear" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_clear "Clear"
-
-// -----------------------------------------------------------------
-// Go to sub-options
-// -----------------------------------------------------------------
-//d: "Web feeds" menu item
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_browser_list_web_feeds "Web feeds"
-
-//d: "New web page" menu item
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_browser_list_new_web_page "New web page"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_next "Next Toolbar"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_back "Back"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_forward "Forward"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_pageoverview "Page Overview"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_reload "Reload"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_findkeyword "Find Keyword"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_home "Home"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_subscribe "subscribe"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_go "Go"
-
-//d: List of feeds to choose from .
-//l: heading_pane_t1
-//
-#define qtn_browser_toolbar_subscribe_header "Select to subscribe"
-
-//d: Confirmation query shown before setting new home page
-//l:popup_note_window
-//
-#define qtn_browser_query_set_as_home_page "Set as home page?"
-
-// -----------------------------------------------------------------
-// View sub-options
-// -----------------------------------------------------------------
-//d: Full Screen menu item
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_browser_list_full_screen_enter "Full Screen"
-
-// -----------------------------------------------------------------
-// Search strings
-// -----------------------------------------------------------------
-//d: Left softkey: (accept typing and activate search application)
-//l: control_pane_t1/opt7
-//r: 5.0
-//
-#define qtn_is_softkey_search "Search"
-//d: Search second level options menu text
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_is_list_search "Search"
-//d: Tooltip for go to/search icon
-//l: popup_preview_text_window_t1
-//r: 5.0
-//
-#define qtn_is_tooltip_goto_search "Go to web page or search"
-//d: settings view menu item
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browsers_sett_web_search_provider "Web search provider"
-//d: setting text when it is not defined
-//l: set_value_pane_t1
-//r: 5.0
-//
-#define qtn_is_label_not_selected "Not selected"
-//d: search editor default text
-//l: query_popup_data_pane_t1/opt4
-//r: 5.0
-//
-#define qtn_is_web_search "Web search"
-// -----------------------------------------------------------------
-// Service strings
-// -----------------------------------------------------------------
-//d: Here and now bookmark list item
-//l: list_single_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_is_recommendations "Here and Now"
-
-//d: Confirmation to install add-on browser
-//l: popup_note_window
-//r: 7.2
-#define qtn_install_addon_browser "A new browser is available. Would you like to install it?"
-// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/browserhp.loc Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 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:
+*
+*/
+//d: Local home page title
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_title "Web Browser for S60"
+
+
+
+//d: Local home search web
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_search_web "Web"
+
+//d: Local home search images
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_search_images "Images"
+
+
+
+
+//d: Local home my top links
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_my_top "My Top Links"
+
+
+//d: Local home Shortcut Keys
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_shortcut_keys "Shortcut Keys"
+
+
+//d: Local home alt text selection key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_selection_key "Selection key"
+
+
+//d: Local home selection key label
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_selection_key_label "Open link, or start entering text in a form input field"
+
+
+//d: Local home label c key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_c_key_label "If more than one window is open, closes the current window"
+
+
+
+//d: Local home label 1 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_1_key_label "Show bookmarks"
+
+
+//d: Local home label 2 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_2_key_label "Text search in current page"
+
+
+
+//d: Local home label 3 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_3_key_label "Back one page"
+
+
+//d: Local home label 5 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_5_key_label "List windows"
+
+
+//d: Local home label 8 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_8_key_label "Show Page Overview"
+
+
+
+//d: Local home label 9 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_9_key_label "Go to address"
+
+
+
+//d: Local home label star key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_star_key_label "Zoom images out"
+
+//d: Local home label hash key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_hash_key_label "Zoom images in"
+
+//d: Local home shortcut keys note
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_note "Note"
+
+//d: Local home shortcut keys unavailable
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_shortcut_unavailable "Shortcut keys not available while entering text"
+
+//d: Local home browser forum title
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_browser_forum "Browser Forum"
+
+//d: Local home join discussion label 1
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_join_discussion_1 "Join the discussion at"
+
+//d: Local home join discussion label 2
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_join_discussion_2 "the S60 user community forum!"
+
+//d: Local home unused key label
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_unused_key_label "Not used"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/feeds.loc Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,552 @@
+/*
+* Copyright (c) 2002-2007 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: Localized strings.
+*
+*/
+
+
+// APPLICATION INFORMATION
+
+/* Application related */
+/* -------------------------------------------------------------------- */
+//d:application name
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.0
+#define qtn_apps_feeds_list "Web Feeds"
+//d:application name
+//l:cell_app_pane_t1
+//w:
+//r:3.0
+#define qtn_apps_feeds_grid "Web Feeds"
+
+
+/* Options Menu */
+/* -------------------------------------------------------------------- */
+//d: Menu text to update the selected feed.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_update "Update"
+
+//d: Menu text to update all feed.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_update_all "Update All"
+
+//d: Menu text for the manage sub-menu
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+#define qtn_feeds_manage "Manage"
+
+//d: Menu text to open the associated web page in the browser.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_open_full_story "Open Full Story"
+
+
+/* Manage Sub-Menu */
+/* -------------------------------------------------------------------- */
+//d: Menu text to create a new feed.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_new_feed "Add feed"
+
+//d: Menu text to edit the current feed.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_edit "Edit feed"
+
+/* Info Sub-Menu */
+/* -------------------------------------------------------------------- */
+//d: Menu text to view the about info.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_about "About"
+
+
+/* Folder View */
+/* -------------------------------------------------------------------- */
+//d: The title of the folder-view when the top-level folder is showing.
+//l:title_pane_t2/opt9
+//w:
+//r:3.0
+#define qtn_feeds_folder_view_title "Web Feeds"
+
+/* -------------------------------------------------------------------- */
+//d: The text displayed in the folder view when there are no feeds or folders.
+//l:main_list_empty_pane
+//w:
+//r:3.1
+#define qtn_feeds_no_feeds "No Web Feeds"
+
+/* Feeds View */
+/* -------------------------------------------------------------------- */
+//d: The text string at the end of a feed that's associated with the
+//d: item's full story -- the browser is launched when this text is selected.
+//l:None
+//w:
+//r:3.0
+#define qtn_feeds_feeds_view_see_full_story "See full story"
+
+/* -------------------------------------------------------------------- */
+//d: The default title of enclosures. The title is used to display the
+//d: the enclosure in content area of the Feeds View.
+//l:None
+//w:
+//r:3.1
+#define qtn_feeds_feeds_view_enclosure "Podcast"
+
+
+// -----------------------------------------------------------------
+// Touch Toolbar Button strings
+// -----------------------------------------------------------------
+
+//---------------------------------
+// Feeds Folder View Toolbar Strings
+//---------------------------------
+// Update Selected Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_update_selected_tt "Update Selected Feed"
+
+// Update All Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_update_all_tt "Update All Feeds"
+
+// Open into article listing view
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_open_tt "Open into article listing view"
+
+
+//---------------------------------
+// Feeds Topic View Toolbar Strings
+//---------------------------------
+// Update Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_update_tt "Update Feed"
+
+// Back to Page
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_back_to_page_tt "Back to Page"
+
+// Open into detail view
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_open_tt "Open into detail view"
+
+//---------------------------------
+// Feeds Feed View Toolbar Strings
+//---------------------------------
+// Previous Article
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_previous_article_tt "Previous Article"
+
+// Show Full Story
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_show_full_story_tt "Show Full Story"
+
+// Next Article
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_next_article_tt "Next Article"
+
+
+/* Wait Dialog */
+/* -------------------------------------------------------------------- */
+//d: Information text when a feed is updating.
+//l:popup_note_wait_window
+//w:
+//r:3.0
+#define qtn_feeds_updating_wait_dialog_text "Updating"
+
+//d: Information text when a feed is opening.
+//l:popup_note_wait_window
+//w:
+//r:5.0
+#define qtn_feeds_opening_wait_dialog_text "Opening"
+/* -------------------------------------------------------------------- */
+//d: Information text when all feeds are updating.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+#define qtn_feeds_updating_all_wait_dialog "Updating all feeds"
+
+
+/* Delete Dialog */
+/* -------------------------------------------------------------------- */
+//d: Information text when the user chooses to delete a feed.
+//d: The text follows this form, "Delete %U?", where %U is
+//d: the name of the feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_delete_dialog_text "Delete %U?"
+
+//d: Information text when the user chooses to delete multiple feeds.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_delete_multiple_dialog_text "Delete selected feeds?"
+
+
+/* Edit/Add Feed/Folder Dialog */
+/* -------------------------------------------------------------------- */
+//d: Header test for the feed's name.
+//l:list_double_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_name_dialog_text "Title"
+
+//d: Header test for the feed's url.
+//l:list_double_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_url_dialog_text "Address"
+
+//d: Text displayed in the New feed dialog.
+//l:list_single_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_new_feed_item "New feed"
+
+//d:Header text for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_autoupdating_text "Automatic updating"
+
+//d: Selectable text for the Automatic updating setting
+//d: If Off is selected, automatic updating does not occur
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_autoupdating_off "Off"
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 15 minutes
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_15min "Every 15 minutes"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every hour
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_hourly "Every hour"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 4 hours
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_4hours "Every 4 hours"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done daily
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_daily "Every day"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done weekly
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_weekly "Every week"
+
+
+//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
+//d: noting that turning the feature on may cost them money
+//l: popup_note_window
+//w:
+//r:7.1
+//
+#define qtn_feeds_new_feed_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
+
+
+/* Import/Export Feed Strings */
+/* -------------------------------------------------------------------- */
+
+
+
+//d: Menu text to import selected or marked feeds from a file
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 3.2
+#define qtn_options_import_feeds "Import Feeds"
+
+//d: Popup waiting note when searching for feed files
+//d: stored on the phone
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_searching_for_feeds "Searching for feeds..."
+
+//d: When the search for feeds has completed, a header
+//d: over the list of results
+//l: heading_pane_t1
+//w:
+//r: 3.2
+#define qtn_popup_title_feeds_files_found "Feeds Files Found:"
+
+//d: When the search for feeds has completed, if no
+//d: feeds are found on the device, this error is shown
+//l: popup_note_window/opt1
+//w:
+//r: 3.2
+#define qtn_feeds_no_feeds_found_on_device "No feeds found on device"
+
+//d: A wait screen for when the phone is importing a feed file
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_importing_feeds "Importing Feeds..."
+
+//d: Menu text to export selected or marked feeds to a file
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 3.2
+#define qtn_options_export_feeds "Send"
+
+//d: When exporting some feeds to a file, header on a popup
+//d: asking the user to name the file
+//l: popup_query_data_window/opt1
+//w:
+//r: 3.2
+#define qtn_feeds_name_exported_file "Name the file to be sent:"
+
+//d: When exporting some feeds to a file, if the
+//l: popup_note_window
+//w:
+//r: 3.2
+#define qtn_feeds_export_opml_title_needed "You must enter a name for the file."
+
+//d: Wait window as feeds are exported into a file
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_processing "Processing..."
+
+//d: Confirmation to import feeds from an OPML file
+//d: that has been downloaded or received from another application
+//d: The %U referes to the filename of the OPML file
+//l: popup_note_window
+//w:
+//r: 3.2
+#define qtn_feeds_query_import_now "Import feeds from %U now?"
+
+
+/* Error Strings */
+/* -------------------------------------------------------------------- */
+//d: Information text for the error dialog. Displayed when the user
+//d: doesn't include a title when editing or adding a feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_title_needed "Title needed"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: doesn't include a url when editing or adding a feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_address_needed "Address needed"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: enters a single quote character anywhere in the feed title.
+//l:popup_note_window
+//w:
+//r:7.0
+#define qtn_feeds_title_single_quote_not_allowed "Single quote character (’) is not allowed in the title"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: tries to add the same feed a second time.
+//d: %U is the name of the feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_duplicate_feed_error_dialog_text "%U already subscribed"
+
+//d: Information text for the error dialog. Displayed when the user
+//d: tries to add/edit a feed that has a non-unique title.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_duplicate_title_error_dialog_text "Title must be unique"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed is malformed(corrupted/empty).
+//l:popup_note_window
+//w:
+//r:5.0
+#define qtn_feeds_malformed_dialog_text "Feed cannot be processed"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed couldn't be fetched from the network.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_network_error_main_pane_text "Couldn't update feed"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed is malformed.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_malformed_main_pane_text "Can't process feed"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed is in an unsupported format.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_unsupported_main_pane_text "Feed format is not supported"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed has invalid URL.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_invalid_url_main_pane_text "Invalid web address"
+
+//d: Information text for the main pane. Displayed when a requested
+//d: feed fails for some other reason.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_general_error_main_pane_text "An unkown error occurred"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed fails for some other reason.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_general_error_dialog_text "An unkown error occurred"
+
+//d: Information text for the error dialog. Displayed when an OPML file
+//d: somehow gets deleted after it is found and displayed in the list, and the
+#define qtn_feeds_malformed_dialog_text "Can't process feed"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed is in an unsupported format.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_unsupported_dialog_text "Feed format is not supported"
+//d: user then tries to select and import it.
+//l:popup_note_window
+//w:
+//r:7.1
+#define qtn_feeds_file_not_found_dialog_text "File Not Found"
+
+/* Misc Strings */
+/* -------------------------------------------------------------------- */
+//d: Text displayed in the Topic-View when an item's name isn't available.
+//l:list_single_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_unnamed_item "Unnamed item"
+
+
+/* Strings copied from wmlbrowser.loc */
+/* -------------------------------------------------------------------- */
+//d:DO element menu item
+//l:list_single_popup_submenu_pane_t1
+//
+#define text_wml_option_back "Back"
+
+//d:Menu item in Bookmarks View: activate highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_load_bm "Activate"
+
+// WmlBrowser Settings/Session listbox items
+
+//d:Browser settings session list item texts
+//l:heading_pane_t1
+//
+#define qtn_wmls_session_info "Session info"
+
+//d:Format title text in session view.
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_ap "Access point name:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_bearer_type "Bearer type:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_max_speed "Max. connection speed:"
+
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+#define qtn_browsers_title_about "Name and Version"
+
+//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
+//l:popup_info_list_pane_t1
+#define qtn_browsers_about_version_label "Version: %0U (%1U)"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_browser_set_bearer_hscsd "HSCSD"
+
+//d: Information text for the error dialog. Displayed when a requested
+//d: feed couldn't be fetched from the network.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_network_error_dialog_text "Couldn't update feed"
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/wmlbrowser.loc Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,3229 @@
+/*
+* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This is a localisation file.
+* A .loc file is the one and only place where the logical strings
+* to be localised are defined.
+*
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+//d:Information note text
+//l:popup_note_window
+//
+#define qtn_wml_informationnote_unable_to_retrieve "Unable to retrieve"
+
+//d:Move - cancel softkey, Softkey used when moving the bookmark to folder
+//l:control_pane_t1/opt7
+//
+#define text_softkey_move "Move"
+
+//d:application name
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_browserng_list "BrowserNG"
+
+//d: application name
+//l: cell_app_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_browserng_grid "BrowserNG"
+
+
+//d:Confirmation query text on exiting Browser
+//l:popup_note_window
+//
+#define text_wml_exit_confirm "Quit browsing?"
+
+// strings for main menu for multipurpose browser display
+
+//d:Open selected deck
+//d:Open focused anchor node.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_open "Open"
+
+
+//d:Menu item for DO elements' parent menu text
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_list_history "History"
+
+
+//d:Menu item for DO elements' parent menu text
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_srv_opts "Service options"
+
+//d:Menu item to get access to the bookmarks
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_wml_faves "Bookmarks"
+
+//d:Menu item to
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browser_list_close "Close browser"
+
+//d: main menu item to rotate the display orientation
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_rotate_display "Rotate display"
+
+
+//d:Menu access to navigation submenu
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_list_navigation "Navigation functions"
+
+
+//d:Menu item to change connection
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_change_connection "Change connection"
+
+//d:Menu item brings up input field for custom URL address
+//d:Menu item in bookmark favorites view
+//l:list_single_pane_t1_cp2
+//
+#define text_wml_option_goto "Go to address"
+
+//d:Text in middle soft key (goto address function)
+//l:control_pane_t3/opt7
+//w:
+//r:3.2
+#define qtn_browser_msk_goto "Go to"
+
+//d:Menu item to create a bookmark
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_wmlbm_fav_saveas_bm "Add bookmark"
+
+//d:SubMenu item to create a bookmark
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:5.0 & 3.2.3
+//
+#define qtn_wmlbm_fav_saveas_bm_sm "Add bookmark"
+
+//d:Menu item to show the zoom slider
+//l:list_single_pane_t1_cp2
+//r:5.0
+//
+#define qtn_wml_list_zoom_slider_show "Show Zoom Slider"
+
+//d:Menu item to hide the zoom slider
+//l:list_single_pane_t1_cp2
+//r:5.0
+//
+#define qtn_wml_list_zoom_slider_hide "Hide Zoom Slider"
+
+//d:Menu item to reload currently showed card
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_reload "Reload"
+
+//d:Menu item the user can get different kind of information
+//d:about service in use
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_option_infoview "Info"
+
+//d:Menu item to terminate network connection
+//d:about service in use
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_dconn "Disconnect"
+
+//d:Menu item to load and show unloaded image
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_fetch_img "Show Images"
+
+//d:Menu item to entirely clear the cache
+//l:list_single_popup_submenu_pane_t1
+//
+#define text_wml_option_empty_cache "Clear cache"
+
+//d:Menu item to save current card
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_save_pgs "Save"
+
+//d:Menu item to view/change browsing settings
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmls_browser_opt_sett "Preferences"
+
+//d:Browser main menu
+//l:list_single_pane_t1_cp2
+//
+#define text_wml_option_help "Help"
+
+//d:Browser main menu
+//l: list_single_pane_t1_cp2/opt3
+//
+#define qtn_browser_options_help "Help"
+
+//d:Options menu item to open Downloads List.
+//l:list_single_pane_t1_cp2
+//w:
+//
+#define qtn_browser_list_downloads "Downloads"
+
+//d:Browser main menu
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_view_images "View Images"
+
+//d:Menu access to tools submenu
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_browser_list_folder_tools "Tools"
+
+//d:Strings for page info submenu
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browser_list_page_info "Page info"
+
+//d:Strings for Info submenu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_opt_smenu_session "Session"
+
+//d:Strings for Info submenu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_opt_smenu_security "Security"
+
+//d:open new page query
+//l:popup_note_window
+//
+#define qtn_wml_query_dwnl "Downloading ongoing. Cancel previous downloading?"
+
+//d:External app started browser with an invalid bookmark id
+//l:popup_note_window
+//
+#define qtn_wml_bookmark_not_found "Bookmark does not exist!"
+
+//d:Information note text
+//l:popup_note_window
+//
+#define text_wml_cache_emptied_note "Cache cleared"
+
+//d:Text to display if the current access point is invalid while editing bookmark
+//l:list_single_heading_pane_t1
+#define qtn_wmlbm_text_ap_invalid "Invalid"
+
+
+//d:Error note message: Invalid accesspoint is defined in a bookmark
+//l:popup_note_window
+#define qtn_wml_info_invalid_ap "Invalid access point. Edit bookmark."
+
+//d:Error note message: Invalid accesspoint is defined in a saved deck
+//l:popup_note_window
+#define qtn_wml_confquery_invalid_ap "Invalid access point. Use default?"
+
+//d:Command text associated to a softkey in the control pane.
+//d:Go to root level (folder).
+//l:control_pane_t1/opt7
+//
+#define text_softkey_root_level "Root level"
+
+// Authentication Dialog
+
+//d:label for bookmark name query
+//l:popup_query_data_window
+#define qtn_wml_query_bookmark_title "Enter bookmark name"
+//d:label for saved deck name query
+//l:popup_query_data_window
+#define qtn_wml_query_savedpage_title "Enter name for saved page"
+
+//d:title of bookmark favorites view
+//l:title_pane_t2/opt9
+//
+#define text_wml_option_bookmarks "Bookmarks"
+
+
+//d:Empty list text in Bookmarks View (displayed if no bookmarks exist)
+//l:main_list_empty_pane
+//
+#define text_wml_no_bookmarks "No bookmarks"
+
+//d:Prompt for renaming a saved deck in Saved Decks View.
+//l:popup_query_data_window
+//
+#define qtn_wml_prmpt_edit_name "Edit name:"
+
+//d:Information note text in Bookmarks View: could not move items due to name collision
+//d:Information note text in Saved Decks View: could not move items due to name collision
+//l:popup_note_window
+//
+#define qtn_fldr_names_in_use_rename "Some of the names are already in use. Please rename those items"
+
+//d:Menu item in Bookmarks View: create new bookmark
+//l:list_single_pane_t1_cp2
+//
+#define text_wmlbm_option_enter_new "Add bookmark"
+
+//d:Menu item in Bookmarks View: activate highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_load_bm "Activate"
+
+//d:Menu item in Bookmarks View: edit highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_edit_bm "Edit bookmark"
+
+
+//d:Menu item in Bookmarks View: set prefered bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_list_set_as_preferred "Set as preferred"
+
+//d:Menu item in Bookmarks View: set un prefered bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_list_unset_from_preferred "Unset from preferred"
+
+//d:Menu access to bookmark management submenu (Bookmarks view)
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wmlbm_manage_bm "Edit"
+
+//d:Bookmark Edit Form title editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_bmtitle "Title"
+
+//d:Bookmark Edit Form URL editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_bmadrs "Address"
+
+//d:Bookmark Edit Form Access Point selector label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_wapap "Access point"
+
+//d:Name for "Default" Access Point
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmlbm_default_wapap "Default"
+
+//d:Text to display if there are no Access Points
+//l:list_single_heading_pane_t1
+//
+#define qtn_wmlbm_text_ap_none "None"
+
+//d:Bookmark Edit Form user name editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_username "User name"
+
+//d:Bookmark Edit Form password editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_passwd "Password"
+
+//d:Error note message: attempt to select AP when no such exist.
+//l:popup_note_window
+//
+#define qtn_wmlbm_info_no_valid_ap "No valid access point available. Please add one to preferences."
+
+//d:Error note message: database is inaccessible.
+//l:popup_note_window
+//
+#define qtn_wmlbm_err_db_inaccessible "Cannot access\ndatabase.\nTry again later."
+
+//d:Info note message: bookmark was saved.
+//l:popup_note_window
+//
+#define text_wml_bm_saved "Bookmark saved"
+
+//d:Error note message: bookmark was not saved.
+//l:popup_note_window
+//
+#define qtn_wmlbm_bm_not_saved "Bookmark not saved"
+
+//d:Default name for new bookmark.
+//l:list_single_heading_pane_t1
+//
+#define qtn_wmlbm_default_bm_title "New bookmark"
+
+//d:Left softkey: (accept typing and activate typed URL address)
+//l:control_pane_t1/opt7
+//
+#define qtn_wml_softk_go "Go to"
+
+//d:Confirmation query prompt if no URL specified for a bookmark.
+//l:popup_note_window
+//
+#define qtn_wmlbm_query_address "Address needed.\nAdd an address?"
+
+//d:Information note text in Bookmarks View: name is conflicting with existing name.
+//d:Information note text in Saved Decks View: name is conflicting with existing name.
+//l:popup_note_window
+//
+#define qtn_wmlbm_name_already_used "Name already in use"
+
+//Saved Pages.
+
+//d:Confirmation query text in Bookmarks View
+//d:Confirmation query text in Saved Decks View
+//l:popup_note_window
+//
+#define qtn_wml_quest_overwrite "Page already exists\Overwrite?"
+
+//d:Menu item in Saved Decks View
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_refresh "Refresh"
+
+//d:Menu access to saved page management submenu (Saved Pages view)
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_list_manage_sp "Manage saved pages"
+
+//d:Title for Saved Decks View
+//l:title_pane_t2/opt9
+//
+#define qtn_wml_title_svd_pgs "Saved pages"
+
+//d:Empty list text for Saved Decks View: displayed if there are no saved pages.
+//l:main_list_empty_pane
+//
+#define qtn_wml_no_svd_pgs "No saved pages"
+
+//d:Information note text in Saved Decks View: page saved
+//l:popup_note_window
+//
+#define qtn_wml_conf_pages_saved "Page saved"
+
+//d:Information note text in Saved Decks View
+//l:popup_note_window
+//
+#define qtn_wml_conf_pages_refreshed "Page refreshed"
+
+//d: Wait note while refreshing a saved deck
+//l: popup_note_wait_window
+//
+#define qtn_wml_page_refreshing "Refreshing page"
+
+//d:Menu item in Bookmarks View: go back to Browser View
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_list_ret_page "Back to page"
+
+//
+// Settings texts
+//
+
+
+//d:Browser page info title text
+//l:heading_pane_t1
+#define qtn_browser_query_current_page "Current page"
+
+
+//d: Browser page info item text
+//l:popup_info_list_pane_t1
+#define qtn_browser_query_current_page_url "URL"
+
+
+// WmlBrowser Settings/Session listbox items
+
+//d:Browser settings session list item texts
+//l:heading_pane_t1
+//
+#define qtn_wmls_session_info "Session info"
+
+//d:Format title text in session view.
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_ap "Access point name:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_bearer_type "Bearer type:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_max_speed "Max. connection speed:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_bearer_data_call "Data call"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_bearer_packet_data "Packet data"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_browser_set_bearer_hscsd "HSCSD"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_auto_detect "Auto detect"
+
+//d:Browser security item texts
+//l:heading_pane_t1
+//
+#define qtn_wmlsec_security_info "Security info"
+
+//d:Browser security item texts
+//l:heading_pane_t1
+//
+#define qtn_wmlsec_cert_details "Certificate details"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_serialno "Serial number:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_contype "Connection:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_issuer "Issuer:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_cert_owner "Owner:\n%U"
+
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_valid_from "Valid from:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_valid_to "Valid to:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_fingerprint "Fingerprint:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_server "Server authentication:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_con_secur "Secure"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_con_unsec "Unsecure"
+
+//d: A list box item referring to settings categorised as Page
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_general "General"
+
+//d: A list box item referring to settings categorised as General
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_page "Page"
+
+//d: A list box item referring to settings categorised as Privacy
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_privacy "Privacy"
+
+//d: When the General Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_general "General Settings"
+
+//d: When the PageSettings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_page "Page settings"
+
+//d: When the Privacy Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_privacy "Privacy settings"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_local_set_default_ap "Default access point"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:2.8
+//
+#define qtn_browsers_sett_autoload_objects "Autoload images and objects"
+
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_wmls_local_set_pageoverview "Mini map"
+
+//d: Selectable text for the Page Overview setting
+//d: Page Overview is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_pageoverview_on "On"
+
+//d: Selectable text for the Page Overview setting
+//d: Page Overview is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_pageoverview_off "Off"
+
+//d:Browser settings main list item texts
+//d:Back list is the History list
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_back_list "Back list"
+
+//d: Selectable text for the Back list setting
+//d: If On is selected, back list is shown when SK2 Back
+//d: is pressed in page view.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_back_list_on "On"
+
+//d: Selectable text for the Back list setting
+//d: If Off is selected, back list is not shown when SK2 Back
+//d: is pressed in page view.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_back_list_off "Off"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_auto_refresh "Automatic page refresh"
+
+//d: Selectable text for the Automatic page refresh setting
+//d: Automatic page refresh is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_auto_refresh_on "On"
+
+//d: Selectable text for the Automatic page refresh setting
+//d: Automatic page refresh is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_auto_refresh_off "Off"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_all_small "Smallest"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_smaller "Small"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_normal "Normal"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+
+#define qtn_xhtml_settings_larger "Large"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_all_large "Largest"
+
+//d: Browser character encoding in browser settings: ISO 8859-2
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_2 "ISO 8859-2"
+
+//d: Browser character encoding in browser settings: ISO 8859-4
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_4 "ISO 8859-4"
+
+//d: Browser character encoding in browser settings: ISO 8859-5
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_5 "ISO 8859-5"
+
+//d: Browser character encoding in browser settings: ISO 8859-7
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_7 "ISO 8859-7"
+
+//d: Browser character encoding in browser settings: ISO 8859-9
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_9 "ISO 8859-9"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-6 (Arabic)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88596 "Arabic (ISO)"
+
+
+//d: Browser default character encoding in browser settings: Windows-1256 (Arabic)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1256 "Arabic (Windows)"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-8 (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88598 "Hebrew (ISO-Visual)"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-8-i (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88598_i "Hebrew (ISO-Logical)"
+
+//d: Browser default character encoding in browser settings: Windows-1255 (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1255 "Hebrew (Windows)"
+
+//d: Browser default character encoding in browser settings: Windows-1250
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1250 "Windows-1250"
+
+//d: Browser default character encoding in browser settings: Windows-1251
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1251 "Windows-1251"
+
+//d: Browser default character encoding in browser settings: Windows-1253
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1253 "Windows-1253"
+
+//d: Browser default character encoding in browser settings: Windows-1254
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1254 "Windows-1254"
+
+//d: Browser default character encoding in browser settings: Windows-1257
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1257 "Windows-1257"
+
+//d: Browser default character encoding in browser settings: Windows-1258
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1258 "Windows-1258"
+
+//d: Browser default character encoding in browser settings: Automatic
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_automatic "Automatic"
+
+//d: Browser default character encoding in browser settings: Tis-620
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_tis_620 "Thai"
+
+
+//d: Browser default character encoding in browser settings: Windows-874
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_874 "Thai (Windows-874)"
+
+
+//d: Browser default character encoding in browser settings: Shift_JIS
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_jis "shift_jis"
+
+//d: Browser default character encoding in browser settings: euc-jp
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_euc_jp "euc-jp"
+
+//d: Browser default character encoding in browser settings: iso-2022-jp
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_2022_jp "iso-2022-jp"
+
+//d: Browser default character encoding in browser settings: Ucs-2
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_ucs_2 "Unicode (ucs-2)"
+
+//d: Browser default character encoding in browser settings: KOI8-R
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_koi8_r "KOI8-R"
+
+//d: Browser default character encoding in browser settings: KOI8-U
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_koi8_u "KOI8-U"
+
+//d: Browser default character encoding in browser settings: ISCII
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iscii "ISCII"
+
+//d: Browser default character encoding in browser settings: Korean (Euc-Kr)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_euc_kr "Korean (Euc-Kr)"
+
+//d: Browser default character encoding in browser settings: Korean (KSC5601)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_ksc_5601 "Korean (KSC5601)"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_save_receipt "Save receipt"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_set_wallet_auto "Automatic eWallet use"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_cookie_allow "Allow"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_cookie_reject "Reject"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wtai_dtmf_alcon "Always confirm"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wtai_dtmf_one "Confirm once"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_save_to_notepad "To notepad"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_save_not "Never"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wall_auto_on "On"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wall_auto_off "Off"
+
+
+// Settings Menu texts
+
+//d:Browser settings main menu
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmls_local_set_opt_change "Change"
+
+//d:Invalid certificate indicator dialog's message body
+//l:popup_query_wml_sign_window_2
+//
+// #define qtn_wmlsec_invalid_cert "Server could not be authenticated\nReason:\n%U"
+
+//d:Certificate error: Server certificate not valid yet
+//l:popup_query_wml_sign_window_2
+//
+// #define text_wml_certificate_sc_not_val "Server certificate not valid yet"
+
+//d:Authentication of the WML card failed.
+//l:popup_note_window
+#define text_wml_auth_fail_retry_query "Authorisation failed. Try again?"
+
+//d:if the secured connection established.
+//l:popup_note_window
+#define qtn_wmlsec_conn_secured "Connection secured to %U"
+
+//d:when anonymous connection established to server
+//l:popup_note_window
+#define qtn_wmlsec_conn_sec_unk_serv "Connection secured to unknown server"
+
+//d:Confirmation note text about the closure of the active connection
+//l:popup_note_window
+//
+#define qtn_ics_cnote_disconn_from_service "Connection to service is closed"
+
+//d:Browser settings font size
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_pref_fontsize "Font size"
+
+//d:Browser settings cookies
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_sett_cookies "Cookies"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_image_on "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_image_off "Off"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_expand_on "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_expand_off "Off"
+
+//d:Confirmation query shown if the Search Menu item is selected, and the Search Web Setting value is empty
+//d: Accepting this query opens the search page setting for editing
+//l: popup_note_window
+#define qtn_browser_query_search_url "Search page address is missing. Define now?"
+
+//d: Prompt dialog shown to enter a url for the Search Page setting
+//l: popup_query_data_window
+#define qtn_wml_prompt_search_url "Search page address"
+
+//d: Browser default character encoding in browser settings
+//l: list_setting_pane_t1
+//
+#define qtn_brow_sett_defenc "Default encoding"
+
+// Text used by Progress bar
+
+//d: Percent mark ("%") to be used in the progress bar to indicate the percentage of the data loaded at the moment.
+//d: %N is replaced by the actual percentage number.
+//l: none
+#define qtn_wml_unit_percent "%N %"
+
+
+//d: Size of data in kilo bytes
+//d: text used by progress bar
+//l: none
+#define qtn_wml_unit_kb "%N kB"
+
+//d: Size of data in mega bytes
+//d: text used by progress bar
+//l: none
+#define qtn_wml_unit_mb "%U MB"
+
+//d: Browser default character encoding in browser settings: ISO 8859-1 (Latin 1)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_latin1 "Latin"
+
+//d: Browser default character encoding in browser settings: GB 2312 (Simplified Chinese)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_gb2312 "Simplified Chinese"
+
+//d: Browser default character encoding in browser settings: Big5 (Traditional Chinese)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_big5 "Traditional Chinese"
+
+//d: Browser default character encoding in browser settings: UTF-8 (Unicode)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_utf8 "Unicode (UTF-8)"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_full_screen "Full screen"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_full_screen_normal "Normal"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_full_screen_full_screen "Full screen"
+
+//d:Browser settings to display softkeys
+//l:list_setting_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys "Display softkeys"
+
+//d: Selectable text for the softkey setting
+//d: Will display the softkeys if on
+//l: set_value_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys_on "On"
+
+//d: Selectable text for the softkey setting
+//d: Will not display the softkeys if off
+//l: set_value_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys_off "Off"
+
+//d:Browser settings main list item texts
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_search "Search page address"
+
+//d:Browser settings main list item texts
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_url_suffix "URL Suffix"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_media_volume "Media volume"
+
+//d:Browser settings selectable item texts volume muted
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_muted "Muted"
+
+//d:Browser settings selectable item texts volume level 1
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_1 "Level 1"
+
+//d:Browser settings selectable item texts volume level 2
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_2 "Level 2"
+
+//d:Browser settings selectable item texts volume level 3
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_3 "Level 3"
+
+//d:Browser settings selectable item texts volume level 4
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_4 "Level 4"
+
+//d: Setting for showing or hiding security related warnings
+//l: list_setting_pane_t1
+#define qtn_browser_sett_security "Security notifications"
+
+//d: Show security related warnings
+//l: list_set_graphic_pane_t1
+#define qtn_browser_sett_item_show_all "Show"
+
+//d: Hide security related warnings
+//l: list_set_graphic_pane_t1
+#define qtn_browser_sett_item_hide_all "Hide"
+
+//d: Setting for open downloading files progressively
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_open_loading "Open while loading"
+
+//d: Automatically open downloaded files progressively
+//l: list_set_graphic_pane_t1
+#define qtn_brow_sett_open_downloads_yes "Yes"
+//
+#define qtn_browser_list_check_for_updates "Update Browser"
+
+//d:Browser main menu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_browser_version "Browser Version"
+
+//d:Browser main menu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_browser_help "Browser Help"
+//
+#define qtn_brow_sett_product_update_manual "Manual"
+#define qtn_brow_sett_product_update_auto "Automatic"
+
+//d: Not automatically open downloaded files progressively
+//l: list_set_graphic_pane_t1
+#define qtn_brow_sett_open_downloads_no "No"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+ //
+#define qtn_wmls_local_set_imei_notif "IMEI notification"
+
+//d:Enables IMEI sending
+//d:Browser settings selectable item text
+//l:list_set_graphic_pane_t1
+#define qtn_wmls_local_set_imei_notif_enabled "Enabled"
+
+
+//d:Disables IMEI sending
+//d:Browser settings selectable item text
+//l:list_set_graphic_pane_t1
+#define qtn_wmls_local_set_imei_notif_disabled "Disabled"
+
+
+//d: Boomark folder "Download applications"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_applications "Download applications"
+
+//d: Boomark folder "Download images"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_images "Download images"
+
+//d: Boomark folder "Download tones"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_tones "Download tones"
+
+//d: Boomark folder "Download videos"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_videos "Download videos"
+
+//d: Boomark folder "Download skins"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_skins "Download skins"
+
+//d: Boomark folder "Download Music"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_music "Download music"
+
+//d: Boomark folder title "Download applications"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_applications "Download applications"
+
+//d: Boomark folder title "Download images"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_images "Download images"
+
+//d: Boomark folder title "Download tones"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_tones "Download tones"
+
+//d: Boomark folder title "Download videos"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_videos "Download videos"
+
+//d: Boomark folder title "Download skins"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_skins "Download skins"
+
+//d: Boomark folder title "Download music"
+//l: title_pane_t2/opt9
+//w:
+//r:3.0
+//
+#define qtn_browserbm_folder_title_download_music "Download music"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_adaptive_bookmarks "Recent URLs"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_on "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_hide_folder "Hide folder"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_off "Off"
+
+
+//d:Empty list text for Recent URLs Folder: displayed if there are no Recent URLs.
+//l:main_list_empty_pane
+//
+#define qtn_browserbm_no_adaptive_bookmarks "No recent URLs"
+
+//d:Text for Recent URLs Folder in Bookmarks view.
+//l:list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_adaptive_bookmarks "Recent URLs"
+
+//d: Title of Recent URLs view
+//l: title_pane_t2/opt9
+//w:
+//r:3.2
+//
+#define qtn_browserbm_title_adaptive_bookmarks "Recent URLs"
+
+//d: Confirmation query shown before deleting all Recent URLs.
+//l:popup_note_window
+//
+#define qtn_browserbm_query_delete_adap_bookmarks "Delete all recent URLs?"
+
+//d: Options menu item for copying Recent URLs to Bookmarks Folder.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_options_copy_to_bookmarks "Copy to bookmarks"
+
+//d: Options submenu item for copying Recent URLs to Bookmarks Folder.
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browserbm_options_copy_to_bookmarks_sm "Copy to bookmarks"
+//d: Options menu item for deleting all Recent URLs.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_options_clear_adaptive_bookmarks "Clear Recent URLs"
+
+//d: Confirmation note shown when 1 Adaptive Bookmark has been copied to root level of Bookmarks View.
+//l:popup_note_window
+//
+#define qtn_browserbm_note_adaptive_bookmark_copied "Copied to bookmarks"
+
+//d: Confirmation note shown when more than one Recent URLs (%N is the number of Recent URLs) has been copied to root level of Bookmarks View.
+//l:popup_note_window
+//
+#define qtn_browserbm_note_adaptive_bookmarks_copied "%N items copied to bookmarks"
+
+//d: Options menu item for restarting the browser
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_opt_restart "Restart"
+
+//d:Exit confirmation in browser settings
+//l:list_setting_pane_t1
+//
+#define qtn_wml_setting_exit_confirm "Exit confirmation"
+
+//d:Selectable item texts for Exit confirmation setting
+//d:Activate the exit confirmation prompt.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_exit_on "On"
+
+//d:Selectable item texts for Exit confirmation setting
+//d:Deactivate the exit confirmation prompt.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_exit_off "Off"
+
+//d:Send referrer heading in browser settings
+//l:list_setting_pane_t1
+#define qtn_wml_setting_referrer "Send referrer heading"
+
+//d:Selectable item texts for Send referrer setting.
+//d:Activate the sending of the referrer header.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_refer_on "On"
+
+//d:Selectable item texts for Send referrer setting.
+//d:Deactivate the sending of the referrer header.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_refer_off "Off"
+
+//d: This is a setting item which controls
+//d: whether external style sheets are fetched
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_external_css "Rendering quality"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_scripting "Java/Ecma Script"
+
+//d: Enables Java and ECMA scripts to be executed in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_scripting_enable "Enable"
+
+//d: Disables Java and ECMA scripts to be executed in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_scripting_disable "Disable"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//r: 3.2
+//
+#define qtn_browsers_sett_scriptlog "Javascript notifications"
+
+//d: Disables Java and ECMA script logging output in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_disable "No notification"
+
+//d: Enables Java and ECMA script log to be output to a log file
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_file "Log to file"
+
+//d: Enables Java and ECMA script log to be output to GUI console
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_console "Pop-up notes"
+
+//d: Enables Java and ECMA script log to be output to both GUI console and file
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_console_file "Log to file and as pop-up notes"
+
+
+//d:Menu item to clear all window(s) page script logging
+//l: list_single_popup_submenu_pane_t1
+//r: 3.2
+//
+#define qtn_browser_list_clear_scriptlog "Clear Javascript Log"
+
+//d: Browser Privacy main menu
+//l: list_single_pane_t1_cp2/opt3
+// will contain 5 submenu options
+#define qtn_browser_list_privacy "Privacy"
+
+
+//d:Menu item to clear all privacy related data (cache, cookies, history, form & password data)
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_privacy_clear_all "Clear all privacy data"
+
+
+//d:Menu item to clear all the stored cookies
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_delete_cookies "Clear cookies"
+
+//d:Menu item to clear all window(s) page load history data
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_clear_history "Clear history"
+
+
+//d:Menu item to clear all form and password data
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_privacy_clear_form_data "Clear form data"
+
+
+//d:Information note text after clearing history
+//l: popup_note_window
+//
+#define qtn_browser_note_history_cleared "History and recent URLs cleared"
+
+
+//d:Information note text after clearing form data
+//l: popup_note_window
+//
+#define qtn_browser_note_form_and_passwd_data_cleared "Form and password data cleared"
+
+
+//d:Information note text after deleting cookies
+//l:popup_note_window
+//
+#define qtn_browser_note_cookies_deleted "Cookies deleted"
+
+//d:Information note text after clearing all privacy data
+//l: popup_note_window
+//
+#define qtn_browser_note_clear_all_privacy_done "All privacy data cleared"
+
+
+//d:Menu item in Preferences->Options->Info menu
+//l:list_single_pane_t1_cp2
+#define qtn_wml_opt_about_product "Name and version"
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+#define qtn_browsers_title_about "Name and Version"
+
+//d:Menu item in Preferences->Options->Info menu
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_wml_opt_about_product_oss "About product"
+
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_about_oss "About product"
+
+//d:Text in About Product information note, shown in the first line
+//l:popup_info_list_pane_t1
+#define qtn_browsers_browser_name "Series 60 Mobile Browser"
+
+//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
+//l: heading_pane_t1
+#define qtn_browsers_about_version_label "Version: %0U (%1U)"
+
+//d:Browser main menu
+//l:heading_pane_t1
+#define qtn_browser_query_browser_version "Browser Version"
+
+//d:Text in About Product information note, the list of installed plugins comes after this
+//l:popup_info_list_pane_t1
+#define qtn_browsers_plugins_label "Plug-Ins:"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+#define qtn_browsers_sett_homepage "Home page"
+
+//d:Browser settings main list item texts for OSS browser
+//l:list_setting_pane_t1
+//w:
+//r: 3.0
+//
+#define qtn_browsers_sett_startpage "Startpage"
+
+//d:Browser settings selectable item texts access point home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_ap_home_page "Access point home page"
+
+//d:Browser settings selectable item texts user-defined home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_own_home_page "New address"
+
+//d:Browser settings selectable item texts for selecting bookmark view
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_homepage_bookmarks "Bookmarks"
+
+//d:Browser submenu item for Set as Home page
+//l:list_single_pane_t1_cp2
+#define qtn_browserbm_list_set_as_home_page "Set as Home Page"
+
+//d:Browser submenu item for Set as Home page
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browserbm_list_set_as_home_page_sm "Set as Home Page"
+
+//d:Browser menu item for Home page launch
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browser_list_home "Home"
+
+//d: Prompt dialog shown to enter a url for the Home Page setting
+//l: popup_query_data_window
+#define qtn_wml_prompt_homepage_url "New address"
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+#define qtn_browserbm_query_set_as_home_page "Do you want to use this bookmark as home page?"
+
+//d:Browser settings selectable item texts user-defined home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_use_current_home_page "Use current page"
+
+
+//d:Text in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_uploaded "Uploaded:\n%0U / %1U "
+
+//d:Unit in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_unit_kbyte "kB"
+
+//d:Unit in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_unit_mb "MB"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_user_defined "User defined"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_always_ask "Always ask"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_ask_when_needed "Ask when needed"
+
+//d:Browser gotopane default text
+//l:query_popup_data_pane_t1/opt4
+#define qtn_browser_goto_text_enter_address "Enter address"
+
+//d:Download already in progress info note.
+//l:popup_note_window
+//w:
+//r:2.8
+//
+#define qtn_browser_note_object_downloading "Downloading"
+
+//=============================================================================
+// OSS Browser Support
+//=============================================================================
+
+// ==========================================================
+// Finding
+// ==========================================================
+//d: Browser Find main menu
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+// #define qtn_options_find "Find item"
+
+//d: Menu item for searching for a keyword
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword "Keyword"
+
+//d: Menu item for searching for a keyword
+//l: list_single_pane_t1_cp2
+//w:
+//r: 5.0
+//
+#define qtn_browser_find_keyword_mm "Find Keyword"
+
+//d: Menu item for searching the next matching string in the page
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword_search_for_next "Search for next"
+
+//d: Menu item for searching the previous matching string in the page
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword_search_for_previous "Search for previous"
+
+//d: Tooltip shown when there were no matches of the search
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_no_matches "No matches"
+
+//d: Tooltip shownwhen the search has reached the end of the page
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_wraparound "Wraparound"
+
+//d: Tooltip shownwhen the search has reached the starting point
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_all_content_searched "All the content searched"
+
+// ==========================================================
+// Zooming
+// ==========================================================
+
+//d: Browser zooming main menu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_wml_option_zoom "Zoom"
+
+//d: Options menu list item for the new Zoom Mode. Options>View>Zoom
+//l: list_single_popup_submenu_pane_t1
+//r: Browser 7.x
+//
+#define qtn_browser_list_zoom_mode "Zoom"
+
+//d: When zoom level of images change, new level is shown in title pane
+//l: navi_navi_text_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_zoom_level "Zoom level: %U%"
+
+//d: Zoom levels displayed as zoom menu subitems
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_image_zoom_level "%U%"
+
+
+//d: When zoom level of text change, new level is shown in title pane
+//l: navi_navi_text_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_text_size "Text size: %U%"
+
+//d: When zoom level of text changes, new level is shown in tooltip
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_text_size_tooltip "Text size: %U%"
+
+//d: When zoom level of images change, new level is shown in tooltip
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_zoom_level_tooltip "Zoom level: %U%"
+
+//d: Tooltip that displays when the maximum zoom level has been reached
+//l: popup_preview_text_window/opt3
+//r: 3.2.3, 5.0+, browser 7.x
+//
+#define qtn_browser_zoom_level_tooltip_maximum "Maximum zoom level"
+
+//d: Tooltip that displays when the minimum zoom level has been reached
+//l: popup_preview_text_window/opt3
+//r: 3.2.3, 5.0+, browser 7.x
+//
+#define qtn_browser_zoom_level_tooltip_minimum "Minimum zoom level"
+
+//=============================================================================
+// Multiple Windows Support
+//=============================================================================
+
+
+//d: menu item. Selecting this will open the current url link
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_open_link_main "Open link"
+
+
+//d: Submenu item. Selecting this will open the current url link in
+//d: a new window
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_open_in_new_window "Open link in new window"
+
+//d: Download main menu, contains download page menuitems.
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_submenu_download "Download"
+
+//d: Selecting this will open the current url link.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_download_page "Download page"
+
+//d: Selecting this will open the current url link in a new window.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_download_in_new_window "Download page in new window"
+
+//d: Menu access to pop-ups submenu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows "Windows"
+
+//d: Opens a selection dialog which will allow the
+//d: the user to switch between all open windows.
+//d: Only shown if more than one window is opened.
+//l: list_single_popup_submenu_pane_t1
+//r:3.0
+//
+#define qtn_browser_list_switch_window "Windows"
+
+//d: Closes the current window.
+//l: list_single_pane_t1_cp2
+//r:3.0
+//
+#define qtn_browser_list_close_window "Close"
+
+//d: Submenu item. Selecting this item allows pop-up windows to be opened from
+//d: the current webpage's domain. This applies to non-user initiated pop-ups.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows_allow "Allow pop-ups"
+
+//d: Submenu item. Selecting this item blocks pop-up windows being opened from
+//d: the current webpage's domain. This applies to non-user initiated pop-ups.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows_block "Block pop-ups"
+
+//d: The header for an option list dialog. The list contains
+//d: all open windows, selection will make that window active.
+//l: heading_pane_t1
+//r:3.0
+//
+#define qtn_browser_query_switch_window_header "Switch to:"
+
+//d: A confirmation dialog responding to a user
+//d: request to close the current window
+//l: popup_note_window
+//r:3.0
+//
+#define qtn_browser_query_close_window "Close current window?"
+
+//d: A pop-up note to indicate to the user that the maximum number
+//d: of popup windows allowed has been reached, no more may be opened
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_browser_note_pop_up_max_reached "Cannot open pop-up, maximum number reached."
+
+//d: An information note, indicating that a new window is being opened
+//d: will be added to the whitelist
+//l: popup_preview_text_window/opt3
+//r:3.0
+//
+#define qtn_browser_note_pop_up_window_opened "Opening new window"
+
+//-----------------------------------------------------------------------------
+// Settings for Multiple Windows
+//
+//d: Browser setting for enabling popup blocking
+//l: list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking "Pop-up blocking"
+
+//d: Selectable text for the Popup blocking setting
+//d: Popup blocking is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking_on "Enabled"
+
+//d: Selectable text for the Popup blocking setting
+//d: Popup blocking is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking_off "Disabled"
+
+// ==========================================================
+// Subscribe to
+// ==========================================================
+
+//d: Browser Subscribe to main menu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_list_subscribe_to "Subscribe to feeds"
+
+//-----------------------------------------------------------------------------
+// Popup dialog - stored preference data
+//
+
+//d: Tooltip note notifying the user that pop-ups have been disabled
+//d: and indicating to the user that they must use the options menu
+//d: to allow pop-ups for the current page
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_multiple_windows_tooltip "Pop-up window was blocked. Pop-ups can be enabled from Options"
+
+//d:Text for RSS Folder in Bookmarks view.
+//l:list_single_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_feeds_list "Web feeds"
+
+//----------------------------------------------------------------------------
+// Show Miniature
+//
+
+//d:Menu item to show Thumbnail view of the currently visited page.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_list_miniature_show_mini "Page overview"
+
+//--------------------------------------------------------------------------------
+// Smart Text recognition
+//
+
+//d:Browser setting for smart link detection
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_smartlink "Smart text recognition"
+
+//d: Enables automatic detection of phone numbers and email addresses when scrolling
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_brow_sett_smartlink_on "On"
+
+//d: Disables Jutomatic detection of phone numbers and email addresses when scrolling
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_brow_sett_smartlink_off "Off"
+
+
+//----------------------------------------------------------------------------
+// Page overview
+//
+
+//d:Tooltip when the Page Overview is switched on by Shortcut key 7.
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.0
+//
+#define qtn_browser_tooltip_page_overview_on "Mini map on"
+
+//d:Tooltip when the Page Overview is switched off by Shortcut key 7.
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.0
+//
+#define qtn_browser_tooltip_page_overview_off "Mini map off"
+
+//-----------------------------------------------------------------------------
+// Form Data Saving
+//
+
+//d: Browser setting for Form data saving
+//l: list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_form_data_saving "Form data saving"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_on "Form and password data"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_off "Off"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_only "Form data only"
+
+//d:Clear history and Recent URLs query string
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_privacy_query_clear_history "Clear history and recent URLs?"
+
+
+//d:Delete Form Data and Password query string
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_form_data_delete_all "Clear form and password data?"
+
+//d:Delete all privacy data query string
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_privacy_delete_all "Clear all privacy data?"
+
+
+//d:Delete Form Password Data query string
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_form_data_delete_password "Clear password data?"
+//----------------------------------------------------------------------------
+// Window selection
+//
+
+//d:Menu item to selects the focused window.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_select_window "Select"
+
+//d:Menu item to close all windows except the current one.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_close_all_but_this "Close all but this window"
+
+//----------------------------------------------------------------------------
+// Web feeds settings
+//
+
+//d: A list box item referring to settings categorised as Web Feeds
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_feeds "Web feeds"
+
+//d: When the Web feeds Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_feeds "Web feeds settings"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating "Automatic updating"
+
+//d: Selectable text for the Automatic updating setting
+//d: If Off is selected, automatic updating does not occur
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating_off "Off"
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 15 minutes
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_15min "Every 15 minutes"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every hour
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_hourly "Every hour"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 4 hours
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_4hours "Every 4 hours"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done daily
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_daily "Every day"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done weekly
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_weekly "Every week"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating_ap "Update via access point"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds while roaming
+//l: list_setting_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_autoupdating_roaming "Update while roaming"
+
+//d: Selectable text for the Automatic update setting while roaming
+//d: If On is selected, automatic update happens even if the user is roaming
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_val_autoupdating_roaming_on "On"
+
+//d: Selectable text for the Automatic update setting while roaming
+//d: If Off is selected, automatic update does not occur while roaming
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_val_autoupdating_roaming_off "Off"
+
+//d:Browser settings main list item texts
+//l:popup_note_window
+//
+
+#define qtn_browsers_sett_dataquery_autoupdate_ap "The access point has to be defined to enable automatic updating."
+
+//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
+//d: noting that turning the feature on may cost them money
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
+//d: Query user to close existing WML page when activating a link to a WML page
+//d: from another window. Only one WML page can be opened at once.
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_multiple_windows_wml "WML page in another window needs to be closed to proceed, close it?"
+
+//----------------------------------------------------------------------------
+// ToolBar Strings
+//
+//d: view sub menu item to show the toolbar
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_list_toolbar "Toolbar"
+//d: Tooltip that is showns when the toolbar is activated via the Options menu
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_tooltip_toolbar "Click an empty area of the page to show the toolbar"
+
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_objects "Load content"
+
+
+//d: Selectable text for the Load Content setting
+//d: Only text is loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_text "Text only"
+
+
+//d: Selectable text for the Load Content setting
+//d: Images are loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_images_no_flash "Images no flash"
+
+
+//d: Selectable text for the Load Content setting
+//d: All content is loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_all "All"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an anchor
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_list_show_address "Show address"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_save_image_to_gallery "Save to gallery"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_list_open_to_viewer "Open to viewer"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_options_call "Call"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_create_sms "Create text message"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number or e-mail
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_options_contacts "Add to contacts"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an e-mail
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_create_email "Create e-mail message"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_load_image "Load image"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_load_all_images "Load all images"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_enable_autoload_images "Enable images"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_enable_autoload_all "Enable images and flash"
+
+
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+#define qtn_browser_query_set_as_home_page "Set as home page?"
+
+
+
+// -----------------------------------------------------------------
+// Toolbar related strings
+// -----------------------------------------------------------------
+
+//d: Tooltip that is showns when the toolbar is activated via the Options menu
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_tooltip_toolbar "Click an empty area of the page to show the toolbar"
+
+
+
+// -----------------------------------------------------------------
+// Toolbar Button Command Settings Labels
+// -----------------------------------------------------------------
+
+//d: Toolbar Button 1 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button1 "Button 1"
+
+//d: Toolbar Button 2 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button2 "Button 2"
+
+//d: Toolbar Button 3 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button3 "Button 3"
+
+//d: Toolbar Button 4 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button4 "Button 4"
+
+//d: Toolbar Button 5 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button5 "Button 5"
+
+//d: Toolbar Button 6 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button6 "Button 6"
+
+//d: Toolbar Button 7 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button7 "Button 7"
+
+
+// -----------------------------------------------------------------
+// Toolbar Button Command Values
+// -----------------------------------------------------------------
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_keymap "Display key map"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_go_to_web_address "Go to web address"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_list_bookmarks "Bookmarks" //(toolbar only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_save_as_bookmark "Save as bookmark"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_recent_urls "Recent URLs" //(toolbar only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_find_keyword "Find keyword"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_reload "Reload"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_miniature_show "Page overview"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_previous_page "Back one page"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_go_to_hompage "Go to homepage"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_zoom_in "Zoom in"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_zoom_out "Zoom out"
+
+//d: Preferences for Zoom Mode: Options>Preferences>Shortcut keys><N>Key > Zoom Mode
+//l: list_set_graphic_pane_t1
+//r: Browser 7.x
+//
+#define qtn_browser_setting_zoom_mode "Zoom Mode"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_settings "Settings"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_rotate_screen "Rotate screen"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_subscribe_to_feeds "Subscribe to feeds"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_manage_bookmarks "Manage bookmarks"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_visual_history "History"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_view_images "View images"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_save_page "Save page"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_send "Send"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_switch_window "Switch window"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_toolbar "Display toolbar" // (keymap only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_help "Help"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_none "None"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_full_screen "Full screen"
+
+// -----------------------------------------------------------------
+// Toolbar Error Message
+// -----------------------------------------------------------------
+
+//d: Pop Up note if all toolbar buttons are set to "None"
+//l: popup_note_window
+//r: 5.0
+#define qtn_browser_setting_toolbar_save_dialog "You must assign a function to at least one of the toolbar buttons!"
+
+
+// -----------------------------------------------------------------
+// Toolbar On/Off Setting Values
+// -----------------------------------------------------------------
+
+//d:Setting for Enabling or Disabling the Toolbar
+//l: list_setting_pane_t1
+//r: 5.0
+#define qtn_browser_setting_toolbar_on_off "Toolbar On/Off"
+
+//d: Selectable text for the Toolbar On/Off setting
+//l: set_value_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_toolbar_on "On"
+
+//d: Selectable text for the Toolbar On/Off setting
+//l: set_value_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_toolbar_off "Off"
+
+
+// -----------------------------------------------------------------
+// Toolbar Settings group label and title strings
+// -----------------------------------------------------------------
+//d: Toolbar Settings group label
+//l:list_single_graphic_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_group_toolbar "Toolbar"
+
+//Toolbar Settings Group Title Pane
+//l: title_pane_t2/opt9
+//r:5.0
+//
+#define qtn_browser_setting_group_title_toolbar "Toolbar settings"
+
+
+// -----------------------------------------------------------------
+// ShortCut Keys Settings group label and title strings
+// -----------------------------------------------------------------
+
+//Shortcut Keys Settings group label
+//l:list_single_graphic_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_group_shortcuts "Shortcut keys"
+
+//Shortcut Keys Settings Group Title Pane
+//l: title_pane_t2/opt9
+//r:5.0
+//
+#define qtn_browser_setting_group_title_shortcuts "Shortcut key settings"
+
+
+// Shortcut Keys labels for settings
+
+//d: Shortcut key setting label for key "1"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key1 "1 Key"
+
+//d: Shortcut key setting label for key "2"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key2 "2 Key"
+
+//d: Shortcut key setting label for key "3"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key3 "3 Key"
+
+//d: Shortcut key setting label for key "4"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key4 "4 Key"
+
+//d: Shortcut key setting label for key "5"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key5 "5 Key"
+
+//d: Shortcut key setting label for key "6"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key6 "6 Key"
+
+//d: Shortcut key setting label for key "7"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key7 "7 Key"
+
+//d: Shortcut key setting label for key "8"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key8 "8 Key"
+
+//d: Shortcut key setting label for key "9"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key9 "9 Key"
+
+//d: Shortcut key setting label for key "0"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key0 "0 Key"
+
+//d: Shortcut key setting label for key "*"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_starkey "* Key"
+
+//d: Shortcut key setting label for key "#"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_hashkey "# Key"
+
+//d:List of feeds to choose from .
+//l:heading_pane_t1
+//r:5.0
+//
+#define qtn_browser_subscribe_list "Subscribe to"
+
+//d: Options menu item for displaying the shortcut keymap in a browser submenu
+//l: list_single_popup_submenu_pane_t1
+//r: 3.2.3, 5.0+
+#define qtn_browser_list_show_shortcut_keymap "Show Shortcut Keymap"
+
+//d: Options menu list item for displaying the shortcut keymap in the top level browser menu
+//l: list_single_pane_t1_cp2
+//r: 3.2.3, 5.0+, browser 7.x
+#define qtn_browser_list_main_show_shortcuts "Show shortcuts"
+
+//d:Command text associated to a softkey in the control pane.
+//d:Configure Keymap functionality.
+//l:control_pane_t1/opt7
+//
+#define text_softkey_configure "Configure"
+
+// -----------------------------------------------------------------
+// ShortCut Keymap text strings
+// -----------------------------------------------------------------
+
+//d: Shortcut key function Display Keymap
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_keymap "Show Keymap"
+
+//d: Shortcut key function Go To Web Address
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_go_to_web_address "Go to Web Address"
+
+//d: Shortcut key function Save as bookmark
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_save_as_bookmark "Save as Bookmark"
+
+//d: Shortcut key function Find Keyword
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_find_keyword "Find Keyword"
+
+//d: Shortcut key function Reload
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_reload "Reload"
+
+//d: Shortcut key function Page Overview
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_miniature_show "Page Overview"
+
+//d: Shortcut key function Back One Page
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_previous_page "Back One Page"
+
+//d: Shortcut key function Go to Homepage
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_go_to_homepage "Go to Homepage"
+
+//d: Shortcut key function Zoom In
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_zoom_in "Zoom In"
+
+//d: Shortcut key function Zoom Out
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_zoom_out "Zoom Out"
+
+//d: Shortcut key function Zoom Mode
+//l: cell_scut_pane
+//r: Browser 7.x
+//
+#define qtn_browser_keymap_text_zoom_mode "Zoom Mode"
+
+//d: Shortcut key function Settings
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_settings "Settings"
+
+//d: Shortcut key function Rotate Screen
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_rotate_screen "Rotate Screen"
+
+//d: Shortcut key function Subscribe To Feeds
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_subscribe_to_feeds "Subscribe To Feeds"
+
+//d: Shortcut key function Manage Bookmarks
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_manage_bookmarks "Manage Bookmarks"
+
+//d: Shortcut key function History
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_visual_history "History"
+
+//d: Shortcut key function View Images
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_view_images "View Images"
+
+//d: Shortcut key function Save Page
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_save_page "Save Page"
+
+//d: Shortcut key function Switch Window
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_switch_window "Switch Window"
+
+//d: Shortcut key function Display Toolbar
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_toolbar "Display Toolbar"
+
+//d: Shortcut key function Help
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_help "Help"
+
+//d: Shortcut key function None
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_none "None"
+
+//d: Shortcut key function Full Screen
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_full_screen "Full Screen"
+
+// -----------------------------------------------------------------
+// Touch Toolbar Button strings
+// -----------------------------------------------------------------
+
+//---------------------------------
+// Main Toolbar Strings
+//---------------------------------
+// Goto Address Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_gotoaddress_tt "Goto Address"
+
+// Show Zoom Slider Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_zoomshow_tt "Show Zoom Slider"
+
+// Hide Zoom Slider Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_zoomhide_tt "Hide Zoom Slider"
+
+//---------------------------------
+// Extended Toolbar Strings
+//---------------------------------
+//d:Extended Toolbar Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_tt "Expand toolbar"
+
+//d:Bookmarks Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_bm "Bookmarks"
+
+//d:Bookmarks Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_bm_tt "Bookmarks"
+
+//d:Home Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_home "Home"
+
+//d:Home Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_home_tt "Home"
+
+//d:Settings Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_settings "Settings"
+
+//d:Settings Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_settings_tt "Settings"
+
+
+//d:Save Bookmark Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_save_bookmark "Save Bookmark"
+
+//d:Save Bookmark Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_save_bookmark_tt "Save Bookmark"
+
+
+//d:Find Keyword Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_find_keyword "Find Keyword"
+
+//d:Find Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_find_keyword_tt "Find Keyword"
+
+//d:Find Next Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_findnext_tt "Find Next"
+
+//d:Find Previous Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_findprevious_tt "Find Previous"
+
+//d:Navigate Back in History Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_history_back_tt "Back"
+
+//d:Navigate Forward in History Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_history_forward_tt "Forward"
+
+//d:Subscribe Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_subscribe_list "Subscribe"
+
+//d:Subscribe Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_subscribe_list_tt "Subscribe"
+
+//d:Reload Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_reload "Reload"
+
+//d:Reload Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_reload_tt "Reload"
+
+//d:Page Overview Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_miniature_show "Show Miniature"
+
+//d:Page Overview Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_miniature_show_tt "Show Miniature"
+
+//d:Help Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_help "Help"
+
+//d:Help Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_help_tt "Help"
+
+//d:Goto Address Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_gotoaddress "Goto Address"
+
+//d:Show Zoom Slider Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_zoomshow "Show Zoom Slider"
+
+//d:Full Screen Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_full_screen "Full Screen"
+
+//d:Full Screen Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_full_screen_tt "Full Screen"
+
+//d:Send Url Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_send_url "Send Url"
+
+//d:Send Url Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_send_url_tt "Send Url"
+//d:Rotate Display Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_rotate "Rotate Display"
+
+//d:Rotate Display Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_rotate_tt "Rotate Display"
+
+//d:View Feeds Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_view_feeds "View Feeds"
+
+//d:View Feeds Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_view_feeds_tt "View Feeds"
+
+//d:Switch Window Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_switch_win "Switch Window"
+
+//d:Switch Window Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_switch_win_tt "Switch Window"
+
+
+//---------------------------------
+// Bookmark Toolbar Strings
+//---------------------------------
+//d:Add Bookmark Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_tb_add_bookmark "Add Bookmark"
+
+//d:Delete Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_tb_del_bookmark "Delete"
+
+// Add Bookmark Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_add_bookmark_tt "Add Bookmark"
+
+// Delete Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_del_bookmark_tt "Delete"
+
+// -----------------------------------------------------------------
+// Option menu sub-options
+// -----------------------------------------------------------------
+
+//d: "Go to" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_goto "Go to"
+
+//d: "Page Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_pageactions "Page actions"
+
+//d: "Bookmark Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_bmactions "Bookmark actions"
+
+//d: "Feeds Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_feedsactions "Feeds actions"
+
+//d: "Edit" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_edit "Edit"
+
+//d: "Mark/Unmark" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_markunmark "Mark/Unmark"
+
+//d: "View" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_view "View"
+
+//d: "Clear" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_clear "Clear"
+
+// -----------------------------------------------------------------
+// Go to sub-options
+// -----------------------------------------------------------------
+//d: "Web feeds" menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_web_feeds "Web feeds"
+
+//d: "New web page" menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_new_web_page "New web page"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_next "Next Toolbar"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_back "Back"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_forward "Forward"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_pageoverview "Page Overview"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_reload "Reload"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_findkeyword "Find Keyword"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_home "Home"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_subscribe "subscribe"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_go "Go"
+
+//d: List of feeds to choose from .
+//l: heading_pane_t1
+//
+#define qtn_browser_toolbar_subscribe_header "Select to subscribe"
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+//
+#define qtn_browser_query_set_as_home_page "Set as home page?"
+
+// -----------------------------------------------------------------
+// View sub-options
+// -----------------------------------------------------------------
+//d: Full Screen menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_full_screen_enter "Full Screen"
+
+// -----------------------------------------------------------------
+// Search strings
+// -----------------------------------------------------------------
+//d: Left softkey: (accept typing and activate search application)
+//l: control_pane_t1/opt7
+//r: 5.0
+//
+#define qtn_is_softkey_search "Search"
+//d: Search second level options menu text
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_is_list_search "Search"
+//d: Tooltip for go to/search icon
+//l: popup_preview_text_window_t1
+//r: 5.0
+//
+#define qtn_is_tooltip_goto_search "Go to web page or search"
+//d: settings view menu item
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browsers_sett_web_search_provider "Web search provider"
+//d: setting text when it is not defined
+//l: set_value_pane_t1
+//r: 5.0
+//
+#define qtn_is_label_not_selected "Not selected"
+//d: search editor default text
+//l: query_popup_data_pane_t1/opt4
+//r: 5.0
+//
+#define qtn_is_web_search "Web search"
+// -----------------------------------------------------------------
+// Service strings
+// -----------------------------------------------------------------
+//d: Here and now bookmark list item
+//l: list_single_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_is_recommendations "Here and Now"
+
+//d: Confirmation to install add-on browser
+//l: popup_note_window
+//r: 7.2
+#define qtn_install_addon_browser "A new browser is available. Would you like to install it?"
+// End of File
--- a/browserui/videoservices/loc/VideoServices.loc Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +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 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: localisation strings for Video Services
-*
-*/
-
-
-// LOCALISATION STRINGS
-
-//d: Caption strings for Video Services in list view
-//l: list_single_large_graphic_pane_t1
-//w:
-//r: 3.1
-//
-#define qtn_apps_video_list "Video Services"
-
-//d: Caption strings for Video Services in grid view
-//l: cell_app_pane_t1
-//w:
-//r: 3.1
-//
-#define qtn_apps_video_grid "Video Services"
-
-// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/loc/videoservices.loc Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* 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 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: localisation strings for Video Services
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d: Caption strings for Video Services in list view
+//l: list_single_large_graphic_pane_t1
+//w:
+//r: 3.1
+//
+#define qtn_apps_video_list "Video Services"
+
+//d: Caption strings for Video Services in grid view
+//l: cell_app_pane_t1
+//w:
+//r: 3.1
+//
+#define qtn_apps_video_grid "Video Services"
+
+// End of File
--- a/pushmtm/Group/Bld.inf Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Build specification file
-*
-*/
-
-
-#include <platform_paths.hrh>
-#include "../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
-
-PRJ_PLATFORMS
-DEFAULT
-
-// Help exports
-#include "../help/group/bld.inf"
-
-PRJ_EXPORTS
-../Inc/PushMtmCommands.hrh APP_LAYER_PLATFORM_EXPORT_PATH(PushMtmCommands.hrh)
-../rom/PushMtm.iby CORE_APP_LAYER_IBY_EXPORT_PATH(PushMtm.iby)
-../rom/PushMtmResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(PushMtmResources.iby)
-../rom/S60SiSlWapPush.iby CORE_APP_LAYER_IBY_EXPORT_PATH(S60SiSlWapPush.iby)
-#ifndef __S60_32__
-../rom/wappush.iby CORE_APP_LAYER_IBY_EXPORT_PATH(wappush.iby)
-#endif
-../loc/pushmtmui.loc APP_LAYER_LOC_EXPORT_PATH(pushmtmui.loc)
-../loc/pushviewer.loc APP_LAYER_LOC_EXPORT_PATH(pushviewer.loc)
-
-../conf/pushmtm.confml APP_LAYER_CONFML(pushmtm.confml)
-../conf/pushmtm_10008D42.crml APP_LAYER_CRML(pushmtm_10008D42.crml)
-
-#ifdef __SERIES60_32__
-
-PRJ_MMPFILES
-
-// MTM registry files
-//gnumakefile PushRegistry.mk
-gnumakefile PushMtmIcons.mk
-// Push Mtm Utility
-PushMtmUtil.mmp
-// Push Server Mtm, Client Mtm and Ui Mtm
-PushMtmCliSrv.mmp
-// Ui Data Mtm
-PushMtmUi.mmp
-// Push Viewer
-PushViewer.mmp
-
-#include "../Plugins/Group/Bld.inf"
-
-#else
-
-PRJ_EXTENSIONS
-START EXTENSION s60/mifconv
-OPTION TARGETFILE pushmtm.mif
-OPTION HEADERFILE pushmtm.mbg
-OPTION SOURCES -c8,1 qgn_prop_mce_push_unread -c8,1 qgn_prop_mce_push_read
-END
-
-PRJ_MMPFILES
-
-// MTM registry files
-// Push Mtm Utility
-PushMtmUtil.mmp
-// Push Server Mtm, Client Mtm and Ui Mtm
-PushMtmCliSrv.mmp
-// Ui Data Mtm
-PushMtmUi.mmp
-// Push Viewer
-PushViewer.mmp
-
-#include "../Plugins/Group/Bld.inf"
-
-#endif
-
-PRJ_TESTMMPFILES
-
-
--- a/pushmtm/Group/PushMtmCliSrv.mmp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET PushMtmCliSrv.dll
-TARGETTYPE dll
-UID 0x10004845 0x10008D42
-TARGETPATH SHARED_LIB_DIR
-
-CAPABILITY CAP_GENERAL_DLL
-
-VENDORID VID_DEFAULT
-
-USERINCLUDE ../MtmCliSrvInc
-USERINCLUDE ../Inc
-USERINCLUDE ../MtmUtilInc
-USERINCLUDE ../MtmUiInc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH ../MtmCliSrvSrc
-SOURCE PushMtmClient.cpp
-SOURCE PushMtmCliSrvPanic.cpp
-SOURCE PushMtmGcOperation.cpp
-SOURCE PushMtmServer.cpp
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#ifdef __TEST_LOG_MMP
-MACRO __TEST_LOG__
-#endif
-
-LIBRARY euser.lib
-LIBRARY msgs.lib
-LIBRARY PushMtmUtil.lib
-LIBRARY SISLPushMsgUtils.lib
-
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY flogger.lib
-#endif
-
-#if defined(ARMCC)
- DEFFILE ../EABI/PUSHMTMCLISRVU_EKA2.def
-#else
- DEFFILE ../BWinsCw/PUSHMTMCLISRVU_EKA2.def
-#endif
-
-START RESOURCE ../Data/PushRegistry.rss
-TARGET PushRegistry.rsc
-TARGETPATH MTM_INFO_FILE_DIR
-#ifdef __S60_32__
-LANG sc
-#else
-LANGUAGE_IDS
-#endif
-END
-
--- a/pushmtm/Group/PushMtmIcons.mk Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +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 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:
-#
-
-ifeq (WINS,$(findstring WINS, $(PLATFORM)))
-ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
-else
-ZDIR=\epoc32\data\z
-endif
-
-TARGETDIR=$(ZDIR)\RESOURCE\APPS
-HEADERDIR=\epoc32\include
-ICONTARGETFILENAME=$(TARGETDIR)\pushmtm.mif
-HEADERFILENAME=$(HEADERDIR)\pushmtm.mbg
-
-do_nothing :
- @rem do_nothing
-
-MAKMAKE : do_nothing
-
-BLD : do_nothing
-
-CLEAN : do_nothing
-
-LIB : do_nothing
-
-CLEANLIB : do_nothing
-
-# ----------------------------------------------------------------------------
-# TODO: Configure these.
-#
-# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
-# MifConv if the mask detph is defined.
-#
-# NOTE 2: Usually, source paths should not be included in the bitmap
-# definitions. MifConv searches for the icons in all icon directories in a
-# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
-# The directory \s60\icons is included in the search only if the feature flag
-# __SCALABLE_ICONS is defined.
-# ----------------------------------------------------------------------------
-
-RESOURCE :
- mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
- /c8,1 qgn_prop_mce_push_unread.bmp \
- /c8,1 qgn_prop_mce_push_read.bmp
-
-FREEZE : do_nothing
-
-SAVESPACE : do_nothing
-
-RELEASABLES :
- @echo $(HEADERFILENAME)&& \
- @echo $(ICONTARGETFILENAME)
-
-FINAL : do_nothing
--- a/pushmtm/Group/PushMtmUi.mmp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET PushMtmUi.dll
-TARGETTYPE dll
-UID 0x10004845 0x10008D43
-TARGETPATH SHARED_LIB_DIR
-
-CAPABILITY CAP_GENERAL_DLL
-
-VENDORID VID_DEFAULT
-
-START RESOURCE ../Data/PushMtmUi.rss
-DEPENDS avkon.rsg
-HEADER
-#ifdef __S60_32__
-LANG sc
-#else
-LANGUAGE_IDS
-#endif
-TARGETPATH MTM_RESOURCE_DIR
-END // RESOURCE
-
-USERINCLUDE ../MtmUiInc
-USERINCLUDE ../Inc
-USERINCLUDE ../MtmUtilInc
-USERINCLUDE ../ViewerInc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH ../MtmUiSrc
-SOURCE PushLoadServiceOp.cpp
-SOURCE PushMessageInfoDialog.cpp
-SOURCE PushMessageInfoOp.cpp
-SOURCE PushMtmUi.cpp
-SOURCE PushMtmUiData.cpp
-SOURCE PushMtmUiOperation.cpp
-SOURCE PushMtmUiPanic.cpp
-SOURCE PushSettingsDialog.cpp
-SOURCE PushViewMessageOp.cpp
-
-#ifdef __SERIES60_PUSH_SP
-SOURCE PushViewServiceOp.cpp
-#endif // __SERIES60_PUSH_SP
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO __TEST_LOG__
-#endif
-
-LIBRARY apparc.lib
-LIBRARY AknSkins.lib
-LIBRARY apmime.lib
-LIBRARY avkon.lib
-LIBRARY bafl.lib
-LIBRARY CdlEngine.lib
-LIBRARY CommonEngine.lib
-LIBRARY commonui.lib
-LIBRARY cone.lib
-LIBRARY ecom.lib
-LIBRARY efsrv.lib
-LIBRARY eikcoctl.lib
-LIBRARY eikcore.lib
-LIBRARY eikdlg.lib
-LIBRARY euser.lib
-LIBRARY featmgr.lib
-LIBRARY inetprotutil.lib
-#ifdef __SERIES60_PUSH_SP
-LIBRARY MiscPushMsgUtils.lib // For CUnknownPushMsgEntry.
-#endif // __SERIES60_PUSH_SP
-LIBRARY msgs.lib
-LIBRARY mtur.lib
-LIBRARY muiu.lib
-LIBRARY PushMtmUtil.lib
-LIBRARY PushMsgEntry.lib
-LIBRARY SISLPushMsgUtils.lib
-LIBRARY CENTRALREPOSITORY.lib
-
-#ifdef __SERIES60_HELP
-LIBRARY hlplch.lib // for "Help" options menu
-#endif // __SERIES60_HELP
-
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY flogger.lib
-#endif
-
-#if defined(ARMCC)
- DEFFILE ../EABI/PUSHMTMUIU_EKA2.def
-#else
- DEFFILE ../BWinsCw/PUSHMTMUIU_EKA2.def
-#endif
--- a/pushmtm/Group/PushMtmUtil.mmp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <bldvariant.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET PushMtmUtil.dll
-TARGETTYPE dll
-UID 0x1000008d 0x10008D44
-
-CAPABILITY CAP_GENERAL_DLL
-VENDORID VID_DEFAULT
-
-USERINCLUDE ../MtmUtilInc
-USERINCLUDE ../Inc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH ../MtmUtilSrc
-SOURCE PushAsyncOpRunner.cpp
-#ifdef __PUSH_WHITELIST
-SOURCE PushAuthenticationUtilitiesWL.cpp
-#else // __PUSH_WHITELIST
-SOURCE PushAuthenticationUtilitiesPure.cpp
-#endif // __PUSH_WHITELIST
-SOURCE PushInitiator.cpp
-SOURCE PushInitiatorList.cpp
-SOURCE PushMtmOperation.cpp
-SOURCE PushMtmSettings.cpp
-SOURCE PushMtmUtil.cpp
-SOURCE PushMtmUtilPanic.cpp
-#ifdef __PUSH_WHITELIST
-SOURCE WhiteListImporterWL.cpp
-#else // __PUSH_WHITELIST
-SOURCE WhiteListImporterDummy.cpp
-#endif // __PUSH_WHITELIST
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO __TEST_LOG__
-#endif
-
-LIBRARY efsrv.lib
-LIBRARY estor.lib
-LIBRARY euser.lib
-LIBRARY featmgr.lib
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY flogger.lib
-#endif
-LIBRARY inetprotutil.lib
-LIBRARY msgs.lib
-#ifdef __PUSH_WHITELIST
-LIBRARY PushMsgEntry.lib
-LIBRARY WapPushUtils.lib
-#endif // __PUSH_WHITELIST
-LIBRARY SISLPushMsgUtils.lib
-LIBRARY CENTRALREPOSITORY.lib
-
-#if defined(ARMCC)
- DEFFILE ../EABI/PUSHMTMUTILU_EKA2.def
-#else
- DEFFILE ../BWinsCw/PUSHMTMUTILU_EKA2.def
-#endif
-
--- a/pushmtm/Group/PushViewer.mmp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET PushViewer.exe
-EPOCSTACKSIZE 0x5000
-TARGETTYPE exe
-UID 0x100039CE 0x10008D3C
-
-CAPABILITY CAP_APPLICATION
-VENDORID VID_DEFAULT
-
-USERINCLUDE ../ViewerInc
-USERINCLUDE ../Inc
-USERINCLUDE ../MtmUiInc
-USERINCLUDE ../MtmUtilInc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH ../ViewerSrc
-SOURCE PushViewerApp.cpp
-SOURCE PushViewerAppServer.cpp
-SOURCE PushViewerDoc.cpp
-SOURCE PushViewerPanic.cpp
-SOURCE PushViewerMsgEdAppUi.cpp
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO __TEST_LOG__
-#endif
-
-LIBRARY CommonUI.lib
-LIBRARY apparc.lib
-LIBRARY avkon.lib
-LIBRARY cone.lib
-LIBRARY eikcoctl.lib
-LIBRARY eikcore.lib
-LIBRARY euser.lib
-LIBRARY MsgEditorAppUi.lib
-LIBRARY MsgEditorModel.lib
-LIBRARY MsgEditorView.lib
-LIBRARY msgs.lib
-LIBRARY muiu.lib
-LIBRARY PushMtmUtil.lib
-LIBRARY SISLPushMsgUtils.lib
-
-#ifdef __SERIES60_HELP
-LIBRARY hlplch.lib // for "Help" options menu
-#endif // __SERIES60_HELP
-
-#ifdef __TEST_LOG_MMP
-LIBRARY efsrv.lib
-DEBUGLIBRARY flogger.lib
-#endif
-
-START RESOURCE ../Data/PushViewer.rss
-DEPENDS avkon.rsg
-HEADER
-#ifdef __S60_32__
-LANG sc
-#else
-LANGUAGE_IDS
-#endif
-TARGETPATH APP_RESOURCE_DIR
-END // RESOURCE
-
-START RESOURCE ../Data/PushViewer_reg.rss
-DEPENDS pushviewer.rsg
-// Do not change the UID below.
-TARGETPATH /private/10003a3f/apps
-END
-
--- a/pushmtm/Plugins/Data/10008D3E.rss Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: White List Adapter registration resources.
-*
-*/
-
-
-// INCLUDE FILES
- // System includes
-#include <ecom/registryinfo.rh>
-
- // User includes
-#include "WhiteListAdapterUids.h"
-
-// RESOURCE DEFINITIONS
-
-RESOURCE REGISTRY_INFO theInfo
- {
- dll_uid = KWhiteListAdapterDllUid;
- interfaces =
- {
- INTERFACE_INFO
- {
- interface_uid = KProvisioningAdapterInterfaceUid;
- implementations =
- {
- IMPLEMENTATION_INFO
- {
- implementation_uid = KWhiteListAdapterImplementationUid;
- version_no = 2;
- display_name = "";
- default_data = "";
- opaque_data = "";
- }
- };
- }
- };
- }
--- a/pushmtm/Plugins/Group/Bld.inf Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Build specification file
-*
-*/
-
-#include <platform_paths.hrh>
-#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
-
-PRJ_PLATFORMS
-
-DEFAULT
-
-
-PRJ_EXPORTS
-
-
-PRJ_MMPFILES
-#if defined( __S60_32__) || defined( __PLATFORM_VERSION_S60_50__) || defined( __PLATFORM_VERSION_5250__)
-// Remove Symbian Push Content Handler
-gnumakefile PushContentHandlerClean.mk
-#endif
-// Build our Push Content Handler
-PushMtmPushContentHandler.mmp
-
-#ifdef __PUSH_WHITELIST
-
-// Build our White List Adapter plug-in
-PushMtmWhiteListAdapter.mmp
-
-#endif // __PUSH_WHITELIST
-
-
-PRJ_TESTMMPFILES
-
-
-PRJ_TESTEXPORTS
-
--- a/pushmtm/Plugins/Group/PushContentHandlerClean.mk Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-#
-# Copyright (c) 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:
-#
-#
-# Remove Symbian Push Content Handler DLL and registry resource files.
-# These push content handlers are replaced by the content handlers delivered
-# in the Push MTM.
-#
-
-LANGUAGE=sc
-
-#
-# Files to be removed: ECOM DLLs and registry files.
-#
-
-# The old-named push content handler DLL left by PushMtm or Symbian:
-TARGETDLL1=pushcontenthandler.dll
-# ECOM resource left by Symbian
-TARGETRESOURCE1=pushcontenthandler.r$(LANGUAGE)
-# SI & SL content handlers left by Symbian
-TARGETDLL2=sislcontenthandlers.dll
-# ECOM resource left by Symbian (for SI & SL content handlers)
-TARGETRESOURCE2=sislcontenthandlers.r$(LANGUAGE)
-# Just in case: remove the ECOM registry - the system will create a new
-ECOMREGISTRY=$(EPOCROOT)epoc32\$(PLATFORM)\c\system\data\plugins\ecom.rom.dat
-# Remove Symbian push mtm
-TARGETMTMDLL=wappushmtmclientserver.dll
-
-#
-# Target directories
-#
-
-ifeq (wins,$(findstring wins, $(PLATFORM)))
- TARGETDIRRESOURCE=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\resource\plugins
-else
-endif
-TARGETDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
-GENERICTARGETDIRRESOURCE=$(EPOCROOT)epoc32\data\z\resource\plugins
-TARGETMTMDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
-
-#
-# Remove the files
-#
-
-do_tidy:
- if exist "$(TARGETDIRDLL)\$(TARGETDLL1)" del "$(TARGETDIRDLL)\$(TARGETDLL1)"
-ifeq (wins,$(findstring wins, $(PLATFORM)))
- if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
- del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
-endif
- if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
- del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
- if exist "$(TARGETDIRDLL)\$(TARGETDLL2)" del "$(TARGETDIRDLL)\$(TARGETDLL2)"
-ifeq (wins,$(findstring wins, $(PLATFORM)))
- if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
- del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
-endif
- if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
- del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
-ifeq (wins,$(findstring wins, $(PLATFORM)))
- if exist "$(ECOMREGISTRY)" del "$(ECOMREGISTRY)"
-endif
- if exist "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)" del "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)"
-
-do_nothing:
-
-#
-# The targets invoked by abld
-#
-
-MAKMAKE : do_tidy
-
-RESOURCE : do_nothing
-
-SAVESPACE : do_nothing
-
-BLD : do_nothing
-
-FREEZE : do_nothing
-
-LIB : do_nothing
-
-CLEANLIB : do_nothing
-
-FINAL : do_nothing
-
-CLEAN : do_tidy
-
-RELEASABLES : do_nothing
-
--- a/pushmtm/Plugins/Group/PushMtmPushContentHandler.mmp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Project specification file
-*
-*/
-
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET PushMtmPushContentHandler.dll
-TARGETTYPE PLUGIN
-
-// UIDs - 2nd UID specifies an ECom dll,
-// 3rd UID is unique identifier
-// (EUidPushContentHandlerDll in PushContentHandlerDef.hrh).
-UID 0x10009D8D 0x101F854C
-
-CAPABILITY CAP_ECOM_PLUGIN
-VENDORID VID_DEFAULT
-
-SOURCEPATH ../PushContentHandler
-START RESOURCE 101F854C.rss
-#ifdef __S60_32__
-LANG sc
-#else
-LANGUAGE_IDS
-#endif
-TARGET PushMtmPushContentHandler.rsc
-END // RESOURCE
-
-USERINCLUDE ../PushContentHandler
-USERINCLUDE ../../Inc
-USERINCLUDE ../../MtmUtilInc
-USERINCLUDE ../../MtmUiInc
-
-/* todo: to be removed once push header are updated */
-USERINCLUDE /epoc32/include/push
-
-APP_LAYER_SYSTEMINCLUDE
-OS_LAYER_ESTLIB_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
-SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(ecom)
-#endif
-
-SOURCEPATH ../PushContentHandler
-SOURCE CCOContentHandler.cpp
-SOURCE CMultiPartMixedContentHandler.cpp
-SOURCE CMultiPartRelAndAltContentHandler.cpp
-SOURCE CPushContentHandlerBase.cpp
-SOURCE CUnknownContentHandler.cpp
-SOURCE CSIContentHandler.cpp
-SOURCE CSLContentHandler.cpp
-SOURCE PushContentHandlerGroupProxy.cpp
-SOURCE PushContentHandlerPanic.cpp
-SOURCE PushContentHandlerUtils.cpp
-SOURCE PushMtmAutoFetchOperation.cpp
-SOURCE PushMtmFetchOperation.cpp
-SOURCE PushMtmCacheSupply.cpp
-SOURCE PushMtmCacheDataSupplier.cpp
-SOURCE si_dict.c
-SOURCE sl_dict.c
-SOURCE StringResourceReader.cpp
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO __TEST_LOG__
-#endif
-
-LIBRARY apengine.lib
-
-LIBRARY apgrfx.lib
-LIBRARY apmime.lib
-
-LIBRARY bafl.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY Bifu.lib
-LIBRARY BioDB.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY CharConv.lib
-
-LIBRARY commdb.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY commonui.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY ECom.lib
-LIBRARY efsrv.lib
-
-LIBRARY esock.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY etext.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY euser.lib
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY flogger.lib
-#endif
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY gsmu.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY http.lib
-LIBRARY BrowserCache.lib
-LIBRARY HttpFilterCommon.lib
-LIBRARY inetprotutil.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY MiscPushMsgUtils.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY msgs.lib
-LIBRARY PushMsgEntry.lib
-LIBRARY PushMtmUtil.lib
-LIBRARY SISLPushMsgUtils.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY smcm.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY WapPushUtils.lib
-
-LIBRARY ws32.lib
-
-LIBRARY cXmlParser.lib
-LIBRARY CENTRALREPOSITORY.lib
-LIBRARY featmgr.lib
--- a/pushmtm/Plugins/Group/PushMtmWhiteListAdapter.mmp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Specification file of White List Adapter plug-in
-*
-*/
-
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-#include <defaultcaps.hrh>
-#include "../WhiteListAdapterInc/WhiteListAdapterUids.h"
-
-TARGET PushMtmWhiteListAdapter.dll
-TARGETTYPE PLUGIN
-
-// UIDs - 2nd UID specifies an ECom dll,
-// 3rd UID is a unique identifier from WhiteListAdapterDef.h
-UID 0x10009D8D KWhiteListAdapterDllUid
-
-CAPABILITY CAP_ECOM_PLUGIN
-VENDORID VID_DEFAULT
-
-// RESOURCES
-
-START RESOURCE ../Data/10008D3E.rss
-#ifdef __S60_32__
-LANG sc
-#else
-LANGUAGE_IDS
-#endif
-TARGET PushMtmWhiteListAdapter.rsc
-END // RESOURCE
-
-// INCLUDE DIRECTORIES
-
-USERINCLUDE ../WhiteListAdapterInc
-USERINCLUDE ../../MtmUtilInc
-
-APP_LAYER_SYSTEMINCLUDE
-
-// SOURCE FILES
-
-SOURCEPATH ../WhiteListAdapterSrc
-SOURCE WhiteListAdapter.cpp
-SOURCE WhiteListAdapterGroupProxy.cpp
-SOURCE WhiteListAdapterItem.cpp
-SOURCE WhiteListAdapterLogger.cpp
-SOURCE WhiteListAdapterPanic.cpp
-
-// LIBRARIES
-
-LIBRARY Euser.lib
-LIBRARY msgs.lib // for MMsvSessionObserver
-LIBRARY ProvisioningEngine.lib // for CWPAdapter & Co.
-LIBRARY PushMtmUtil.lib // for Push MTM Settings
-
-// Define this macro is you wish to enable logging
-//#define __TEST_WHITELISTADAPTER_LOG_ENABLED
-
-#ifdef __TEST_WHITELISTADAPTER_LOG_ENABLED
- MACRO __TEST_WHITELISTADAPTER_LOG__
- DEBUGLIBRARY flogger.lib
-#endif // __TEST_WHITELISTADAPTER_LOG_ENABLED
--- a/pushmtm/Plugins/PushContentHandler/101F854C.rss Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Push Content Handlers registration resources.
-*
-*/
-
-
-
-#include <ecom/registryinfo.rh>
-#include "PushContentHandlerDef.hrh"
-
-
-RESOURCE REGISTRY_INFO theInfo
- {
- dll_uid = EUidPushContentHandlerDll;
- interfaces =
- {
- INTERFACE_INFO
- {
- interface_uid = EUidPushContentHandlerBase;
- implementations =
- {
- IMPLEMENTATION_INFO
- {
- implementation_uid = EUidPushUnknownContentHandler;
- version_no = 2;
- display_name = "";
- default_data = "*";
- opaque_data = "";
- },
- IMPLEMENTATION_INFO
- {
- implementation_uid = EUidPushSIContentHandler;
- version_no = 2;
- display_name = "";
- default_data = "text/vnd.wap.si||application/vnd.wap.sic";
- opaque_data = "";
- },
- IMPLEMENTATION_INFO
- {
- implementation_uid = EUidPushSLContentHandler;
- version_no = 2;
- display_name = "";
- default_data = "text/vnd.wap.sl||application/vnd.wap.slc";
- opaque_data = "";
- },
- IMPLEMENTATION_INFO
- {
- implementation_uid = EUidPushCOContentHandler;
- version_no = 2;
- display_name = "";
- default_data = "text/vnd.wap.co||application/vnd.wap.coc";
- opaque_data = "";
- },
- IMPLEMENTATION_INFO
- {
- implementation_uid = EUidPushMultiPartMixedContentHandler;
- version_no = 2;
- display_name = "";
- default_data = "application/vnd.wap.multipart.mixed||multipart/mixed";
- opaque_data = "";
- },
- IMPLEMENTATION_INFO
- {
- implementation_uid = EUidPushMultiPartRelAndAltContentHandler;
- version_no = 2;
- display_name = "";
- default_data = "application/vnd.wap.multipart.related||application/vnd.wap.multipart.alternative||multipart/related||multipart/alternative";
- opaque_data = "";
- }
- };
- }
- };
- }
-
--- a/pushmtm/Plugins/PushContentHandler/CCOContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CCOContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CCOContentHandler.h"
-//#include "PushMtmUtil.h"
-//#include "PushMtmSettings.h"
-//#include <msvids.h>
-//#include <XmlElemt.h>
-
-// CONSTANTS
-
-#if defined(_DEBUG)
-_LIT( KErrPushMsgNull, "NULL CPushMessage" );
-#endif
-
-_LIT( KReserved, "Reserved" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CCOContentHandler::NewL
-// ---------------------------------------------------------
-//
-CCOContentHandler* CCOContentHandler::NewL()
- {
- CCOContentHandler* self = new(ELeave) CCOContentHandler;
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::~CCOContentHandler
-// ---------------------------------------------------------
-//
-CCOContentHandler::~CCOContentHandler()
- {
- Cancel();
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::CCOContentHandler
-// ---------------------------------------------------------
-//
-CCOContentHandler::CCOContentHandler()
-: CContentHandlerBase()
- {
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::ConstructL()
- {
- CActiveScheduler::Add(this);
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg,
- TRequestStatus& aStatus )
- {
- __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-
- iMessage = aPushMsg;
- iAcknowledge = ETrue;
- SetConfirmationStatus( aStatus );
-
- iState = EDone;
- IdleComplete();
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg )
- {
- __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-
- iAcknowledge = EFalse;
- iMessage = aPushMsg;
-
- iState = EDone;
- IdleComplete();
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CCOContentHandler::CPushHandlerBase_Reserved1()
- {
- User::Panic(KReserved, KErrNotSupported);
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CCOContentHandler::CPushHandlerBase_Reserved2()
- {
- User::Panic(KReserved, KErrNotSupported);
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CCOContentHandler::CancelHandleMessage()
- {
- Cancel();
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CCOContentHandler::DoCancel()
- {
- Complete( KErrCancel );
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::RunL()
- {
- switch( iState )
- {
- case EDone:
- {
- Complete( KErrNone );
- break;
- }
- default:
- break;
- }
- }
-
-// ---------------------------------------------------------
-// CCOContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CCOContentHandler::RunError( TInt aError )
- {
- iState = EDone;
- Complete( aError );
- return KErrNone;
- }
-
--- a/pushmtm/Plugins/PushContentHandler/CCOContentHandler.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CCOContentHandler.
-*
-*/
-
-
-
-#ifndef __CCOCONTENTHANDLER_H__
-#define __CCOCONTENTHANDLER_H__
-
-// INCLUDE FILES
-
-#include "PushContentHandlerDef.hrh"
-#include <push/CContentHandlerBase.h>
-#include <E32Base.h>
-
-// CONSTANTS
-
-const TUid KUidPushCOContentHandler = { EUidPushCOContentHandler };
-_LIT( KCOContentHandlerData, "text/vnd.wap.co||application/vnd.wap.coc" );
-
-// FORWARD DECLARATIONS
-
-/*class CMsvSession;
-class CSLPushMsgEntry;
-class CPushMtmUtil;
-class CPushMtmSettings;*/
-
-// CLASS DECLARATION
-
-/**
-* CCOContentHandler Handles Cache Operation Content
-*
-* This handler takes ownership of the CO message and processes it
-* according to the processing rules
-* [WAP Cache Operation version 31-July-2001].
-* Also S60 specific requirements are applied.
-*
-* NB. Currently all CO push messages are discarded!
-*/
-class CCOContentHandler : public CContentHandlerBase
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor. Leaves on failure.
- * @return The constructed object.
- */
- static CCOContentHandler* NewL();
-
- /**
- * D'tor.
- */
- virtual ~CCOContentHandler();
-
- private: // Constructors
-
- /**
- * Constructor.
- */
- CCOContentHandler();
-
- /**
- * Symbian OS constructor.
- */
- void ConstructL();
-
- private: // Methods from CPushHandlerBase
-
- /**
- * HandleMessage Async. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * @param aPushMsg CPushMessage to process.
- * @param aStatus Request status variable for use in asynchronous
- * operations.
- * @return None.
- */
- void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
-
- /**
- * HandleMessage Sync. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * Initial State: Set data members then go to the next state
- * @param aPushMsg CPushMessage to process.
- */
- void HandleMessageL( CPushMessage* aPushMsg );
-
- /**
- * Same functionality as DoCancel()
- */
- void CancelHandleMessage();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved1();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved2();
-
- private: // Methods from CActive
-
- /**
- * Current implementation does nothing. TODO on 2.1.
- * @return None.
- */
- void DoCancel();
-
- /**
- * Current implementation does nothing. TODO on 2.1.
- * @return None.
- */
- void RunL();
-
- /**
- * Current implementation does nothing. TODO on 2.1.
- * @return Error code to scheduler.
- */
- TInt RunError( TInt aError );
-
- private: // Data
-
- enum TState
- {
- EDone
- };
- };
-
-#endif // __CCOCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CMultiPartMixedContentHandler.
-*
-*/
-
-// INCLUDE FILES
-
-#include "CMultiPartMixedContentHandler.h"
-#include <push/pushdispatcher.h>
-#include <push/cmultiparttextiterator.h>
-#include <push/cmultipartbiniterator.h>
-
-// Constants
-
-_LIT(KReserved, "Reserved");
-#if defined(_DEBUG)
-_LIT(KErrPushMsgNull, "NULL CPushMessage");
-#endif
-
-/**
- * Static Factory Construction
- *
- * @param aFs Reference to a file session
- * @param aLibrary Reference to DLL Library Object
- * @param aIndex Index number corresponding to the Unknown App Handler Class
- * 'EMultiPartMixedContentHandler'
- *
- * @return fully initialized instance of this class
- */
-CMultiPartMixedContentHandler* CMultiPartMixedContentHandler::NewL()
- {
- CMultiPartMixedContentHandler* self =
- new (ELeave) CMultiPartMixedContentHandler;
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-/**
- * Destructor
- */
-CMultiPartMixedContentHandler::~CMultiPartMixedContentHandler()
- {
- Cancel();
- delete iMultiMessage;
- iContentHandler = NULL; // Not owned.
- }
-
-/**
- * Constructor
- *
- * @param aFs Reference to a file session
- * @param aLibrary Reference to DLL Library Object
- * @param aIndex Index number corresponding to the Unknown App Handler Class
- * 'EMultiPartMixedContentHandler'
- */
-CMultiPartMixedContentHandler::CMultiPartMixedContentHandler()
-: CContentHandlerBase()
- {
- }
-
-/**
- * This will complete initialization of the object
- */
-void CMultiPartMixedContentHandler::ConstructL()
- {
- CActiveScheduler::Add(this);
- }
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-
-/**
- * Creates a Multipart Binary Iterator that will be used for splitting apart the binary
- * mulitpart.
- *
- * @param aPushMsg A WAP binary multipart.mixed message that will be processed
- */
-void CMultiPartMixedContentHandler::LoadMultipartMsgL()
- {
- __ASSERT_DEBUG( iMessage!= 0 , User::Panic(KErrPushMsgNull,0));
-
- TPtrC contentType;
- iMessage->GetContentType(contentType);
- if (!contentType.FindF(KMultipartText))
- iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
- else if (!contentType.FindF(KMultipartBin))
- iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
- else
- User::Leave(KErrCorrupt);
-
- iMultiMessage->FirstL();
- iState = EHandlePart;
-
- IdleComplete();
- }
-
-/**
- * Handles the Message Part returned from the Multipart iterator
- * by creating a new handler based on the Content-Type, then dispatches it
- * synchronously.
- */
-void CMultiPartMixedContentHandler::HandlePartL()
- {
- CPushMessage* msgPart = iMultiMessage->PartL();
- CleanupStack::PushL(msgPart);
-
- TPtrC contentType;
- msgPart->GetContentType(contentType);
- CContentHandlerBase& contentHandler =
- PushContentTypeDispatcher::GetHandlerL( contentType, *iLog, *iManager );
- iContentHandler = &contentHandler;
- CleanupStack::Pop(msgPart);
-
- // treat as an acknowledged message always to ensure
- // sequential creation of handlers
- iContentHandler->HandleMessageL(msgPart, iStatus);
- iState = ENextPart;
- SetActive();
- }
-
-/**
- * Moves multipart iterator to the next part. If there is none,
- * State: EDone will be set to complete this handler
- */
-void CMultiPartMixedContentHandler::NextPartL()
- {
- if (iMultiMessage->NextL())
- iState = EHandlePart;
- else
- iState = EDone;
-
- IdleComplete();
- }
-
-#endif // __TEST_MULTIPART_MIX_SUPP
-
-/**
- * The Asynchronous entry point for this plug-in to handle the CPushMessage.
- *
- * Since we really didn't start an async event, make it look as though our
- * asynchronous request has been completed.
- *
- * @param aPushMsg A WAP binary multipart.mixed message that will be processed
- * @param aStatus The TRequestStatus of the caller indicating that this will
- * be used aysnchronously
- */
-void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg,
- TRequestStatus& aStatus )
- {
- __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
- iAcknowledge = ETrue;
- iMessage = aPushMsg;
- SetConfirmationStatus(aStatus);
- iState = ELoadMsgData;
- IdleComplete();
-#else // __TEST_MULTIPART_MIX_SUPP
- iAcknowledge = ETrue;
- iMessage = aPushMsg;
- SetConfirmationStatus(aStatus);
- // Drop all multipart/mixed messages.
- iState = EDone;
- IdleComplete();
-#endif // __TEST_MULTIPART_MIX_SUPP
- }
-
-
-/**
- * The Synchronous entry point for this plug-in to handle the CPushMessage.
- *
- * @param aPushMsg A WAP binary multipart.mixed message that will be processed
- * @param aStatus The TRequestStatus of the caller indicating that this will be
- * used aysnchronously
- */
-void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg )
- {
- __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
- iAcknowledge = EFalse;
- iMessage = aPushMsg;
- iState = ELoadMsgData;
- IdleComplete();
-#else // __TEST_MULTIPART_MIX_SUPP
- iAcknowledge = EFalse;
- iMessage = aPushMsg;
- // Drop all multipart messages.
- iState = EDone;
- IdleComplete();
-#endif // __TEST_MULTIPART_MIX_SUPP
- }
-
-/**
- * Cancels Asynronous requests on called handler.
- */
-void CMultiPartMixedContentHandler::CancelHandleMessage()
- {
- Cancel();
- }
-
-void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved1()
- {
- User::Panic(KReserved, KErrNotSupported);
- }
-
-void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved2()
- {
- User::Panic(KReserved, KErrNotSupported);
- }
-
-/**
- * Cancels Asynronous requests on caller and completes self.
- */
-void CMultiPartMixedContentHandler::DoCancel()
- {
- if ( iContentHandler )
- {
- iContentHandler->CancelHandleMessage();
- }
- Complete( KErrCancel );
- }
-
-/**
- * State machine to step through the multipart message until it is done
- *
- * State EHandlePart: Starts the processing of each part of the multipart
- * State ENextPart: Moves the interator to point to the next part of the multipart
- * when there are no more parts, EDone will be the next state
- * State EDone: Clean up and complete
- */
-void CMultiPartMixedContentHandler::RunL()
- {
- switch(iState)
- {
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-
- case ELoadMsgData:
- {
- LoadMultipartMsgL();
- break;
- }
- case EHandlePart:
- {
- HandlePartL();
- break;
- }
- case ENextPart:
- {
- NextPartL();
- break;
- }
-
-#endif // __TEST_MULTIPART_MIX_SUPP
-
- case EDone:
- {
- Complete(KErrNone);
- break;
- }
- default:
- {
- break;
- }
- }
- }
-
-/**
- * Clean up
- */
-TInt CMultiPartMixedContentHandler::RunError(TInt aError)
- {
- iState=EDone;
- Complete(aError);
- return KErrNone;
- }
-
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CMultiPartMixedContentHandler.
-*
-*/
-
-#ifndef __CMULTIPARTMIXEDCONTENTHANDLER_H__
-#define __CMULTIPARTMIXEDCONTENTHANDLER_H__
-
-// INCLUDE FILES
-
-#include "PushMtmDef.hrh"
-#include "PushContentHandlerDef.hrh"
-#include <push/ccontenthandlerbase.h>
-#include <E32Base.h>
-
-// CONSTANTS
-
-const TUid KUidPushMultiPartMixedContentHandler = {
- EUidPushMultiPartMixedContentHandler };
-_LIT(KMultiPartMixedContentHandlerData,
- "application/vnd.wap.multipart.mixed||multipart/mixed");
-
-// FORWARD DECLARATIONS
-
-class CMultipartIteratorBase;
-
-// CLASS DECLARATION
-
-/**
-* The MultiPart/Mixed Content Handler
-*
-* Takes apart the mulitpart message, creating a new sub message from each
-* part, then calls on new Push Handlers to process each sub message.
-*
-* All multipart/mixed messages are dropped if __TEST_MULTIPART_MIX_SUPP
-* is not defined.
-*/
-class CMultiPartMixedContentHandler : public CContentHandlerBase
- {
- public: // Constructors and destructor
-
- static CMultiPartMixedContentHandler* NewL();
-
- virtual ~CMultiPartMixedContentHandler();
-
- private: // Constructors
-
- CMultiPartMixedContentHandler();
-
- void ConstructL();
-
- private: // New functions
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-
- void LoadMultipartMsgL();
-
- void HandlePartL();
-
- void NextPartL();
-
-#endif // __TEST_MULTIPART_MIX_SUPP
-
- private: // Methods from CPushHandlerBase
-
- void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
-
- void HandleMessageL(CPushMessage* aPushMsg);
-
- void CancelHandleMessage();
-
- void CPushHandlerBase_Reserved1();
-
- void CPushHandlerBase_Reserved2();
-
- private: // Methods from CActive
-
- void DoCancel();
-
- void RunL();
-
- TInt RunError(TInt aError);
-
- private: // Attributes
-
- enum TState
- {
- ELoadMsgData,
- EHandlePart,
- ENextPart,
- EDone
- };
-
- CMultipartIteratorBase* iMultiMessage;
-
- CContentHandlerBase* iContentHandler;
-
- };
-
-
-#endif // __CMULTIPARTMIXEDCONTENTHANDLER_H__
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CMultiPartRelAndAltContentHandler.
-*
-*/
-
-// INCLUDE FILES
-
-#include "CMultiPartRelAndAltContentHandler.h"
-#include <push/cmultipartiteratorbase.h>
-#include <msvids.h>
-
-// Constants
-
-_LIT(KReserved, "Reserved");
-
-/**
- * Static Factory Construction
- *
- * version of NewLC which leaves nothing
- * on the cleanup stack
- */
-CMultiPartRelAndAltContentHandler* CMultiPartRelAndAltContentHandler::NewL()
- {
- CMultiPartRelAndAltContentHandler* self = new (ELeave) CMultiPartRelAndAltContentHandler;
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-/**
- * Default d'tor
- */
-CMultiPartRelAndAltContentHandler::~CMultiPartRelAndAltContentHandler()
- {
- Cancel();
- delete iMultiMessage;
- delete iMsvSession;
- }
-
-/**
- * The Multipart Related Content handler
- * Index number : ESLContentHandlerIndex
- */
-CMultiPartRelAndAltContentHandler::CMultiPartRelAndAltContentHandler()
-: CContentHandlerBase(),
- iSavedMsgId( KMsvNullIndexEntryId )
- {
- }
-
-/**
- * This will complete initialization of the object
- */
-void CMultiPartRelAndAltContentHandler::ConstructL()
- {
- iMsvSession = CMsvSession::OpenSyncL( *this );
- CActiveScheduler::Add(this);
- }
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
-/**
-* Setup the multipart message.
-*/
-void CMultiPartRelAndAltContentHandler::LoadMultiPartMsgL()
- {
-#ifdef _DEBUG
- _LIT(KNullMsg,"NULL CPushMessage");
- __ASSERT_DEBUG( iMessage != 0 , User::Panic(KNullMsg,0));
-#endif
- TPtrC contentType;
- iMessage->GetContentType(contentType);
- if (!contentType.FindF(KMultipartText))
- iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
- else if (!contentType.FindF(KMultipartBin))
- iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
- else
- User::Leave(KErrCorrupt);
- iMultiMessage->FirstL();
- IdleComplete();
- }
-
-/**
- * Saves message part to messaging server
- */
-void CMultiPartRelAndAltContentHandler::HandlePartL()
- {
- CPushMessage* msgPart = iMultiMessage->PartL();
- CleanupStack::PushL(msgPart);
-
- // Create a new Unknown Push Entry to hold the header and body data
- CUnknownPushMsgEntry* msgEntry=CUnknownPushMsgEntry::NewL();
- CleanupStack::PushL(msgEntry);
- // Get the header
- TPtrC8 header;
- msgPart->GetHeader(header);
- //Get the From field
- TPtrC8 from;
- if (!msgPart->GetBinaryHeaderField(EHttpFrom,from) &&
- !msgPart->GetBinaryHeaderField(EHttpXWapInitiatorURI,from) &&
- !msgPart->GetBinaryHeaderField(EHttpContentLocation,from) )
- {
- from.Set(KNullDesC8);
- }
- // Get the body
- TPtrC8 body;
- msgPart->GetMessageBody(body);
- TPtrC content;
- msgPart->GetContentType(content);
-
- //Set fields of the Unknown Entry
- msgEntry->SetHeaderL(header);
- msgEntry->SetMessageDataL(body);
- msgEntry->SetFromL(from);
- //Need this next bit so UI knows what to do with the data in the Push Entry
- msgEntry->SetContentTypeL( content );
-
- msgEntry->SaveL( *iMsvSession, iSavedMsgId );
- CleanupStack::PopAndDestroy( 2 ); //msgEntry, msgPart
-
- iState = ENextPart;
- IdleComplete();
-
- }
-
-/**
- * Move multipart iterator to the next part
- */
-void CMultiPartRelAndAltContentHandler::NextPartL()
- {
- if (iMultiMessage->NextL())
- {
- iState = EHandlePart;
- }
- else
- {
- iState = EDone;
- }
- IdleComplete();
- }
-
-/**
- *
- */
-void CMultiPartRelAndAltContentHandler::SaveMsgRootL()
- {
- TPtrC8 msgHeaderPtr;
- iMessage->GetHeader(msgHeaderPtr);
- CMultiPartPushMsgEntry* msgEntry=CMultiPartPushMsgEntry::NewL();
- CleanupStack::PushL(msgEntry);
- msgEntry->SetHeaderL(msgHeaderPtr); //Top level entry
- TPtrC contentType;
- iMessage->GetContentType(contentType);
- msgEntry->SetContentTypeL(contentType);
-
- iSavedMsgId = msgEntry->SaveL(*iMsvSession,
- KMsvGlobalInBoxIndexEntryId);
- CleanupStack::PopAndDestroy();//msgEntry
- }
-
-/**
- * Loads multipart data and creates multipart head entry in the message
- * server index.
- * @throw KErrCorrupt - message data is corrupt
- * @throw KErrNoMemory - insufficient free memory to complete operations
- */
-
-void CMultiPartRelAndAltContentHandler::LoadMsgDataL()
- {
- LoadMultiPartMsgL();
- SaveMsgRootL();
- iState = EHandlePart;
- }
-
-void CMultiPartRelAndAltContentHandler::SetMsgCorruptFlagL()
- {
- CMsvEntry* msvEntry = iMsvSession->GetEntryL( iSavedMsgId );
- CleanupStack::PushL( msvEntry );
- TMsvEntry entry = msvEntry->Entry();
- // get the iMtmData1 value & zero bits 0-3 then add new status
- TInt32 mtmdata1 = ( entry.iMtmData1 & 0xFFFFFFF0 );
- mtmdata1 += CPushMsgEntryBase::EPushMsgStatusCorrupt;
- // Now set values for TMsvEntry and update the server entry
- entry.iMtmData1 = mtmdata1;
- msvEntry->ChangeL( entry );
-
- CleanupStack::PopAndDestroy( msvEntry );
- }
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
-/**
- * Async. Version
- */
-void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg,
- TRequestStatus& aStatus )
- {
-#ifdef __TEST_MULTIPART_REL_SUPP
- iAcknowledge=ETrue;
- SetConfirmationStatus(aStatus);
- iMessage = aPushMsg;
- iState = ELoadMsgData;
- IdleComplete();
-#else // __TEST_MULTIPART_REL_SUPP
- iAcknowledge=ETrue;
- SetConfirmationStatus(aStatus);
- iMessage = aPushMsg;
- // Drop all multipart messages.
- iState = EDone;
- IdleComplete();
-#endif // __TEST_MULTIPART_REL_SUPP
- }
-
-/**
- * Sync. Version
- */
-void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg )
- {
-#ifdef __TEST_MULTIPART_REL_SUPP
- iAcknowledge=EFalse;
- iMessage = aPushMsg;
- iState = ELoadMsgData;
- IdleComplete();
-#else // __TEST_MULTIPART_REL_SUPP
- iAcknowledge=EFalse;
- iMessage = aPushMsg;
- // Drop all multipart messages.
- iState = EDone;
- IdleComplete();
-#endif // __TEST_MULTIPART_REL_SUPP
- }
-
-void CMultiPartRelAndAltContentHandler::CancelHandleMessage()
- {
- Cancel();
- }
-
-void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved1()
- {
- User::Panic(KReserved, KErrNotSupported);
- }
-
-void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved2()
- {
- User::Panic(KReserved, KErrNotSupported);
- }
-
-void CMultiPartRelAndAltContentHandler::DoCancel()
- {
- Complete( KErrCancel );
- }
-
-/**
-*RunL handles each part separately
-*/
-void CMultiPartRelAndAltContentHandler::RunL()
- {
- switch(iState)
- {
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
- case ELoadMsgData:
- {
- LoadMsgDataL();
- break;
- }
- case EHandlePart:
- {
- HandlePartL();
- break;
- }
- case ENextPart:
- {
- NextPartL();
- break;
- }
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
- case EDone:
- {
- Complete(KErrNone);
- break;
- }
- default:
- {
- break;
- }
- }
- }
-
-/**
- * Clean up
- */
-TInt CMultiPartRelAndAltContentHandler::RunError(TInt aError)
- {
- iState=EDone;
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
- if (iSavedMsgId != KMsvNullIndexEntryId)
- {
- TRAPD(error, SetMsgCorruptFlagL());
- }
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
- Complete(aError);
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CMultiPartRelAndAltContentHandler::HandleSessionEventL
-// ---------------------------------------------------------
-//
-void CMultiPartRelAndAltContentHandler::HandleSessionEventL(
- TMsvSessionEvent /*aEvent*/,
- TAny* /*aArg1*/,
- TAny* /*aArg2*/,
- TAny* /*aArg3*/ )
- {}
-
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CMultiPartRelAndAltContentHandler.
-*
-*/
-
-
-
-#ifndef __CMULTIPARTRELANDALTCONTENTHANDLER_H__
-#define __CMULTIPARTRELANDALTCONTENTHANDLER_H__
-
-// System includes
-//
-#include "PushMtmDef.hrh"
-#include "PushContentHandlerDef.hrh"
-#include <push/CContentHandlerBase.h>
-#include <E32Base.h>
-#include <msvstd.h>
-#include <msvapi.h>
-
-// Constants
-//
-const TUid KUidPushMultiPartRelAndAltContentHandler = {
- EUidPushMultiPartRelAndAltContentHandler };
-
-// Forward class declarations
-//
-class CMsvSession;
-class CMultipartIteratorBase;
-
-/**
-* The MultiPart/Alternative & Multipart/Alternative Content Handler
-*
-* Saves the whole message in the Message Server, each part getting saved as a child
-* entry to the main part.
-*
-* All multipart/rel+alt messages are dropped if __TEST_MULTIPART_REL_SUPP
-* is not defined.
-*/
-class CMultiPartRelAndAltContentHandler : public CContentHandlerBase,
- public MMsvSessionObserver
- {
- public: // Methods
-
- static CMultiPartRelAndAltContentHandler* NewL();
-
- virtual ~CMultiPartRelAndAltContentHandler();
-
- private: // Constructors
-
- CMultiPartRelAndAltContentHandler();
-
- void ConstructL();
-
- private: // New functions
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
- void LoadMultiPartMsgL();
-
- void HandlePartL();
-
- void NextPartL();
-
- void SaveMsgRootL();
-
- void LoadMsgDataL();
-
- void SetMsgCorruptFlagL();
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
- private: // Methods from CPushHandlerBase
-
- void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
-
- void HandleMessageL(CPushMessage* aPushMsg);
-
- void CancelHandleMessage();
-
- void CPushHandlerBase_Reserved1();
-
- void CPushHandlerBase_Reserved2();
-
- private: // Methods from CActive
-
- void DoCancel();
-
- void RunL();
-
- TInt RunError(TInt aError);
-
- private: // from MMsvSessionObserver
-
- void HandleSessionEventL( TMsvSessionEvent aEvent,
- TAny* aArg1, TAny* aArg2, TAny* aArg3);
-
- private: // Attributes
-
- enum TState
- {
- ELoadMsgData,
- EHandlePart,
- EDone,
- ENextPart
- };
-
- CMsvSession* iMsvSession; ///< Has.
-
- TMsvId iSavedMsgId;
-
- CMultipartIteratorBase* iMultiMessage;
- };
-
-#endif // __CMULTIPARTRELANDALTCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CPushContentHandlerBase.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushMtmUtil.h"
-#include "PushMtmSettings.h"
-#include "PushInitiatorList.h"
-#include "PushInitiator.h"
-#include "PushMtmCommands.hrh"
-#include "PushMtmLog.h"
-#include "PushMtmUiDef.h"
-#include "StringResourceReader.h"
-#include "PushContentHandlerPanic.h"
-#include <PushEntry.h>
-#include <push/pushmessage.h>
-#include <msvstd.h>
-#include <mtclreg.h>
-#include <mtclbase.h>
-#include <data_caging_path_literals.hrh>
-#include <f32file.h>
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::CPushContentHandlerBase
-// ---------------------------------------------------------
-//
-CPushContentHandlerBase::CPushContentHandlerBase()
-: CContentHandlerBase()
- {
- }
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::ConstructL
-// ---------------------------------------------------------
-//
-void CPushContentHandlerBase::ConstructL()
- {
- iMsvSession = CMsvSession::OpenSyncL( *this );
- PUSHLOG_WRITE("CPushContentHandlerBase iMsvSession OK")
- iWapPushUtils = CPushMtmUtil::NewL( *iMsvSession );
- PUSHLOG_WRITE("CPushContentHandlerBase iWapPushUtils OK")
- iMtmSettings = CPushMtmSettings::NewL();
- PUSHLOG_WRITE("CPushContentHandlerBase iMtmSettings OK")
-
- // Add resource file reader.
- TParse* fileParser = new (ELeave) TParse;
- CleanupStack::PushL( fileParser );
- fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
- iStrRscReader = new (ELeave) CStringResourceReader
- ( iMsvSession->FileSession(), fileParser->FullName() );
- CleanupStack::PopAndDestroy( fileParser ); // fileParser
- fileParser = NULL;
- PUSHLOG_WRITE("CPushContentHandlerBase iStrRscReader OK")
-
- CActiveScheduler::Add( this );
- }
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::~CPushContentHandlerBase
-// ---------------------------------------------------------
-//
-CPushContentHandlerBase::~CPushContentHandlerBase()
- {
- PUSHLOG_ENTERFN("CPushContentHandlerBase::~CPushContentHandlerBase")
-
- // Call Cancel() in derived classes!
- delete iStrRscReader; // Must be deleted before iMsvSession.
- delete iMtmSettings; // It has to be deleted before iMsvSession, because
- // it uses iMsvSession->FileSession().
- delete iWapPushUtils;
- delete iMsvSession;
-
- PUSHLOG_LEAVEFN("CPushContentHandlerBase::~CPushContentHandlerBase")
- }
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::DoCollectGarbageL
-// ---------------------------------------------------------
-//
-void CPushContentHandlerBase::DoCollectGarbageL()
- {
- PUSHLOG_ENTERFN("CPushContentHandlerBase::DoCollectGarbageL")
-
- CClientMtmRegistry* clientReg = CClientMtmRegistry::NewL( *iMsvSession );
- CleanupStack::PushL( clientReg );
- PUSHLOG_WRITE("CPushContentHandlerBase clientReg OK")
- CBaseMtm* pushMtm = clientReg->NewMtmL( KUidMtmWapPush );
- CleanupStack::PushL( pushMtm );
- PUSHLOG_WRITE("CPushContentHandlerBase pushMtm OK")
- CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
- CleanupStack::PushL( dummySel );
- TBuf8<1> dummyPar;
-
- pushMtm->InvokeSyncFunctionL( EPushMtmCmdCollectGarbage,
- *dummySel, dummyPar );
-
- CleanupStack::PopAndDestroy( 3, clientReg );
- // dummySel, pushMtm, clientReg
-
- PUSHLOG_LEAVEFN("CPushContentHandlerBase::DoCollectGarbageL")
- }
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::FilterPushMsgL
-// ---------------------------------------------------------
-//
-TBool CPushContentHandlerBase::FilterPushMsgL()
- {
- PUSHLOG_ENTERFN("CPushContentHandlerBase::FilterPushMsgL")
-
- TBool msgAccepted = ETrue;
-
- if ( iMtmSettings->ServiceReception() == EFalse )
- {
- // Discard message.
- msgAccepted = EFalse;
- PUSHLOG_WRITE(" ServiceReception OFF")
- }
-
- PUSHLOG_WRITE_FORMAT(" msgAccepted <%d>",msgAccepted)
- PUSHLOG_LEAVEFN("CPushContentHandlerBase::FilterPushMsgL")
- return msgAccepted;
- }
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::HandleSessionEventL
-// ---------------------------------------------------------
-//
-void CPushContentHandlerBase::HandleSessionEventL
- (
- TMsvSessionEvent /*aEvent*/,
- TAny* /*aArg1*/,
- TAny* /*aArg2*/,
- TAny* /*aArg3*/
- )
- {
- }
--- a/pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CPushContentHandlerBase.
-*
-*/
-
-
-
-#ifndef __CPUSHCONTENTHANDLERBASE_H__
-#define __CPUSHCONTENTHANDLERBASE_H__
-
-
-// INCLUDE FILES
-
-#include <push/CContentHandlerBase.h>
-#include <E32Base.h>
-#include <msvstd.h>
-#include <msvapi.h>
-
-// FORWARD DECLARATIONS
-
-class CMsvSession;
-class CPushMtmUtil;
-class CPushMtmSettings;
-class CStringResourceReader;
-
-// CLASS DECLARATION
-
-/**
-* CPushContentHandlerBase class stands as a base class for almost all push
-* content handlers of the Push MTM. It collects the generic functionality of
-* a push content handler, such as garbage collection when receiving new
-* service message, supporting CMsvSession, CPushMtmUtil and CPushMtmSettings
-* objects.
-*/
-class CPushContentHandlerBase : public CContentHandlerBase,
- public MMsvSessionObserver
- {
- protected: // Constructors and destructor
-
- /**
- * Constructor.
- */
- CPushContentHandlerBase();
-
- /**
- * Symbian OS constructor. CActiveScheduler::Add( this ) is called in
- * this method!!
- */
- void ConstructL();
-
- /**
- * Destructor.
- */
- virtual ~CPushContentHandlerBase();
-
- protected: // New functions
-
- /**
- * Do Garbage Collection synchronously.
- * @return None.
- */
- void DoCollectGarbageL();
-
- /**
- * Apply Push MTM settings on the message.
- * @return ETrue if the message passed the filtering.
- */
- TBool FilterPushMsgL();
-
- protected: // From MMsvSessionObserver
-
- /**
- * Msv session events are handled by this method. This implementation
- * is empty.
- * @return None.
- */
- void HandleSessionEventL( TMsvSessionEvent aEvent,
- TAny* aArg1,
- TAny* aArg2,
- TAny* aArg3);
-
- protected: // Data
-
- CMsvSession* iMsvSession; ///< Session to Message Server. Has.
- CPushMtmUtil* iWapPushUtils; ///< Push Utility. Has.
- CPushMtmSettings* iMtmSettings; ///< Push Settings. Has.
- /// Owned. It uses iMsvSession's RFs!
- CStringResourceReader* iStrRscReader;
- };
-
-#endif // __CPUSHCONTENTHANDLERBASE_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CSIContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1835 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CSIContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CSIContentHandler.h"
-#include "PushMtmUtil.h"
-#include "PushMtmSettings.h"
-#include "PushMtmLog.h"
-#include "PushMtmUiDef.h"
-#include "StringResourceReader.h"
-#include "PushContentHandlerPanic.h"
-#include "si_dict.h"
-#include "PushContentHandlerUtils.h"
-#include <push/CSIPushMsgEntry.h>
-#include <msvids.h>
-#include <PushMtmUi.rsg>
-#include <nw_dom_node.h>
-#include <nw_dom_document.h>
-#include <nw_dom_element.h>
-#include <nw_dom_text.h>
-#include <nw_wbxml_dictionary.h>
-#include <THttpFields.h>
-
-// CONSTANTS
-
-// si attributes / elements
-_LIT8( KSi, "si" );
-_LIT8( KIndication, "indication" );
-_LIT8( KHrefAttrib, "href" );
-_LIT8( KSiIdAttrib, "si-id" );
-_LIT8( KCreatedAttrib, "created" );
-_LIT8( KExpiresAttrib, "si-expires" );
-_LIT8( KActionAttrib, "action" );
-
-// action attribute literals
-_LIT8( KDeleteAction, "delete" );
-_LIT8( KSignalNone, "signal-none" );
-_LIT8( KSignalLow, "signal-low" );
-_LIT8( KSignalMedium, "signal-medium" );
-_LIT8( KSignalHigh, "signal-high" );
-
-_LIT( KSiTextContentType, "text/vnd.wap.si" );
-
-const TInt KValidMaxEncodedDateTimeSize = 7;
-const TInt KValidUTCLength = 20; // YYYY-MM-DDTHH:MM:SSZ
-const TInt KValidUTCNumericals = 14;
-const TInt KValidUTCYearBlockLength = 4;
-const TInt KValidUTCOtherBlockLength = 2;
-const TUint8 KAsciiZeroCharCode = 0x30;
-
-const TInt KValidTTimeMonthStart = 4;
-const TInt KValidTTimeDayStart = 6;
-const TInt KValidTTimeHourStart = 8;
-const TInt KValidTTimeMinuteStart = 10;
-const TInt KValidTTimeSecondStart = 12;
-const TInt KValidTTimeBlockLength = 2;
-
-const TInt KValidTTimeLength = 14; // YYYYMMDDHHMMSS
-
-const TInt KNoOfDictArrays = 1;
-
-_LIT( KCharMinus, "-" );
-_LIT( KCharT, "T" );
-_LIT( KCharColon, ":" );
-_LIT( KCharZ, "Z" );
-
-/// Conversion buffer size.
-LOCAL_D const TInt KPushConversionBufferSize = 256;
-/// Zero width non-breaking space character.
-LOCAL_D const TUint16 KPushZeroWidthNbsp = 0xfeff;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CSIContentHandler::NewL
-// ---------------------------------------------------------
-//
-CSIContentHandler* CSIContentHandler::NewL()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::NewL")
-
- CSIContentHandler* self = new (ELeave) CSIContentHandler;
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- PUSHLOG_LEAVEFN("CSIContentHandler::NewL")
- return self;
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::~CSIContentHandler
-// ---------------------------------------------------------
-//
-CSIContentHandler::~CSIContentHandler()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::~CSIContentHandler")
-
- Cancel();
- delete iHrefBuf;
- delete iSiIdBuf;
- delete iData;
- delete iCharacterSetConverter;
- iCharacterSetConverter = NULL;
- delete iCharacterSetsAvailable;
- iCharacterSetsAvailable = NULL;
-
- PUSHLOG_LEAVEFN("CSIContentHandler::~CSIContentHandler")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::CSIContentHandler
-// ---------------------------------------------------------
-//
-CSIContentHandler::CSIContentHandler()
-: CPushContentHandlerBase(),
- iSavedMsgId( KMsvNullIndexEntryId ),
- iPushMsgAction( KErrNotFound ),
- iExpiresTime( Time::NullTTime() ),
- iCreatedTime( Time::NullTTime() )
- {
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ConstructL()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ConstructL")
-
- CPushContentHandlerBase::ConstructL();
- // Added to Active Scheduler.
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ConstructL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::CollectGarbageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CollectGarbageL()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::CollectGarbageL")
-
- DoCollectGarbageL();
-
- //Ready.
- iState = EFilteringAndParsing;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSIContentHandler::CollectGarbageL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParsePushMsgL
-// Note that cXML parser dosn't do any validation!
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParsePushMsgL()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ParsePushMsgL")
-
- TPtrC8 bodyPtr;
- iMessage->GetMessageBody( bodyPtr );
- // If there is no body in the message leave with an error
- if ( bodyPtr.Size() == 0 )
- {
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: Empty body")
- User::Leave( KErrCorrupt );
- }
-
- // Get content type. It will tell us wheather the msg body is encoded or
- // textual.
- TPtrC contentType;
- iMessage->GetContentType( contentType );
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: HTTP header - Content type <%S>",&contentType);
-
- /*
- TPtrC8 encodingPtr;
- TBool encodingFound = iMessage->GetHeaderField
- ( EHttpContentEncoding, encodingPtr );
- #ifdef __TEST_LOG__
- TBuf<64> encodingBuf;
- encodingBuf.Copy( encodingPtr );
- PUSHLOG_WRITE_FORMAT(" HTTP header - Content encoding <%S>",&encodingBuf);
- #endif // __TEST_LOG__
- */
-
- // Add SI dictionary.
- NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
- { (NW_WBXML_Dictionary_t*)&NW_SI_WBXMLDictionary };
-
- NW_Status_t stat = NW_STAT_SUCCESS;
-
- RWbxmlDictionary wbxmlDict;
- wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
- CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
-
- NW_TinyDom_Handle_t domHandle;
- NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
- NW_Int32 length = (NW_Int32)bodyPtr.Size();
- // Let's use the content type now.
- NW_Bool encoded = ( contentType.CompareF( KSiTextContentType ) == 0 ) ?
- NW_FALSE : NW_TRUE;
- // SI public identifier.
- NW_Uint32 publicID = NW_SI_PublicId;
- NW_Bool extTNotStringTable = NW_FALSE;
- NW_DOM_NodeType_t type = 0;
- /**********************************
- * Root of DOM
- ***********************************/
- CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
- CleanupStack::PushL( docTreeOwner );
- NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
- (
- &domHandle,
- buffer,
- length,
- encoded,
- publicID,
- extTNotStringTable
- );
- if (!domNode)
- {
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is Null")
- }
- User::LeaveIfNull( domNode );
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is not Null") // to be deleted
- // Let domNode be on the Cleanup Stack.
- docTreeOwner->SetDocTree( domNode );
-
- // It must be a document node.
- type = NW_DOM_Node_getNodeType( domNode );
- if ( type != NW_DOM_DOCUMENT_NODE )
- {
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not Document node <%d>",type)
- User::Leave( KErrArgument );
- }
-
- // Get character encoding (NW_Uint32)
- iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
-
- /**********************************
- * ELEMENT si
- ***********************************/
- // Get the first element of the document that must be an si.
- // first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
- TBool domNodeHasChildNodes = EFalse;
- domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
- if (!domNodeHasChildNodes)
- {
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No SI element present in the dom tree. Message corrupted.")
- User::Leave( KErrCorrupt );
- }
-
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: before calling getDocumentElement")
- NW_DOM_ElementNode_t* siElement =
- NW_DOM_DocumentNode_getDocumentElement( domNode );
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: after calling getDocumentElement")
- if (!siElement)
- {
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is Null")
- }
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, before leaving")
- User::LeaveIfNull( siElement );
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, after leaving if siElement is null")
-
- type = NW_DOM_Node_getNodeType( siElement );
-
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* name = NW_String_new();
- User::LeaveIfNull( name );
- // Let name be on the Cleanup Stack.
- stringOwner->SetString( name );
- stat = NW_DOM_Node_getNodeName( siElement, name );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* nameBuf = NW_String_getStorage( name );
- NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
- TPtrC8 namePtr( nameBuf, nameLen );
-
- // Now comes the validity check.
- if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSi ) != 0 )
- {
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not si element node <%d>",type)
- User::Leave( KErrArgument );
- }
-
- CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
- /**********************************
- * ELEMENT indication
- ***********************************/
- if ( NW_DOM_Node_hasChildNodes( siElement ) )
- {
- NW_DOM_Node_t* node = NW_DOM_Node_getFirstChild( siElement );
- if (!node)
- {
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: no si child nodes!")
- }
- User::LeaveIfNull( node );
-
- // Find the indication element.
- TBool indicationFound = EFalse;
- do {
- type = NW_DOM_Node_getNodeType( node );
-
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* name = NW_String_new();
- User::LeaveIfNull( name );
- stringOwner->SetString( name );
- stat = NW_DOM_Node_getNodeName( node, name );
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* nameBuf = NW_String_getStorage( name );
- NW_Uint16 nameLen = NW_String_getCharCount( name,
- iCharEncoding );
- TPtrC8 namePtr( nameBuf, nameLen );
-
- if ( type == NW_DOM_ELEMENT_NODE &&
- namePtr.CompareF( KIndication ) == 0 )
- {
- // We found the indication element. Parse it.
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: indication under si found.")
- indicationFound = ETrue;
- NW_DOM_ElementNode_t* indicationElement =
- REINTERPRET_CAST( NW_DOM_ElementNode_t*, node );
- ParseIndicationL( *indicationElement );
- }
-
- CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
- if ( !indicationFound )
- {
- // Iterate next.
- node = NW_DOM_Node_getNextSibling( node );
- if ( !node )
- {
- PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No more sibling.")
- break;
- }
- }
-
- } while ( !indicationFound );
- }
-
- // Cleanup.
- CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
-
- if ( !ActionFlag() )
- {
- // default if no action explicitly stated
- iPushMsgAction = CSIPushMsgEntry::ESIPushMsgSignalMedium;
- SetActionFlag( ETrue );
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Defaulting to ActionFlag: %d",iPushMsgAction)
- }
-
- iState = EProcessing;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ParsePushMsgL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParseIndicationL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParseIndicationL( NW_DOM_ElementNode_t& aIndication )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ParseIndicationL")
-
- NW_Status_t stat = NW_STAT_SUCCESS;
- NW_DOM_NodeType_t type = 0;
-
- if ( NW_DOM_ElementNode_hasAttributes( &aIndication ) )
- {
- NW_DOM_AttributeListIterator_t attrIter;
- stat = NW_DOM_ElementNode_getAttributeListIterator
- ( &aIndication, &attrIter );
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
-
- NW_DOM_AttributeHandle_t attrHandle;
- while ( NW_DOM_AttributeListIterator_getNextAttribute
- ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
- {
- ParseIndAttributeL( attrHandle );
- }
- }
-
- /**********************************
- * PCDATA of ELEMENT indication
- ***********************************/
- if ( NW_DOM_Node_hasChildNodes( &aIndication ) )
- {
- NW_DOM_TextNode_t* textNode =
- NW_DOM_Node_getFirstChild( &aIndication );
- User::LeaveIfNull( textNode );
-
- type = NW_DOM_Node_getNodeType( textNode );
- if ( type != NW_DOM_TEXT_NODE )
- {
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: Not text node <%d>",type)
- User::Leave( KErrArgument );
- }
-
- ParseTextL( *textNode );
- }
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndicationL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParseIndAttributeL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParseIndAttributeL( NW_DOM_AttributeHandle_t&
- aAttrHandle )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ParseIndAttributeL")
-
- NW_Status_t stat = NW_STAT_SUCCESS;
-
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* attrName = NW_String_new();
- User::LeaveIfNull( attrName );
- stringOwner->SetString( attrName );
-
- // Get the name of the attribute.
- stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* attrNameBuf = NW_String_getStorage( attrName );
- NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
- TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
-
- if ( attrNamePtr.CompareF( KCreatedAttrib ) == 0 )
- {
- if ( CreatedFlag() )
- {
- PUSHLOG_WRITE(" created redefinition")
- User::Leave( KErrCorrupt );
- }
- else
- {
- TBool gotDate = AttributeToTTimeL( aAttrHandle, iCreatedTime );
- SetCreatedFlag( gotDate );
- PUSHLOG_WRITE_FORMAT(" iCreatedTime set %d",gotDate?1:0)
- }
- }
- else if ( attrNamePtr.CompareF( KHrefAttrib ) == 0 )
- {
- if ( HrefFlag() )
- {
- PUSHLOG_WRITE(" href redefinition")
- User::Leave( KErrCorrupt );
- }
- else
- {
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* val = NW_String_new();
- User::LeaveIfNull( val );
- stringOwner->SetString( val );
- stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
- if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
- {
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* storage = NW_String_getStorage( val );
- NW_Uint16 length = NW_String_getCharCount( val,
- iCharEncoding );
- if ( length == 0 )
- {
- // Zero length href attribute is considered as missing.
- PUSHLOG_WRITE(" Zero length HrefFlag");
- }
- else
- {
- TPtrC8 hrefPtr( storage, length );
- HBufC* tempHrefBuf = HBufC::NewMaxL( length );
- // No leavable after it!!! until...
- tempHrefBuf->Des().Copy( hrefPtr );
- iHrefBuf = tempHrefBuf; // ...until here.
- SetHrefFlag( ETrue );
- PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
- }
- }
-
- CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
- }
- }
- else if ( attrNamePtr.CompareF( KExpiresAttrib ) == 0 )
- {
- if ( ExpiresFlag() )
- {
- PUSHLOG_WRITE(" expires redefinition")
- User::Leave( KErrCorrupt );
- }
- else
- {
- TBool gotDate = AttributeToTTimeL( aAttrHandle, iExpiresTime );
- SetExpiresFlag( gotDate );
- PUSHLOG_WRITE_FORMAT(" iExpiresTime set %d",gotDate?1:0)
- }
- }
- else if ( attrNamePtr.CompareF( KSiIdAttrib ) == 0 )
- {
- if ( SiIdFlag() )
- {
- PUSHLOG_WRITE(" si-id redefinition")
- User::Leave( KErrCorrupt );
- }
- else
- {
- // It is expected to be String.
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* val = NW_String_new();
- User::LeaveIfNull( val );
- stringOwner->SetString( val );
- stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* storage = NW_String_getStorage( val );
- NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
- TPtrC8 siidPtr( storage, length );
-
- iSiIdBuf = HBufC::NewMaxL( siidPtr.Length() );
- iSiIdBuf->Des().Copy( siidPtr );
- SetSiIdFlag( ETrue );
- PUSHLOG_WRITE_FORMAT(" SiIdFlag set <%S>",iSiIdBuf)
-
- CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
- }
- }
- else if ( attrNamePtr.CompareF( KActionAttrib ) == 0 )
- {
- if ( ActionFlag() )
- {
- PUSHLOG_WRITE(" action redefinition")
- User::Leave( KErrCorrupt );
- }
- else
- {
- // It is expected to be String.
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* val = NW_String_new();
- User::LeaveIfNull( val );
- stringOwner->SetString( val );
- stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* storage = NW_String_getStorage( val );
- NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
- TPtrC8 actionPtr( storage, length );
-
- iPushMsgAction = ConvertActionString( actionPtr );
- SetActionFlag( ETrue );
- PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
-
- CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
- }
- }
- else
- {
- __ASSERT_DEBUG( EFalse,
- ContHandPanic( EPushContHandPanUnexpSiToken ) );
- }
-
- CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndAttributeL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParseTextL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParseTextL( NW_DOM_TextNode_t& aTextNode )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ParseTextL")
-
- if ( DataFlag() )
- {
- PUSHLOG_WRITE(" Data flag already set.")
- }
- else
- {
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* data = NW_String_new();
- User::LeaveIfNull( data );
- stringOwner->SetString( data );
- NW_Status_t stat = NW_STAT_SUCCESS;
- stat = NW_DOM_TextNode_getData( &aTextNode, data );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
-
- HBufC16* ucs2buffer = ConvertToUnicodeL( *data, iCharEncoding );
- // Be careful: ucs2buffer is not on the CleanupStack!
- __ASSERT_DEBUG( ucs2buffer != 0, ContHandPanic( EPushContHandPanNullUcs2Buf ) );
-
- TPtrC16 ucs2ptrC( *ucs2buffer );
- if ( ucs2ptrC.Length() == 0 )
- {
- // Zero length data is considered as nothing.
- PUSHLOG_WRITE(" Zero length Data");
- }
- else
- {
- PUSHLOG_WRITE_FORMAT(" Data: <%S>",&ucs2ptrC);
-
- #ifdef __TEST_LOG__
- // Write out each unicode character identifier
- TInt length = ucs2ptrC.Length();
- for (TInt logI=0;logI<length;logI++)
- {
- TBuf16<1> currChar;
- currChar.Copy( ucs2ptrC.Mid( logI, /*aLength*/1 ) );
- PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
- }
- #endif // __TEST_LOG__
-
- iData = ucs2buffer; // Ownership transferred.
- ucs2buffer = NULL;
- SetDataFlag( ETrue );
- }
-
- CleanupStack::PopAndDestroy( stringOwner );
- }
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ParseTextL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertToUnicodeL
-// ---------------------------------------------------------
-//
-HBufC16* CSIContentHandler::ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
-
- __ASSERT_DEBUG( aCharSetId != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
-
- InitialiseCharacterSetConverterL();
-
- HBufC16* ucs2buffer = NULL; // The return value.
- TBool resultOnStack = EFalse;
-
- #ifdef __TEST_LOG__
- // Write out the original 8-bit buffer
- TInt origiLength = aSrc.Length();
- for (TInt origiLogI=0;origiLogI<origiLength;origiLogI++)
- {
- TBuf16<1> currChar; // Only 16-bit buffer can be written out.
- currChar.Copy( aSrc.Mid( origiLogI, /*aLength*/1 ) );
- PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
- }
- #endif // __TEST_LOG__
-
- // Result
- HBufC16* buffer = HBufC16::NewLC( KPushConversionBufferSize );
- PUSHLOG_WRITE(" buffer allocated");
- TPtr16 ptr( buffer->Des() );
-
- // Prepare conversion for the given charset ID.
- RFs& fs = iMsvSession->FileSession();
- iCharacterSetConverter->PrepareToConvertToOrFromL
- ( aCharSetId, *iCharacterSetsAvailable, fs );
- PUSHLOG_WRITE(" PrepareToConvertToOrFromL OK");
-
- TInt state = 0;
- TInt remaining = iCharacterSetConverter->ConvertToUnicode( ptr, aSrc, state );
- PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
- while ( remaining >= 0 )
- {
- if ( ucs2buffer == NULL )
- {
- ucs2buffer = HBufC::NewLC( ptr.Length() );
- resultOnStack = ETrue;
- }
- else
- {
- __ASSERT_DEBUG( resultOnStack,
- ContHandPanic( EPushContHandPanSiResNotOnStack ) );
- // This may change the address of ucs2buffer so we need to put
- // it on the cleanup stack again!!
- ucs2buffer = ucs2buffer->ReAllocL
- ( ucs2buffer->Length() + ptr.Length() );
- CleanupStack::Pop(); // old ucs2buffer
- CleanupStack::PushL( ucs2buffer ); // possibly new copy
- PUSHLOG_WRITE(" ucs2buffer reallocated");
- }
- TPtr16 ucs2ptr( ucs2buffer->Des() );
- ucs2ptr.Append( ptr );
- if ( remaining > 0 )
- {
- // Try to convert all remaining characters.
- ptr.Zero();
- remaining = iCharacterSetConverter->ConvertToUnicode
- ( ptr, aSrc.Right( remaining ), state );
- PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
- }
- else
- {
- PUSHLOG_WRITE(" break");
- break;
- }
- }
-
- if ( resultOnStack )
- {
- CleanupStack::Pop(); // ucs2buffer
- resultOnStack = EFalse;
- }
-
- // ucs2buffer is not on the CleanupStack!
-
- CleanupStack::PopAndDestroy( buffer ); // buffer
-
- if ( ucs2buffer == NULL )
- {
- PUSHLOG_WRITE(" NULL ucs2buffer - allocating an empty buf");
- ucs2buffer = KNullDesC().AllocL();
- }
- else
- {
- // Check if first character is a Zero-width nbsp.
- TPtrC16 ucs2ptrC( *ucs2buffer );
- if ( ucs2ptrC.Length() >= 1 && ucs2ptrC[0] == KPushZeroWidthNbsp )
- {
- // First character is a Zero-width NBSP. This character is used as
- // BOM in some encodings and should not be present at this point.
- // But we are tolerant and remove it.
- // (Not expecting big-endianness here.)
- HBufC16* temp = ucs2buffer;
- CleanupStack::PushL( temp );
- ucs2buffer = ucs2ptrC.Mid( 1 ).AllocL();
- CleanupStack::PopAndDestroy( temp ); // temp
- PUSHLOG_WRITE(" BOM removed");
- }
- else
- {
- PUSHLOG_WRITE(" No BOM");
- }
- }
-
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
- return ucs2buffer;
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertToUnicodeL
-// ---------------------------------------------------------
-//
-HBufC16* CSIContentHandler::ConvertToUnicodeL
- ( NW_String_t& aString, NW_Uint32 aCharEncoding )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
-
- /* As cXmlLibrary does, we support only the following charsets:
- #define HTTP_iso_10646_ucs_2 0x03E8
- #define HTTP_iso_8859_1 0x04
- #define HTTP_us_ascii 0x03
- #define HTTP_utf_8 0x6A
- #define HTTP_utf_16 1015
- */
- TUint id = 0;
- if ( aCharEncoding == HTTP_iso_10646_ucs_2 )
- {
- id = KCharacterSetIdentifierUcs2;
- PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
- }
- else if ( aCharEncoding == HTTP_iso_8859_1 )
- {
- id = KCharacterSetIdentifierIso88591;
- PUSHLOG_WRITE(" KCharacterSetIdentifierIso88591")
- }
- else if ( aCharEncoding == HTTP_us_ascii )
- {
- id = KCharacterSetIdentifierAscii;
- PUSHLOG_WRITE(" KCharacterSetIdentifierAscii")
- }
- else if ( aCharEncoding == HTTP_utf_8 )
- {
- id = KCharacterSetIdentifierUtf8;
- PUSHLOG_WRITE(" KCharacterSetIdentifierUtf8")
- }
- else if ( aCharEncoding == HTTP_utf_16 ) // No such in CharConv.h
- {
- id = KCharacterSetIdentifierUcs2;
- PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
- }
- else
- {
- id = KCharacterSetIdentifierUtf8; // Defaulting to UTF-8
- PUSHLOG_WRITE(" DEFAULTING to KCharacterSetIdentifierUtf8");
- }
-
- PUSHLOG_WRITE_FORMAT(" id: 0x%x",id);
- __ASSERT_DEBUG( id != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
-
- // Source
- PUSHLOG_WRITE_FORMAT(" Storage: 0x%x",NW_String_getStorage(&aString));
- PUSHLOG_WRITE_FORMAT(" Byte count: %d",NW_String_getByteCount(&aString)-1);
-
- // We will use NW_String_getByteCount(&aString)-1 as size, because
- // NW_String_getByteCount(&aString) includes NULL terminator.
- const TPtrC8 src( NW_String_getStorage(&aString),
- NW_String_getByteCount(&aString)-1 );
- HBufC16* ucs2buffer = ConvertToUnicodeL( src, id );
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
- return ucs2buffer;
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::InitialiseCharacterSetConverterL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::InitialiseCharacterSetConverterL()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::InitialiseCharacterSetConverterL")
-
- iCharacterSetConverter = CCnvCharacterSetConverter::NewL();
-
- RFs& fs = iMsvSession->FileSession();
- iCharacterSetsAvailable =
- CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL( fs );
-
- PUSHLOG_LEAVEFN("CSIContentHandler::InitialiseCharacterSetConverterL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertActionString
-// ---------------------------------------------------------
-//
-TUint CSIContentHandler::ConvertActionString
- ( const TDesC8& aActionString ) const
- {
- const TInt KMatchFound = 0;
-
- // set to default signal value (to rid ourselves of build warning)
- TUint actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
-
- if ( aActionString.Compare( KDeleteAction ) == KMatchFound )
- {
- actionValue = CSIPushMsgEntry::ESIPushMsgDelete;
- }
- else if ( aActionString.Compare( KSignalNone ) == KMatchFound )
- {
- actionValue = CSIPushMsgEntry::ESIPushMsgSignalNone;
- }
- else if ( aActionString.Compare( KSignalLow ) == KMatchFound )
- {
- actionValue = CSIPushMsgEntry::ESIPushMsgSignalLow;
- }
- else if ( aActionString.Compare( KSignalMedium ) == KMatchFound )
- {
- actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
- }
- else if ( aActionString.Compare( KSignalHigh ) == KMatchFound )
- {
- actionValue = CSIPushMsgEntry::ESIPushMsgSignalHigh;
- }
-
- return actionValue;
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::SetSIPushMsgEntryFieldsL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::SetSIPushMsgEntryFieldsL( CSIPushMsgEntry&
- aSIPushMsgEntry )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
-
- if ( SiIdFlag() || HrefFlag() )
- {
- if ( SiIdFlag() && ( HrefFlag() == EFalse ) )
- {
- // Message has only si-id but no href.
- aSIPushMsgEntry.SetIdL( *iSiIdBuf );
- }
- else if ( HrefFlag() && ( SiIdFlag() == EFalse ) )
- {
- // If message has no si-id but does have a href, use href as si-id.
- aSIPushMsgEntry.SetIdL( *iHrefBuf );
- aSIPushMsgEntry.SetUrlL( *iHrefBuf );
- }
- else
- {
- // Use si-id and href as is.
- aSIPushMsgEntry.SetIdL( *iSiIdBuf );
- aSIPushMsgEntry.SetUrlL( *iHrefBuf );
- }
- }
-
- __ASSERT_DEBUG( ActionFlag(),
- ContHandPanic( EPushContHandPanUnspecSiAction ) );
- if ( ActionFlag() )
- {
- aSIPushMsgEntry.SetAction( iPushMsgAction );
- }
- else // default if no action explicitly stated
- {
- aSIPushMsgEntry.SetAction( CSIPushMsgEntry::ESIPushMsgSignalMedium );
- }
-
- // uses default null time value if no explicit date set in message
- aSIPushMsgEntry.SetCreated( iCreatedTime );
- aSIPushMsgEntry.SetExpires( iExpiresTime );
-
- // PCDATA (text) from message
- if ( DataFlag() )
- {
- aSIPushMsgEntry.SetTextL( *iData );
- }
-
- TPtrC8 msgHeaderPtr;
- iMessage->GetHeader( msgHeaderPtr );
- aSIPushMsgEntry.SetHeaderL( msgHeaderPtr );
-
- // Get server address.
- TPtrC8 srvAddress;
- if ( iMessage->GetServerAddress( srvAddress ) )
- {
- aSIPushMsgEntry.SetFromL( srvAddress );
- }
-
- // First line in Inbox: TMsvEntry::iDetails.
- if ( srvAddress.Length() == 0 )
- {
- // Read from resource.
- HBufC* details =
- iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
- aSIPushMsgEntry.SetMsgDetailsL( *details );
- CleanupStack::PopAndDestroy( details );
- }
- else
- {
- // Convert the "From" information to the format required by the UI
- // spec and then decode it.
- HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
- CleanupStack::PushL( details );
- HBufC* convertedFrom =
- CPushMtmUtil::ConvertUriToDisplayFormL( *details );
- CleanupStack::PushL( convertedFrom );
- //
- aSIPushMsgEntry.SetMsgDetailsL( *convertedFrom );
- //
- CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
- }
-
- // Second line in Inbox: TMsvEntry::iDescription.
- if ( DataFlag() )
- {
- // Display SI message.
- aSIPushMsgEntry.SetMsgDescriptionL( *iData );
- }
- else
- {
- // Display URL.
- __ASSERT_DEBUG( HrefFlag(),
- ContHandPanic( EPushContHandPanUnspecSiHref ) );
- const TPtrC url = aSIPushMsgEntry.Url();
- HBufC* convertedUrl = CPushMtmUtil::ConvertUriToDisplayFormL( url );
- CleanupStack::PushL( convertedUrl );
- //
- aSIPushMsgEntry.SetMsgDescriptionL( *convertedUrl );
- //
- CleanupStack::PopAndDestroy( convertedUrl ); // convertedUrl
- }
-
- // ******** Push MTM specific processing *********
-
- /*
- * Unfortunately in CPushMsgEntryBase there is no such functionality
- * with which we can reach TMsvEntry as non-const, but we have to
- * modify the entry's iMtmData2 member somehow. We can do it
- * with either casting or with modifying and saving the entry
- * manually after it has been saved by CSIPushMsgEntry. The latter
- * solution is more expensive so we choose the first.
- */
- TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSIPushMsgEntry.Entry() );
- if ( HrefFlag() )
- {
- CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
- }
- else
- {
- CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
- }
-
- // *** Set the entry to unread and new state. ***
-
- tEntry.SetNew( ETrue );
- tEntry.SetUnread( ETrue );
-
- PUSHLOG_LEAVEFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ProcessingPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ProcessingPushMsgEntryL()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ProcessingPushMsgEntryL")
-
- TBool deletePushMsg( EFalse );
-
- __ASSERT_DEBUG( ActionFlag(),
- ContHandPanic( EPushContHandPanUnspecSiAction ) );
-
- // S60 requirement: if both the href and the message is empty then
- // delete the msg.
- if ( HrefFlag() == EFalse && DataFlag() == EFalse )
- {
- deletePushMsg = ETrue;
- }
-
- // Expiration.
- if ( !deletePushMsg && ExpiresFlag() )
- {
- TTime today;
- today.UniversalTime();
-#ifdef __TEST_LOG__
- _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
- _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
- TBuf<32> dateHolder;
- TBuf<32> timeHolder;
- today.FormatL( dateHolder, KDateFormat );
- today.FormatL( timeHolder, KTimeFormat );
- PUSHLOG_WRITE_FORMAT(" now date: <%S>",&dateHolder)
- PUSHLOG_WRITE_FORMAT(" now time: <%S>",&timeHolder)
- iExpiresTime.FormatL( dateHolder, KDateFormat );
- iExpiresTime.FormatL( timeHolder, KTimeFormat );
- PUSHLOG_WRITE_FORMAT(" exp date: <%S>",&dateHolder)
- PUSHLOG_WRITE_FORMAT(" exp time: <%S>",&timeHolder)
-#endif // __TEST_LOG__
- // check if message has expiry date before today's date
- if ( iExpiresTime < today )
- {
- PUSHLOG_WRITE("CSIContentHandler already expired")
- deletePushMsg = ETrue;
- }
- }
-
- // An SI with the action attribute set to “delete” MUST have an
- // explicitly assigned value for si-id.
- if ( !deletePushMsg && ActionFlag() )
- {
- if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
- {
- if ( !SiIdFlag() || ( SiIdFlag() && iSiIdBuf->Length() == 0 ) )
- {
- deletePushMsg = ETrue;
- }
- }
- }
-
- // Handling out of order delivery & Replacement.
- TMsvId matchingEntryId = KMsvNullIndexEntryId;
-
- if ( !deletePushMsg && ( SiIdFlag() || HrefFlag() ) && CreatedFlag() )
- {
- deletePushMsg = HandleMsgOrderReceptionL( matchingEntryId );
- }
-
- if ( !deletePushMsg && ActionFlag() )
- {
- // SI with action=signal-none must not be presented to the end-user.
- // Note. In S60 signal-none behaves the same as delete: the
- // message is discarded after processing it!
- if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgSignalNone )
- {
- deletePushMsg = ETrue;
- }
- // SI with action=delete must also be discarded.
- else if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
- {
- deletePushMsg = ETrue;
- }
- }
-
- // Store message if not marked for deletion.
- if ( !deletePushMsg )
- {
- StoreSIMessageL( matchingEntryId );
- }
- else
- {
- // The new entry must be discarded.
- // Delete the corresponding matching entry, too.
- if ( matchingEntryId != KMsvNullIndexEntryId )
- {
- iWapPushUtils->DeleteEntryL( matchingEntryId );
- }
- }
-
- iState = EDone;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ProcessingPushMsgEntryL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::StoreSIMessageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::StoreSIMessageL( TMsvId aMatchingEntryId )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::StoreSIMessageL")
-
- CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
- CleanupStack::PushL( siEntry );
-
- if ( aMatchingEntryId != KMsvNullIndexEntryId )
- {
- PUSHLOG_WRITE("Matching SI found");
- //Delete this old entry
- iWapPushUtils->DeleteEntryL( aMatchingEntryId );
- }
-
- SetSIPushMsgEntryFieldsL( *siEntry );
- iSavedMsgId = siEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
-
-#ifdef __TEST_LOG__
- _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
- _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
- TBuf<32> dateHolder;
- TBuf<32> timeHolder;
- TTime recDateTime = siEntry->ReceivedDate();
- recDateTime.FormatL( dateHolder, KDateFormat );
- recDateTime.FormatL( timeHolder, KTimeFormat );
- PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
- PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
-#endif // __TEST_LOG__
-
- CleanupStack::PopAndDestroy( siEntry ); // siEntry
-
- PUSHLOG_LEAVEFN("CSIContentHandler::StoreSIMessageL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::HandleMsgOrderReceptionL
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::HandleMsgOrderReceptionL")
-
- __ASSERT_DEBUG( ( SiIdFlag() || HrefFlag() ),
- ContHandPanic( EPushContHandPanNoSiIdOrHrefAttr ) );
- __ASSERT_DEBUG( CreatedFlag(),
- ContHandPanic( EPushContHandPanNoCreatedAttr ) );
-
- CMsvEntrySelection* matchingIdList = NULL;
- TBool discardPushMsg( EFalse );
-
- // Get list of matching stored SI messages.
- if ( SiIdFlag() && iSiIdBuf->Length() != 0 )
- {
- matchingIdList = iWapPushUtils->FindSiIdLC( *iSiIdBuf );
- }
- else // HrefFlag()
- {
- // Use href as si-id.
- matchingIdList = iWapPushUtils->FindSiIdLC( *iHrefBuf );
- }
- const TInt matchingListCount( matchingIdList->Count() );
- // Note that the count can be greater than 1.
-
- PUSHLOG_WRITE_FORMAT("CSIContentHandler Count: %d",matchingListCount)
-
- if ( 0 < matchingListCount && CreatedFlag() )
- {
- CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
- CleanupStack::PushL( siEntry );
-
- // Delete older stored messages and/or mark current message for
- // deletion if same date or older than stored messages
- TBool foundOneToBeReplaced = EFalse;
- for ( TInt count = 0; count < matchingListCount; ++count )
- {
- TMsvId matchingSiMsgEntryId( matchingIdList->At(count) );
-
- siEntry->RetrieveL( *iMsvSession, matchingSiMsgEntryId );
-
- // Skip date comparisons if creation date not valid -
- // SI without created attribute never gets replaced.
- TTime existingSiCreatedTime( siEntry->Created() );
-
- if ( existingSiCreatedTime == Time::NullTTime() )
- {
- // continue;
- }
- else
- {
- __ASSERT_DEBUG( !foundOneToBeReplaced,
- ContHandPanic( EPushContHandPanTooManySi ) );
- if ( foundOneToBeReplaced )
- {
- PUSHLOG_WRITE(" Already found one")
- // Only one SI has to be found.
- // If the program runs into it, then make a
- // garbage collection to ensure consistency and
- // remove other messages found.
- iWapPushUtils->DeleteEntryL( matchingSiMsgEntryId );
- // After the 'for' only one SI is allowed that has created
- // attribute.
- }
- else
- {
- foundOneToBeReplaced = ETrue; // A match was found.
- // Check if received SI is newer than existing stored Si
- // (out of order).
- if ( iCreatedTime > existingSiCreatedTime )
- {
- PUSHLOG_WRITE(" Replacing...")
- // The new SI replaces the existing.
- aMatchingEntryId = matchingSiMsgEntryId;
- discardPushMsg = EFalse;
- }
- else if ( iCreatedTime <= existingSiCreatedTime )
- {
- PUSHLOG_WRITE(" Discarding...")
- // Received SI is older than existing stored Si.
- discardPushMsg = ETrue;
- }
- }
- }
- }
-
- CleanupStack::PopAndDestroy( siEntry ); // siEntry
- }
-
- CleanupStack::PopAndDestroy( matchingIdList ); // matchingIdList
-
- PUSHLOG_LEAVEFN("CSIContentHandler::HandleMsgOrderReceptionL")
- return discardPushMsg;
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertDateTimeL
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::ConvertDateTimeL( const TDesC& aDateTime,
- TTime& aConvertedDate ) const
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ConvertDateTimeL")
-
- TTime convertedTime = Time::NullTTime();
- TBool convertedOK = EFalse;
-
- // check supplied descriptor is the correct length
- if ( aDateTime.Length() != KValidUTCLength )
- {
- PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
- User::Leave( KErrCorrupt );
- }
- else
- {
- TBuf<KValidUTCLength> str = aDateTime;
- PUSHLOG_WRITE_FORMAT(" datetime str: <%S>",&str)
- if ( !IsValidUTCTime( str ) )
- {
- // The UTC time is invalid.
- PUSHLOG_WRITE(" invalid UTC time")
- User::Leave( KErrCorrupt );
- }
- else
- {
- // Now 'str' is in format YYYYMMDD:HHMMSS
- // Adjust UTC time to zero offset TTime. Only month and day
- // is effected.
- const TInt KFirstMonthChar = KValidTTimeMonthStart;
- const TInt KSecondMonthChar = KFirstMonthChar + 1;
- const TInt KFirstDayChar = KValidTTimeDayStart;
- const TInt KSecondDayChar = KFirstDayChar + 1;
- // Month.
- // check for special case of month = 10 which becomes 09
- if ( str[KFirstMonthChar] == '1' && str[KSecondMonthChar] == '0' )
- {
- str[KFirstMonthChar] = '0';
- str[KSecondMonthChar] = '9';
- }
- else
- {
- // month value is either 11, 12 or less than 10, ie 1 - 9.
- // reduce day by one, eg 11 becomes 10, 12 becomes 11, 09 becomes 08
- str[KSecondMonthChar]--;
- }
-
- // Day.
- // check for special cases 10, 20, 30
- if ( str[KSecondDayChar] == '0' )
- {
- // reduce day by 1, ie 10 becomes 09, 20 becomes 19 ...
- str[KSecondDayChar] = '9';
- str[KFirstDayChar]--;
- }
- else
- {
- // day value is between 1 and 9 so reduce day by one
- // eg 29 becomes 28, 11 bcomes 10, 31 becomes 30
- str[KSecondDayChar]--;
- }
-
- // string is now syntaxically correct, but Set() will return an
- // error if it's semantically incorrect.
- User::LeaveIfError( convertedTime.Set( str ) );
- convertedOK = ETrue;
- }
- }
-
- PUSHLOG_LEAVEFN("CSIContentHandler::ConvertDateTimeL")
- aConvertedDate = convertedTime;
- return convertedOK;
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertOpaqueToUtcL
-// ---------------------------------------------------------
-//
-HBufC* CSIContentHandler::ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const
- {
- PUSHLOG_ENTERFN("CSIContentHandler::ConvertOpaqueToUtcL")
-
- const TInt opaqueSize = aOpaque.Size();
- if ( KValidMaxEncodedDateTimeSize < opaqueSize )
- {
- PUSHLOG_WRITE_FORMAT(" Bad OPAQUE size: <%d>",opaqueSize)
- User::Leave( KErrCorrupt );
- }
-
- HBufC* converted = HBufC::NewMaxLC( KValidUTCLength );
- TPtr convertedPtr = converted->Des();
- convertedPtr.SetLength( 0 ); // Reset.
-
- // Split up each opaque byte to two bytes.
- TUint8 byte( 0x00 );
- TUint8 high( 0x00 );
- TUint8 low( 0x00 );
- TInt i = 0;
- for ( i = 0; i < opaqueSize; ++i )
- {
- byte = aOpaque[i];
- high = (TUint8)( (byte & 0xF0) >> 4 );
- low = (TUint8)( byte & 0x0F );
- // Check high and low if they are in the range [0-9].
- if ( 9 < high || 9 < low )
- {
- PUSHLOG_WRITE_FORMAT2(" Overflow: <%d, %d>",high,low)
- User::Leave( KErrOverflow );
- }
- convertedPtr.Append( TChar(KAsciiZeroCharCode + high) );
- convertedPtr.Append( TChar(KAsciiZeroCharCode + low) );
- }
-
- // A valid UTC %Datetime contains 14 numerical characters and 6
- // non-numerical: “1999-04-30T06:40:00Z”.
- // So fill the remaining bytes with zeros.
- for ( i = convertedPtr.Length(); i < KValidUTCNumericals; ++i )
- {
- convertedPtr.Append( TChar('0') );
- }
-
- // Insert the necessary non-numerical boundary characters.
- i = 0;
- // Skip year and insert '-'. (Don't forget to increase i with 1 each time!)
- i += KValidUTCYearBlockLength;
- convertedPtr.Insert( i++, KCharMinus );
- // Skip month and insert '-'.
- i += KValidUTCOtherBlockLength;
- convertedPtr.Insert( i++, KCharMinus );
- // Skip day and insert 'T'.
- i += KValidUTCOtherBlockLength;
- convertedPtr.Insert( i++, KCharT );
- // Skip hour and insert ':'.
- i += KValidUTCOtherBlockLength;
- convertedPtr.Insert( i++, KCharColon );
- // Skip minute and insert ':'.
- i += KValidUTCOtherBlockLength;
- convertedPtr.Insert( i++, KCharColon );
- // Skip second and insert 'Z'.
- i += KValidUTCOtherBlockLength;
- convertedPtr.Insert( i++, KCharZ );
-
- CleanupStack::Pop( converted ); // converted
- PUSHLOG_LEAVEFN("CSIContentHandler::ConvertOpaqueToUtcL")
- return converted;
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::IsValidUTCTime
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::IsValidUTCTime( TDes& aDateTime ) const
- {
- PUSHLOG_ENTERFN("CSIContentHandler::IsValidUTCTime")
-
- TBool isValid( ETrue ); // Return value.
-
- // Now aDateTime has to be in format YYYY-MM-DDTHH:MM:SSZ
-
- // check supplied descriptor is the correct length
- if ( aDateTime.Length() != KValidUTCLength )
- {
- PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
- isValid = EFalse;
- }
- else
- {
- // strip out formatting characters
- TInt formatCharPos = 4;
- aDateTime.Delete( formatCharPos, 1 );
- // now move through two characters at a time and remove other chars
- // to just leave digits
- const TInt KRemainingFormatChars = 5;
- TInt i( 0 );
- for ( i = 0; i < KRemainingFormatChars; ++i )
- {
- formatCharPos += 2;
- aDateTime.Delete( formatCharPos, 1 );
- }
-
- // Now aDateTime has to be in format YYYYMMDDHHMMSS
-
- __ASSERT_DEBUG( aDateTime.Length() == KValidTTimeLength,
- ContHandPanic( EPushContHandPanBadTTimeLength ) );
-
- // now have UTC string stripped of format characters - check remaining
- // characters are all digits - YYYYMMDDHHMMSS
- TChar ch;
- for ( i = 0; i < KValidTTimeLength; ++i )
- {
- ch = aDateTime[i];
- if ( ch.IsDigit() == EFalse )
- {
- PUSHLOG_WRITE_FORMAT(" not digit <%d>",i)
- isValid = EFalse;
- }
- }
-
- if ( isValid )
- {
- /*
- In YYYYMMDDHHMMSS
- YYYY = 4 digit year ("0000" ... "9999")
- MM = 2 digit month ("01"=January, "02"=February ... "12"=December)
- DD = 2 digit day ("01", "02" ... "31")
- HH = 2 digit hour, 24-hour timekeeping system ("00" ... "23")
- MM = 2 digit minute ("00" ... "59")
- SS = 2 digit second ("00" ... "59")
- */
- TInt err;
- TUint val;
- // Do not check year. There are no restrictions.
- // Check month.
- TLex parser( aDateTime.Mid( KValidTTimeMonthStart,
- KValidTTimeBlockLength ) );
- err = parser.Val( val, EDecimal );
- if ( err )
- {
- isValid = EFalse;
- PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
- }
- else
- {
- PUSHLOG_WRITE_FORMAT(" month: <%d>",val)
- if ( val < 1 || 12 < val )
- {
- isValid = EFalse;
- }
- }
- // Check day.
- if ( isValid )
- {
- parser = aDateTime.Mid( KValidTTimeDayStart,
- KValidTTimeBlockLength );
- err = parser.Val( val, EDecimal );
- if ( err )
- {
- isValid = EFalse;
- PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
- }
- else
- {
- PUSHLOG_WRITE_FORMAT(" day: <%d>",val)
- if ( val < 1 || 31 < val )
- {
- isValid = EFalse;
- }
- }
- }
- // Check hour.
- if ( isValid )
- {
- parser = aDateTime.Mid( KValidTTimeHourStart,
- KValidTTimeBlockLength );
- err = parser.Val( val, EDecimal );
- if ( err )
- {
- isValid = EFalse;
- PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
- }
- else
- {
- PUSHLOG_WRITE_FORMAT(" hour: <%d>",val)
- if ( 23 < val )
- {
- isValid = EFalse;
- }
- }
- }
- // Check minute.
- if ( isValid )
- {
- parser = aDateTime.Mid( KValidTTimeMinuteStart,
- KValidTTimeBlockLength );
- err = parser.Val( val, EDecimal );
- if ( err )
- {
- isValid = EFalse;
- PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
- }
- else
- {
- PUSHLOG_WRITE_FORMAT(" min: <%d>",val)
- if ( 59 < val )
- {
- isValid = EFalse;
- }
- }
- }
- // Check second.
- if ( isValid )
- {
- parser = aDateTime.Mid( KValidTTimeSecondStart,
- KValidTTimeBlockLength );
- err = parser.Val( val, EDecimal );
- if ( err )
- {
- isValid = EFalse;
- PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
- }
- else
- {
- PUSHLOG_WRITE_FORMAT(" sec: <%d>",val)
- if ( 59 < val )
- {
- isValid = EFalse;
- }
- }
- }
-
- // insert colon seperating date from time
- const TInt KColonPosition = 8;
- aDateTime.Insert( KColonPosition, KCharColon );
-
- // Now aDateTime has to be in format YYYYMMDD:HHMMSS
- }
- }
-
- PUSHLOG_LEAVEFN("CSIContentHandler::IsValidUTCTime")
- return isValid; // aDateTime contains a modified buffer.
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::AttributeToTTimeL
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::AttributeToTTimeL
- ( NW_DOM_AttributeHandle_t& aAttrHandle,
- TTime& aConvertedDate ) const
- {
- PUSHLOG_ENTERFN("CSIContentHandler::AttributeToTTimeL")
-
- TBool gotDate = EFalse;
- NW_Status_t stat = NW_STAT_SUCCESS;
- NW_DOM_AttrVal_t attrVal;
-
- // It is expected to be String or Opaque.
- // It may be Opaque, to which we will need a NW_DOM_AttrVal_t structure.
- stat = NW_DOM_AttributeHandle_getNextVal( &aAttrHandle, &attrVal );
-
- if ( stat != NW_STAT_WBXML_ITERATE_MORE )
- {
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- }
- else
- {
- NW_Uint16 valType = NW_DOM_AttrVal_getType( &attrVal );
-
- if ( valType == NW_DOM_ATTR_VAL_STRING )
- {
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* val = NW_String_new();
- User::LeaveIfNull( val );
- stringOwner->SetString( val );
- //
- stat = NW_DOM_AttrVal_toString( &attrVal, val, iCharEncoding );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* storage = NW_String_getStorage( val );
- NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
- TPtrC8 dataPtr( storage, length );
- HBufC* dataBuf = HBufC::NewMaxLC( dataPtr.Length() );
- dataBuf->Des().Copy( dataPtr );
- gotDate = ConvertDateTimeL( *dataBuf, aConvertedDate );
-
- CleanupStack::PopAndDestroy( 2, stringOwner ); // dataBuf,
- // stringOwner
- }
- else if ( valType == NW_DOM_ATTR_VAL_OPAQUE )
- {
- NW_Uint32 len = 0;
- NW_Byte* data = NW_DOM_AttrVal_getOpaque( &attrVal, &len );
- User::LeaveIfNull( data );
- TPtrC8 dataPtr( data, len );
-
- HBufC* dateTime = ConvertOpaqueToUtcL( dataPtr );
- CleanupStack::PushL( dateTime );
- gotDate = ConvertDateTimeL( *dateTime, aConvertedDate );
- CleanupStack::PopAndDestroy( dateTime ); // dateTime
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
- }
-
- PUSHLOG_LEAVEFN("CSIContentHandler::AttributeToTTimeL")
- return gotDate; // aConvertedDate contains the result.
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg,
- TRequestStatus& aStatus )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
-
- __ASSERT_DEBUG( aPushMsg != NULL,
- ContHandPanic( EPushContHandPanMsgNull ) );
-
-#ifdef __TEST_LOG__
- TPtrC8 bodyPtr;
- aPushMsg->GetMessageBody( bodyPtr );
- PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
- iMessage = aPushMsg;
- iAcknowledge = ETrue;
- SetConfirmationStatus( aStatus );
-
- iState = EGarbageCollecting;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg )
- {
- PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
-
- __ASSERT_DEBUG( aPushMsg != NULL,
- ContHandPanic( EPushContHandPanMsgNull ) );
-
-#ifdef __TEST_LOG__
- TPtrC8 bodyPtr;
- aPushMsg->GetMessageBody( bodyPtr );
- PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
- iAcknowledge = EFalse;
- iMessage = aPushMsg;
-
- iState = EGarbageCollecting;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CancelHandleMessage()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::CancelHandleMessage")
- Cancel();
- PUSHLOG_LEAVEFN("CSIContentHandler::CancelHandleMessage")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CPushHandlerBase_Reserved1()
- {
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::CPushHandlerBase_Reserved2
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CPushHandlerBase_Reserved2()
- {
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CSIContentHandler::DoCancel()
- {
- PUSHLOG_ENTERFN("CSIContentHandler::DoCancel")
- Complete( KErrCancel );
- PUSHLOG_LEAVEFN("CSIContentHandler::DoCancel")
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::RunL()
- {
- // Handle errors in RunError().
- PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
- User::LeaveIfError( iStatus.Int() );
-
- // use active state machine routine to manage activites:
- switch ( iState )
- {
- case EGarbageCollecting:
- {
- CollectGarbageL();
- break;
- }
- case EFilteringAndParsing:
- {
- if ( !FilterPushMsgL() )
- {
- // It did not pass the filter. Done.
- iState = EDone;
- IdleComplete();
- }
- else
- {
- // Continue.
- TInt ret = KErrNone;
- PUSHLOG_WRITE("CSIContentHandler::RunL : before trapping parsing.")
- TRAP(ret, ParsePushMsgL());
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunL : after trapping parsing. ret = %d", ret)
- if ( ret != KErrNone)
- {
- PUSHLOG_WRITE("CSIContentHandler::RunL : Parsing failed. discarding message.")
- iState = EDone;
- IdleComplete();
- }
- }
- break;
- }
- case EProcessing:
- {
- ProcessingPushMsgEntryL();
- break;
- }
- case EDone:
- {
- PUSHLOG_WRITE("CSIContentHandler EDone")
- Complete( KErrNone );
- break;
- }
- default:
- {
- // JIC.
- PUSHLOG_WRITE("CSIContentHandler default Done")
- Complete( KErrNone );
- break;
- }
- }
- }
-
-// ---------------------------------------------------------
-// CSIContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CSIContentHandler::RunError( TInt aError )
- {
- PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunError: %d",aError)
-
- iState = EDone;
- Complete( aError );
- return KErrNone;
- }
-
--- a/pushmtm/Plugins/PushContentHandler/CSIContentHandler.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CSIContentHandler.
-*
-*/
-
-
-
-#ifndef __CSICONTENTHANDLER_H__
-#define __CSICONTENTHANDLER_H__
-
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushContentHandlerDef.hrh"
-#include <E32Base.h>
-#include <msvstd.h>
-#include <nw_dom_attribute.h>
-#include <CharConv.h>
-
-// CONSTANTS
-
-const TUid KUidPushSIContentHandler = { EUidPushSIContentHandler };
-_LIT(KSIContentHandlerData,"text/vnd.wap.si||application/vnd.wap.sic");
-
-// FORWARD DECLARATIONS
-
-class CSIPushMsgEntry;
-
-// CLASS DECLARATION
-
-/**
-* CSIContentHandler handles Service Indication content
-*
-* This handler takes ownership of the SI message and processes it
-* according to the Reception rules
-* [WAP Service Indication version 31-July-2001]
-* and either stores the message or deletes it.
-* Also S60 specific requirements are applied.
-*
-* OVERVIEW:
-* The main body of this class and its functionality lies within
-* HandleMessage (asynchonous). This :
-* 1. takes ownership of the push message
-* 2. validates the message and generates a parsed document tree
-* 3. extracts the message attribute values from document tree
-* 4. processes the received message
-* 5. finishes
-*
-* NB: A received message with no creation date will be stored (unless
-* its action is set to delete or the expiry condition is met). This
-* means that the si-id in the message store will not be unique.
-*/
-class CSIContentHandler : public CPushContentHandlerBase
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor. Leaves on failure.
- * @return The constructed object.
- */
- static CSIContentHandler* NewL();
-
- /**
- * Destructor.
- */
- virtual ~CSIContentHandler();
-
- private: // Constructors
-
- /**
- * Constructor.
- */
- CSIContentHandler();
-
- /**
- * Symbian OS constructor.
- */
- void ConstructL();
-
- private: // New functions
-
- /**
- * Do Garbage Collection synchronously.
- * @return None.
- */
- void CollectGarbageL();
-
- /**
- * Parse the current message. If the SI is wbxml encoded then it is
- * decoded first to XML format. Then the message details (attributes)
- * are earned from the XML tree.
- * @return None.
- */
- void ParsePushMsgL();
-
- /**
- * Parse the indication element.
- * @param aIndication The element to be parsed.
- * @return None.
- */
- void ParseIndicationL( NW_DOM_ElementNode_t& aIndication );
-
- /**
- * Parse an attribute of the indication element.
- * @param aAttrHandle The attribute to be parsed.
- * @return None.
- */
- void ParseIndAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
-
- /**
- * Parse the text of the indication element.
- * @param aTextNode The text node to be parsed.
- * @return None.
- */
- void ParseTextL( NW_DOM_TextNode_t& aTextNode );
-
-
- /**
- * Converts the given buffer to unicode (UCS-2).
- * @param aSrc Source text.
- * @param aCharSetId Character set ID.
- * @return The UCS-2 unicode buffer.
- */
- HBufC16* ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId );
-
- /**
- * Converts the given buffer to unicode (UCS-2).
- * @param aString Source text.
- * @param aCharEncoding Character encoding.
- * @return The UCS-2 unicode buffer.
- */
- HBufC16* ConvertToUnicodeL( NW_String_t& aString, NW_Uint32 aCharEncoding );
-
- /**
- * Initialise the converter.
- * @return None.
- */
- void InitialiseCharacterSetConverterL();
-
-
- /**
- * Convert the action string to a representative numeric value to
- * facilitate storing the message.
- * @param aActionString The attribute value indicating the action level
- * eg 'signal-high'
- * @return TUint: a value representing the action type.
- */
- TUint ConvertActionString( const TDesC8& aActionString ) const;
-
- /**
- * The entry fields are set to the correct values.
- * @return None.
- */
- void SetSIPushMsgEntryFieldsL( CSIPushMsgEntry& aSIPushMsgEntry );
-
- /**
- * Do the final processing of the message according to the OMA and S60
- * requirements.
- * @return None.
- */
- void ProcessingPushMsgEntryL();
-
- /**
- * Store the new message to Messaging.
- * @param aMatchingEntryId ID of the matching SI entry.
- * @return None.
- */
- void StoreSIMessageL( TMsvId aMatchingEntryId );
-
- /**
- * Handle message order reception.
- * NB: A received message with no creation date will be stored (unless
- * its action is set to delete or the expiry condition is met). This
- * means that the si-id in the message store will not be unique.
- * @param aMatchingEntryId ID of the matching SI entry.
- * It is changed only if the function returns EFalse (replace)!
- * @return ETrue if the entry has to be discarded.
- */
- TBool HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId );
-
- // conversion utilities
-
- /**
- * Convert UTC date time into native TTime format. Method can leave.
- * @param aDateTime The UTC string representing the date and time.
- * @param aConvertedDate Member date variable passed in to accept
- * converted UTC date as TTime varaible.
- * @return TBool indicates if conversion successful (ETrue) or
- * conversion failed (EFalse)
- */
- TBool ConvertDateTimeL( const TDesC& aDateTime,
- TTime& aConvertedDate ) const;
-
- /**
- * Convert OPAQUE data to UTC date time as specified in SI spec.
- * @param aOpaque OPAQUE data.
- * @return The UTC time.
- */
- HBufC* ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const;
-
- /**
- * Check given UTC time string conforms to expected format:
- * YYYY-MM-DDTHH:MM:SSZ and strip out formatting characters
- * then validate the remaining characters are all digits.
- * If validated then add TTime formating character so final
- * string returned will be of the format YYYYMMDD:HHMMSS.
- * @param aDateTime UTC string which is validated and returned.
- * @return boolean: indicates if given date is valid (ETrue)
- * or not (EFalse)
- */
- TBool IsValidUTCTime( TDes& aDateTime ) const;
-
- /**
- * Convert OPAQUE or STRING attribute to TTime.
- * @param aAttrHandle Handle to the attribute.
- * @param aConvertedDate The resulted TTime.
- * @return ETrue if the conversion succeeded.
- */
- TBool AttributeToTTimeL( NW_DOM_AttributeHandle_t& aAttrHandle,
- TTime& aConvertedDate ) const;
-
- // Attribute flags
-
- /**
- * Flag whether message has an action attribute
- * @param aAction boolean to set flag to -
- * ETrue for action attrib present
- * EFalse for no action attrib.
- */
- inline void SetActionFlag( TBool aAction );
-
- /**
- * Check status of action flag to see if message has an action
- * attribute.
- * @return TBool ETrue - action attribute present in message
- * EFalse - no action attribute.
- */
- inline TBool ActionFlag() const;
-
- /**
- * Flag whether message has a created date attribute.
- * @param aCreated boolean to set flag to -
- * ETrue for si-created attrib present
- * EFalse for no si-created attrib
- */
- inline void SetCreatedFlag( TBool aCreated );
-
- /**
- * Check status of created flag to see if message has a si-created
- * attribute.
- * @return TBool ETrue - si-created attribute present in message
- * EFalse - no si-created attribute
- */
- inline TBool CreatedFlag() const;
-
- /**
- * Flag whether message has a Href attribute
- * @param aHref boolean to set flag to -
- * ETrue for Href attrib present
- * EFalse for no href attrib
- */
- inline void SetHrefFlag( TBool aHref );
-
- /**
- * Check status of href flag to see if message has an href attribute.
- * @return TBool
- * ETrue - href attribute present in message
- * EFalse - no href attribute
- */
- inline TBool HrefFlag() const;
-
- /**
- * Flag whether message has an expiry date attribute (si-expires).
- * @param aExpires boolean to set flag to -
- * ETrue for si-expires present
- * EFalse for no si-expires date
- */
- inline void SetExpiresFlag( TBool aExpires );
-
- /**
- * Check status of flag to see if message has an expiry date attribute.
- * @return TBool
- * ETrue - si-expires attribute present in message
- * EFalse - no si-expires attribute
- */
- inline TBool ExpiresFlag() const;
-
- /**
- * Flag whether message has a si-id attribute
- * @param aSiId boolean to set flag to -
- * ETrue for si-id attrib present
- * EFalse for no si-id attrib
- */
- inline void SetSiIdFlag( TBool aSiId );
-
- /**
- * Check status of flag to see if message has an si-id attribute.
- * @return TBool
- * ETrue - si-id attribute present in message
- * EFalse - no si-id attribute
- */
- inline TBool SiIdFlag() const;
-
- /**
- * Flag whether message has a Data attribute (text)
- * @param aData
- * boolean to set flag to - ETrue for data attrib present
- * EFalse for no data attrib
- */
- inline void SetDataFlag( TBool aData );
-
- /**
- * Check status of data flag to see if message has any data.
- * @return TBool
- * ETrue - data attribute present in message
- * EFalse - no data attribute
- */
- inline TBool DataFlag() const;
-
- private: // Methods from CPushHandlerBase
-
- /**
- * HandleMessage Async. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * @param aPushMsg CPushMessage to process.
- * @param aStatus Request status variable for use in asynchronous
- * operations.
- * @return None.
- */
- void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
-
- /**
- * HandleMessage Sync. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * Initial State: Set data members then go to the next state
- * @param aPushMsg CPushMessage to process.
- */
- void HandleMessageL( CPushMessage* aPushMsg );
-
- /**
- * Same functionality as DoCancel()
- */
- void CancelHandleMessage();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved1();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved2();
-
- private: // Methods from CActive
-
- /**
- * Terminates any activity
- * @return None.
- */
- void DoCancel();
-
- /**
- * Step through the various representative states for handling a message
- * States:
- * EGarbageCollecting - Deleting expired SI msgs from messaging
- * EFilteringAndParsing - Filter push msg according to Service message
- * settings and Parses SI push message (retrieving the
- * attributes)
- * EProcessing - Processing the current entry. OMA and S60 rules are
- * applied, then save or update SI msg in the Msg store
- * EDone - Clean up, complete observer
- * @return None.
- */
- void RunL();
-
- /**
- * This is invoked when RunL Leaves with an error so clean up and
- * return.
- * @return Error code to scheduler.
- */
- TInt RunError(TInt aError);
-
- private: // Data
-
- enum
- {
- EAction = 0x01,
- ECreated = 0x02,
- EHref = 0x04,
- EExpires = 0x08,
- ESiId = 0x10,
- EData = 0x20
- };
-
- enum TState
- {
- EGarbageCollecting,
- EFilteringAndParsing,
- EProcessing,
- EDone
- };
-
- TMsvId iSavedMsgId; ///< ID of the message saved.
- TUint32 iAttributes; ///< Attribute indication (set or not).
- TInt iPushMsgAction; ///< Action attribute
- HBufC* iHrefBuf; ///< Href attribute. Has.
- HBufC* iSiIdBuf; ///< Si-id attribute. Has.
- TTime iExpiresTime; ///< Expiration attribute.
- TTime iCreatedTime; ///< Created attribute.
- HBufC* iData; ///< Message text. Has.
-
- NW_Uint32 iCharEncoding; ///< Char encoding of the current msg.
-
- //
- CCnvCharacterSetConverter* iCharacterSetConverter; ///< Owned.
- CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* iCharacterSetsAvailable; ///< Owned.
- };
-
-#include "CSIContentHandler.inl"
-
-#endif // __CSICONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CSIContentHandler.inl Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Inline functions.
-*
-*/
-
-
-
-inline void CSIContentHandler::SetActionFlag(TBool aAction)
- {
- if ( aAction )
- {
- iAttributes |= EAction;
- }
- else
- {
- iAttributes &=~ EAction;
- }
- }
-
-inline TBool CSIContentHandler::ActionFlag() const
- {
- return iAttributes & EAction;
- }
-
-inline void CSIContentHandler::SetCreatedFlag( TBool aCreated )
- {
- if ( aCreated )
- {
- iAttributes |= ECreated;
- }
- else
- {
- iAttributes &=~ ECreated;
- }
- }
-
-inline TBool CSIContentHandler::CreatedFlag() const
- {
- return iAttributes & ECreated;
- }
-
-inline void CSIContentHandler::SetHrefFlag( TBool aHref )
- {
- if ( aHref )
- {
- iAttributes |= EHref;
- }
- else
- {
- iAttributes &=~ EHref;
- }
- }
-
-inline TBool CSIContentHandler::HrefFlag() const
- {
- return iAttributes & EHref;
- }
-
-inline void CSIContentHandler::SetExpiresFlag( TBool aExpires )
- {
- if ( aExpires )
- {
- iAttributes |= EExpires;
- }
- else
- {
- iAttributes &=~ EExpires;
- }
- }
-
-inline TBool CSIContentHandler::ExpiresFlag() const
- {
- return iAttributes & EExpires;
- }
-
-inline void CSIContentHandler::SetSiIdFlag( TBool aSiId )
- {
- if ( aSiId )
- {
- iAttributes |= ESiId;
- }
- else
- {
- iAttributes &=~ ESiId;
- }
- }
-
-inline TBool CSIContentHandler::SiIdFlag() const
- {
- return iAttributes & ESiId;
- }
-
-inline void CSIContentHandler::SetDataFlag( TBool aData )
- {
- if ( aData )
- {
- iAttributes |= EData;
- }
- else
- {
- iAttributes &=~ EData;
- }
- }
-
-inline TBool CSIContentHandler::DataFlag() const
- {
- return iAttributes & EData;
- }
-
--- a/pushmtm/Plugins/PushContentHandler/CSLContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1221 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CSLContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CSLContentHandler.h"
-#include "PushMtmUtil.h"
-#include "PushMtmSettings.h"
-#include "PushAuthenticationUtilities.h"
-#include "PushMtmLog.h"
-#include "PushContentHandlerPanic.h"
-#include "PushMtmAutoFetchOperation.h"
-#include "PushMtmUiDef.h"
-#include "StringResourceReader.h"
-#include "sl_dict.h"
-#include "PushContentHandlerUtils.h"
-#include <push/cslpushmsgentry.h>
-#include <msvids.h>
-#include <apgtask.h>
-#include <apgcli.h>
-#include <w32std.h>
-#include <PushMtmUi.rsg>
-#include <nw_dom_node.h>
-#include <nw_dom_document.h>
-#include <nw_dom_element.h>
-#include <nw_dom_text.h>
-#include <nw_wbxml_dictionary.h>
-#include <nw_string_char.h>
-#include "PushMtmPrivateCRKeys.h"
-#include <centralrepository.h>
-
-// CONSTANTS
-
-// sl attributes / elements
-_LIT8( KSl, "sl" );
-_LIT8( KHref, "href" );
-_LIT8( KAction, "action" );
-
-// action attribute literals
-_LIT8( KExecHigh,"execute-high" );
-_LIT8( KExecLow, "execute-low" );
-_LIT8( KCache, "cache" );
-
-// Text SL MIME type
-_LIT( KSlTextContentType, "text/vnd.wap.sl" );
-
-// Browser command to fetch an URL. See Browser API Specification!
-_LIT( KBrowserCmdFetchUrl, "4 " );
-const TUid KBrowserAppUid = { 0x10008D39 };
-
-const TInt KNoOfDictArrays = 1;
-
-/// Autofetch time delay in seconds.
-const TInt KAutofetchDelayInSec = 5;
-
-// file monitored by browser
-_LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CSLContentHandler::NewL
-// ---------------------------------------------------------
-//
-CSLContentHandler* CSLContentHandler::NewL()
- {
- CSLContentHandler* self = new (ELeave) CSLContentHandler;
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::~CSLContentHandler
-// ---------------------------------------------------------
-//
-CSLContentHandler::~CSLContentHandler()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::~CSLContentHandler")
-
- Cancel();
- delete iFetchOp;
- delete iHrefBuf;
-
- PUSHLOG_LEAVEFN("CSLContentHandler::~CSLContentHandler")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CSLContentHandler
-// ---------------------------------------------------------
-//
-CSLContentHandler::CSLContentHandler()
-: CPushContentHandlerBase(),
- iSavedMsgId( KMsvNullIndexEntryId ),
- iPushMsgAction( KErrNotFound ),
- iSaveAsRead( EFalse )
- {
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ConstructL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::ConstructL")
-
- CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
- CleanupStack::PushL( PushSL );
- User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
- CleanupStack::PopAndDestroy( PushSL );
-
- CPushContentHandlerBase::ConstructL();
- // Added to Active Scheduler.
- PUSHLOG_LEAVEFN("CSLContentHandler::ConstructL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CollectGarbageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CollectGarbageL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::CollectGarbageL")
-
- DoCollectGarbageL();
-
- if(iPushSLEnabled)
- iState = EFilteringAndParsing;
- else
- iState = EDone;
-
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSLContentHandler::CollectGarbageL")
- }
-
-
-// ---------------------------------------------------------
-// CSLContentHandler::ParsePushMsgL
-// Note that cXML parser dosn't do any validation!
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ParsePushMsgL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::ParsePushMsgL")
-
- TPtrC8 bodyPtr;
- iMessage->GetMessageBody( bodyPtr );
- // If there is no body in the message leave with an error
- if ( bodyPtr.Size() == 0 )
- {
- PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: Empty body")
- User::Leave( KErrCorrupt );
- }
-
- TPtrC contentType;
- iMessage->GetContentType( contentType );
- PUSHLOG_WRITE_FORMAT(" Content type <%S>",&contentType)
-
- // Add SL dictionary.
- NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
- { (NW_WBXML_Dictionary_t*)&NW_SL_WBXMLDictionary };
-
- NW_Status_t stat = NW_STAT_SUCCESS;
-
- RWbxmlDictionary wbxmlDict;
- wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
- CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
-
- NW_TinyDom_Handle_t domHandle;
- NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
- NW_Int32 length = (NW_Int32)bodyPtr.Size();
- NW_Bool encoded = ( contentType.CompareF( KSlTextContentType ) == 0 ) ?
- NW_FALSE : NW_TRUE;
- NW_Uint32 publicID = NW_SL_PublicId;
- NW_Bool extTNotStringTable = NW_FALSE; // What is this?
- NW_DOM_NodeType_t type = 0;
- /**********************************
- * Root of DOM
- ***********************************/
- CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
- CleanupStack::PushL( docTreeOwner );
- NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
- (
- &domHandle,
- buffer,
- length,
- encoded,
- publicID,
- extTNotStringTable
- );
- if (!domNode)
- {
- PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: domNode is Null")
- }
- User::LeaveIfNull( domNode );
- docTreeOwner->SetDocTree( domNode );
-
- type = NW_DOM_Node_getNodeType( domNode );
- if ( type != NW_DOM_DOCUMENT_NODE )
- {
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not Document node <%d>",type)
- User::Leave( KErrArgument );
- }
-
- iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
-
- /**********************************
- * ELEMENT sl
- ***********************************/
- // first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
- TBool domNodeHasChildNodes = EFalse;
- domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
- if (!domNodeHasChildNodes)
- {
- PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: No SL element present in the dom tree. Message corrupted.")
- User::Leave( KErrCorrupt );
- }
-
- PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: before calling getDocumentElement")
- NW_DOM_ElementNode_t* slElement =
- NW_DOM_DocumentNode_getDocumentElement( domNode );
- if (!slElement)
- {
- PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: slElement is Null")
- }
- User::LeaveIfNull( slElement );
-
- type = NW_DOM_Node_getNodeType( slElement );
-
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* name = NW_String_new();
- User::LeaveIfNull( name );
- stringOwner->SetString( name );
- stat = NW_DOM_Node_getNodeName( slElement, name );
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* nameBuf = NW_String_getStorage( name );
- NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
- TPtrC8 namePtr( nameBuf, nameLen );
-
- if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSl ) != 0 )
- {
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not sl element node <%d>",type)
- User::Leave( KErrArgument );
- }
-
- CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
- /**********************************
- * Attributes of ELEMENT sl
- ***********************************/
- if ( NW_DOM_ElementNode_hasAttributes( slElement ) )
- {
- NW_DOM_AttributeListIterator_t attrIter;
- stat = NW_DOM_ElementNode_getAttributeListIterator
- ( slElement, &attrIter );
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
-
- NW_DOM_AttributeHandle_t attrHandle;
- while( NW_DOM_AttributeListIterator_getNextAttribute
- ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
- {
- ParseSlAttributeL( attrHandle );
- }
- }
-
- // Cleanup.
- CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
-
- // if 'action' attribute not specified, the value 'execute-low' is used.
- if ( !ActionFlag() )
- {
- iPushMsgAction = CSLPushMsgEntry::ESLPushMsgExecuteLow;
- SetActionFlag( ETrue );
- PUSHLOG_WRITE_FORMAT(" Defaulting to ActionFlag: %d",iPushMsgAction)
- }
-
- iState = EProcessing;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSLContentHandler::ParsePushMsgL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::ParseSlAttributeL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ParseSlAttributeL
- ( NW_DOM_AttributeHandle_t& aAttrHandle )
- {
- PUSHLOG_ENTERFN("CSLContentHandler::ParseSlAttributeL")
-
- NW_Status_t stat = NW_STAT_SUCCESS;
-
- CStringOwner* attrNameOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( attrNameOwner );
-
- NW_String_t* attrName = NW_String_new();
- User::LeaveIfNull( attrName );
- attrNameOwner->SetString( attrName );
-
- // Get the name of the attribute.
- stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* attrNameBuf = NW_String_getStorage( attrName );
- NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
- TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
-
- if ( attrNamePtr.CompareF( KHref ) == 0 )
- {
- if ( !HrefFlag() )
- {
- HBufC* tempHrefBuf = NULL;
-
- CStringOwner* valOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( valOwner );
-
- NW_String_t* val = NW_String_new();
- User::LeaveIfNull( val );
- valOwner->SetString( val );
- stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
- if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
- {
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* storage = NW_String_getStorage( val );
- NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
- TPtrC8 prefixPtr( storage, length );
- tempHrefBuf = HBufC::NewMaxL( length );
- // No leavable after it!!! until...
- tempHrefBuf->Des().Copy( prefixPtr );
- }
-
- CleanupStack::PopAndDestroy( valOwner ); // valOwner
-
- if ( tempHrefBuf )
- {
- if ( tempHrefBuf->Length() == 0 )
- {
- // Zero length Href is considered as nothing.
- PUSHLOG_WRITE(" Zero length HrefFlag");
- }
- else
- {
- iHrefBuf = tempHrefBuf; // ...until here.
- SetHrefFlag( ETrue );
- PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
- }
- }
- }
- }
- else if ( attrNamePtr.CompareF( KAction ) == 0 )
- {
- if ( !ActionFlag() )
- {
- CStringOwner* stringOwner = new (ELeave) CStringOwner;
- CleanupStack::PushL( stringOwner );
-
- NW_String_t* val = NW_String_new();
- User::LeaveIfNull( val );
- stringOwner->SetString( val );
- stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- NW_Byte* storage = NW_String_getStorage( val );
- NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
- TPtrC8 actionPtr( storage, length );
-
- iPushMsgAction = ConvertActionString( actionPtr );
- SetActionFlag( ETrue );
- PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
-
- CleanupStack::PopAndDestroy( stringOwner );
- }
- }
- else
- {
- __ASSERT_DEBUG( EFalse,
- ContHandPanic( EPushContHandPanUnexpSlToken ) );
- }
-
- CleanupStack::PopAndDestroy( attrNameOwner ); // attrNameOwner
-
- PUSHLOG_LEAVEFN("CSLContentHandler::ParseSlAttributeL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::ConvertActionString
-// ---------------------------------------------------------
-//
-TUint CSLContentHandler::ConvertActionString
- ( const TDesC8& aActionString ) const
- {
- const TInt KMatchFound = 0;
-
- // if 'action' attribute not specified, the value 'execute-low' is used.
- TUint actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
-
- if ( aActionString.Compare( KExecHigh ) == KMatchFound )
- {
- actionValue = CSLPushMsgEntry::ESLPushMsgExecuteHigh;
- }
- else if ( aActionString.Compare( KExecLow ) == KMatchFound )
- {
- actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
- }
- else if ( aActionString.Compare( KCache ) == KMatchFound )
- {
- actionValue = CSLPushMsgEntry::ESLPushMsgExecuteCache;
- }
-
- return actionValue;
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::SetSlPushMsgEntryFieldsL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::SetSlPushMsgEntryFieldsL( CSLPushMsgEntry&
- aSlPushMsgEntry ) const
- {
- PUSHLOG_ENTERFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
-
- // Set URL and Action fields.
- if ( HrefFlag() )
- {
- aSlPushMsgEntry.SetUrlL( *iHrefBuf );
- }
-
- __ASSERT_DEBUG( ActionFlag(),
- ContHandPanic( EPushContHandPanUnspecSlAction ) );
- if ( ActionFlag() )
- {
- aSlPushMsgEntry.SetAction( iPushMsgAction );
- }
- else // if not specified, the value 'execute-low' is used.
- {
- aSlPushMsgEntry.SetAction( CSLPushMsgEntry::ESLPushMsgExecuteLow );
- }
-
- // Set all the relevant header fields.
- TPtrC8 msgHeaderPtr;
- iMessage->GetHeader( msgHeaderPtr );
- aSlPushMsgEntry.SetHeaderL( msgHeaderPtr );
-
- // Get server address.
- TPtrC8 srvAddress;
- if ( iMessage->GetServerAddress( srvAddress ) )
- {
- aSlPushMsgEntry.SetFromL( srvAddress );
- }
-
- // First line in Inbox: TMsvEntry::iDetails.
- if ( srvAddress.Length() == 0 )
- {
- // Read from resource.
- HBufC* details =
- iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
- aSlPushMsgEntry.SetMsgDetailsL( *details );
- CleanupStack::PopAndDestroy( details );
- }
- else
- {
- // Convert the "From" information to the format required by the UI
- // spec and then decode it.
- HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
- CleanupStack::PushL( details );
- HBufC* convertedFrom =
- CPushMtmUtil::ConvertUriToDisplayFormL( *details );
- CleanupStack::PushL( convertedFrom );
- //
- aSlPushMsgEntry.SetMsgDetailsL( *convertedFrom );
- //
- CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
- }
-
- // Second line in Inbox: TMsvEntry::iDescription.
- // Read from resource.
- HBufC* description =
- iStrRscReader->AllocReadResourceLC( R_PUSHMISC_INBOX_SERV_MSG );
- aSlPushMsgEntry.SetMsgDescriptionL( *description );
- CleanupStack::PopAndDestroy( description );
-
- // ******** Push MTM specific processing *********
-
- /*
- * Unfortunately in CPushMsgEntryBase there is no such functionality
- * with which we can reach TMsvEntry as non-const, but we have to
- * modify the entry's iMtmData2 member somehow. We can do it
- * with either casting or with modifying and saving the entry
- * manually after it has been saved by CSLPushMsgEntry. The latter
- * solution is more expensive so we choose the first.
- */
- TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSlPushMsgEntry.Entry() );
- if ( HrefFlag() )
- {
- CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
- }
- else
- {
- CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
- }
-
- // Indication is required if the entry is saved as 'read' (delete &
- // replacement notification). It can happen only in case of SL message.
- // Otherwise the flag has to be cleared!
- if ( !iSaveAsRead )
- {
- // Saving as unread & new.
- tEntry.SetNew( ETrue );
- tEntry.SetUnread( ETrue );
- CPushMtmUtil::ResetAttrs( tEntry, EPushMtmReadButContentChanged );
- }
- else
- {
- // Saving as read.
- tEntry.SetNew( EFalse );
- tEntry.SetUnread( EFalse );
- CPushMtmUtil::SetAttrs( tEntry, EPushMtmReadButContentChanged );
- }
-
- PUSHLOG_LEAVEFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::ProcessingPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ProcessingPushMsgEntryL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::ProcessingPushMsgEntryL")
-
- TBool discardPushMsg( EFalse );
-
- __ASSERT_DEBUG( ActionFlag(),
- ContHandPanic( EPushContHandPanUnspecSlAction ) );
-
- // S60 requirement: if the href is empty then delete (discard) the msg.
- if ( HrefFlag() == EFalse )
- {
- PUSHLOG_WRITE(" No SL Href.")
- discardPushMsg = ETrue;
- }
- else
- {
- __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
- ContHandPanic( EPushContHandPanUnspecSlHref ) );
-
- // The message will not be discarded
- discardPushMsg = EFalse;
-
- CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
- ( *iHrefBuf, KUidWapPushMsgSL );
- TInt matchingListCount = matchingUrlList->Count();
- PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
-
- // Only one SL is allowed with the same Url, so leave the first and
- // delete the others.
- if ( 1 < matchingListCount )
- {
- for ( TInt count = 1; count < matchingListCount; ++count )
- {
- iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
- }
- matchingListCount = 1; // Only one remains.
- }
-
- if ( 0 < matchingListCount )
- {
- // Find msg of the same href and discard it if it has a lower or
- // the same action value.
- CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
- CleanupStack::PushL( matchingSl );
-
- const TMsvId matchingId = matchingUrlList->At(0);
- matchingSl->RetrieveL( *iMsvSession, matchingId );
-
- if ( iPushMsgAction <= matchingSl->Action() )
- {
- PUSHLOG_WRITE(" SL: not higher action")
- discardPushMsg = ETrue;
- }
-
- CleanupStack::PopAndDestroy( matchingSl ); // matchingSl,
- }
-
- CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
- }
-
- if ( discardPushMsg )
- {
- // Nothing to do.
- PUSHLOG_WRITE(" SL discarded.")
- iState = EDone;
- IdleComplete();
- }
- else
- {
- iState = HandleServiceInvocationL();
- IdleComplete();
- }
-
- __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
- ContHandPanic( EPushContHandPanSlMsgIdSet ) );
-
- PUSHLOG_LEAVEFN("CSLContentHandler::ProcessingPushMsgEntryL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::HandleServiceInvocationL
-// ---------------------------------------------------------
-//
-TInt CSLContentHandler::HandleServiceInvocationL() const
- {
- PUSHLOG_ENTERFN("CSLContentHandler::HandleServiceInvocationL")
-
- TInt nextState = ESavePushMsgEntry;
-
- if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
- {
- PUSHLOG_WRITE(" SL cache");
- TBool isAuthenticated = TPushAuthenticationUtil::
- AuthenticateMsgL( *iMtmSettings, *iMessage );
- if ( !isAuthenticated )
- {
- PUSHLOG_WRITE(" Not authenticated");
- // The message is placed to Inbox.
- nextState = ESavePushMsgEntry;
- }
- else
- {
- // Authenticated. Fetch SL-cache.
- nextState = EFetching;
- }
- }
-
- else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteLow )
- {
- PUSHLOG_WRITE(" SL execute-low")
- // It is independent from Automatic/Manual setting and WL
- // authentication is not applied. The message is placed to Inbox
- // for manual downloading.
- nextState = ESavePushMsgEntry;
- }
-
- else // ESLPushMsgExecuteHigh
- {
- PUSHLOG_WRITE(" SL execute-high");
- // If the settings is Manual or it does not pass the WL authentication
- // then it is placed to Inbox for manual downloading.
- // If the setting is Automatic and it passes the WL authentication,
- // the Browser is started standalone to download the URL without any
- // user interaction.
- if ( iMtmSettings->ServiceLoadingType() ==
- CPushMtmSettings::EManual )
- {
- PUSHLOG_WRITE(" Manual setting")
- // The message is placed to Inbox.
- nextState = ESavePushMsgEntry;
- }
- else // Automatic loading
- {
- PUSHLOG_WRITE(" Automatic setting");
- // Authenticate the message.
- TBool isAuthenticated = TPushAuthenticationUtil::
- AuthenticateMsgL( *iMtmSettings, *iMessage );
- if ( !isAuthenticated )
- {
- PUSHLOG_WRITE(" Not authenticated");
- // The message is placed to Inbox.
- nextState = ESavePushMsgEntry;
- }
- else
- {
- // Authenticated - start downloading.
- nextState = EFetching;
- }
- }
- }
-
- PUSHLOG_LEAVEFN("CSLContentHandler::HandleServiceInvocationL")
- return nextState;
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::FetchPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::FetchPushMsgEntryL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::FetchPushMsgEntryL")
-
- __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
- ContHandPanic( EPushContHandPanAlreadyInitialized ) );
- __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
- ContHandPanic( EPushContHandPanUnspecSlHref ) );
-
- /*
- * In case of execute-high use the Browser to download the service.
- * In case of cache use the fetch operation to download the service
- * silently.
- */
-
- if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteHigh )
- {
- PUSHLOG_WRITE(" Start Browser")
- // Launch the Browser with the URI, then save the message.
- // Trap errors. If Browser's launching fails, then save the
- // message as 'unread'. In case of an error, it is not forwarded.
- TRAPD( err, StartBrowserL() );
- iState = ESavePushMsgEntry;
- // Mark it 'read' after succesfull Browser startup.
- iSaveAsRead = err ? EFalse : ETrue;
- IdleComplete();
- }
- else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
- {
- // Fetch the service inside the content handler.
- iStatus = KRequestPending;
- SetActive();
- __ASSERT_DEBUG( !iFetchOp,
- ContHandPanic( EPushContHandPanFetchAlreadyInit ) );
-
- iFetchOp = CPushMtmAutoFetchOperation::NewL( *iHrefBuf,
- KAutofetchDelayInSec,
- iStatus );
- iFetchOp->StartL();
- PUSHLOG_WRITE(" Fetch op started")
- iState = EFetchCompleted; // Next state.
- // Fetch completes it.
- }
- else
- {
- __ASSERT_DEBUG( EFalse,
- ContHandPanic( EPushContHandPanBadActionValue ) );
- User::Leave( KErrNotSupported );
- }
-
- PUSHLOG_LEAVEFN("CSLContentHandler::FetchPushMsgEntryL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::StartBrowserL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::StartBrowserL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::StartBrowserL")
-
- // Parameters are separated by space
- // 1st parameter: type of the further parameters
- // 2nd parameter: URL
- //
- HBufC* param = HBufC::NewLC( KBrowserCmdFetchUrl().Length() +
- iHrefBuf->Length() );
- TPtr paramPtr = param->Des();
- paramPtr.Copy( KBrowserCmdFetchUrl );
- paramPtr.Append( *iHrefBuf );
-
- RWsSession wsSession;
- User::LeaveIfError( wsSession.Connect() );
- CleanupClosePushL<RWsSession>( wsSession );
- TApaTaskList taskList( wsSession );
- TApaTask task = taskList.FindApp( KBrowserAppUid );
-
- if ( task.Exists() )
- {
- PUSHLOG_WRITE("CSLContentHandler Browser::SendMessage")
-
- RFs rfs;
- RFile file;
- TPtrC8 param8Ptr;
- // 8-bit buffer is required.
- HBufC8* param8 = HBufC8::NewLC( param->Length() );
- param8->Des().Copy( *param );
- param8Ptr.Set(param8->Des());
-
- // Open the file.
- User::LeaveIfError(rfs.Connect());
- CleanupClosePushL(rfs);
-
- // Replace file if exists or Create file if not exist yet
- User::LeaveIfError( file.Replace( rfs, KPushMtmUrl, EFileWrite | EFileShareExclusive ) );
- CleanupClosePushL(file);
-
- // Write to file
- User::LeaveIfError( file.Write( param8Ptr ) );
-
- // Clean up.
- CleanupStack::PopAndDestroy(/*file*/);
- CleanupStack::PopAndDestroy(/*rfs*/);
- CleanupStack::PopAndDestroy( /*param8*/ );
- }
- else
- {
- PUSHLOG_WRITE("CSLContentHandler Browser::StartDocument")
- RApaLsSession appArcSession;
- User::LeaveIfError( appArcSession.Connect() );
- CleanupClosePushL<RApaLsSession>( appArcSession );
- TThreadId id;
- User::LeaveIfError
- (
- appArcSession.StartDocument( *param, KBrowserAppUid, id )
- );
- CleanupStack::PopAndDestroy( &appArcSession );
- }
-
- CleanupStack::PopAndDestroy( &wsSession );
- CleanupStack::PopAndDestroy( param );
-
- PUSHLOG_LEAVEFN("CSLContentHandler::StartBrowserL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::FetchCompletedL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::FetchCompletedL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::FetchCompletedL")
-
- __ASSERT_DEBUG( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache,
- ContHandPanic( EPushContHandPanBadActionValue ) );
- __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
- ContHandPanic( EPushContHandPanAlreadyInitialized ) );
- __ASSERT_DEBUG( iFetchOp, ContHandPanic( EPushContHandPanNoFetchOp ) );
-
- const TInt fetchRes = iStatus.Int();
- PUSHLOG_WRITE_FORMAT(" fetchRes <%d>",fetchRes)
-
- if ( fetchRes != KErrNone )
- {
- // Downloading failed. Save the message.
- iState = ESavePushMsgEntry;
- }
- else
- {
- // Silent fetching has completed successfully.
- // The message should not be saved.
- iState = EDone;
- }
-
- // Next state set. Complete.
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSLContentHandler::FetchCompletedL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::SavePushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::SavePushMsgEntryL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::SavePushMsgEntryL")
-
- __ASSERT_DEBUG( ActionFlag(),
- ContHandPanic( EPushContHandPanUnspecSlAction ) );
- __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
- ContHandPanic( EPushContHandPanUnspecSlHref ) );
- __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
- ContHandPanic( EPushContHandPanAlreadyInitialized ) );
-
- CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
- ( *iHrefBuf, KUidWapPushMsgSL );
- TInt matchingListCount = matchingUrlList->Count();
- PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
-
- // Only one SL is allowed with the same Url, so leave the first and
- // delete the others.
- __ASSERT_DEBUG( matchingListCount <= 1,
- ContHandPanic( EPushContHandPanTooManySl ) );
- if ( 1 < matchingListCount )
- {
- for ( TInt count = 1; count < matchingListCount; ++count )
- {
- iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
- }
- matchingListCount = 1; // Only one remains.
- }
-
- TBool saveNewMsg = ETrue; // Save by default.
- TMsvId matchingEntryId = KMsvNullIndexEntryId;
-
- // Apply reception rules.
- if ( matchingListCount == 0 )
- {
- // Nothing to do.
- saveNewMsg = ETrue;
- }
- else
- {
- CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
- CleanupStack::PushL( matchingSl );
-
- matchingEntryId = matchingUrlList->At(0);
- matchingSl->RetrieveL( *iMsvSession, matchingEntryId );
-
- if ( iPushMsgAction <= matchingSl->Action() )
- {
- // Discard the new SL: it does not have higher
- // action value as the existing.
- PUSHLOG_WRITE(" SL not higher action - discarded")
- saveNewMsg = EFalse;
- }
- else
- {
- // The new has greater action attribute.
- // Update the old SL with the new data.
- saveNewMsg = ETrue;
- }
-
- CleanupStack::PopAndDestroy( matchingSl ); // matchingSl
- }
-
- CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
-
- // Store message if not marked for deletion.
- if ( saveNewMsg )
- {
- StoreSLMessageL( matchingEntryId );
- }
-
- iState = EDone;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSLContentHandler::SavePushMsgEntryL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::StoreSLMessageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::StoreSLMessageL( TMsvId aMatchingEntryId )
- {
- PUSHLOG_ENTERFN("CSLContentHandler::StoreSLMessageL")
-
- CSLPushMsgEntry* slEntry = CSLPushMsgEntry::NewL();
- CleanupStack::PushL( slEntry );
-
- if ( aMatchingEntryId == KMsvNullIndexEntryId )
- {
- PUSHLOG_WRITE(" No matching SL")
- // Save new to Inbox.
- SetSlPushMsgEntryFieldsL( *slEntry );
- iSavedMsgId =
- slEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
- // Set the entry to read and *not* new state depending on iSaveAsRead.
- if ( !iSaveAsRead )
- {
- // Do nothing SaveL saves it as unread.
- }
- else
- {
- // SaveL owerrides the read settings (iEntry.SetUnread(ETrue);)
- // that we set in SetSlPushMsgEntryFieldsL, thus the read status
- // has to be reset manually here:
- iWapPushUtils->MarkServiceUnreadL( iSavedMsgId, EFalse );
- }
- }
- else
- {
- PUSHLOG_WRITE(" Matching SL")
- slEntry->RetrieveL( *iMsvSession, aMatchingEntryId );
- SetSlPushMsgEntryFieldsL( *slEntry );
-
- slEntry->UpdateL( *iMsvSession );
- iSavedMsgId = aMatchingEntryId;
- // Note that UpdateL does not change the read/unread status.
-
- // Move the updated msg back to Inbox.
- TMsvId parentId = slEntry->Entry().Parent();
- if ( parentId != KMsvGlobalInBoxIndexEntryId )
- {
- PUSHLOG_WRITE(" Moving back to Inbox")
- CMsvEntry* cParent = iMsvSession->GetEntryL( parentId );
- CleanupStack::PushL( cParent );
- cParent->MoveL( iSavedMsgId, KMsvGlobalInBoxIndexEntryId );
- CleanupStack::PopAndDestroy( cParent ); // cParent
- }
- }
-
-#ifdef __TEST_LOG__
- _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
- _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
- TBuf<32> dateHolder;
- TBuf<32> timeHolder;
- TTime recDateTime = slEntry->ReceivedDate();
- recDateTime.FormatL( dateHolder, KDateFormat );
- recDateTime.FormatL( timeHolder, KTimeFormat );
- PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
- PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
-#endif // __TEST_LOG__
-
- CleanupStack::PopAndDestroy( slEntry ); // slEntry
-
- PUSHLOG_LEAVEFN("CSLContentHandler::StoreSLMessageL")
- }
-
-
-// ---------------------------------------------------------
-// CSLContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg,
- TRequestStatus& aStatus )
- {
- PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 2")
-
- __ASSERT_DEBUG( aPushMsg != NULL,
- ContHandPanic( EPushContHandPanMsgNull ) );
-
-#ifdef __TEST_LOG__
- TPtrC8 bodyPtr;
- aPushMsg->GetMessageBody( bodyPtr );
- PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
- iMessage = aPushMsg;
- iAcknowledge = ETrue;
- SetConfirmationStatus( aStatus );
-
- iState = EGarbageCollecting;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 2")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg )
- {
- PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 1")
-
- __ASSERT_DEBUG( aPushMsg != NULL,
- ContHandPanic( EPushContHandPanMsgNull ) );
-
-#ifdef __TEST_LOG__
- TPtrC8 bodyPtr;
- aPushMsg->GetMessageBody( bodyPtr );
- PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
- iAcknowledge = EFalse;
- iMessage = aPushMsg;
-
- iState = EGarbageCollecting;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 1")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CancelHandleMessage()
- {
- Cancel();
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CPushHandlerBase_Reserved1()
- {
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CPushHandlerBase_Reserved2()
- {
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CSLContentHandler::DoCancel()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::DoCancel")
- // TODO Cancel outstanding requests!
- Complete( KErrCancel );
- PUSHLOG_LEAVEFN("CSLContentHandler::DoCancel")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::RunL()
- {
- PUSHLOG_ENTERFN("CSLContentHandler::RunL")
-
- // Handle errors in RunError().
- PUSHLOG_WRITE_FORMAT(" iStatus.Int(): %d",iStatus.Int())
-
- switch ( iState )
- {
- case EGarbageCollecting:
- {
- CollectGarbageL();
- break;
- }
-
-
- case EFilteringAndParsing:
- {
- if(iPushSLEnabled)
- {
- if ( !FilterPushMsgL() )
- {
- // It did not pass the filter. Done.
- iState = EDone;
- IdleComplete();
- }
- else
- {
- // Continue.
- TInt ret = KErrNone;
- PUSHLOG_WRITE("CSLContentHandler::RunL : before trapping parsing.")
- TRAP(ret, ParsePushMsgL());
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunL : after trapping parsing. ret = %d", ret)
- if ( ret != KErrNone)
- {
- PUSHLOG_WRITE("CSLContentHandler::RunL : Parsing failed. discarding message.")
- iState = EDone;
- IdleComplete();
- }
- }
- }
- break;
- }
-
- case EProcessing:
- {
- if(iPushSLEnabled)
- ProcessingPushMsgEntryL();
- break;
- }
-
- case EFetching:
- {
- if(iPushSLEnabled)
- FetchPushMsgEntryL();
- break;
- }
-
- case EFetchCompleted:
- {
- if(iPushSLEnabled)
- FetchCompletedL();
- break;
- }
-
- case ESavePushMsgEntry:
- {
- if(iPushSLEnabled)
- SavePushMsgEntryL();
- break;
- }
-
-
- case EDone:
- {
- PUSHLOG_WRITE("CSLContentHandler EDone")
- Complete( KErrNone );
- break;
- }
- default:
- {
- // JIC.
- PUSHLOG_WRITE("CSLContentHandler default EDone")
- Complete( KErrNone );
- break;
- }
- }
-
- PUSHLOG_LEAVEFN("CSLContentHandler::RunL")
- }
-
-// ---------------------------------------------------------
-// CSLContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CSLContentHandler::RunError( TInt aError )
- {
- PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunError: %d",aError)
-
- iState = EDone;
- Complete( aError );
- return KErrNone;
- }
-
--- a/pushmtm/Plugins/PushContentHandler/CSLContentHandler.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,303 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CSLContentHandler.
-*
-*/
-
-
-
-#ifndef __CSLCONTENTHANDLER_H__
-#define __CSLCONTENTHANDLER_H__
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushMtmDef.hrh"
-#include "PushContentHandlerDef.hrh"
-#include <E32Base.h>
-#include <bldvariant.hrh>
-#include <nw_dom_attribute.h>
-
-// CONSTANTS
-
-const TUid KUidPushSLContentHandler = { EUidPushSLContentHandler };
-_LIT( KSLContentHandlerData, "text/vnd.wap.sl||application/vnd.wap.slc" );
-
-// FORWARD DECLARATIONS
-
-class CSLPushMsgEntry;
-class CPushMtmAutoFetchOperation;
-
-// CLASS DECLARATION
-
-/**
-* CSLContentHandler Handles Service Loading Content
-*
-* This handler takes ownership of the SL message and processes it
-* according to the Reception rules
-* [WAP Service Loading version 31-July-2001]
-* and either stores the message or deletes it.
-* Also S60 specific requirements are applied.
-*
-* NB. If __SERIES60_PUSH_SL is not defined, then all SL push messages are
-* discarded!
-*/
-class CSLContentHandler : public CPushContentHandlerBase
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor. Leaves on failure.
- * @return The constructed object.
- */
- static CSLContentHandler* NewL();
-
- /**
- * D'tor.
- */
- virtual ~CSLContentHandler();
-
- private: // Constructors
-
- /**
- * Constructor.
- */
- CSLContentHandler();
-
- /**
- * Symbian OS constructor.
- */
- void ConstructL();
-
- private: // New functions
-
- /**
- * Do Garbage Collection synchronously when a new message arrives.
- * @return None.
- */
- void CollectGarbageL();
-
-
- /**
- * Parse the Push SL message using XML parser.
- * If Push Message is an SLC then convert it first to text using
- * CWbxmlConverterUtil class.
- * @return None.
- */
- void ParsePushMsgL();
-
- /**
- * Parse an attribute of the sl element.
- * @param aAttrHandle The attribute to be parsed.
- * @return None.
- */
- void ParseSlAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
-
- /**
- * Convert the action string to a representative numeric value to
- * facilitate storing the message.
- * @param aActionString The attribute value indicating the action level
- * eg 'execute-high'
- * @return TUint: a value representing the action type.
- */
- TUint ConvertActionString( const TDesC8& aActionString ) const;
-
- /**
- * Set SL entry fields prior to storing message.
- * @param aSlPushMsgEntry Entry represents message format to use when
- * storing it.
- * @return None.
- */
- void SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& aSlPushMsgEntry ) const;
-
- /**
- * Check if the message has to be discarded due to empty Href or
- * there is a message with higher acton value.
- * @return None.
- */
- void ProcessingPushMsgEntryL();
-
- /**
- * Handle Service invocation: decide what to do next according to
- * action value and push settings.
- * @return Next state.
- */
- TInt HandleServiceInvocationL() const;
-
- /**
- * Download the indicated content.
- * In case of execute-high use the Browser to download the service.
- * In case of cache use the fetch operation to download the service
- * silently.
- * @return None.
- */
- void FetchPushMsgEntryL();
-
- /**
- * Start the Browser and instruct it to download the content
- * indicated by the Sl's URI.
- * @return None.
- */
- void StartBrowserL();
-
- /**
- * Check the result of the SL-cache downloading. If it fails, save the
- * message. If it succeeds, discard the message.
- * @return None.
- */
- void FetchCompletedL();
-
- /**
- * Apply reception rules and save the push message.
- * If a message already exists with the same URL,
- * it is saved only if it has a higher action value.
- * @return None.
- */
- void SavePushMsgEntryL();
-
- /**
- * Store the new message to Messaging.
- * @param aMatchingEntryId ID of the matching SI entry.
- * @return None.
- */
- void StoreSLMessageL( TMsvId aMatchingEntryId );
-
- // Attribute flags
-
- /**
- * Flag whether message has an action attribute
- * @param aAction boolean to set flag to -
- * ETrue for action attrib present
- * EFalse for no action attrib.
- */
- inline void SetActionFlag( TBool aAction );
-
- /**
- * Check status of action flag to see if message has an action
- * attribute.
- * @return TBool ETrue - action attribute present in message
- * EFalse - no action attribute.
- */
- inline TBool ActionFlag() const;
-
- /**
- * Flag whether message has a Href attribute
- * @param aHref boolean to set flag to -
- * ETrue for Href attrib present
- * EFalse for no href attrib
- */
- inline void SetHrefFlag( TBool aHref );
-
- /**
- * Check status of href flag to see if message has an href attribute.
- * @return TBool
- * ETrue - href attribute present in message
- * EFalse - no href attribute
- */
- inline TBool HrefFlag() const;
-
-
- private: // Methods from CPushHandlerBase
-
- /**
- * HandleMessage Async. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * @param aPushMsg CPushMessage to process.
- * @param aStatus Request status variable for use in asynchronous
- * operations.
- * @return None.
- */
- void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
-
- /**
- * HandleMessage Sync. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * Initial State: Set data members then go to the next state
- * @param aPushMsg CPushMessage to process.
- */
- void HandleMessageL(CPushMessage* aPushMsg);
-
- /**
- * Same functionality as DoCancel()
- */
- void CancelHandleMessage();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved1();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved2();
-
- private: // Methods from CActive
-
- /**
- * Terminates any activity.
- * @return None.
- */
- void DoCancel();
-
- /**
- * Step through the various representative states for handling a
- * message.
- * @return None.
- */
- void RunL();
-
- /**
- * This is invoked when RunL Leaves with an error so clean up and
- * return.
- * @return Error code to scheduler.
- */
- TInt RunError( TInt aError );
-
- private: // Data
-
- enum
- {
- EAction = 0x01,
- EHref = 0x02
- };
-
- enum TState ///< States of this state machine.
- {
- EGarbageCollecting,
- EFilteringAndParsing,
- EProcessing,
- EFetching,
- EFetchCompleted,
- ESavePushMsgEntry,
- EDone
- };
-
- TMsvId iSavedMsgId; ///< ID of the saved message.
- TUint32 iAttributes; ///< Attribute indication (set or not).
- TInt iPushMsgAction; ///< SL action.
- HBufC* iHrefBuf; ///< Href attribute. Has.
-
- /// Asynchronous fetch operation that downloads the SL-cache. Owned.
- CPushMtmAutoFetchOperation* iFetchOp;
-
- NW_Uint32 iCharEncoding; ///< Char encoding of the current msg.
- TBool iSaveAsRead; ///< Mark the message 'read' after saving.
- TInt iPushSLEnabled;
- };
-
-#include "CSLContentHandler.inl"
-
-#endif // __CSLCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CSLContentHandler.inl Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Inline functions.
-*
-*/
-
-
-
-
-inline void CSLContentHandler::SetActionFlag( TBool aAction )
- {
- if ( aAction )
- {
- iAttributes |= EAction;
- }
- else
- {
- iAttributes &=~ EAction;
- }
- }
-
-inline TBool CSLContentHandler::ActionFlag() const
- {
- return iAttributes & EAction;
- }
-
-inline void CSLContentHandler::SetHrefFlag( TBool aHref )
- {
- if ( aHref )
- {
- iAttributes |= EHref;
- }
- else
- {
- iAttributes &=~ EHref;
- }
- }
-
-inline TBool CSLContentHandler::HrefFlag() const
- {
- return iAttributes & EHref;
- }
-
-
--- a/pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,694 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CUnknownContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CUnknownContentHandler.h"
-#include "PushMtmUtil.h"
-#include "PushMtmLog.h"
-#include "PushContentHandlerPanic.h"
-#include "StringResourceReader.h"
-#include <msvids.h>
-#ifdef __SERIES60_PUSH_SP
-#include <CUnknownPushMsgEntry.h>
-#include <BioDB.h> // BIO Message Database and message query methods
-#include <gsmubuf.h> // CSmsBuffer class
-#include <gsmumsg.h> // CSmsMessage class
-#include <smuthdr.h> // CSmsHeader class
-#include <smut.h> // TSmsUtilities class
-#include <txtrich.h> // CRichText class
-#include <biouids.h> // KUidBioMessageTypeMtm const
-#include <apgcli.h>
-#include <apmrec.h>
-#include <DocumentHandler.h>
-#include <Uri16.h>
-#include <UriUtils.h>
-#include <msvuids.h> // KUidMsvMessageEntry const
-#include <PushMtmUi.rsg>
-
-// SMUT Unbranch
-#include <csmsgetdetdescinterface.h>
-
-#endif // __SERIES60_PUSH_SP
-
-// CONSTANTS
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::NewL
-// ---------------------------------------------------------
-//
-CUnknownContentHandler* CUnknownContentHandler::NewL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::NewL")
-
- CUnknownContentHandler* self = new (ELeave) CUnknownContentHandler;
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::NewL")
- return self;
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::~CUnknownContentHandler
-// ---------------------------------------------------------
-//
-CUnknownContentHandler::~CUnknownContentHandler()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::~CUnknownContentHandler")
-
- Cancel();
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::~CUnknownContentHandler")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CUnknownContentHandler
-// ---------------------------------------------------------
-//
-CUnknownContentHandler::CUnknownContentHandler()
-: CPushContentHandlerBase(),
- iSavedMsgId( KMsvNullIndexEntryId )
- {
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::ConstructL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::ConstructL")
-
- CPushContentHandlerBase::ConstructL();
- // Added to Active Scheduler.
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::ConstructL")
- }
-
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CollectGarbageL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CollectGarbageL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::CollectGarbageL")
-
- DoCollectGarbageL();
-
-#ifdef __SERIES60_PUSH_SP
- iState = EFilteringAndProcessing;
-#else // __SERIES60_PUSH_SP
- // Do nothing - message is discarded.
- iState = EDone;
-#endif // __SERIES60_PUSH_SP
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::CollectGarbageL")
- }
-
-#ifdef __SERIES60_PUSH_SP
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::ProcessingPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::ProcessingPushMsgEntryL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
-
- const TBool bioMsg( BioMessageTypeL() );
- if ( bioMsg )
- {
- PUSHLOG_WRITE(" BIO message");
- // convert to bio format & save
- SaveBioMessageEntryL();
- }
- else
- {
- PUSHLOG_WRITE(" Not BIO message");
-
- // Check if the received content is supported.
- RApaLsSession apaLs;
- User::LeaveIfError( apaLs.Connect() );
- CleanupClosePushL<RApaLsSession>( apaLs );
-
- // Try to find out the data type.
- TPtrC contentTypePtr;
- iMessage->GetContentType( contentTypePtr );
- HBufC8* contentT8 = HBufC8::NewMaxLC( contentTypePtr.Length() );
- contentT8->Des().Copy( contentTypePtr );
- TDataRecognitionResult result;
- User::LeaveIfError( apaLs.RecognizeData( KNullDesC(),
- *contentT8,
- result ) );
- CleanupStack::PopAndDestroy( contentT8 ); // contentT8
-
- CDocumentHandler* docHandler = CDocumentHandler::NewLC( NULL );
- TBool supported = docHandler->CanOpenL( result.iDataType );
-
- CleanupStack::PopAndDestroy( 2, &apaLs ); // docHandler, apaLs
-
- // Save only supported msg.
- if ( supported )
- {
- // create unknown push message entry and save
- SaveUnknownPushMsgEntryL();
- }
- }
-
- iState = EDone;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::BioMessageTypeL
-// ---------------------------------------------------------
-//
-TBool CUnknownContentHandler::BioMessageTypeL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::BioMessageTypeL")
-
- // need to create local RFs for BIO otherwise raises exception
- RFs localFS;
- CleanupClosePushL( localFS );
- User::LeaveIfError( localFS.Connect() );
- CBIODatabase* bioDB = CBIODatabase::NewLC( localFS );
-
- TPtrC contentTypePtr;
- iMessage->GetContentType( contentTypePtr );
-
- iBioMsgUID = KNullUid;
- TBool isBio = EFalse;
- // IsBioMessageL returns KErrNone if found or KErrNotFound if not found
- if ( bioDB->IsBioMessageL( EBioMsgIdIana,
- contentTypePtr,
- NULL,
- iBioMsgUID ) == KErrNone )
- {
- isBio = ETrue;
- }
-
- CleanupStack::PopAndDestroy( 2 ); // bioDB, localFS
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::BioMessageTypeL")
- return isBio;
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SaveBioMessageEntryL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::SaveBioMessageEntryL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::SaveBioMessageEntryL")
-
- // create sms message from CPushMessage and then save message
- RFs fileSession;
- User::LeaveIfError(fileSession.Connect());
- CleanupClosePushL(fileSession);
- CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
- CleanupStack::PushL(smsBuffer);
-
- CSmsMessage* smsMessage = CSmsMessage::NewL( fileSession,
- CSmsPDU::ESmsDeliver,
- smsBuffer );
- CleanupStack::PushL( smsMessage );
-
- smsMessage->SmsPDU().SetAlphabet( TSmsDataCodingScheme::ESmsAlphabet8Bit );
-
- TPtrC8 fieldValue;
-
- if ( iMessage->GetBinaryHeaderField( EHttpFrom, fieldValue ) ||
- iMessage->GetBinaryHeaderField( EHttpXWapInitiatorURI, fieldValue ) ||
- iMessage->GetBinaryHeaderField( EHttpContentLocation, fieldValue ) )
- {
- // Convert 8 bit to 16 bit
- HBufC* tempAddr = HBufC::NewLC( fieldValue.Length() );
- tempAddr->Des().Copy( fieldValue );
-
- smsMessage->SmsPDU().SetToFromAddressL( *tempAddr );
- CleanupStack::PopAndDestroy( tempAddr );
- }
-
- if ( iMessage->GetMessageBody( fieldValue ) )
- {
- HBufC* tempBody = HBufC::NewLC( fieldValue.Length() );
- tempBody->Des().Copy( fieldValue );
-
- smsBuffer->InsertL( 0, *tempBody );
- CleanupStack::PopAndDestroy( tempBody );
- }
-
- CleanupStack::Pop( 2 ); //smsBuffer, smsMessage
-
- StoreMsgL( smsMessage ); // destroys CSmsMessage (contains smsBuffer)
- CleanupStack::PopAndDestroy( &fileSession );
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveBioMessageEntryL")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::StoreMsgL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::StoreMsgL( CSmsMessage* aSmsMsg )
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::StoreMsgL")
-
- CleanupStack::PushL( aSmsMsg );
-
- // Create a CSmsHeader based on this message. smsHdr takes ownership of aSmsMsg
- CSmsHeader* smsHdr = CSmsHeader::NewL( aSmsMsg );
- CleanupStack::Pop( aSmsMsg );
- CleanupStack::PushL( smsHdr );
-
- // get root entry
- CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
- CleanupStack::PushL( msvEntry );
-
- // create an invisible blank entry
- TMsvEntry entry;
- entry.iType = KUidMsvMessageEntry;
- entry.SetVisible( EFalse );
- entry.SetInPreparation( ETrue );
- entry.SetReadOnly( EFalse );
- entry.SetUnread( ETrue );
-
- TMsvId serviceId = SetBioServiceIdL();
- TBuf<KSmsDescriptionLength> description;
-
-// SMUT Unbranch
- CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
- CleanupStack::PushL( smsPlugin );
-
- if ( iBioMsgUID != KNullUid )
- {
- // sets entry with values passed in
- TSmsUtilities::PopulateMsgEntry( entry,
- *aSmsMsg,
- serviceId,
- KUidBIOMessageTypeMtm );
- entry.iBioType = iBioMsgUID.iUid;
-
- // Look up and set the description
- TInt index;
- CBIODatabase* bioDB = CBIODatabase::NewLC( msvEntry->Session().FileSession() );
- bioDB->GetBioIndexWithMsgIDL( iBioMsgUID, index );
- description.Copy( bioDB->BifReader(index).Description() );
- entry.iDescription.Set( description );
- CleanupStack::PopAndDestroy(); // bioDB
- }
- else
- {
- // sets entry with values passed in
- TSmsUtilities::PopulateMsgEntry( entry, *aSmsMsg, serviceId );
-
- // Look up and set the description
-// SMUT Unbranch
- smsPlugin->GetDescription( *aSmsMsg, description );
- entry.iDescription.Set( description );
- }
-
- // Set the details
- TBuf<KSmsDetailsLength> details;
- TInt err = smsPlugin->GetDetails( msvEntry->Session().FileSession(),
- *aSmsMsg,
- details );
- if ( !err )
- {
- entry.iDetails.Set( details );
- }
-
-// SMUT Unbranch
- CleanupStack::PopAndDestroy( smsPlugin );
-
- // Store entry in inbox
- msvEntry->SetEntryL( KMsvGlobalInBoxIndexEntryId );
- msvEntry->CreateL( entry );
- msvEntry->Session().CleanupEntryPushL( entry.Id() );
- msvEntry->SetEntryL( entry.Id() );
-
- // Save the message
- CMsvStore* store = msvEntry->EditStoreL();
- CleanupStack::PushL( store );
-
- // Save off the CSmsHdr
- smsHdr->StoreL( *store );
-
- // Save the body
-
- // Create and fill a CRichText object to save to store..
- CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
- CleanupStack::PushL( paraFormatLayer );
- CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
- CleanupStack::PushL( charFormatLayer );
- CRichText* richText = CRichText::NewL( paraFormatLayer, charFormatLayer );
- CleanupStack::PushL( richText );
- HBufC* bufBody=HBufC::NewLC( aSmsMsg->Buffer().Length() );
- TPtr bufBodyPtr = bufBody->Des();
- aSmsMsg->Buffer().Extract( bufBodyPtr, 0, aSmsMsg->Buffer().Length() );
- richText->InsertL( 0, bufBodyPtr );
- store->StoreBodyTextL( *richText );
- CleanupStack::PopAndDestroy( 4 ); //bufBody, richText, charFormatLayer, paraFormatLayer
-
- store->CommitL();
- entry.SetReadOnly( ETrue );
- entry.SetVisible( ETrue );
- entry.SetInPreparation( EFalse );
- msvEntry->ChangeL( entry );
-
- CleanupStack::PopAndDestroy(); //store
- msvEntry->Session().CleanupEntryPop(); //entry
- CleanupStack::PopAndDestroy( 2 ); //msvEntry, smsHdr
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::StoreMsgL")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SetBioServiceIdL
-// ---------------------------------------------------------
-//
-TMsvId CUnknownContentHandler::SetBioServiceIdL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::SetBioServiceIdL")
-
- CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
-
- CleanupStack::PushL( msvEntry );
-
- TMsvId serviceId = KMsvNullIndexEntryId;
- TRAPD( err, TSmsUtilities::ServiceIdL( *msvEntry,
- serviceId,
- KUidBIOMessageTypeMtm ) );
- if ( err == KErrNotFound )
- {
- serviceId = KMsvLocalServiceIndexEntryId;
- err = KErrNone;
- }
-
- CleanupStack::PopAndDestroy(); //msvEntry
- User::LeaveIfError( err );
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::SetBioServiceIdL")
- return serviceId;
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SaveUnknownPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::SaveUnknownPushMsgEntryL()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
-
- CUnknownPushMsgEntry* unknownPushMsgEntry =
- CUnknownPushMsgEntry::NewL();
- CleanupStack::PushL( unknownPushMsgEntry );
-
- SetUnknownPushMsgEntryFieldsL( *unknownPushMsgEntry );
-
- iSavedMsgId = unknownPushMsgEntry->SaveL( *iMsvSession,
- KMsvGlobalInBoxIndexEntryId );
-
- CleanupStack::PopAndDestroy( unknownPushMsgEntry ); // unknownPushMsgEntry
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
- ( CUnknownPushMsgEntry& aUnknownPushMsgEntry )
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
-
- // Set all the relevant fields
-
- // Get server address.
- TPtrC8 srvAddress;
- if ( iMessage->GetServerAddress( srvAddress ) )
- {
- aUnknownPushMsgEntry.SetFromL( srvAddress );
- }
-
- TPtrC contentTypePtr;
- iMessage->GetContentType( contentTypePtr );
- aUnknownPushMsgEntry.SetContentTypeL( contentTypePtr );
-
- TPtrC8 msgBodyPtr;
- iMessage->GetMessageBody( msgBodyPtr );
- aUnknownPushMsgEntry.SetMessageDataL( msgBodyPtr );
-
- // First line in Inbox: TMsvEntry::iDetails.
- if ( srvAddress.Length() == 0 )
- {
- // Read from resource.
- HBufC* details =
- iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
- aUnknownPushMsgEntry.SetMsgDetailsL( *details );
- CleanupStack::PopAndDestroy( details );
- }
- else
- {
- // Convert the "From" information to the format required by the UI
- // spec and then decode it.
- HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
- CleanupStack::PushL( details );
- HBufC* convertedFrom =
- CPushMtmUtil::ConvertUriToDisplayFormL( *details );
- CleanupStack::PushL( convertedFrom );
- //
- aUnknownPushMsgEntry.SetMsgDetailsL( *convertedFrom );
- //
- CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
- }
-
- // Second line in Inbox: TMsvEntry::iDescription.
- TPtrC8 contentUriPtr;
- iMessage->GetBinaryHeaderField( EHttpXWapContentURI, contentUriPtr );
- // Copy the 8-bit descriptor into a unicode one.
- HBufC* contentUri = HBufC::NewMaxLC( contentUriPtr.Length() );
- contentUri->Des().Copy( contentUriPtr );
- // Extract file name from X-wap-content-uri.
- HBufC* fileName = FileNameFromUriL( *contentUri );
- CleanupStack::PopAndDestroy( contentUri ); // contentUri
- CleanupStack::PushL( fileName );
-
- if ( fileName->Length() == 0 )
- {
- // TODO: Read from resource.
- //"Unknown content type" qtn_wap_push_msg_content_not_supported
- }
- else
- {
- aUnknownPushMsgEntry.SetMsgDescriptionL( *fileName );
- }
-
- CleanupStack::PopAndDestroy( fileName ); // fileName
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::FileNameFromUriL
-// ---------------------------------------------------------
-//
-HBufC* CUnknownContentHandler::FileNameFromUriL( const TDesC& aUri ) const
- {
- TUriParser pars;
- User::LeaveIfError( pars.Parse( aUri ) );
-
- HBufC* res = NULL;
- if ( pars.IsPresent( EUriPath ) )
- {
- TPtrC path = pars.Extract( EUriPath );
- // Extract the remaining text after the last slash character.
- // If the path contains a file name, then it has to contain
- // a slash also, so if there is no slash then it's sure that there
- // is no file name in it.
- TInt index = path.LocateReverse( TChar('/') );
- if ( index < 0 )
- {
- // No file name.
- }
- else if ( ++index < path.Length() ) // If not at the end...
- {
- // Last slash found. Extract the text after the slash.
- res = path.Mid( index ).AllocL();
- }
- }
-
- if ( !res )
- {
- res = KNullDesC().AllocL();
- }
-
- return res;
- }
-
-#endif // __SERIES60_PUSH_SP
-
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg,
- TRequestStatus& aStatus )
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
-
- __ASSERT_DEBUG( aPushMsg != NULL,
- ContHandPanic( EPushContHandPanMsgNull ) );
-
- iMessage = aPushMsg;
- iAcknowledge = ETrue;
- SetConfirmationStatus( aStatus );
- iState = EGarbageCollecting;
- IdleComplete();
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg )
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
-
- __ASSERT_DEBUG( aPushMsg != NULL,
- ContHandPanic( EPushContHandPanMsgNull ) );
-
- iAcknowledge = EFalse;
- iMessage = aPushMsg;
- iState = EGarbageCollecting;
- IdleComplete();
-
- PUSHLOG_LEAVEFN("CUnknownContentHandler::HandleMessageL")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CancelHandleMessage()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::CancelHandleMessage")
- Cancel();
- PUSHLOG_LEAVEFN("CUnknownContentHandler::CancelHandleMessage")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CPushHandlerBase_Reserved1()
- {
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CPushHandlerBase_Reserved2
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CPushHandlerBase_Reserved2()
- {
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::DoCancel()
- {
- PUSHLOG_ENTERFN("CUnknownContentHandler::DoCancel")
- Complete( KErrCancel );
- PUSHLOG_LEAVEFN("CUnknownContentHandler::DoCancel")
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::RunL()
- {
- // Handle errors in RunError().
- PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
- User::LeaveIfError( iStatus.Int() );
-
- // use active state machine routine to manage activites:
- switch ( iState )
- {
- case EGarbageCollecting:
- {
- CollectGarbageL();
- break;
- }
-
-#ifdef __SERIES60_PUSH_SP
-
- case EFilteringAndProcessing:
- {
- if ( !FilterPushMsgL() )
- {
- // It did not pass the filter. Done.
- iState = EDone;
- IdleComplete();
- }
- else
- {
- // Continue.
- ProcessingPushMsgEntryL();
- }
- break;
- }
-
-#endif // __SERIES60_PUSH_SP
-
- default:
- {
- PUSHLOG_WRITE("CUnknownContentHandler default EDone")
- Complete( KErrNone );
- break;
- }
- }
- }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CUnknownContentHandler::RunError( TInt aError )
- {
- PUSHLOG_WRITE_FORMAT("CUnknownContentHandler::RunError: %d",aError)
-
- iState = EDone;
- Complete( aError );
- return KErrNone;
- }
-
--- a/pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CUnknownContentHandler.
-*
-*/
-
-
-
-#ifndef __CUNKNOWNCONTENTHANDLER_H__
-#define __CUNKNOWNCONTENTHANDLER_H__
-
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushContentHandlerDef.hrh"
-#include <E32Base.h>
-#include <bldvariant.hrh>
-
-// CONSTANTS
-
-const TUid KUidPushUnknownContentHandler = { EUidPushUnknownContentHandler };
-_LIT( KUnknownContentHandlerData, "*" );
-
-// FORWARD DECLARATIONS
-
-class CSmsMessage;
-class CUnknownPushMsgEntry;
-
-// CLASS DECLARATION
-
-/**
-* CUnknownContentHandler provides the default plugin when the
-* specific plugin for a data type cannot be matched.
-*
-* If the feature flag __SERIES60_PUSH_SP is defined, then all this
-* kind of messages are discarded on reception.
-*/
-class CUnknownContentHandler : public CPushContentHandlerBase
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor. Leaves on failure.
- * @return The constructed object.
- */
- static CUnknownContentHandler* NewL();
-
- /**
- * Destructor.
- */
- virtual ~CUnknownContentHandler();
-
- private: // Constructors
-
- /**
- * Constructor.
- */
- CUnknownContentHandler();
-
- /**
- * Symbian OS constructor.
- */
- void ConstructL();
-
- private: // New functions
-
- /**
- * Do Garbage Collection synchronously.
- * @return None.
- */
- void CollectGarbageL();
-
-#ifdef __SERIES60_PUSH_SP
-
- /**
- * Create/Saving Push Msg Entry in the appropriate message store.
- * First query the type of push message to check if it is a known BIO
- * message type:
- * If it is then
- * save Push Message as appropriate BIO message
- * else
- * save as UnknownPushMsgEntry.
- * @return None.
- */
- void ProcessingPushMsgEntryL();
-
- /**
- * Check if the given Push Message, which is now owned by the handler,
- * is a BIO Messsage (setting the member variable iBioMsgUID if it is)
- * and returning a boolean to indicate success (ETrue) or EFalse otherwise.
- * @return TBool
- * ETrue - push message is a BIO message
- * EFalse - push message is not BIO message
- */
- TBool BioMessageTypeL();
-
- /**
- * Save CPushMessage as the relevant BIO message type.
- * Firstly create SMS message and use CPushMessage as
- * source to populate SMS. Then save SMS message.
- * @return None.
- */
- void SaveBioMessageEntryL();
-
- /**
- * Create CMsvEntry for sms messsage, stores the entry and
- * then delete entry once done.
- * @param aMessage CSmsMessage which embodies details of CPushMessage.
- */
- void StoreMsgL( CSmsMessage* aSmsMsg );
-
- /**
- * Set the service id for Bio messaging
- * @return TMsvId The service id for the message store.
- */
- TMsvId SetBioServiceIdL();
-
- /**
- * Save CPushMessage as a CUnknownPushMsgEntry
- * @return None.
- */
- void SaveUnknownPushMsgEntryL();
-
- /**
- * Sets the Unknown Push Message Entry Fields from the data in
- * the received CPushMessage:
- * @param aUnknownPushMsgEntry CUnknownPushMsgEntry to populate with
- * CPushMessage details.
- */
- void SetUnknownPushMsgEntryFieldsL( CUnknownPushMsgEntry&
- aUnknownPushMsgEntry );
-
- /**
- * Extract the file name from the URI.
- * @param aUri The URI.
- * @return The file name part or an empty string.
- */
- HBufC* FileNameFromUriL( const TDesC& aUri ) const;
-
-#endif // __SERIES60_PUSH_SP
-
- private: // Methods from CPushHandlerBase
-
- /**
- * HandleMessage Async. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * @param aPushMsg CPushMessage to process.
- * @param aStatus Request status variable for use in asynchronous
- * operations.
- * @return None.
- */
- void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
-
- /**
- * HandleMessage Sync. Version. Takes ownership of Push Message and
- * sets self active to continue processing message.
- * Initial State: Set data members then go to the next state
- * @param aPushMsg CPushMessage to process.
- */
- void HandleMessageL( CPushMessage* aPushMsg );
-
- /**
- * Same functionality as DoCancel()
- */
- void CancelHandleMessage();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved1();
-
- /**
- * Reserved function.
- */
- void CPushHandlerBase_Reserved2();
-
- private: // Methods from CActive
-
- /**
- * Cancels the handling of the message and revokes the active status
- * of the handler
- */
- void DoCancel();
-
- /**
- * Handler States:
- * EFilteringAndProcessing - Filter new msg according to Service
- * message settings and Convert CPushMessage to a
- * format to save and save the message (either as Bio
- * msg or UnknownPushMsgEntry)
- * EDone - Clean up, complete observer
- */
- void RunL();
-
- /**
- * This is invoked when RunL Leaves with an error.
- * Cleans up and returns.
- * @param aError Error passed into this function
- */
- TInt RunError( TInt aError );
-
- private: // Data
-
- enum TState
- {
- EGarbageCollecting,
- EFilteringAndProcessing,
- EDone
- };
-
- TMsvId iSavedMsgId; ///< ID of the saved message.
- TUid iBioMsgUID; ///< BIO msg UID.
- };
-
-#endif // __CUNKNOWNCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerDef.hrh Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Macro definitions and enums for the Push Content Handlers.
-*
-*/
-
-
-
-#ifndef PUSHCONTENTHANDLERDEF_HRH
-#define PUSHCONTENTHANDLERDEF_HRH
-
-
-/// PushContentHandler DLL.
-#define EUidPushContentHandlerDll 0x101F854C
-
-/// Implementation UIDs.
-#define EUidPushUnknownContentHandler 0x101F854D
-#define EUidPushSIContentHandler 0x101F854E
-#define EUidPushSLContentHandler 0x101F854F
-#define EUidPushCOContentHandler 0x10008D47
-#define EUidPushMultiPartMixedContentHandler 0x101F8550
-#define EUidPushMultiPartRelAndAltContentHandler 0x101F8551
-
-/** PushContentHandler Interface UID (defined by Symbian).
-* See CContentHandlerBase.h, KUidPushContentHandlerBase. */
-#define EUidPushContentHandlerBase 0x101F3E5E
-
-
-#endif // PUSHCONTENTHANDLERDEF_HRH
-
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Proxy definition.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushContentHandlerDef.hrh"
-#include "CUnknownContentHandler.h"
-#include "CSIContentHandler.h"
-#include "CSLContentHandler.h"
-#include "CCOContentHandler.h"
-#include "CMultiPartMixedContentHandler.h"
-#include "CMultiPartRelAndAltContentHandler.h"
-#include <e32std.h>
-#include <ecom/implementationproxy.h>
-
-
-const TImplementationProxy ImplementationTable[] =
- {
- IMPLEMENTATION_PROXY_ENTRY( EUidPushUnknownContentHandler, CUnknownContentHandler::NewL ),
- IMPLEMENTATION_PROXY_ENTRY( EUidPushSIContentHandler, CSIContentHandler::NewL ),
- IMPLEMENTATION_PROXY_ENTRY( EUidPushSLContentHandler, CSLContentHandler::NewL ),
- IMPLEMENTATION_PROXY_ENTRY( EUidPushCOContentHandler, CCOContentHandler::NewL ),
- IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartMixedContentHandler, CMultiPartMixedContentHandler::NewL ),
- IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartRelAndAltContentHandler, CMultiPartRelAndAltContentHandler::NewL )
- };
-
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
- {
- aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
-
- return ImplementationTable;
- }
-
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Panic utility
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushContentHandlerPanic.h"
-
-// LOCAL CONSTANTS AND MACROS
-
-_LIT( KContHandPanicString, "PushContentHandler(MTM)" );
-
-// ---------------------------------------------------------
-// ContHandPanic
-// ---------------------------------------------------------
-//
-GLDEF_C void ContHandPanic( TPushContentHandlerPanic aReason )
- {
- User::Panic( KContHandPanicString, aReason );
- }
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Panic utility
-*
-*/
-
-
-
-#ifndef PUSHCONTENTHANDLERPANIC_H
-#define PUSHCONTENTHANDLERPANIC_H
-
-// INCLUDE FILES
-
-#include <e32std.h>
-
-enum TPushContentHandlerPanic
- {
- EPushContHandPanCommandNotSupported = 1, ///< Not supported command.
- EPushContHandPanBadType, ///< Unsupported message type for an operation.
- EPushContHandPanFoldersNotSupported, ///< MTM loaded with bad message entry.
- EPushContHandPanEmptySelection, ///< Entry selection is empty.
- EPushContHandPanNotInitUrl,
- EPushContHandPanNoContext,
- EPushContHandPanAlreadyInitialized,
- EPushContHandPanBadActionValue,
- EPushContHandPanBadState,
- EPushContHandPanNoFetchOp,
- EPushContHandPanBadTransaction,
- EPushContHandPanNoSiIdAttr,
- EPushContHandPanNoCreatedAttr,
- EPushContHandPanNoActionAttr,
- EPushContHandPanTooManySi,
- EPushContHandPanTooManySl,
- EPushContHandPanMsgNull,
- EPushContHandPanBadCreatedType,
- EPushContHandPanExpiresNotOpaque,
- EPushContHandPanHrefNotString,
- EPushContHandPanClassTokenReached,
- EPushContHandPanUnexpHrefAttrVal,
- EPushContHandPanUnexpSiToken,
- EPushContHandPanUnexpSlToken,
- EPushContHandPanUnspecSiAction,
- EPushContHandPanUnspecSlAction,
- EPushContHandPanUnexpectedTimeType,
- EPushContHandPanBadExpiresType,
- EPushContHandPanBadTTimeLength,
- EPushContHandPanNoSiIdOrHrefAttr,
- EPushContHandPanUnspecSiHref,
- EPushContHandPanUnspecSlHref,
- EPushContHandPanSlMsgIdSet,
- EPushContHandPanSlMsgIdNotSet,
- EPushContHandPanFetchAlreadyInit,
- EPushContHandPanAutBadState,
- EPushContHandPanSiResNotOnStack,
- EPushContHandPanNullCharSetId,
- EPushContHandPanNullUcs2Buf
- };
-
-GLREF_C void ContHandPanic( TPushContentHandlerPanic aReason );
-
-#endif // PUSHCONTENTHANDLERPANIC_H
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Utilities
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushContentHandlerUtils.h"
-#include <e32std.h>
-#include <nw_dom_document.h>
-
-// ---------------------------------------------------------
-// NwxStatusToErrCode
-// ---------------------------------------------------------
-//
-TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode )
- {
- TInt ret( KErrGeneral );
-
- switch ( aNwxErrorCode )
- {
- case NW_STAT_SUCCESS:
- {
- ret = KErrNone;
- break;
- }
- case NW_STAT_OUT_OF_MEMORY:
- {
- ret = KErrNoMemory;
- break;
- }
- case NW_STAT_CANCELLED:
- case NW_STAT_CONN_CANCELLED:
- {
- ret = KErrCancel;
- break;
- }
- default:
- {
- ret = KErrGeneral;
- break;
- }
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------
-// RWbxmlDictionary::InitializeL
-// ---------------------------------------------------------
-//
-void RWbxmlDictionary::InitializeL( NW_Int32 aCount,
- NW_WBXML_Dictionary_t* aDictArray[] )
- {
- NW_Status_t stat = NW_STAT_SUCCESS;
- stat = NW_WBXML_Dictionary_initialize( aCount, aDictArray );
- User::LeaveIfError( NwxStatusToErrCode( stat ) );
- }
-
-// ---------------------------------------------------------
-// RWbxmlDictionary::Close
-// ---------------------------------------------------------
-//
-void RWbxmlDictionary::Close()
- {
- NW_WBXML_Dictionary_destroy();
- }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::CDocumentTreeOwner
-// ---------------------------------------------------------
-//
-CDocumentTreeOwner::CDocumentTreeOwner()
-: iDocTree( NULL )
- {
- }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::CDocumentTreeOwner
-// ---------------------------------------------------------
-//
-CDocumentTreeOwner::CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree )
-: iDocTree( aDocTree )
- {
- }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::~CDocumentTreeOwner
-// ---------------------------------------------------------
-//
-CDocumentTreeOwner::~CDocumentTreeOwner()
- {
- if ( iDocTree )
- {
- NW_DOM_DocumentNode_Delete( iDocTree );
- }
- }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::SetDocTree
-// ---------------------------------------------------------
-//
-void CDocumentTreeOwner::SetDocTree( NW_DOM_DocumentNode_t* aDocTree )
- {
- iDocTree = aDocTree;
- }
-
-// ---------------------------------------------------------
-// CStringOwner::CStringOwner
-// ---------------------------------------------------------
-//
-CStringOwner::CStringOwner()
-: iString( NULL )
- {
- }
-
-// ---------------------------------------------------------
-// CStringOwner::CStringOwner
-// ---------------------------------------------------------
-//
-CStringOwner::CStringOwner( NW_String_t* aString )
-: iString( aString )
- {
- }
-
-// ---------------------------------------------------------
-// CStringOwner::~CStringOwner
-// ---------------------------------------------------------
-//
-CStringOwner::~CStringOwner()
- {
- if ( iString )
- {
- NW_String_delete( iString );
- }
- }
-
-// ---------------------------------------------------------
-// CStringOwner::SetString
-// ---------------------------------------------------------
-//
-void CStringOwner::SetString( NW_String_t* aString )
- {
- iString = aString;
- }
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Utilities
-*
-*/
-
-
-
-#ifndef PUSHCONTENTHANDLERUTILS_H
-#define PUSHCONTENTHANDLERUTILS_H
-
-// INCLUDE FILES
-
-#include <e32def.h>
-#include <e32base.h>
-#include <nwx_status.h>
-#include <nw_wbxml_dictionary.h>
-#include <nw_encoder_stringtable.h>
-#include <nw_string_string.h>
-
-/**
-* Convert cXML status code to Symbian OS error code.
-* @param aNwxErrorCode cXML status.
-* @return Symbian OS error code.
-*/
-TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode );
-
-/*
-* The following tiny classes have been introduced to help putting C-style
-* Browser Engine structures to the Cleanup Stack, so that we can implement
-* a LEAVE-safe code.
-*/
-
-/**
-* Encapsulate WBXML dictionary initialization.
-*/
-class RWbxmlDictionary
- {
- public:
- void InitializeL( NW_Int32 aCount, NW_WBXML_Dictionary_t* aDictArray[] );
- void Close();
- };
-
-/**
-* Encapsulate a WBXML document tree.
-*/
-class CDocumentTreeOwner : public CBase
- {
- public:
- CDocumentTreeOwner();
- CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree );
- ~CDocumentTreeOwner();
- public:
- void SetDocTree( NW_DOM_DocumentNode_t* aDocTree );
- private:
- NW_DOM_DocumentNode_t* iDocTree; ///< Owned.
- };
-
-/**
-* Encapsulate an NW_String_t.
-*/
-class CStringOwner : public CBase
- {
- public:
- CStringOwner();
- CStringOwner( NW_String_t* aString );
- ~CStringOwner();
- public:
- void SetString( NW_String_t* aString );
- private:
- NW_String_t* iString; ///< Owned.
- };
-
-#endif // PUSHCONTENTHANDLERUTILS_H
-
--- a/pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,235 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CPushMtmAutoFetchOperation.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushMtmAutoFetchOperation.h"
-#include "PushMtmFetchOperation.h"
-#include "PushContentHandlerPanic.h"
-#include "PushMtmLog.h"
-
-// CONSTANTS
-
-/// Max retry.
-LOCAL_D const TInt KMaxTry = 2;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::NewL
-// ---------------------------------------------------------
-//
-CPushMtmAutoFetchOperation* CPushMtmAutoFetchOperation::NewL
- (
- const TDesC& aRequestedUrl,
- TInt aTimeDelayInSec,
- TRequestStatus& aObserverRequestStatus
- )
- {
- CPushMtmAutoFetchOperation* op =
- new (ELeave) CPushMtmAutoFetchOperation
- ( aTimeDelayInSec, aObserverRequestStatus );
- CleanupStack::PushL( op );
- op->ConstructL( aRequestedUrl );
- CleanupStack::Pop(); // op
- return op;
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation()
- {
- Cancel();
- delete iFetchOp;
- delete iRequestedUrl;
- iTimer.Close();
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::StartL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::StartL()
- {
- PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::StartL")
-
- Cancel();
-
- iTry = 0;
- iState = EFetch;
-
- SetActive();
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone );
-
- PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::StartL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
-
- (
- TInt aTimeDelayInSec,
- TRequestStatus& aObserverRequestStatus
- )
-: CActive( EPriorityStandard ),
- iObserver( aObserverRequestStatus ),
- iState( EInit ),
- iTimeDelayInSec( aTimeDelayInSec )
- {
- CActiveScheduler::Add( this );
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::ConstructL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::ConstructL( const TDesC& aRequestedUrl )
- {
- PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::ConstructL")
-
- iRequestedUrl = HBufC::NewMaxL( aRequestedUrl.Length() );
- iRequestedUrl->Des().Copy( aRequestedUrl );
-
- User::LeaveIfError( iTimer.CreateLocal() );
-
- PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::ConstructL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::FetchL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::FetchL()
- {
- PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::FetchL")
-
- delete iFetchOp;
- iFetchOp = NULL;
- iStatus = KRequestPending;
- SetActive();
- iFetchOp = CPushMtmFetchOperation::NewL( *iRequestedUrl, iStatus );
- PUSHLOG_WRITE(" Fetch op created")
-
- ++iTry; // Increase indicator.
- PUSHLOG_WRITE_FORMAT(" Try: %d",iTry)
- iFetchOp->StartL();
- iState = ECheck; // Next state.
- PUSHLOG_WRITE(" Fetch op started")
-
- PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::FetchL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::DoCancel
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::DoCancel()
- {
- if ( iFetchOp )
- {
- iFetchOp->Cancel();
- }
-
- iTimer.Cancel();
-
- TRequestStatus* status = &iObserver;
- User::RequestComplete( status, KErrCancel );
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::RunL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::RunL()
- {
- PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::RunL")
-
- __ASSERT_DEBUG( iState != EInit && iState != EDone,
- ContHandPanic( EPushContHandPanAutBadState ) );
-
- switch ( iState )
- {
- case EFetch:
- {
- PUSHLOG_WRITE(" EFetch")
- FetchL();
- break;
- }
-
- case ECheck:
- {
- PUSHLOG_WRITE_FORMAT2(" ECheck: %d,%d",iStatus.Int(),iTry)
- if ( iStatus.Int() != KErrNone && iTry < KMaxTry )
- {
- // Wait and Retry.
- iTimer.Cancel();
- iStatus = KRequestPending;
- SetActive();
- TTimeIntervalMicroSeconds32 delayInMSec =
- iTimeDelayInSec * 1000000;
- iTimer.After( iStatus, delayInMSec );
- iState = EFetch;
- }
- else
- {
- // No error or no more trial allowed.
- iState = EDone;
- PUSHLOG_WRITE_FORMAT(" SignalObs: %d",iStatus.Int());
- TRequestStatus* status = &iObserver;
- User::RequestComplete( status, iStatus.Int() );
- }
- break;
- }
-
- default:
- {
- PUSHLOG_WRITE(" default")
- // JIC.
- iState = EDone;
- TRequestStatus* status = &iObserver;
- User::RequestComplete( status, KErrNone );
- break;
- }
- }
-
- PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::RunL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::RunError
-// ---------------------------------------------------------
-//
-TInt CPushMtmAutoFetchOperation::RunError( TInt aError )
- {
- PUSHLOG_WRITE_FORMAT("CPushMtmAutoFetchOperation::RunError <%d>",aError);
-
- // Signal the observer that a leave has occured.
- TRequestStatus* status = &iObserver;
- User::RequestComplete( status, aError );
-
- return KErrNone;
- }
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of PushMtmAutoFetchOperation.
-*
-*/
-
-
-
-#ifndef PUSHMTMAUTOFETCHOPERATION_H
-#define PUSHMTMAUTOFETCHOPERATION_H
-
-// INCLUDE FILES
-
-#include <e32base.h>
-
-// FORWARD DECLARATIONS
-
-class CPushMtmFetchOperation;
-
-// CLASS DECLARATION
-
-/**
-* Asynchronous fetch operation that runs in silent mode and in addition to the
-* services of CPushMtmFetchOperation it retries downloading of the indicated
-* service if the first try fails.
-*/
-class CPushMtmAutoFetchOperation : public CActive
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor. Leaves on failure.
- * @param aRequestedUrl The requested URL.
- * @param aTimeDelayInSec Time delay between fetches in seconds.
- * @param aObserverRequestStatus Completion status.
- * @return The constructed client.
- */
- static CPushMtmAutoFetchOperation* NewL
- (
- const TDesC& aRequestedUrl,
- TInt aTimeDelayInSec,
- TRequestStatus& aObserverRequestStatus
- );
-
- /**
- * Destructor.
- */
- virtual ~CPushMtmAutoFetchOperation();
-
- public: // Functions from base classes
-
- /**
- * Start or restart the operation.
- */
- void StartL();
-
- protected: // Constructors
-
- /**
- * Constructor.
- * @param aTimeDelayInSec Time delay between fetches in seconds.
- * @param aObserverRequestStatus Completion status.
- */
- CPushMtmAutoFetchOperation( TInt aTimeDelayInSec,
- TRequestStatus& aObserverRequestStatus );
-
- /**
- * Second phase constructor.
- * @param aRequestedUrl The requested URL.
- */
- void ConstructL( const TDesC& aRequestedUrl );
-
- protected: // New functions
-
- /**
- * Issue fetching.
- */
- void FetchL();
-
- protected: // Functions from base classes
-
- /**
- * Cancel fetching.
- * @return None.
- */
- void DoCancel();
-
- /**
- * Start fetching and make an entry into the operation mapper.
- * @return None.
- */
- void RunL();
-
- /**
- * Leave handler protocol implementation: it is called when
- * RunL leaves.
- */
- TInt RunError( TInt aError );
-
- protected: // Data
-
- TRequestStatus& iObserver; ///< Observer's status.
- HBufC* iRequestedUrl; ///< Request URI or NULL. Owned.
-
- enum TState ///< State.
- {
- EInit, ///< Initial state.
- EFetch, ///< Fetch.
- ECheck, ///< Check the result of the fetching.
- EDone ///< Operation done.
- };
-
- TState iState; ///< Current state of the state machine.
-
- /// The operation that does downloading. Owned.
- CPushMtmFetchOperation* iFetchOp;
- RTimer iTimer; ///< Timer for waiting.
- TInt iTimeDelayInSec; ///< Time delay between downloadings in seconds.
- TInt iTry; ///< How many times we have tried downloading so far?
- };
-
-#endif // PUSHMTMAUTOFETCHOPERATION_H
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +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 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: Data supplier for responses loaded from cache
-*
-*/
-
-
-
-// INCLUDE FILES
-#include "PushMtmCacheDataSupplier.h"
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier(
- HBufC8* aBody )
- : iBody( aBody )
- {
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheDataSupplier::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheDataSupplier* CPushMtmCacheDataSupplier::NewL(
- HBufC8* aBody )
- {
- CPushMtmCacheDataSupplier* self = new(ELeave) CPushMtmCacheDataSupplier( aBody );
- return self;
- }
-
-// Destructor
-CPushMtmCacheDataSupplier::~CPushMtmCacheDataSupplier()
- {
- ReleaseData();
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheDataSupplier::GetNextDataPart
-// Return the next chunk of response body from the Cache
-// -----------------------------------------------------------------------------
-//
-TBool CPushMtmCacheDataSupplier::GetNextDataPart(
- TPtrC8 &aDataChunk )
- {
- aDataChunk.Set( *iBody );
- return ETrue;
- }
-
-// End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
-* Copyright (c) 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:
-*
-*/
-/*
-* ==============================================================================
-* Name : PushMtmCacheDataSupplier.h
-* Part of : PushMtm
-* Interface :
-* Description :
-* Version : 3.1
-*/
-
-
-#ifndef CPUSHMTMCACHEDATASUPPLIER_H
-#define CPUSHMTMCACHEDATASUPPLIER_H
-
-// INCLUDES
-#include <http/MHTTPDataSupplier.h>
-
-// CONSTANTS
-
-// MACROS
-
-// DATA TYPES
-
-// FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// CLASS DECLARATION
-
-/**
- * Data supplier to supply response body if the url is loaded
- * from cache
- *
- * @lib
- * @since 3.1
- */
-class CPushMtmCacheDataSupplier : public CBase, public MHTTPDataSupplier
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor.
- */
- static CPushMtmCacheDataSupplier* NewL( HBufC8* aBody );
-
- /**
- * Destructor.
- */
- virtual ~CPushMtmCacheDataSupplier();
-
- public: // from MHTTPDataSupplier
-
- /**
- * From MHTTPDataSupplier. Free the data chunk that was requested.
- * @since 2.0
- */
- virtual void ReleaseData() { delete iBody; iBody = NULL;}
-
- /**
- * From MHTTPDataSupplier. It is not possible to know
- * the data size, so return KErrNotFound
- * @since 2.0
- */
- virtual TInt OverallDataSize () { return KErrNotFound; }
-
- /**
- * From MHTTPDataSupplier. Get the next data part of the response body
- * @since 2.0
- */
- virtual TBool GetNextDataPart( TPtrC8& aDataPart );
-
- /**
- * From MHTTPDataSupplier. Not Supported
- * @since 2.0
- */
- virtual TInt Reset() { return KErrNotFound; }
-
- private:
-
- /**
- * C++ default constructor.
- */
- CPushMtmCacheDataSupplier( HBufC8* aBody );
-
- private: // Data
-
- //owned by datasupplier and is destroyed
- //when the releasedata function is called
- HBufC8* iBody;
- };
-
-#endif // CPUSHMTMCACHEDATASUPPLIER_H
-
-// End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,363 +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 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: Implementation of CPushMtmCacheSupply
-*
-*/
-
-
-// INCLUDE FILES
-#include "PushMtmCacheSupply.h"
-#include "httpcachemanager.h"
-#include "PushMtmCacheDataSupplier.h"
-
-#include <http/RHTTPTransaction.h>
-#include <http/mhttpdatasupplier.h>
-#include <http/rhttpsession.h>
-#include <httperr.h>
-
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-const TInt KResponseTimeout = 0;
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::CPushMtmCacheSupply
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheSupply::CPushMtmCacheSupply(MCacheSupplyCallbacks* aCacheSupplyCallbacks ):
- // closed by default
- iReponseState( THTTPEvent::EClosed )
- {
- iCacheEntry.iCacheHandler = NULL;
- iCacheEntry.iCacheEntry = NULL;
- iCacheSupplyCallbacks = aCacheSupplyCallbacks;
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::ConstructL(CHttpCacheManager* aCacheMgr)
- {
- iCacheManager = aCacheMgr;
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheSupply* CPushMtmCacheSupply::NewL(CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks )
- {
- CPushMtmCacheSupply* self = new( ELeave ) CPushMtmCacheSupply( aCacheSupplyCallbacks);
-
- CleanupStack::PushL( self );
- self->ConstructL(aCacheMgr);
- CleanupStack::Pop();
-
- return self;
- }
-
-// Destructor
-CPushMtmCacheSupply::~CPushMtmCacheSupply()
- {
- delete iDataSupplier;
- CloseRequest();
- if (iResponseTimer)
- {
- iResponseTimer->Cancel();
- }
- delete iResponseTimer;
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::StartRequestL
-//
-//
-// -----------------------------------------------------------------------------
-//
-TInt CPushMtmCacheSupply::StartRequestL( )
- {
- TInt status;
-
- status = iCacheManager->RequestL( *(iCacheSupplyCallbacks->Transaction()),
- TBrCtlDefs::ECacheModeNormal , iCacheEntry );
- // start a timer that feeds the content to the transaction
- if( status == KErrNone )
- {
- iClosed = EFalse;
- // set response state. start with the http headers.
- iReponseState = THTTPEvent::EGotResponseHeaders;
- //
- iResponseTimer = CPeriodic::NewL( CActive::EPriorityHigh );
- iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
- }
- return status;
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::CloseRequest
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::CloseRequest()
- {
- if( !iClosed )
- {
- iCacheManager->RequestClosed( (iCacheSupplyCallbacks->Transaction()), iCacheEntry );
- iClosed = ETrue;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::HeadersReceived
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::HeadersReceivedL()
- {
- // do not cache content we just sent off
- if( iReponseState == THTTPEvent::EClosed )
- {
- RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
- iCacheManager->ReceivedResponseHeadersL( *(iCacheSupplyCallbacks->Transaction()), iCacheEntry );
- //
- iNotModified = trans->Response().StatusCode() == HTTPStatus::ENotModified;
- if( iNotModified )
- {
- // change from 304 to 200 -otherwise trans exits with EFailed
- trans->Response().SetStatusCode( HTTPStatus::EOk );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::BodyReceivedL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::BodyReceivedL()
- {
- // do not cache content we just sent off
- if( iReponseState == THTTPEvent::EClosed )
- {
- RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
- MHTTPDataSupplier* supplier = trans->Response().Body();
- //
- iCacheManager->ReceivedResponseBodyDataL( *trans, *supplier, iCacheEntry );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ResponseComplete
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::ResponseCompleteL()
- {
- if( iReponseState == THTTPEvent::EClosed )
- {
- RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
- // not modified needs body before response complete
- if( iNotModified )
- {
- // use cache
- // close response first
- iCacheManager->ResponseComplete( *trans, iCacheEntry );
- // request the item from cache
- if( iCacheManager->RequestL( *trans, TBrCtlDefs::ECacheModeOnlyCache, iCacheEntry ) == KErrNone )
- {
- // ser
- iReponseState = THTTPEvent::EGotResponseBodyData;
- //
- SendBodyL();
- CloseRequest();
- }
- }
- else
- {
- // normal response complete
- iCacheManager->ResponseComplete( *trans, iCacheEntry );
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ResponseCallbackL
-//
-//
-// -----------------------------------------------------------------------------
-//
-TInt CPushMtmCacheSupply::ResponseCallbackL(
- TAny* aAny )
- {
- //
- CPushMtmCacheSupply* thisObj = (CPushMtmCacheSupply*)aAny;
- thisObj->SupplyResponseL();
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::SupplyResponseL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::SupplyResponseL()
- {
- RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
- //
- switch( iReponseState )
- {
- case THTTPEvent::EGotResponseHeaders:
- {
- //
- iFailed = EFalse;
- if( iCacheManager->RequestHeadersL( *trans, iCacheEntry ) == KErrNone )
- {
- //
- trans->Response().SetStatusCode( HTTPStatus::EOk );
- //
- iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseHeaders );
- // move to the next state
- iReponseState = THTTPEvent::EGotResponseBodyData;
- }
- else
- {
- // move to the next state
- iFailed = ETrue;
- // move to the next state
- iReponseState = THTTPEvent::EResponseComplete;
- }
- break;
- }
- case THTTPEvent::EGotResponseBodyData:
- {
- //
- SendBodyL();
- // move to the next state
- iReponseState = THTTPEvent::EResponseComplete;
- break;
- }
- case THTTPEvent::EResponseComplete:
- {
- iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EResponseComplete );
- // move to the next state
- iReponseState = !iFailed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
- break;
- }
- case THTTPEvent::ESucceeded:
- {
- // move to the next state
- iReponseState = THTTPEvent::EClosed;
- // cancel timer
- iResponseTimer->Cancel();
- //
- iCacheSupplyCallbacks->HandleEventL( THTTPEvent::ESucceeded );
- // this obj is destroyed at this point
- break;
- }
- case THTTPEvent::EFailed:
- {
- // move to the next state
- iReponseState = THTTPEvent::EClosed;
- // cancel timer
- iResponseTimer->Cancel();
- //
- iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EFailed );
- // this obj is destroyed at this point
- break;
- }
- default:
- {
- //
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::SendBodyL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::SendBodyL()
- {
- RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
- //
- TBool lastChunk;
- // currently it is always the last chunk
- HBufC8* body = iCacheManager->RequestNextChunkL( *trans, lastChunk, iCacheEntry );
- if( body )
- {
- CleanupStack::PushL( body );
- // create datasupplier and attach it to the transaction
- if( !iDataSupplier )
- iDataSupplier = CPushMtmCacheDataSupplier::NewL( body );
- trans->Response().SetBody( *iDataSupplier );
- CleanupStack::Pop(); // body
- //
- iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseBodyData );
- }
- else
- {
- // move to the next state
- iFailed = ETrue;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::PauseSupply
-// -----------------------------------------------------------------------------
-void CPushMtmCacheSupply::PauseSupply()
- {
- if( iResponseTimer && iResponseTimer->IsActive() )
- iResponseTimer->Cancel();
- }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ResumeSupply
-// -----------------------------------------------------------------------------
-void CPushMtmCacheSupply::ResumeSupply()
- {
- if( iResponseTimer && !iResponseTimer->IsActive() )
- iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
- }
-
-// End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,214 +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 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: Definition of CPushMtmCacheSupply
-*
-*/
-
-
-#ifndef CPUSHMTMCACHESUPPLY_H
-#define CPUSHMTMCACHESUPPLY_H
-
-// INCLUDES
-#include <e32base.h>
-#include <brctldefs.h>
-#include "httpcachemanager.h"
-
-// CONSTANTS
-
-// MACROS
-
-// DATA TYPES
-
-// FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-class CHttpTransaction;
-class CPeriodic;
-class CPushMtmCacheDataSupplier;
-
-// CLASS DECLARATION
-
-
-
-class MCacheSupplyCallbacks
- {
- public:
- virtual RHTTPTransaction* Transaction() = 0;
- virtual void HandleEventL(THTTPEvent aEvent) = 0;
- };
-
-
-/**
-* This class handles http transactions.
-* @lib PushMtmContentHandler
-* @since 3.1
-*/
-class CPushMtmCacheSupply : public CBase
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor.
- * @param
- * @param
- * @param
- * @return Http cache object.
- */
- static CPushMtmCacheSupply* NewL( CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks );
-
- /**
- * Destructor.
- */
- virtual ~CPushMtmCacheSupply();
-
- public: // new functions
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- TInt StartRequestL( );
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void CloseRequest();
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void HeadersReceivedL();
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void BodyReceivedL();
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void ResponseCompleteL();
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- TInt ResponseState() const { return iReponseState;}
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- TBool IsSupplying() { return iResponseTimer!=0; }
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void PauseSupply();
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void ResumeSupply();
-
- private:
-
- /**
- * Construct.
- * @param
- * @param
- * @parem
- * @return
- */
- CPushMtmCacheSupply( MCacheSupplyCallbacks* aCacheSupplyCallbacks );
-
- /**
- * By default Symbian 2nd phase constructor is private.
- */
- void ConstructL(CHttpCacheManager* aCacheMgr);
-
- private: //
-
- /**
- * Callback for async response
- * @since 3.1
- * @param aAny this pinter
- * @return TInt KErrNone
- */
- static TInt ResponseCallbackL( TAny* aAny );
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void SupplyResponseL();
-
- /**
- *
- * @since 3.1
- * @param
- * @return
- */
- void SendBodyL();
-
- private: // Data
-
- //
- CHttpCacheManager* iCacheManager; // not owned
- //
- TInt iReponseState;
- //
- CPeriodic* iResponseTimer; // owned
- //
- TBool iFailed;
- //
- TBool iNotModified;
- //
- THttpCacheEntry iCacheEntry;
- // ETrue if the cache object is closed
- TBool iClosed;
-
- CPushMtmCacheDataSupplier* iDataSupplier;
- MCacheSupplyCallbacks* iCacheSupplyCallbacks;
- };
-
-#endif // CPUSHMTMCACHESUPPLY_H
-
-// End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1043 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Implementation of CPushMtmFetchOperation.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushMtmFetchOperation.h"
-#include "PushContentHandlerPanic.h"
-#include "PushMtmLog.h"
-#include <push/cslpushmsgentry.h>
-#include <Uri8.h>
-#include <SysUtil.h>
-#include <cookiefilterinterface.h>
-#include <uaproffilter_interface.h>
-#include <CommDbConnPref.h>
-#include <cdbcols.h>
-#include <browseruisdkcrkeys.h>
-#include "PushMtmPrivateCRKeys.h"
-#include <centralrepository.h>
-#include <commdb.h>
-#include <ApDataHandler.h>
-#include <ApAccessPointItem.h>
-#include <ApUtils.h>
-#include <ApSelect.h>
-#include <httpfilteracceptheaderinterface.h>
-#include <httpfilteriopinterface.h>
-#include <httpfiltercommonstringsext.h>
-#include <deflatefilterinterface.h>
-#include <FeatMgr.h>
-
-// ================= MACROS =======================
-
-#ifdef _DEBUG
- /// Guard "debug-only" argument name with this (expands to argument).
- #define DEBUG_ONLY( argName ) argName
-#else /* not defined _DEBUG */
- /// Guard "debug-only" argument name with this (expands to nothing).
- #define DEBUG_ONLY( argName )
-#endif /* def _DEBUG */
-
-// ================= LOCAL CONSTANTS =======================
-
-_LIT8( KHttpProtString, "HTTP/TCP" );
-_LIT8( KUserAgent, "Push MTM" );
-
-/// Base HTTP error code. See Extended Error Handling UI Specification!
-LOCAL_C const TInt KPushMtmHttpErrorBase = -25000;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::NewL
-// ---------------------------------------------------------
-//
-CPushMtmFetchOperation* CPushMtmFetchOperation::NewL
- (
- const TDesC& aRequestedUrl,
- TRequestStatus& aObserverRequestStatus
- )
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::NewL")
-
- CPushMtmFetchOperation* op =
- new (ELeave) CPushMtmFetchOperation( aObserverRequestStatus );
- CleanupStack::PushL( op );
- op->ConstructL( aRequestedUrl );
- CleanupStack::Pop( op ); // op
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::NewL")
- return op;
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::~CPushMtmFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmFetchOperation::~CPushMtmFetchOperation()
- {
- Cancel();
- delete ( iCacheMgr );
- delete iCacheSupply;
- iHttpTrans.Close();
- iHttpSess.Close();
- iConn.Close();
- iSockServ.Close();
- delete iRequestedUrl;
- delete iSourceUri;
- delete iBody;
- FeatureManager::UnInitializeLib();
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::StartL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::StartL()
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartL")
-
- Cancel();
-
- iResult = KErrNone;
- iState = EInit;
-
- SetActive();
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone );
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::CPushMtmFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmFetchOperation::CPushMtmFetchOperation
- ( TRequestStatus& aObserverRequestStatus )
-: CActive( EPriorityStandard ),
- iObserver( aObserverRequestStatus ),
- iState( EInit ),
- iResult( KErrNone )
- {
- CActiveScheduler::Add( this );
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::ConstructL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::ConstructL( const TDesC& aRequestedUrl )
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::ConstructL")
-
- iRequestedUrl = HBufC8::NewMaxL( aRequestedUrl.Length() );
- iRequestedUrl->Des().Copy( aRequestedUrl );
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::ConstructL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::GetDefaultInetAccessPointL
-// ---------------------------------------------------------
-//
-TBool CPushMtmFetchOperation::GetDefaultInetAccessPointL
- ( TUint32& aIapId ) const
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
-
- // Try to find the default AP.
- // The Browser may stores the default AP in the shared data.
- CRepository* repository = CRepository::NewL( KCRUidBrowser );
- CleanupStack::PushL( repository );
-
- TInt wapApId;
- User::LeaveIfError
- ( repository->Get( KBrowserDefaultAccessPoint, wapApId ) );
- TUint32 wapApId32( wapApId );
- TUint32 iapId32( 0 );
-
- CleanupStack::PopAndDestroy( repository );
- repository = 0;
-
- CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
- CleanupStack::PushL( commsDb );
- CApDataHandler* apDataHandler = CApDataHandler::NewLC( *commsDb );
- CApAccessPointItem* apItem = CApAccessPointItem::NewLC();
- TRAPD( err, apDataHandler->AccessPointDataL( wapApId32, *apItem ) );
- CApUtils* apUtils = CApUtils::NewLC( *commsDb );
-
- TBool wapApFound( EFalse );
- TBool iapFound( EFalse );
-
- PUSHLOG_WRITE_FORMAT(" err: <%d>",err)
- if ( err == KErrNone )
- {
- wapApFound = ETrue;
- }
- else // err != KErrNone
- {
- // The first valid access point has to be selected if exists
- CApSelect* apSelect = CApSelect::NewLC
- (
- *commsDb,
- KEApIspTypeAll,
- EApBearerTypeAll,
- KEApSortNameAscending
- );
- if ( apSelect->MoveToFirst() )
- {
- wapApFound = ETrue;
- wapApId32 = apSelect->Uid();
- }
- CleanupStack::PopAndDestroy( apSelect ); // apSelect
- }
-
- if ( wapApFound )
- {
- // Get the IAP ID from the WAP AP ID.
-#ifndef __SERIES60_WSP
- iapId32 = 0;
- TRAPD( errTransl, iapId32 = apUtils->IapIdFromWapIdL( wapApId32 ) );
- PUSHLOG_WRITE_FORMAT(" IapIdFromWapIdL errTransl: <%d>",errTransl)
- if ( errTransl == KErrNone )
- {
- iapFound = ETrue;
- }
-#else
- iapId32 = wapApId32;
- iapFound = ETrue;
-#endif // __SERIES60_WSP
- }
-
- CleanupStack::PopAndDestroy( 4 ); // apUtils, apItem,
- // apDataHandler, commsDb
-
- if ( iapFound )
- {
- aIapId = iapId32;
- }
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
- return iapFound;
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::InitializeL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::InitializeL()
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::InitializeL")
-
- User::LeaveIfError( iSockServ.Connect() );
- PUSHLOG_WRITE("CPushMtmFetchOperation iSockServ.Connect() OK")
- User::LeaveIfError( iConn.Open( iSockServ ) );
- PUSHLOG_WRITE("CPushMtmFetchOperation iConn.Open() OK")
-
- // Open the HTTP session.
- iHttpSess.OpenL( KHttpProtString );
- PUSHLOG_WRITE("CPushMtmFetchOperation iHttpSess.OpenL OK")
-
- // Set our Socket Server handle and Connection as session properties.
- iHttpSess.ConnectionInfo().SetPropertyL
- (
- StringF( HTTP::EHttpSocketServ ),
- THTTPHdrVal( iSockServ.Handle() )
- );
- PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketServ set")
- iHttpSess.ConnectionInfo().SetPropertyL
- (
- StringF( HTTP::EHttpSocketConnection ),
- THTTPHdrVal( REINTERPRET_CAST( TInt, &iConn ) )
- );
- PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketConnection set")
-
- // Open different string tables to the session. These are required
- // by the Accept Header Filter.
- iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetTable() );
- PUSHLOG_WRITE("CPushMtmFetchOperation table 1 opened");
- iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetLanguageTable() );
- PUSHLOG_WRITE("CPushMtmFetchOperation table 2 opened");
-
- // Install the very same set of filters that BrowserEngine installs.
- // The following filters must not be installed:
- // - Authentication Filter, because the fetch operation and the push mtm
- // subsystem does not support credentials.
- // - Conn Handler Filter, because the fetch operation let it to the HTTP
- // core framework to create connection - it just sets the acces point.
-
- // Install UAProf filter.
- CHttpUAProfFilterInterface::InstallFilterL( iHttpSess );
- PUSHLOG_WRITE(" UAProf installed")
-
- // Install cookie filter.
- CHttpCookieFilter::InstallFilterL( iHttpSess );
- PUSHLOG_WRITE(" Cookie filter installed")
-
- // Create cache manager
- FeatureManager::InitializeLibL();
- iCacheMgr = CHttpCacheManager::NewL();
- PUSHLOG_WRITE(" Cache Manager installed")
-
- // Install Accept Header Filter.
- CHttpFilterAcceptHeaderInterface::InstallFilterL( iHttpSess );
- PUSHLOG_WRITE(" Accept Header Filter installed")
-
- // Install IOP Filter.
- CHttpFilterIopInterface::InstallFilterL( iHttpSess, iopOptionHostHeader );
- PUSHLOG_WRITE(" IOP Filter installed")
-
- // Install Deflate Filter.
- CHttpDeflateFilter::InstallFilterL( iHttpSess );
- PUSHLOG_WRITE(" Deflate Filter installed");
-
- TUint32 defIapId( 0 );
- TBool defIapIdFound = EFalse;
- TCommDbConnPref commPrefs;
-#ifndef __WINS__
- // Use Browser default AP & comms db:
- defIapIdFound = GetDefaultInetAccessPointL( defIapId );
- PUSHLOG_WRITE_FORMAT(" defIapIdFound: <%d>",(TInt)defIapIdFound)
- PUSHLOG_WRITE_FORMAT(" defIapId: <%d>",defIapId)
- commPrefs.SetDialogPreference( ECommDbDialogPrefDoNotPrompt );
- if ( defIapIdFound )
- {
- commPrefs.SetIapId( defIapId );
- }
-#else // __WINS__
- // Prompt the user to select access point
- commPrefs.SetDialogPreference( ECommDbDialogPrefPrompt );
-#endif // __WINS__
-
- iState = EStartRequest;
-
- iStatus = KRequestPending;
- SetActive();
- iConn.Start( commPrefs, iStatus );
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::InitializeL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::StartRequestL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::StartRequestL()
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartRequestL")
-
- // Create the transaction.
- CreateTransactionL();
-
- CheckCacheL();
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartRequestL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::CheckCacheL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::CheckCacheL()
-
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::CheckCacheL")
- iCacheSupply = CPushMtmCacheSupply::NewL(iCacheMgr, this);
- TInt ret = iCacheSupply->StartRequestL();
- iStatus = KRequestPending;
- SetActive();
- if (ret != KErrNone) // Not in cache
- {
- iState = ERequest;
- iCachedResponse = ETrue;
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone);
- }
- else
- {
- iState = EDone;
- iCachedResponse = EFalse;
- }
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CheckCacheL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::RequestL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::RequestL()
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::RequestL")
-
- iState = EDone;
-
- iStatus = KRequestPending;
- SetActive();
- SubmitTransactionL();
- // Do not call InvokeRun(). Let MHFRunL to handle the request.
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::RequestL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::Done
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::Done()
- {
- PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::Done iResult: <%d>",iResult);
-
- delete iRequestedUrl;
- iRequestedUrl = NULL;
-
- // Notify parent.
- TRequestStatus* status = &iObserver;
- User::RequestComplete( status, iResult );
-// iState = EInit;
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::CreateTransactionL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::CreateTransactionL()
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::CreateTransactionL")
-
- __ASSERT_DEBUG( iRequestedUrl,
- ContHandPanic( EPushContHandPanNotInitUrl ) );
-
- // Create the transaction.
- TUriParser8 uri;
- User::LeaveIfError( uri.Parse( *iRequestedUrl ) );
- iHttpTrans =
- iHttpSess.OpenTransactionL( uri, *this, StringF( HTTP::EGET ) );
- PUSHLOG_WRITE("CPushMtmFetchOperation OpenTransactionL OK")
-
- // Set request headers.
- RHTTPHeaders hdr = iHttpTrans.Request().GetHeaderCollection();
- SetHeaderL( hdr, HTTP::EUserAgent, KUserAgent );
- SetHeaderL( hdr, HTTP::EAccept, HTTP::EAnyAny );
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CreateTransactionL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SubmitTransactionL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SubmitTransactionL()
- {
- iHttpTrans.SubmitL();
- PUSHLOG_WRITE("CPushMtmFetchOperation iHttpTrans.SubmitL OK")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::HandleResponseHeadersL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::HandleResponseHeadersL( RHTTPResponse aResponse )
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::HandleResponseHeadersL")
-
- TInt httpCode = aResponse.StatusCode();
- PUSHLOG_WRITE_FORMAT(" HttpStatus: %d",httpCode)
-
-#ifdef __TEST_LOG__
- LogHeadersL( aResponse.GetHeaderCollection() );
-#endif // __TEST_LOG__
-
- if ( HTTPStatus::IsSuccessful( httpCode ) &&
- ( httpCode != HTTPStatus::ENoContent ) )
- {
- // Successful GET.
- PUSHLOG_WRITE(" Successful GET")
- // Get content type.
- iDataType = TDataType
- ( GetContentTypeL( aResponse.GetHeaderCollection() ) );
- // Get source URI.
- HBufC8* buf = GetSourceUriL( iHttpTrans ).AllocL();
- PUSHLOG_WRITE(" Source URI got")
- delete iSourceUri;
- iSourceUri = buf;
- // No error:
- iResult = KErrNone;
- }
- else
- {
- // See Extended Error Handling UI Specification!
- iResult = KPushMtmHttpErrorBase - httpCode;
- PUSHLOG_WRITE_FORMAT(" iResult: <%d>",iResult)
- }
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::HandleResponseHeadersL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::VersionRetryL
-// ---------------------------------------------------------
-//
-TBool CPushMtmFetchOperation::VersionRetryL()
- {
- TBool retryDone( EFalse );
-
- // Check what http version we are using.
- THTTPHdrVal val;
- TBool exists = iHttpSess.ConnectionInfo().Property
- (
- StringF( HTTP::EHTTPVersion ),
- val
- );
- if ( exists && TInt( val ) == HTTP::EHttp11 )
- {
- // Currently using HTTP/1.1. Cancel transaction and resubmit it using
- // HTTP/1.0.
- iHttpTrans.Cancel();
- iHttpSess.ConnectionInfo().SetPropertyL
- (
- StringF( HTTP::EHTTPVersion ),
- THTTPHdrVal( StringF( HTTP::EHttp10 ) )
- );
- SubmitTransactionL();
- retryDone = ETrue;
- }
-
- return retryDone;
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::AppendResponse
-// ---------------------------------------------------------
-//
-TInt CPushMtmFetchOperation::AppendResponse( const TDesC8& aDataChunk )
- {
- TInt err( KErrNone );
- HBufC8* newBodyBuf = NULL;
-
- if ( !iBody )
- {
- // iBody does not exist yet; allocate buffer for the first data chunk.
- newBodyBuf = HBufC8::New( aDataChunk.Length() );
- }
- else
- {
- const TInt needed( iBody->Des().Length() + aDataChunk.Length() );
- if ( iBody->Des().MaxLength() < needed )
- {
- // iBody exists, but small.
- newBodyBuf = iBody->ReAlloc( needed );
- iBody = NULL; // ReAlloc deleted it!
- }
- else
- {
- // iBody exists and the new chunk fits into it.
- }
- }
-
- if ( newBodyBuf )
- {
- __ASSERT_DEBUG( iBody == NULL,
- ContHandPanic( EPushContHandPanAlreadyInitialized ) );
- delete iBody; // Not necessary, JIC.
- iBody = newBodyBuf;
- }
- else
- {
- if (aDataChunk.Length() > 0)
- {
- err = KErrNoMemory;
- }
- }
-
- if ( !err )
- {
- iBody->Des().Append( aDataChunk );
- }
-
- return err;
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SetHeaderL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
- HTTP::TStrings aHdrField,
- const TDesC8& aHdrValue )
- {
- RStringF valStr = iHttpSess.StringPool().OpenFStringL( aHdrValue );
- CleanupClosePushL<RStringF>( valStr );
- SetHeaderL( aHeaders, aHdrField, valStr );
- CleanupStack::PopAndDestroy(); // close valStr
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SetHeaderL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
- HTTP::TStrings aHdrField,
- HTTP::TStrings aHdrValue )
- {
- SetHeaderL( aHeaders, aHdrField, StringF( aHdrValue ) );
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SetHeaderL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
- HTTP::TStrings aHdrField,
- const RStringF aHdrValue )
- {
- THTTPHdrVal val( aHdrValue );
- aHeaders.SetFieldL( StringF( aHdrField ), val );
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::GetContentTypeL
-// ---------------------------------------------------------
-//
-const TDesC8& CPushMtmFetchOperation::GetContentTypeL( RHTTPHeaders aHeaders )
- {
- THTTPHdrVal hdrVal;
- User::LeaveIfError
- ( aHeaders.GetField( StringF( HTTP::EContentType ), 0, hdrVal ) );
- if ( hdrVal.Type() != THTTPHdrVal::KStrFVal )
- {
- User::Leave( KErrArgument );
- }
- return hdrVal.StrF().DesC();
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::GetSourceUriL
-// ---------------------------------------------------------
-//
-const TDesC8& CPushMtmFetchOperation::GetSourceUriL
- ( RHTTPTransaction aTransaction )
- {
- // TODO if redirected URI exists, how do we get it?
- // For the moment request URI is used.
- return aTransaction.Request().URI().UriDes();
- }
-
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::LogHeadersL
-// ---------------------------------------------------------
-//
-#ifndef __TEST_LOG__
-
-void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders /*aHeaders*/ )
- {
- }
-
-#else // #ifdef __TEST_LOG__
-
-void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders aHeaders )
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::LogHeadersL")
-
- _LIT( KDateFormat, "%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3" );
-
- PUSHLOG_WRITE("Headers:");
-
- RStringPool strP = iHttpTrans.Session().StringPool();
- THTTPHdrFieldIter it = aHeaders.Fields();
-
- while ( !it.AtEnd() )
- {
- RStringTokenF fieldName = it();
- RStringF fieldNameStr = strP.StringF( fieldName );
- THTTPHdrVal fieldVal;
- if ( aHeaders.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
- {
- const TInt KMaxLogStrLen = 64;
- TPtrC8 fieldName8 = fieldNameStr.DesC();
- TInt fieldNameLen = fieldName8.Length();
- fieldNameLen = ( KMaxLogStrLen < fieldNameLen ) ?
- KMaxLogStrLen : fieldNameLen;
- fieldName8.Set( fieldName8.Mid( 0, fieldNameLen ) );
- HBufC* fieldNameHBufC = HBufC::NewMaxLC( fieldName8.Length() );
- TPtr fieldName = fieldNameHBufC->Des();
- fieldName.Copy( fieldName8 );
-
- switch ( fieldVal.Type() )
- {
- case THTTPHdrVal::KTIntVal:
- {
- PUSHLOG_WRITE_FORMAT2
- (" <%S> (%d)",&fieldName,fieldVal.Int())
- break;
- }
-
- case THTTPHdrVal::KStrFVal:
- {
- RStringF fieldValStr = strP.StringF( fieldVal.StrF() );
- TPtrC8 fieldVal8 = fieldValStr.DesC();
- // Truncate if too long.
- TInt fieldValLen = fieldVal8.Length();
- fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ?
- KMaxLogStrLen : fieldValLen;
- fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
- // Truncate end.
- HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
- TPtr fieldVal = fieldValHBufC->Des();
- fieldVal.Copy( fieldVal8 );
- PUSHLOG_WRITE_FORMAT2
- (" <%S> (%S)",&fieldName,&fieldVal)
- CleanupStack::PopAndDestroy( fieldValHBufC );
- // fieldValHBufC
- break;
- }
-
- case THTTPHdrVal::KStrVal:
- {
- RString fieldValStr = strP.String( fieldVal.Str() );
- TPtrC8 fieldVal8 = fieldValStr.DesC();
- // Truncate if too long.
- TInt fieldValLen = fieldVal8.Length();
- fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ?
- KMaxLogStrLen : fieldValLen;
- fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
- // Truncate end.
- HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
- TPtr fieldVal = fieldValHBufC->Des();
- fieldVal.Copy( fieldVal8 );
- PUSHLOG_WRITE_FORMAT2
- (" <%S> (%S)",&fieldName,&fieldVal)
- CleanupStack::PopAndDestroy( fieldValHBufC );
- // fieldValHBufC
- break;
- }
-
- case THTTPHdrVal::KDateVal:
- {
- TDateTime date = fieldVal.DateTime();
- TBuf<40> dateTimeString;
- TTime t( date );
- TRAP_IGNORE( t.FormatL( dateTimeString, KDateFormat ) );
- PUSHLOG_WRITE_FORMAT2
- (" <%S> (%S)",&fieldName,&dateTimeString)
- break;
- }
-
- default:
- {
- PUSHLOG_WRITE_FORMAT2
- (" <%S> unrecognised value type (%d)",
- &fieldName,fieldVal.Type())
- break;
- }
- }
-
- // Display realm for WWW-Authenticate header.
- RStringF wwwAuth = strP.StringF
- ( HTTP::EWWWAuthenticate, RHTTPSession::GetTable() );
- if ( fieldNameStr == wwwAuth )
- {
- PUSHLOG_WRITE(" fieldNameStr == wwwAuth")
- // check the auth scheme is 'basic'
- RStringF basic = strP.StringF
- ( HTTP::EBasic, RHTTPSession::GetTable() );
- RStringF realm = strP.StringF
- ( HTTP::ERealm, RHTTPSession::GetTable() );
- THTTPHdrVal realmVal;
- if ( ( fieldVal.StrF() == basic ) &&
- ( !aHeaders.GetParam( wwwAuth, realm, realmVal ) ) )
- {
- RStringF realmValStr = strP.StringF( realmVal.StrF() );
- PUSHLOG_WRITE_FORMAT(" Realm <%S>",&realmValStr);
- }
- }
-
- CleanupStack::PopAndDestroy( fieldNameHBufC ); // fieldNameHBufC
- }
- ++it;
- }
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::LogHeadersL")
- }
-
-#endif // __TEST_LOG__
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::DoCancel
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::DoCancel()
- {
- switch ( iState )
- {
- /*case EStartConnect:
- {
- // Complete ourselves - nothing is outstanding.
- TRequestStatus* ownStatus = &iStatus;
- User::RequestComplete( ownStatus, KErrCancel );
- break;
- }*/
-
- /*case EConnect:
- {
- //__ASSERT_DEBUG( iConn, ContHandPanic( ECodInternal ) );
- //iConn->Cancel(); // This will complete our status.
- break;
- }*/
-
- case EStartRequest:
- case ECheckCache:
- case ERequest:
- {
- delete iCacheSupply;
- iCacheSupply = NULL;
-
- iHttpTrans.Close();
- // Now the transaction has been closed. Closing it does not
- // complete our status, so we do it manually.
- TRequestStatus* status = &iStatus;
- SetActive();
- User::RequestComplete( status, iResult );
- break;
- }
-
- case EInit:
- default:
- {
- // No requests should be outstanding in these states.
- //ContHandPanic( ECodInternal );
- break;
- }
- }
-
- iResult = KErrCancel;
- Done();
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::RunL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::RunL()
- {
- PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL status = %d", iState);
- // Handle errors in RunError().
- User::LeaveIfError( iStatus.Int() );
-
- switch ( iState )
- {
- case EInit:
- {
- InitializeL();
- break;
- }
-
- case EStartRequest:
- {
- StartRequestL();
- break;
- }
-
- case ERequest:
- {
- RequestL();
- break;
- }
-
- case EDone:
- {
- Done();
- break;
- }
-
- default:
- {
- // JIC.
- Done();
- break;
- }
- }
- PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL moving to status = %d", iState);
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::RunError
-// ---------------------------------------------------------
-//
-TInt CPushMtmFetchOperation::RunError( TInt aError )
- {
- PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunError <%d>",aError)
-
- iResult = aError;
- delete iCacheSupply;
- iCacheSupply = NULL;
- iHttpTrans.Close();
- Done();
-
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::MHFRunL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::MHFRunL
- (
- RHTTPTransaction DEBUG_ONLY( aTransaction ),
- const THTTPEvent& aEvent
- )
- {
- PUSHLOG_ENTERFN("CPushMtmFetchOperation::MHFRunL")
- __ASSERT_DEBUG( aTransaction == iHttpTrans,
- ContHandPanic( EPushContHandPanBadTransaction ) );
- switch ( aEvent.iStatus )
- {
- case THTTPEvent::EGotResponseHeaders:
- {
- PUSHLOG_WRITE(" EGotResponseHeaders")
- // pass headers to the cache first
- TRAP_IGNORE( iCacheSupply->HeadersReceivedL() );
- // Now we know that the request was processed by the server.
- HandleResponseHeadersL( iHttpTrans.Response() );
- break;
- }
-
- case THTTPEvent::EGotResponseBodyData:
- {
- PUSHLOG_WRITE(" EGotResponseBodyData")
- // pass chunk to the cache first
- TRAP_IGNORE( iCacheSupply->BodyReceivedL() );
- // Get body data and save it.
- TInt err( KErrNone );
- MHTTPDataSupplier* body = iHttpTrans.Response().Body();
- if ( !body )
- {
- PUSHLOG_WRITE(" NULL body")
- }
- else
- {
- TPtrC8 bodyPtr;
- // Caution: no leaving between body->GetNextDataPart and
- // body->ReleaseData calls! Data must always be released.
-#ifdef __TEST_LOG__
- TBool isLast = body->GetNextDataPart( bodyPtr ); // No leave...
- PUSHLOG_WRITE_FORMAT(" last? (%d)",(isLast?1:0))
-#else // ifndef __TEST_LOG__
- (void)body->GetNextDataPart( bodyPtr ); // No leave...
-#endif // __TEST_LOG__
- //if ( iHttpTrans.Request().Method() == StringF( HTTP::EGET ) )
- err = AppendResponse( bodyPtr );
- body->ReleaseData(); // ...until here.
- PUSHLOG_WRITE_FORMAT(" err: (%d)",err)
- User::LeaveIfError( err );
- }
- break;
- }
-
- case THTTPEvent::EResponseComplete:
- {
- // do not mix it up with the ESucceeded
- // The transaction's response is complete. An incoming event.
- TRAP_IGNORE( iCacheSupply->ResponseCompleteL() );
- break;
- }
-
- case THTTPEvent::ERequestComplete:
- {
- // request is all set
- iCacheSupply->CloseRequest();
- break;
- }
-
- case THTTPEvent::EFailed:
- {
- PUSHLOG_WRITE(" EFailed")
- // Safety code: we should already have an error code.
- if ( iResult == KErrNone )
- {
- iResult = KErrGeneral;
- }
- // TODO. Fall through.
- }
-
- case THTTPEvent::ESucceeded:
- {
- PUSHLOG_WRITE(" ESucceeded")
- delete iCacheSupply;
- iCacheSupply = NULL;
- iHttpTrans.Close();
- // Transaction is finished, invoke RunL now.
- TRequestStatus* status = &iStatus;
- if (!IsActive())
- {
- SetActive();
- }
- User::RequestComplete( status, iResult );
- break;
- }
-
- case THTTPEvent::ERedirectedPermanently:
- {
- PUSHLOG_WRITE(" ERedirectedPermanently")
- // Do nothing just continue.
- break;
- }
-
- default:
- {
- PUSHLOG_WRITE(" default case")
- // Handle errors in MHFRunError.
- User::LeaveIfError( aEvent.iStatus );
- break;
- }
- }
-
- PUSHLOG_LEAVEFN("CPushMtmFetchOperation::MHFRunL")
- }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::MHFRunError
-// ---------------------------------------------------------
-//
-TInt CPushMtmFetchOperation::MHFRunError
- (
- TInt aError,
- RHTTPTransaction DEBUG_ONLY( aTransaction ),
- const THTTPEvent& /*aEvent*/
- )
- {
- __ASSERT_DEBUG( aTransaction == iHttpTrans,
- ContHandPanic( EPushContHandPanBadTransaction ) );
- iResult = aError;
- iCacheSupply->CloseRequest();
- iHttpTrans.Close();
-
- // Transaction is finished, invoke RunL now.
- // iResult contains the (error) code.
- if ( !IsActive() )
- {
- SetActive();
- }
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone );
-
- return KErrNone;
- }
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Declaration of CPushMtmFetchOperation.
-*
-*/
-
-
-
-#ifndef PUSHMTMFETCHOPERATION_H
-#define PUSHMTMFETCHOPERATION_H
-
-// INCLUDE FILES
-
-#include <e32std.h>
-#include <e32base.h>
-#include <http.h>
-#include <stringpool.h>
-#include <apmstd.h>
-#include <es_sock.h>
-#include "httpcachemanager.h"
-#include "PushMtmCacheSupply.h"
-
-// FORWARD DECLARATIONS
-
-class CMsvEntry;
-
-// CLASS DECLARATION
-
-/**
-* Asynchronous fetch operation that downloads the service indicated by an SL
-* pushed service message.
-*
-* The operation can run in silent mode without requiring any user intervention.
-*/
-class CPushMtmFetchOperation : public CActive,
- public MHTTPTransactionCallback,
- public MCacheSupplyCallbacks
- {
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor. Leaves on failure.
- * @param aRequestedUrl The requested URL.
- * @param aObserverRequestStatus Observer's status.
- * @return The constructed operation.
- */
- static CPushMtmFetchOperation* NewL
- (
- const TDesC& aRequestedUrl,
- TRequestStatus& aObserverRequestStatus
- );
-
- /**
- * Destructor.
- */
- virtual ~CPushMtmFetchOperation();
-
- public: // Functions from base classes
-
- /**
- * Start or restart the operation.
- */
- void StartL();
-
- RHTTPTransaction* Transaction(){ return &iHttpTrans; }
- void HandleEventL(THTTPEvent aEvent) { MHFRunL(iHttpTrans, aEvent); }
-
- protected: // Constructors
-
- /**
- * Constructor.
- * @param aObserverRequestStatus Observer's status.
- */
- CPushMtmFetchOperation( TRequestStatus& aObserverRequestStatus );
-
- /**
- * Second phase constructor.
- * @param aRequestedUrl The requested URL.
- * @return None.
- */
- void ConstructL( const TDesC& aRequestedUrl );
-
- protected: // New functions
-
- /**
- * Get the ID of the defauld internet access point set in the Browser
- * Preferences that is used for connection creation.
- * @param aIapId The ID of the access point, if found. The value of
- * this variable is not changed if no default ap can be found.
- * @return Indicate if default ap could be found.
- */
- TBool GetDefaultInetAccessPointL( TUint32& aIapId ) const;
-
- protected: // state machine parts
-
- /**
- * Initiate connecting.
- */
- void InitializeL();
-
- /**
- * StartRequestL
- */
- void StartRequestL();
-
- /**
- * CheckCacheL
- */
- void CheckCacheL();
-
- /**
- * Initiate connecting.
- */
- void RequestL();
-
- /**
- * Clean up and notify parent.
- */
- void Done();
-
- /**
- * Create transaction, set request headers (and body for POST request).
- */
- void CreateTransactionL();
-
- /**
- * Submit the transaction (make the HTTP request).
- */
- void SubmitTransactionL();
-
- /**
- * Handle response from server.
- * @param aResponse Response from server.
- */
- void HandleResponseHeadersL( RHTTPResponse aResponse );
-
- /**
- * HTTP Version Not Supported. Resubmit transaction using HTTP/1.0.
- * @return ETrue if transaction was resubmitted, EFalse if not (i.e
- * we already use HTTP/1.0).
- */
- TBool VersionRetryL();
-
- /**
- * Append a new chunk of response data to the reponse buffer.
- * @return KErrNone or KErrNoMemory.
- */
- TInt AppendResponse( const TDesC8& aDataChunk );
-
- protected: // helpers
-
- /**
- * Helper function to set a header.
- * @param aHeaders Set the header to this header set.
- * @param aHdrField Header field name.
- * @param aHdrValue Header value.
- */
- void SetHeaderL
- (
- RHTTPHeaders aHeaders,
- HTTP::TStrings aHdrField,
- const TDesC8& aHdrValue
- );
-
- /**
- * Helper function to set a header.
- * @param aHeaders Set the header to this header set.
- * @param aHdrField Header field name.
- * @param aHdrValue Header value.
- */
- void SetHeaderL
- (
- RHTTPHeaders aHeaders,
- HTTP::TStrings aHdrField,
- HTTP::TStrings aHdrValue
- );
-
- /**
- * Helper function to set a header.
- * @param aHeaders Set the header to this header set.
- * @param aHdrField Header field name.
- * @param aHdrValue Header value.
- */
- void SetHeaderL
- (
- RHTTPHeaders aHeaders,
- HTTP::TStrings aHdrField,
- const RStringF aHdrValue
- );
-
- /**
- * Helper function to get the Content-Type header value.
- * @param aHeaders HTTP header set.
- * @return Content-Type header value.
- */
- const TDesC8& GetContentTypeL( RHTTPHeaders aHeaders );
-
- /**
- * Helper function to get the source URI of a transaction.
- * @param aTransaction Transaction.
- * @return Source URI.
- */
- const TDesC8& GetSourceUriL( RHTTPTransaction aTransaction );
-
- /**
- * Get a shared string from the session stringpool.
- * @param aId Id of string.
- * @return Shared string from HTTP string table. No need to close.
- */
- inline RStringF StringF( HTTP::TStrings aId );
-
- protected: // debug utilities
-
- /**
- * In debug build, log headers. In release build, do nothing.
- * @param aHeaders Headers to log.
- */
- void LogHeadersL( RHTTPHeaders aHeaders );
-
- protected: // Functions from base classes
-
- /**
- * Cancel fetching.
- * @return None.
- */
- void DoCancel();
-
- /**
- * Start fetching and make an entry into the operation mapper.
- * @return None.
- */
- void RunL();
-
- /**
- * Leave handler protocol implementation: it is called when
- * RunL leaves.
- */
- TInt RunError( TInt aError );
-
- protected: // from MHTTPTransactionCallback
-
- /**
- * Handle transaction event.
- * @param aTransaction The transaction that the event has occurred on.
- * @param aEvent The event that has occurred.
- */
- void MHFRunL( RHTTPTransaction aTransaction,
- const THTTPEvent& aEvent );
-
- /**
- * Handle errors occured in MHFRunL().
- * @param aError The leave code that RunL left with.
- * @param aTransaction The transaction that was being processed.
- * @param aEvent The Event that was being processed.
- * @return KErrNone.
- */
- TInt MHFRunError( TInt aError,
- RHTTPTransaction aTransaction,
- const THTTPEvent& aEvent );
-
- protected: // Data
-
- TRequestStatus& iObserver; ///< Observer's status.
- HBufC8* iRequestedUrl; ///< Request URI or NULL. Owned.
-
- enum TState ///< State.
- {
- EInit, ///< Initial state.
- EStartRequest, ///< Create HTTP session & request
- ECheckCache, ///< Check if content is in cache
- ERequest, ///< HTTP request.
- EDone
- };
-
- TState iState; ///< Current state.
- TInt iResult; ///< Resulting error code.
-
- RSocketServ iSockServ; ///< Socket Server session handle.
- RConnection iConn; ///< Connection handle.
-
- CHttpCacheManager* iCacheMgr;///< Cache Manager. Owned.
-
- RHTTPSession iHttpSess; ///< HTTP session. Owned.
- RHTTPTransaction iHttpTrans;///< Transaction. Owned.
-
- HBufC8* iSourceUri; ///< Source URI. Owned.
- HBufC8* iBody; ///< Response body. Owned.
- TDataType iDataType; ///< Data type.
- THttpCacheEntry iCacheEntry;///< Holds the cache entry
- CPushMtmCacheSupply* iCacheSupply;
- TBool iCachedResponse;
- };
-
-#include "PushMtmFetchOperation.inl"
-
-#endif // PUSHMTMFETCHOPERATION_H
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.inl Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Inline method definitions of class CPushMtmFetchOperation.
-*
-*/
-
-
-
-#ifndef PUSHMTMFETCHOPERATION_INL
-#define PUSHMTMFETCHOPERATION_INL
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::StringF
-// ---------------------------------------------------------
-//
-RStringF CPushMtmFetchOperation::StringF( HTTP::TStrings aId )
- {
- return iHttpSess.StringPool().StringF( aId, RHTTPSession::GetTable() );
- }
-
-#endif /* def PUSHMTMFETCHOPERATION_INL */
-
--- a/pushmtm/Plugins/PushContentHandler/StringResourceReader.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Implementation of CStringResourceReader
-*
-*
-*/
-
-
-// INCLUDE FILES
-
-#include "StringResourceReader.h"
-#include <f32file.h>
-#include <barsread.h>
-#include <bautils.h>
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CStringResourceReader::CStringResourceReader
-// ---------------------------------------------------------
-//
-CStringResourceReader::CStringResourceReader
- ( RFs& aFs, const TDesC& aRscFileWithPathAndDrive )
-: CBase(), iFs( aFs ), iInitialized( EFalse )
- {
- iRscFileName.Copy( aRscFileWithPathAndDrive );
- }
-
-// ---------------------------------------------------------
-// CStringResourceReader::~CStringResourceReader
-// ---------------------------------------------------------
-//
-CStringResourceReader::~CStringResourceReader()
- {
- iResourceFile.Close();
- }
-
-// ---------------------------------------------------------
-// CStringResourceReader::AllocReadResourceL
-// ---------------------------------------------------------
-//
-HBufC* CStringResourceReader::AllocReadResourceL( TInt aResId )
- {
- InitializeL();
- //
- HBufC8* buf8 = iResourceFile.AllocReadLC( aResId );
-#ifdef _UNICODE
- const TPtrC buf( (const TUint16*)buf8->Ptr(), buf8->Size()/2 );
-#else
- const TPtrC buf( buf8->Ptr(), buf8->Size() );
-#endif
- HBufC* retBuf = buf.AllocL();
- CleanupStack::PopAndDestroy( buf8 );
-
- return retBuf;
- }
-
-// ---------------------------------------------------------
-// CStringResourceReader::AllocReadResourceLC
-// ---------------------------------------------------------
-//
-HBufC* CStringResourceReader::AllocReadResourceLC( TInt aResId )
- {
- HBufC* temp = AllocReadResourceL( aResId );
- CleanupStack::PushL( temp );
- return temp;
- }
-
-// ---------------------------------------------------------
-// CStringResourceReader::InitializeL
-// ---------------------------------------------------------
-//
-void CStringResourceReader::InitializeL()
- {
- if ( !iInitialized )
- {
- TFileName resourceFileName( iRscFileName );
- BaflUtils::NearestLanguageFile( iFs, resourceFileName );
- iResourceFile.OpenL( iFs, resourceFileName );
- iResourceFile.ConfirmSignatureL( iResourceFile.SignatureL() );
- iInitialized = ETrue;
- }
- }
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/StringResourceReader.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Declaration of CStringResourceReader.
-*
-*
-*/
-
-
-#ifndef STRINGRESOURCEREADER_H
-#define STRINGRESOURCEREADER_H
-
-// INCLUDE FILES
-
-#include <e32base.h>
-#include <e32std.h>
-#include <barsc.h>
-
-// FORWARD DECLARATIONS
-
-class RFs;
-
-// CLASS DECLARATION
-
-/**
-* Utility class that helps reading string resources without CONE.
-* Not intended for derivation.
-*/
-class CStringResourceReader : public CBase
- {
- public: // Constructors and destructor
-
- CStringResourceReader( RFs& aFs, const TDesC& aRscFileWithPathAndDrive );
-
- ~CStringResourceReader();
-
- public: // New functions
-
- /**
- * Return a given string from resource.
- * @param aResId Resource ID.
- * @return See above.
- */
- HBufC* AllocReadResourceL( TInt aResId );
- HBufC* AllocReadResourceLC( TInt aResId );
-
- private: // New functions
-
- void InitializeL();
-
- private: // Data members
-
- RFs& iFs; ///< File server session.
- TBuf<64> iRscFileName;
- RResourceFile iResourceFile;
- TBool iInitialized;
- };
-
-#endif // STRINGRESOURCEREADER_H
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/si_dict.c Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +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 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:
-*
-*/
-
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * Dictionary = SI
- * Public id = 5
- * Doc Type = -//WAPFORUM//DTD SI 1.0//EN
- */
-
-#include "si_dict.h"
-
-
-static const NW_Ucs2 NW_SI_ElementTag_si[] = {'s','i','\0'};
-static const NW_Ucs2 NW_SI_ElementTag_indication[] = {'i','n','d','i','c','a','t','i','o','n','\0'};
-static const NW_Ucs2 NW_SI_ElementTag_info[] = {'i','n','f','o','\0'};
-static const NW_Ucs2 NW_SI_ElementTag_item[] = {'i','t','e','m','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * tag entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SI_tag_token_0[4] = {
- {0x05, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_si},
- {0x06, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_indication},
- {0x07, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_info},
- {0x08, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_item}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * tag entries - sorted by name
- */
-static const
-NW_Byte NW_SI_tag_name_0[4] = {
- 1,
- 2,
- 3,
- 0,
-};
-
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_none[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','n','o','n','e','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_low[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','l','o','w','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_medium[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','m','e','d','i','u','m','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_high[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','h','i','g','h','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_delete[] = {'a','c','t','i','o','n','=','d','e','l','e','t','e','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_created[] = {'c','r','e','a','t','e','d','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href[] = {'h','r','e','f','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_si_expires[] = {'s','i','-','e','x','p','i','r','e','s','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_si_id[] = {'s','i','-','i','d','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_class[] = {'c','l','a','s','s','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * attribute entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SI_attribute_token_0[19] = {
- {0x05, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_none},
- {0x06, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_low},
- {0x07, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_medium},
- {0x08, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_high},
- {0x09, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_delete},
- {0x0a, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_created},
- {0x0b, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href},
- {0x0c, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___},
- {0x0d, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___www_},
- {0x0e, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___},
- {0x0f, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___www_},
- {0x10, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_expires},
- {0x11, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_id},
- {0x12, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_class},
- {0x13, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action},
- {0x85, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__com_},
- {0x86, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__edu_},
- {0x87, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__net_},
- {0x88, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__org_}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * attribute entries - sorted by name
- */
-static const
-NW_Byte NW_SI_attribute_name_0[19] = {
- 15,
- 16,
- 17,
- 18,
- 14,
- 4,
- 3,
- 1,
- 2,
- 0,
- 13,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
-};
-
-/*
- * Tag codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SI_tag_codepages[1] = {
- {4, (NW_WBXML_DictEntry_t*)&NW_SI_tag_token_0[0], (NW_Byte *)&NW_SI_tag_name_0[0]},
-};
-
-/*
- * Attribute codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SI_attribute_codepages[1] = {
- {19, (NW_WBXML_DictEntry_t*)&NW_SI_attribute_token_0[0], (NW_Byte *)&NW_SI_attribute_name_0[0]},
-};
-
-static const NW_Ucs2 NW_SI_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','I',' ','1','.','0','/','/','E','N','\0'};
-
-/*
- * Dictionary
- */
-const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary = {
- NW_SI_PublicId,
- (NW_Ucs2 *)NW_SI_docType,
- 1, (NW_WBXML_Codepage_t*)&NW_SI_tag_codepages[0],
- 1, (NW_WBXML_Codepage_t*)&NW_SI_attribute_codepages[0],
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
--- a/pushmtm/Plugins/PushContentHandler/si_dict.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +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 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:
-*
-*/
-
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-#ifndef HEADER_GUARD_si_dict_h
-#define HEADER_GUARD_si_dict_h
-
-
-#include <nw_wbxml_dictionary.h>
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-#define NW_SI_PublicId 5
-
-typedef enum NW_SI_ElementToken_0_e{
- NW_SI_ElementToken_si = 0x0005,
- NW_SI_ElementToken_indication = 0x0006,
- NW_SI_ElementToken_info = 0x0007,
- NW_SI_ElementToken_item = 0x0008
-}NW_SI_ElementToken_0_t;
-
-
-typedef enum NW_SI_AttributeToken_0_e{
- NW_SI_AttributeToken_action_signal_none = 0x0005,
- NW_SI_AttributeToken_action_signal_low = 0x0006,
- NW_SI_AttributeToken_action_signal_medium = 0x0007,
- NW_SI_AttributeToken_action_signal_high = 0x0008,
- NW_SI_AttributeToken_action_delete = 0x0009,
- NW_SI_AttributeToken_created = 0x000a,
- NW_SI_AttributeToken_href = 0x000b,
- NW_SI_AttributeToken_href_http___ = 0x000c,
- NW_SI_AttributeToken_href_http___www_ = 0x000d,
- NW_SI_AttributeToken_href_https___ = 0x000e,
- NW_SI_AttributeToken_href_https___www_ = 0x000f,
- NW_SI_AttributeToken_si_expires = 0x0010,
- NW_SI_AttributeToken_si_id = 0x0011,
- NW_SI_AttributeToken_class = 0x0012,
- NW_SI_AttributeToken_action = 0x0013,
- NW_SI_AttributeToken__com_ = 0x0085,
- NW_SI_AttributeToken__edu_ = 0x0086,
- NW_SI_AttributeToken__net_ = 0x0087,
- NW_SI_AttributeToken__org_ = 0x0088
-}NW_SI_AttributeToken_0_t;
-
-extern const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary;
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
--- a/pushmtm/Plugins/PushContentHandler/sl_dict.c Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +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 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:
-*
-*/
-
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * Dictionary = SL
- * Public id = 6
- * Doc Type = -//WAPFORUM//DTD SL 1.0//EN
- */
-
-#include "sl_dict.h"
-
-
-static const NW_Ucs2 NW_SL_ElementTag_sl[] = {'s','l','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * tag entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SL_tag_token_0[1] = {
- {0x05, (NW_String_UCS2Buff_t *) NW_SL_ElementTag_sl}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * tag entries - sorted by name
- */
-static const
-NW_Byte NW_SL_tag_name_0[1] = {
- 0,
-};
-
-static const NW_Ucs2 NW_SL_AttributeTag_action_execute_low[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','l','o','w','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_action_execute_high[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','h','i','g','h','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_action_cache[] = {'a','c','t','i','o','n','=','c','a','c','h','e','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href[] = {'h','r','e','f','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * attribute entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SL_attribute_token_0[13] = {
- {0x05, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_low},
- {0x06, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_high},
- {0x07, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_cache},
- {0x08, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href},
- {0x09, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___},
- {0x0a, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___www_},
- {0x0b, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___},
- {0x0c, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___www_},
- {0x0d, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action},
- {0x85, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__com_},
- {0x86, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__edu_},
- {0x87, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__net_},
- {0x88, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__org_}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * attribute entries - sorted by name
- */
-static const
-NW_Byte NW_SL_attribute_name_0[13] = {
- 9,
- 10,
- 11,
- 12,
- 8,
- 2,
- 1,
- 0,
- 3,
- 4,
- 5,
- 6,
- 7,
-};
-
-/*
- * Tag codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SL_tag_codepages[1] = {
- {1, (NW_WBXML_DictEntry_t*)&NW_SL_tag_token_0[0], (NW_Byte *)&NW_SL_tag_name_0[0]},
-};
-
-/*
- * Attribute codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SL_attribute_codepages[1] = {
- {13, (NW_WBXML_DictEntry_t*)&NW_SL_attribute_token_0[0], (NW_Byte *)&NW_SL_attribute_name_0[0]},
-};
-
-static const NW_Ucs2 NW_SL_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','L',' ','1','.','0','/','/','E','N','\0'};
-
-/*
- * Dictionary
- */
-const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary = {
- NW_SL_PublicId,
- (NW_Ucs2 *)NW_SL_docType,
- 1, (NW_WBXML_Codepage_t*)&NW_SL_tag_codepages[0],
- 1, (NW_WBXML_Codepage_t*)&NW_SL_attribute_codepages[0],
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
--- a/pushmtm/Plugins/PushContentHandler/sl_dict.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +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 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:
-*
-*/
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-#ifndef HEADER_GUARD_sl_dict_h
-#define HEADER_GUARD_sl_dict_h
-
-#include <nw_wbxml_dictionary.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-#define NW_SL_PublicId 6
-
-typedef enum NW_SL_ElementToken_0_e{
- NW_SL_ElementToken_sl = 0x0005
-}NW_SL_ElementToken_0_t;
-
-
-typedef enum NW_SL_AttributeToken_0_e{
- NW_SL_AttributeToken_action_execute_low = 0x0005,
- NW_SL_AttributeToken_action_execute_high = 0x0006,
- NW_SL_AttributeToken_action_cache = 0x0007,
- NW_SL_AttributeToken_href = 0x0008,
- NW_SL_AttributeToken_href_http___ = 0x0009,
- NW_SL_AttributeToken_href_http___www_ = 0x000a,
- NW_SL_AttributeToken_href_https___ = 0x000b,
- NW_SL_AttributeToken_href_https___www_ = 0x000c,
- NW_SL_AttributeToken_action = 0x000d,
- NW_SL_AttributeToken__com_ = 0x0085,
- NW_SL_AttributeToken__edu_ = 0x0086,
- NW_SL_AttributeToken__net_ = 0x0087,
- NW_SL_AttributeToken__org_ = 0x0088
-}NW_SL_AttributeToken_0_t;
-
-extern const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary;
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-** (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapter.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Handles white list settings in provisioning.
-*
-*/
-
-
-#ifndef WHITELISTADAPTER_H
-#define WHITELISTADAPTER_H
-
-// INCLUDE FILES
- // User includes
-#include "WhiteListAdapterDef.h"
- // System includes
-#include <CWPAdapter.h>
-#include <msvapi.h>
-#include <MWPContextExtension.h>
-
-// FORWARD DECLARATIONS
-
-class CPushMtmSettings;
-class CWPCharacteristic;
-class CWPParameter;
-class MWPPairVisitor;
-class TWhiteListAdapterItem;
-
-// CLASS DECLARATION
-
-/**
-* An ECOM adapter plug-in. It is responsible for maintaining data in a
-* WAP Provisioning pushed message : we get appropriate physical proxy
-* addresses from the message and store them in Push MTM settings. It is the
-* Push Content Handler that will use these addresses to filter out
-* unauthorized pushed SL messages.
-* Note : although an adapter should always be prepared for displaying the
-* processed and stored settings in the appropriate format, the stored items
-* in this specific adapter will _never_ be displayed. Thus, ItemCount,
-* SummaryTitle and SummaryText methods have been written considering this
-* approach.
-*/
-class CWhiteListAdapter : public CWPAdapter,
- public MMsvSessionObserver,
- public MWPContextExtension
- {
- public : // construction, destruction
- /**
- * Two-phased constructor.
- */
- static CWhiteListAdapter* NewL();
-
- /**
- * Destructor.
- */
- ~CWhiteListAdapter();
-
- public : // from CWPAdapter
-
- /**
- * Check the number of settings items.
- * @see CWPAdapter
- */
- /*virtual*/ TInt ItemCount() const;
-
- /**
- * Returns the title of the nth summary line.
- * @see CWPAdapter
- */
- /*virtual*/ const TDesC16& SummaryTitle( TInt aIndex ) const;
-
- /**
- * Returns the text of the nth summary line.
- * @see CWPAdapter
- */
- /*virtual*/ const TDesC16& SummaryText( TInt aIndex ) const;
-
- /**
- * Saves one setting handled by the adapter.
- * @see CWPAdapter
- */
- /*virtual*/ void SaveL( TInt aItem );
-
- /**
- * Returns ETrue if the adapter can set the settings as default.
- * @see CWPAdapter
- */
- /*virtual*/ TBool CanSetAsDefault( TInt aItem ) const;
-
- /**
- * Adapter sets the settings as default.
- * @see CWPAdapter
- */
- /*virtual*/ void SetAsDefaultL( TInt aItem );
-
- /**
- * Calls the pair visitor for each detail line of an item.
- * @see CWPAdapter
- */
- /*virtual*/ TInt DetailsL( TInt aItem, MWPPairVisitor& aVisitor );
-
- /**
- * Returns a pointer to a context extension.
- * @param aExtension
- * Contains a pointer to MWPContextExtension if supported.
- * @return KErrNotSupported if not supported, KErrNone otherwise
- */
- /*virtual*/ TInt ContextExtension( MWPContextExtension*& aExtension );
-
- public: // From MWPVisitor (inheritance is through CWPAdapter)
-
- /**
- * Called for each characteristic found.
- * @see MWPVisitor
- */
- /*virtual*/ void VisitL( CWPCharacteristic& aCharacteristic );
-
- /**
- * Called for each parameter found.
- * @see MWPVisitor
- */
- /*virtual*/ void VisitL( CWPParameter& aParameter );
-
- /**
- * Called for each link to a logical proxy or access point.
- * @see MWPVisitor
- */
- /*virtual*/ void VisitLinkL( CWPCharacteristic& aCharacteristic );
-
- public : // from MMsvSessionObserver
- /**
- * Indicates an event has occurred.
- * @see MMsvSessionObserver
- */
- /*virtual*/ void HandleSessionEventL( TMsvSessionEvent aEvent,
- TAny* aArg1,
- TAny* aArg2,
- TAny* aArg3 );
-
- private : // construction
- /**
- * Constructor.
- */
- CWhiteListAdapter();
-
- /**
- * Second-phase constructor.
- */
- void ConstructL();
-
- private : // internal new methods
- /**
- * This method is for interpreting a string as push support.
- * If the value of the string is '1', then push is enabled,
- * if it's equal to '0', then push is disabled, otherwise the proxy
- * does not care of push.
- * @param aPushSupport String to be processed.
- * @return TPushSupport enumeration value.
- */
- TPushSupport ResolvePushSupport( const TDesC& aPushSupport );
-
- private: // From MWPContextExtension
-
- /**
- * Returns the data used for saving.
- * @param aIndex The index of the data
- * @return The data. Ownership is transferred.
- */
- const TDesC8& SaveDataL( TInt aIndex ) const;
-
- /**
- * Deletes a saved item.
- * @param aSaveData The data used for saving
- */
- void DeleteL( const TDesC8& aSaveData );
-
- /**
- * Returns the UID of the adapter.
- * @return UID
- */
- TUint32 Uid() const;
-
- private : // data members
-
- RPointerArray<TWhiteListAdapterItem> iItems; ///< Physical proxies
-
- /**
- * These items are parts of the current logical proxy and have not
- * been added to the final item array (i.e. iItems array), because
- * further processing is needed.
- */
- RPointerArray<TWhiteListAdapterItem> iItemsToBeAdded;
-
- TPushSupport iLogicalProxyPushSupport;
-
- TBool iPhysicalProxyIsVisited; ///< In order to differentiate
- ///< if we are visiting a
- ///< ph. or a log. proxy
-
- TWhiteListAdapterItem* iCurrentItem; ///< Current physical proxy.
- ///< Has.
-
- CMsvSession* iMsvSession; ///< Session to the Message
- ///< Server. Has.
- CPushMtmSettings* iPushMtmSettings; ///< Push MTM Settings object.
- ///< Has.
- };
-
-#endif // WHITELISTADAPTER_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterDef.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Common constants for the White List Adapter plug-in.
-*
-*/
-
-
-
-#ifndef WHITELISTADAPTERDEF_H
-#define WHITELISTADAPTERDEF_H
-
-// DATA TYPES
-
-enum TPushSupport
- {
- EPushEnabled, ///< Explicitly set to enabled
- EPushDisabled, ///< Explicitly set to disabled
- EPushDontCare ///< Has not been set
- };
-
-#endif // WHITELISTADAPTERDEF_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterItem.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Class the represents a physical proxy (in context of WAP Provisioning).
-*
-*/
-
-
-#ifndef WHITELISTADAPTERITEM_H
-#define WHITELISTADAPTERITEM_H
-
-// INCLUDE FILES
-
- // User includes
-#include "PushInitiator.h"
-#include "WhiteListAdapterDef.h"
- // System includes
-#include <e32std.h>
-
-// CLASS DECLARATION
-
-/**
-* This class encapsulates a proxy item found in a WAP Provisioning document.
-* It is designed for describing a particular White List address.
-*/
-class TWhiteListAdapterItem
- {
- public : // construction, destruction
- /**
- * Default constructor.
- */
- TWhiteListAdapterItem();
-
- public : // getter/setter methods
- /**
- * Use this method to get the address.
- * @return The stored proxy address.
- */
- const TDesC& Address() const;
-
- /**
- * Use this method to get the address type.
- * @return The type of the stored proxy address.
- */
- CPushInitiator::TAddrType AddressType() const;
-
- /**
- * Tells the ID of the item.
- * @return Item ID.
- */
- TUint32 Id() const;
-
- /**
- * Tells the ID of the item in a buffer.
- * @return Item ID in a buffer.
- */
- const TDesC8& IdBuf() const;
-
- /**
- * Tells the push support.
- * @return Push support.
- */
- TPushSupport PushSupport() const;
-
- /**
- * Sets the address.
- * @param aAddress The proxy address to be set.
- */
- void SetAddress( const TDesC& aAddress );
-
- /**
- * Sets the address type.
- * @param aAddressType The proxy address type to be set.
- */
- void SetAddressType( const TDesC& aAddressType );
-
- /**
- * Sets the ID of the item.
- * @param aID The ID.
- */
- void SetId( TUint32 aId );
-
- /**
- * Sets the physical proxy ID.
- * @param aProxyId The physical proxy identifier to be set.
- */
- void SetProxyId( const TDesC& aProxyId );
-
- /**
- * Sets whether or not the proxy address is push enabled.
- * @param aPushEnabled If the value is 1, then push is enabled,
- * otherwise (i.e. when the value is 0) the push is disabled.
- */
- void SetPushSupport( TPushSupport aPushSupport );
-
- public : // other public methods
-
- /**
- * Tells whether the freshly initialized adapter item contains
- * information about a valid proxy address. The proxy address is
- * invalid if either it is not type of the correct address type
- * or the proxy server is not push enabled.
- * @return ETrue if the proxy address is valid, EFalse otherwise.
- */
- TBool Valid() const;
-
- private : // data members
-
- TPtrC iAddress; ///< Physical proxy gateway address
-
- CPushInitiator::TAddrType iAddressType;
-
- /// ID of the item after it has been added to MTM Settings.
- TUint32 iId;
- /// ID of the item packaged into a buffer pointer.
- TPckgC<TUint32> iIdBufPtr;
-
- TPtrC iProxyId; ///< Proxy identifier (or name)
-
- TPushSupport iPushSupport;
- };
-
-#endif // WHITELISTADAPTERITEM_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Logging macros for White List Adapter.
-*
-*
-*/
-
-
-#ifndef WHITELISTADAPTER_LOGGER_H
-#define WHITELISTADAPTER_LOGGER_H
-
-// INCLUDES
-
-#include <e32std.h>
-#include <e32def.h>
-#include <flogger.h>
-
-// TYPES
-
-enum TWhiteListAdapterLogMask ///< Log mask bits.
- {
- ELogOff = 0x00000000, ///< Don't log.
- ELogBasic = 0x00000001, ///< Log only basic activities.
- ELogDetailed = 0x00000002, ///< Detailed activities use this mask.
- ELogAll = 0xFFFFFFFF ///< Log all.
- };
-
-// MACROS
-
-// Determines what to log. Construct this from TWhiteListAdapterLogMask values.
-#define WHITELISTADAPTER_LOG_MASK ELogAll
-/// Determines log detail (0==basic level).
-#define WHITELISTADAPTER_LOG_LEVEL 5
-
-// CLASS DECLARATION
-
-/**
-* Logger class.
-*/
-class WhiteListAdapterLogger
- {
- 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<const TDesC16> 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<const TDesC16> 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<const TDesC8> 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<const TDesC8> 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
- );
- };
-
-#ifdef __TEST_WHITELISTADAPTER_LOG__
-
- /// Write formatted to log.
- #define CLOG( body ) WhiteListAdapterLogger::Write body
- /// Write hex dump.
- #define CDUMP( body ) WhiteListAdapterLogger::HexDump body
- /// Guard "log-only" argument name with this (expands to argument).
- #define LOG_ONLY( argName ) argName
-
-#else /* not defined __TEST_WHITELISTADAPTER_LOG__ */
-
- /// Do nothing (log disabled).
- #define CLOG( body )
- /// Do nothing (log disabled).
- #define CDUMP( body )
- /// Guard "log-only" argument name with this (expands to nothing).
- #define LOG_ONLY( argName )
-
-
-#endif /* def __TEST_WHITELISTADAPTER_LOG__ */
-
-#endif /* def WHITELISTADAPTER_LOGGER_H */
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterPanic.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Panic handling for white list management.
-*
-*/
-
-
-#ifndef WHITELISTADAPTERPANIC_H
-#define WHITELISTADAPTERPANIC_H
-
-// INCLUDE FILES
- // System includes
-#include <e32def.h>
-
-// DATA TYPES
-
-enum TWhiteListAdapterPanics
- {
- ENoItemsToBeDisplayed, ///< A UI control tries to display items
- EArrayIndexOutOfBounds, ///< Self-explanatory
- ENullProxy ///< Physicial proxy cannot be found
- };
-
-// FUNCTION PROTOTYPES
-
-/**
-* Panic handling in White List Adapter module. It's role is centralizing
-* panics.
-* @param aPanic Panic code, defined in THermesProtocolPanic.
-*/
-void Panic( TInt aPanic );
-
-
-#endif // WHITELISTADAPTERPANIC_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterUids.h Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: UID definitions for the White List Adapter plug-in.
-*
-*/
-
-
-
-#ifndef WHITELISTADAPTERUIDS_H
-#define WHITELISTADAPTERUIDS_H
-
-// ================= UIDs ======================
-
-/// DLL UID
-#define KWhiteListAdapterDllUid 0x10008D3E
-
-// ECOM DLL implementation UID - White List Adapter
-#define KWhiteListAdapterImplementationUid 0x101F85EF
-
-// ECOM DLL interface UID
-#define KProvisioningAdapterInterfaceUid 0x101F84D5
-
-#endif // WHITELISTADAPTERUIDS_H
-
-// End of file
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,522 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Handles white list settings in provisioning.
-*
-*/
-
-
-// INCLUDE FILES
-
- // User includes
-#include "PushInitiator.h"
-#include "PushInitiatorList.h"
-#include "PushMtmSettings.h"
-#include "WhiteListAdapter.h"
-#include "WhiteListAdapterDef.h"
-#include "WhiteListAdapterItem.h"
-#include "WhiteListAdapterLogger.h"
-#include "WhiteListAdapterPanic.h"
-#include "WhiteListAdapterUids.h"
- // System includes
-#include <CWPCharacteristic.h>
-#include <CWPParameter.h>
-
-// CONSTANTS
-
-// 'Push enabled' flag settings
-const TInt KPushEnabledFlagLength = 1;
-const TUint16 KPushEnabledFlagTrue = '1';
-const TUint16 KPushEnabledFlagFalse = '0';
-
-// Granularity value for dynamic arrays
-const TInt KDynamicArrayGranularity = 3;
-
-// ================= MEMBER FUNCTIONS ======================
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::CWhiteListAdapter
-// ---------------------------------------------------------
-//
-CWhiteListAdapter::CWhiteListAdapter() : CWPAdapter(),
-iItems( KDynamicArrayGranularity ),
-iItemsToBeAdded( KDynamicArrayGranularity ),
-iLogicalProxyPushSupport( EPushDontCare ), iPhysicalProxyIsVisited( EFalse )
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter c'tor" ) ) );
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ConstructL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::ConstructL()
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "-> WhiteListAdapter::ConstructL" ) ) );
-
- iMsvSession = CMsvSession::OpenSyncL( *this );
- iPushMtmSettings = CPushMtmSettings::NewL();
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "<- WhiteListAdapter::ConstructL" ) ) );
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::NewL
-// ---------------------------------------------------------
-//
-CWhiteListAdapter* CWhiteListAdapter::NewL()
- {
- CWhiteListAdapter* self = new (ELeave) CWhiteListAdapter;
-
- CleanupStack::PushL( self );
-
- self->ConstructL();
-
- CleanupStack::Pop(); // self
-
- return self;
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::~CWhiteListAdapter
-// ---------------------------------------------------------
-//
-CWhiteListAdapter::~CWhiteListAdapter()
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "-> WhiteListAdapter d'tor" ) ) );
-
- delete iCurrentItem;
-
- delete iPushMtmSettings; // It has to be deleted before iMsvSession,
- // because it uses iMsvSession->FileSession().
- delete iMsvSession;
-
- CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter d'tor, iItemsToBeAdded.Count:%d" ),
- iItemsToBeAdded.Count() ) );
- iItemsToBeAdded.ResetAndDestroy();
- iItemsToBeAdded.Close();
-
- CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter d'tor, iItems.Count:%d" ), iItems.Count() ) );
- iItems.ResetAndDestroy();
- iItems.Close();
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "<- WhiteListAdapter d'tor" ) ) );
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ItemCount
-// ---------------------------------------------------------
-//
-TInt CWhiteListAdapter::ItemCount() const
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::ItemCount %d" ), iItems.Count() ) );
-
- return iItems.Count();
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SummaryTitle
-// ---------------------------------------------------------
-//
-const TDesC16& CWhiteListAdapter::SummaryTitle( TInt /*aIndex*/ ) const
- {
- // As WL text will never be shown, we simply return an empty string here.
- return KNullDesC16();
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SummaryText
-// ---------------------------------------------------------
-//
-const TDesC16& CWhiteListAdapter::SummaryText( TInt /*aIndex*/ ) const
- {
- // As WL text will never be shown, we simply return an empty string here.
- return KNullDesC16();
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SaveL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::SaveL( TInt aItem )
- {
- __ASSERT_DEBUG( 0 <= aItem && aItem < iItems.Count(),
- Panic( EArrayIndexOutOfBounds ) );
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "-> WhiteListAdapter::SaveL %d" ), aItem ) );
-
- CPushInitiator* pi = new (ELeave) CPushInitiator;
- CleanupStack::PushL( pi );
- pi->SetAddressL( iItems[aItem]->Address(),
- iItems[aItem]->AddressType() );
-
- TUint32 entryId = iPushMtmSettings->PushInitiatorList().AddL( pi );
- CleanupStack::Pop( pi ); // pi, ownership taken over
- // Save the ID of the added entry:
- iItems[aItem]->SetId( entryId );
-
- iPushMtmSettings->SaveL();
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "<- WhiteListAdapter::SaveL" ) ) );
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::CanSetAsDefault
-// ---------------------------------------------------------
-//
-TBool CWhiteListAdapter::CanSetAsDefault( TInt /*aItem*/ ) const
- {
- return EFalse;
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SetAsDefaultL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::SetAsDefaultL( TInt /*aItem*/ )
- {
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::DetailsL
-// ---------------------------------------------------------
-//
-TInt CWhiteListAdapter::DetailsL( TInt /*aItem*/,
- MWPPairVisitor& /*aVisitor*/ )
- {
- return KErrNotSupported;
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ContextExtension
-// ---------------------------------------------------------
-//
-TInt CWhiteListAdapter::ContextExtension( MWPContextExtension*& aExtension )
- {
- aExtension = this;
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::VisitL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::VisitL( CWPCharacteristic& aCharacteristic )
- {
- if ( aCharacteristic.Type() == KWPPxLogical )
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "-> WhiteListAdapter::VisitL PXLOGICAL" ) ) );
-
- aCharacteristic.AcceptL( *this );
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL PXLOGICAL visited, push support is %d" ),
- iLogicalProxyPushSupport ) );
-
- // iItemsToBeAdded contains physical proxies whose push support
- // is either PushEnabled or PushDontCare (i.e. PushDisabled proxies
- // are not present in this array).
- if ( iLogicalProxyPushSupport == EPushEnabled )
- {
- // Knowing that the logical proxy's push support is PushEnabled,
- // we have to add each element of the above-mentioned array.
- for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
- {
- // If addition fails, then we delete the item. Otherwise,
- // the ownership has been taken over by iItems array.
- if ( iItems.Append( iItemsToBeAdded[i] ) != KErrNone )
- {
- delete iItemsToBeAdded[i];
- }
- }
- }
- else
- {
- // We're here : logical proxy's push support is either PushDontCare
- // or PushDisabled. In this case we have to add only those elements
- // in the array whose push support is PushEnabled. This is because
- // physical proxy's push support definition is stronger than the
- // logical proxy's definition.
- for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
- {
- TWhiteListAdapterItem* item = iItemsToBeAdded[i];
- if ( item->PushSupport() == EPushEnabled )
- {
- // If addition fails, then we delete the item. Otherwise,
- // the ownership has been taken over by iItems array.
- if ( iItems.Append( item ) != KErrNone )
- {
- delete item;
- }
- }
- else
- {
- delete item;
- }
- }
- }
-
- // There is only one thing we need to do here : reset the array.
- // At this point, each element in the array is invalid : if the
- // element happened to be valid, then the other array (iItems)
- // took over the ownership. Otherwise (i.e. the element was
- // invalid), the element got deleted manually.
- // Thus, we can safely reset the array.
- iItemsToBeAdded.Reset();
-
- iLogicalProxyPushSupport = EPushDontCare;
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "<- WhiteListAdapter::VisitL PXLOGICAL" ) ) );
- }
- else if ( aCharacteristic.Type() == KWPPxPhysical )
- {
- // This deletion is for safety's sake : if one of the leaving methods
- // in this section (below) has left, then it may happen that this
- // method is called again and iCurrentItem is not NULL. If it is the
- // case, we can avoid having an orphaned memory area by deleting the
- // current item before allocating a new one.
- // However, in most cases iCurrentItem will be NULL.
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "-> WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
-
- delete iCurrentItem;
- iCurrentItem = NULL;
- iCurrentItem = new (ELeave) TWhiteListAdapterItem();
-
- iPhysicalProxyIsVisited = ETrue;
-
- aCharacteristic.AcceptL( *this );
-
- iPhysicalProxyIsVisited = EFalse;
-
- if ( iCurrentItem->Valid() )
- {
- User::LeaveIfError( iItemsToBeAdded.Append( iCurrentItem ) );
- iCurrentItem = NULL; // Ownership transferred.
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL PXPHYSICAL valid & added" ) ) );
- }
- else
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL PXPHYSICAL invalid" ) ) );
- // invalid physical proxy (at least from our point of view)
- delete iCurrentItem;
- iCurrentItem = NULL;
- }
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "<- WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
- }
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::VisitL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::VisitL( CWPParameter& aParameter )
- {
- switch ( aParameter.ID() )
- {
- case EWPParameterPhysicalProxyID :
- {
- __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL PhysicalProxyID" ) ) );
-
- if ( iCurrentItem )
- {
- iCurrentItem->SetProxyId( aParameter.Value() );
- }
-
- break;
- }
- case EWPParameterPxAddr :
- {
- __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL PxAddr" ) ) );
-
- if ( iCurrentItem )
- {
- iCurrentItem->SetAddress( aParameter.Value() );
- }
-
- break;
- }
- case EWPParameterPxAddrType :
- {
- __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL PxAddrType" ) ) );
-
- if ( iCurrentItem )
- {
- iCurrentItem->SetAddressType( aParameter.Value() );
- }
-
- break;
- }
- case EWPParameterPushEnabled :
- {
- if ( iCurrentItem )
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL Physical PushEnabled" ) ) );
-
- // it is a physical proxy
- iCurrentItem->SetPushSupport
- ( ResolvePushSupport( aParameter.Value() ) );
- }
- else
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::VisitL Logical PushEnabled" ) ) );
-
- // it is a logical proxy
- iLogicalProxyPushSupport =
- ResolvePushSupport( aParameter.Value() );
- }
-
- break;
- }
- default :
- break;
- }
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::VisitLinkL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::VisitLinkL( CWPCharacteristic& /*aCharacteristic*/ )
- {
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::HandleSessionEventL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::HandleSessionEventL( TMsvSessionEvent /*aEvent*/,
- TAny* /*aArg1*/,
- TAny* /*aArg2*/,
- TAny* /*aArg3*/ )
- {
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ResolvePushSupport
-// ---------------------------------------------------------
-//
-TPushSupport CWhiteListAdapter::ResolvePushSupport( const TDesC& aPushSupport )
- {
- TPushSupport support = EPushDontCare;
-
- if ( aPushSupport.Length() == KPushEnabledFlagLength )
- {
- if ( aPushSupport[0] == KPushEnabledFlagTrue )
- {
- support = EPushEnabled;
- }
- else if ( aPushSupport[0] == KPushEnabledFlagFalse )
- {
- support = EPushDisabled;
- }
- }
-
- return support;
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SaveDataL
-// ---------------------------------------------------------
-//
-const TDesC8& CWhiteListAdapter::SaveDataL( TInt aIndex ) const
- {
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::SaveDataL %d %d %d" ),
- iItems.Count(), aIndex, iItems[aIndex]->Id() ) );
- return ( iItems[aIndex]->IdBuf() );
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::DeleteL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::DeleteL( const TDesC8& aSaveData )
- {
- // Copy source into a package buffer:
- TPckgBuf<TUint32> entryIdBuf;
- entryIdBuf.Copy( aSaveData );
- // Extract the entry ID:
- TUint32 entryId( entryIdBuf() );
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::DeleteL ID %d" ), entryId ) );
-
- // Now entryId holds the ID - we can remove it from WL:
- CPushInitiatorList& whiteList = iPushMtmSettings->PushInitiatorList();
- // Find the index of the Initiator with the given ID.
- TInt index( KErrNotFound );
- // As the entries are unique in WL by the ID, it's enough
- // to continue the loop until first hit.
- const TInt count( whiteList.Count() );
- for ( TInt i = 0; i < count; ++i )
- {
- const CPushInitiator& initiator = whiteList.At(i);
- if ( initiator.EntryID() == entryId )
- {
- index = i;
- // Found:
- break;
- }
- }
-
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::DeleteL index %d" ), index ) );
- if ( index != KErrNotFound )
- {
- whiteList.Delete( index );
- // Commit changes.
- iPushMtmSettings->SaveL();
- CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
- _L( "WhiteListAdapter::DeleteL Saved..." ) ) );
- }
- }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::Uid
-// ---------------------------------------------------------
-//
-TUint32 CWhiteListAdapter::Uid() const
- {
- return (TUint32)KWhiteListAdapterImplementationUid;
- }
-
-// End of file
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Table of plugins for ECom
-*
-*/
-
-
-
-// INCLUDE FILES
- // System includes
-#include <e32std.h>
-#include <ecom/implementationproxy.h>
-
- // User includes
-#include "WhiteListAdapter.h"
-#include "WhiteListAdapterUids.h"
-
-// CONSTANTS
-
-const TImplementationProxy KImplementationTable[] =
- {
- IMPLEMENTATION_PROXY_ENTRY( KWhiteListAdapterImplementationUid, CWhiteListAdapter::NewL )
- };
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-// -----------------------------------------------------------------------------
-// ImplementationGroupProxy
-// -----------------------------------------------------------------------------
-//
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
- {
- aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
-
- return KImplementationTable;
- }
-
-// End of File
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Handles white list settings in provisioning.
-*
-*/
-
-
-// INCLUDE FILES
- // User includes
-#include "WhiteListAdapterItem.h"
-
-// CONSTANTS
-
-_LIT( KIPv4AddressType, "IPV4" );
-_LIT( KIPv6AddressType, "IPV6" );
-_LIT( KE164AddressType, "E164" );
-_LIT( KAlphanumericAddressType, "ALPHA" );
-
-// ================= MEMBER FUNCTIONS ======================
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::TWhiteListAdapterItem
-// ---------------------------------------------------------
-//
-TWhiteListAdapterItem::TWhiteListAdapterItem()
-: iAddress( KNullDesC ),
- iAddressType( CPushInitiator::ETypeE164 ),
- iId( 0 ),
- iIdBufPtr( iId ),
- iProxyId( KNullDesC ),
- iPushSupport( EPushDontCare )
- {
- iAddressType = CPushInitiator::ETypeIpv4;
- iPushSupport = EPushDontCare;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::Address
-// ---------------------------------------------------------
-//
-const TDesC& TWhiteListAdapterItem::Address() const
- {
- return iAddress;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::AddressType
-// ---------------------------------------------------------
-//
-CPushInitiator::TAddrType TWhiteListAdapterItem::AddressType() const
- {
- return iAddressType;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::Id
-// ---------------------------------------------------------
-//
-TUint32 TWhiteListAdapterItem::Id() const
- {
- return iId;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::IdBuf
-// ---------------------------------------------------------
-//
-const TDesC8& TWhiteListAdapterItem::IdBuf() const
- {
- return iIdBufPtr;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::PushSupport
-// ---------------------------------------------------------
-//
-TPushSupport TWhiteListAdapterItem::PushSupport() const
- {
- return iPushSupport;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetAddress
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetAddress( const TDesC& aAddress )
- {
- iAddress.Set( aAddress );
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetAddressType
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetAddressType( const TDesC& aAddressType )
- {
- if ( !aAddressType.Compare( KIPv4AddressType ) )
- {
- iAddressType = CPushInitiator::ETypeIpv4;
- }
- else if ( !aAddressType.Compare( KIPv6AddressType ) )
- {
- iAddressType = CPushInitiator::ETypeIpv6;
- }
- else if ( !aAddressType.Compare( KE164AddressType ) )
- {
- iAddressType = CPushInitiator::ETypeE164;
- }
- else if ( !aAddressType.Compare( KAlphanumericAddressType ) )
- {
- iAddressType = CPushInitiator::ETypeAlpha;
- }
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetId
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetId( TUint32 aId )
- {
- iId = aId;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetProxyId
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetProxyId( const TDesC& aProxyId )
- {
- iProxyId.Set( aProxyId );
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetPushSupport
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetPushSupport( TPushSupport aPushSupport )
- {
- iPushSupport = aPushSupport;
- }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::Valid
-// ---------------------------------------------------------
-//
-TBool TWhiteListAdapterItem::Valid() const
- {
- TBool valid = EFalse;
-
- // TODO : checking IP address/phone number validity (MsgBioUtils?)
-
- if ( ( iPushSupport == EPushEnabled || iPushSupport == EPushDontCare ) &&
- ( iAddressType == CPushInitiator::ETypeE164 ) &&
- ( 0 < iAddress.Length() ) )
- {
- valid = ETrue;
- }
-
- return valid;
- }
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Implementation of class WhiteListAdapterLogger.
-*
-*
-*/
-
-
-#ifdef __TEST_WHITELISTADAPTER_LOG__
-
-// INCLUDE FILES
- // System includes
-#include <flogger.h>
-
- // User includes
-#include "WhiteListAdapterLogger.h"
-
-// ================= CONSTANTS =======================
-
-/// White List Adapter logging directory.
-_LIT( KWhiteListAdapterLogDir, "WLA" );
-/// White List Adapter log file name.
-_LIT( KWhiteListAdapterLogFile, "Log.txt" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... )
- {
- if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
- ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
- {
- VA_LIST list;
- VA_START( list, aFmt );
- RFileLogger::WriteFormat
- (
- KWhiteListAdapterLogDir,
- KWhiteListAdapterLogFile,
- EFileLoggingModeAppend,
- aFmt,
- list
- );
- VA_END( list );
- }
- }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, VA_LIST& aList )
- {
- if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
- ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
- {
- RFileLogger::WriteFormat
- (
- KWhiteListAdapterLogDir,
- KWhiteListAdapterLogFile,
- EFileLoggingModeAppend,
- aFmt,
- aList
- );
- }
- }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... )
- {
- if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
- ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
- {
- VA_LIST list;
- VA_START( list, aFmt );
- RFileLogger::WriteFormat
- (
- KWhiteListAdapterLogDir,
- KWhiteListAdapterLogFile,
- EFileLoggingModeAppend,
- aFmt,
- list
- );
- VA_END( list );
- }
- }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, VA_LIST& aList )
- {
- if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
- ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
- {
- RFileLogger::WriteFormat
- (
- KWhiteListAdapterLogDir,
- KWhiteListAdapterLogFile,
- EFileLoggingModeAppend,
- aFmt,
- aList
- );
- }
- }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::HexDump()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::HexDump
- (
- TInt32 aMask,
- TInt aLevel,
- const TText* aHeader,
- const TText* aMargin,
- const TUint8* aPtr,
- TInt aLen
- )
- {
- if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
- ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
- {
- RFileLogger::HexDump
- (
- KWhiteListAdapterLogDir,
- KWhiteListAdapterLogFile,
- EFileLoggingModeAppend,
- aHeader,
- aMargin,
- aPtr,
- aLen
- );
- }
- }
-
-#endif // __TEST_WHITELISTADAPTER_LOG__
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Panic handling for white list management.
-*
-*/
-
-
-// INCLUDE FILES
- // System includes
-#include <e32std.h>
-
- // User includes
-#include "WhiteListAdapterPanic.h"
-
-// CONSTANTS
-
-_LIT( KWhiteListAdapterPanicString, "WhiteListAdapter" );
-
-// External function(s)
-
-void Panic( TInt aPanic )
- {
- User::Panic( KWhiteListAdapterPanicString, aPanic );
- }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmCliSrv.mmp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmCliSrv.dll
+TARGETTYPE dll
+UID 0x10004845 0x10008D42
+TARGETPATH SHARED_LIB_DIR
+
+CAPABILITY CAP_GENERAL_DLL
+
+VENDORID VID_DEFAULT
+
+USERINCLUDE ../MtmCliSrvInc
+USERINCLUDE ../Inc
+USERINCLUDE ../MtmUtilInc
+USERINCLUDE ../MtmUiInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../MtmCliSrvSrc
+SOURCE PushMtmClient.cpp
+SOURCE PushMtmCliSrvPanic.cpp
+SOURCE PushMtmGcOperation.cpp
+SOURCE PushMtmServer.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#ifdef __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY euser.lib
+LIBRARY msgs.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY SISLPushMsgUtils.lib
+
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+
+#if defined(ARMCC)
+ DEFFILE ../EABI/PUSHMTMCLISRVU_EKA2.def
+#else
+ DEFFILE ../BWinsCw/PUSHMTMCLISRVU_EKA2.def
+#endif
+
+START RESOURCE ../Data/PushRegistry.rss
+TARGET PushRegistry.rsc
+TARGETPATH MTM_INFO_FILE_DIR
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+END
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmIcons.mk Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,67 @@
+#
+# 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 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:
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\pushmtm.mif
+HEADERFILENAME=$(HEADERDIR)\pushmtm.mbg
+
+do_nothing :
+ @rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+ mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
+ /c8,1 qgn_prop_mce_push_unread.bmp \
+ /c8,1 qgn_prop_mce_push_read.bmp
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+ @echo $(HEADERFILENAME)&& \
+ @echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmUi.mmp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmUi.dll
+TARGETTYPE dll
+UID 0x10004845 0x10008D43
+TARGETPATH SHARED_LIB_DIR
+
+CAPABILITY CAP_GENERAL_DLL
+
+VENDORID VID_DEFAULT
+
+START RESOURCE ../Data/PushMtmUi.rss
+DEPENDS avkon.rsg
+HEADER
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGETPATH MTM_RESOURCE_DIR
+END // RESOURCE
+
+USERINCLUDE ../MtmUiInc
+USERINCLUDE ../Inc
+USERINCLUDE ../MtmUtilInc
+USERINCLUDE ../ViewerInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../MtmUiSrc
+SOURCE PushLoadServiceOp.cpp
+SOURCE PushMessageInfoDialog.cpp
+SOURCE PushMessageInfoOp.cpp
+SOURCE PushMtmUi.cpp
+SOURCE PushMtmUiData.cpp
+SOURCE PushMtmUiOperation.cpp
+SOURCE PushMtmUiPanic.cpp
+SOURCE PushSettingsDialog.cpp
+SOURCE PushViewMessageOp.cpp
+
+#ifdef __SERIES60_PUSH_SP
+SOURCE PushViewServiceOp.cpp
+#endif // __SERIES60_PUSH_SP
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY apparc.lib
+LIBRARY AknSkins.lib
+LIBRARY apmime.lib
+LIBRARY avkon.lib
+LIBRARY bafl.lib
+LIBRARY CdlEngine.lib
+LIBRARY CommonEngine.lib
+LIBRARY commonui.lib
+LIBRARY cone.lib
+LIBRARY ecom.lib
+LIBRARY efsrv.lib
+LIBRARY eikcoctl.lib
+LIBRARY eikcore.lib
+LIBRARY eikdlg.lib
+LIBRARY euser.lib
+LIBRARY featmgr.lib
+LIBRARY inetprotutil.lib
+#ifdef __SERIES60_PUSH_SP
+LIBRARY MiscPushMsgUtils.lib // For CUnknownPushMsgEntry.
+#endif // __SERIES60_PUSH_SP
+LIBRARY msgs.lib
+LIBRARY mtur.lib
+LIBRARY muiu.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY PushMsgEntry.lib
+LIBRARY SISLPushMsgUtils.lib
+LIBRARY CENTRALREPOSITORY.lib
+
+#ifdef __SERIES60_HELP
+LIBRARY hlplch.lib // for "Help" options menu
+#endif // __SERIES60_HELP
+
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+
+#if defined(ARMCC)
+ DEFFILE ../EABI/PUSHMTMUIU_EKA2.def
+#else
+ DEFFILE ../BWinsCw/PUSHMTMUIU_EKA2.def
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmUtil.mmp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <bldvariant.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmUtil.dll
+TARGETTYPE dll
+UID 0x1000008d 0x10008D44
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+USERINCLUDE ../MtmUtilInc
+USERINCLUDE ../Inc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../MtmUtilSrc
+SOURCE PushAsyncOpRunner.cpp
+#ifdef __PUSH_WHITELIST
+SOURCE PushAuthenticationUtilitiesWL.cpp
+#else // __PUSH_WHITELIST
+SOURCE PushAuthenticationUtilitiesPure.cpp
+#endif // __PUSH_WHITELIST
+SOURCE PushInitiator.cpp
+SOURCE PushInitiatorList.cpp
+SOURCE PushMtmOperation.cpp
+SOURCE PushMtmSettings.cpp
+SOURCE PushMtmUtil.cpp
+SOURCE PushMtmUtilPanic.cpp
+#ifdef __PUSH_WHITELIST
+SOURCE WhiteListImporterWL.cpp
+#else // __PUSH_WHITELIST
+SOURCE WhiteListImporterDummy.cpp
+#endif // __PUSH_WHITELIST
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY efsrv.lib
+LIBRARY estor.lib
+LIBRARY euser.lib
+LIBRARY featmgr.lib
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+LIBRARY inetprotutil.lib
+LIBRARY msgs.lib
+#ifdef __PUSH_WHITELIST
+LIBRARY PushMsgEntry.lib
+LIBRARY WapPushUtils.lib
+#endif // __PUSH_WHITELIST
+LIBRARY SISLPushMsgUtils.lib
+LIBRARY CENTRALREPOSITORY.lib
+
+#if defined(ARMCC)
+ DEFFILE ../EABI/PUSHMTMUTILU_EKA2.def
+#else
+ DEFFILE ../BWinsCw/PUSHMTMUTILU_EKA2.def
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushViewer.mmp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushViewer.exe
+EPOCSTACKSIZE 0x5000
+TARGETTYPE exe
+UID 0x100039CE 0x10008D3C
+
+CAPABILITY CAP_APPLICATION
+VENDORID VID_DEFAULT
+
+USERINCLUDE ../ViewerInc
+USERINCLUDE ../Inc
+USERINCLUDE ../MtmUiInc
+USERINCLUDE ../MtmUtilInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH ../ViewerSrc
+SOURCE PushViewerApp.cpp
+SOURCE PushViewerAppServer.cpp
+SOURCE PushViewerDoc.cpp
+SOURCE PushViewerPanic.cpp
+SOURCE PushViewerMsgEdAppUi.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY CommonUI.lib
+LIBRARY apparc.lib
+LIBRARY avkon.lib
+LIBRARY cone.lib
+LIBRARY eikcoctl.lib
+LIBRARY eikcore.lib
+LIBRARY euser.lib
+LIBRARY MsgEditorAppUi.lib
+LIBRARY MsgEditorModel.lib
+LIBRARY MsgEditorView.lib
+LIBRARY msgs.lib
+LIBRARY muiu.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY SISLPushMsgUtils.lib
+
+#ifdef __SERIES60_HELP
+LIBRARY hlplch.lib // for "Help" options menu
+#endif // __SERIES60_HELP
+
+#ifdef __TEST_LOG_MMP
+LIBRARY efsrv.lib
+DEBUGLIBRARY flogger.lib
+#endif
+
+START RESOURCE ../Data/PushViewer.rss
+DEPENDS avkon.rsg
+HEADER
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGETPATH APP_RESOURCE_DIR
+END // RESOURCE
+
+START RESOURCE ../Data/PushViewer_reg.rss
+DEPENDS pushviewer.rsg
+// Do not change the UID below.
+TARGETPATH /private/10003a3f/apps
+END
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/bld.inf Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Build specification file
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+DEFAULT
+
+// Help exports
+#include "../help/group/bld.inf"
+
+PRJ_EXPORTS
+../Inc/PushMtmCommands.hrh APP_LAYER_PLATFORM_EXPORT_PATH(PushMtmCommands.hrh)
+../rom/PushMtm.iby CORE_APP_LAYER_IBY_EXPORT_PATH(PushMtm.iby)
+../rom/PushMtmResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(PushMtmResources.iby)
+../rom/S60SiSlWapPush.iby CORE_APP_LAYER_IBY_EXPORT_PATH(S60SiSlWapPush.iby)
+#ifndef __S60_32__
+../rom/wappush.iby CORE_APP_LAYER_IBY_EXPORT_PATH(wappush.iby)
+#endif
+../loc/pushmtmui.loc APP_LAYER_LOC_EXPORT_PATH(pushmtmui.loc)
+../loc/pushviewer.loc APP_LAYER_LOC_EXPORT_PATH(pushviewer.loc)
+
+../conf/pushmtm.confml APP_LAYER_CONFML(pushmtm.confml)
+../conf/pushmtm_10008D42.crml APP_LAYER_CRML(pushmtm_10008D42.crml)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+
+// MTM registry files
+//gnumakefile PushRegistry.mk
+gnumakefile PushMtmIcons.mk
+// Push Mtm Utility
+PushMtmUtil.mmp
+// Push Server Mtm, Client Mtm and Ui Mtm
+PushMtmCliSrv.mmp
+// Ui Data Mtm
+PushMtmUi.mmp
+// Push Viewer
+PushViewer.mmp
+
+#include "../Plugins/Group/Bld.inf"
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE pushmtm.mif
+OPTION HEADERFILE pushmtm.mbg
+OPTION SOURCES -c8,1 qgn_prop_mce_push_unread -c8,1 qgn_prop_mce_push_read
+END
+
+PRJ_MMPFILES
+
+// MTM registry files
+// Push Mtm Utility
+PushMtmUtil.mmp
+// Push Server Mtm, Client Mtm and Ui Mtm
+PushMtmCliSrv.mmp
+// Ui Data Mtm
+PushMtmUi.mmp
+// Push Viewer
+PushViewer.mmp
+
+#include "../Plugins/Group/Bld.inf"
+
+#endif
+
+PRJ_TESTMMPFILES
+
+
--- a/pushmtm/loc/PushMtmUi.loc Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: This is a localisation file.
-*
-*/
-
-
-
-// LOCALISATION STRINGS
-
-// d: Command in options list in Mce.
-// d: Opens Message info dialog
-// d: Visible when one message selected.
-// l: list_single_pane_t1_cp2
-//
-#define qtn_mce_info "Message info"
-
-// d: Command in options list in Mce.
-// d: View a message
-// l: list_single_pane_t1_cp2
-//
-#define qtn_mce_open_to_brow "View Service"
-
-// d: Command in options list in Mce.
-// d: Load a message
-// l: list_single_pane_t1_cp2
-//
-#define qtn_mce_fetch "Load Service"
-
-// d: Item in settings list in Mce.
-// l: list_double_pane_t1
-//
-#define qtn_mce_settings_push "Service message"
-
-//=============================================================================
-//
-// Push Settings Dialog related resources
-//
-//=============================================================================
-
-// d:Title
-// l:title_pane_t2/opt9
-//
-#define qtn_mce_title_settings_push "Service Settings"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_change "Change"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_delete "Delete"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_exit "Exit"
-
-// d:Setting item title
-// l:list_setting_pane_t1
-//
-#define qtn_mce_settings_push_recept "Service reception"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_recep_on "On"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_recep_off "Off"
-
-// d:Setting item title
-// l:list_setting_pane_t1
-//
-#define qtn_mce_settings_push_loading "Download messages"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_load_autom "Automatically"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_load_man "Manually"
-
-// d:Setting confirmation query
-// l:popup_note_window
-//
-#define qtn_wml_push_sttng_autom_conf_q "Messages will be downloaded automatically when connection is active. Continue?"
-
-//=============================================================================
-//
-// Push Message Info Dialog related resources
-//
-//=============================================================================
-
-// d:Title of the Message info window
-// l:heading_pane_t1
-//
-#define qtn_wml_push_title_msginfo "Message info"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_from "From"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_url "Address"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_body "Message"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_type "Type"
-
-// d:Message type in Message info.
-// d:Note that Message info dialog will wrap it!
-// d:The string can be whatever long!
-// l:list_single_heading_pane_t1_cp2
-//
-#define qtn_wml_push_msgnfo_type_srv_msg "Service message"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msg_content_type "Content type"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_created "Created"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_expires "Expires"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_size "Size"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_rcvd "Received"
-
-//=============================================================================
-//
-// Push Load Service related resources
-//
-//=============================================================================
-
-// d:Setting confirmation query
-// l:popup_note_image_window
-//
-#define qtn_wml_push_note_msg_expired "The service is no longer available - this message will be deleted."
-
-// d:Automatic fetching is on and not authenticated SL execute-high is opened.
-// l:popup_note_window
-//
-#define qtn_service_inbox_sl_not_trusted "The message came from an untrusted source. Download it anyway?"
-
-// d:SL Cache is not authenticated and is opened.
-// l:popup_note_window
-//
-#define qtn_service_inbox_sl_cache_not_trusted "The message came from an untrusted source and will be downloaded to cache. Download it anyway?"
-
-//=============================================================================
-//
-// Misc
-//
-//=============================================================================
-
-// d:First line of the Inbox list item
-// l:list_double_graphic_pane_t1
-//
-#define qtn_mce_push_inbox_sender_unkw "Unknown"
-
-// d:Second line of the Inbox list item
-// l:list_double_graphic_pane_t2
-//
-#define qtn_mce_push_inbox_message "Service message"
-
-// d:Message type in Messages/Settings
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_type_srv_msg "Service message"
-
-//=============================================================================
-//
-// Service reception
-//
-//=============================================================================
-
-// d:Shown in CAknInformationNote
-// l:popup_note_window
-//
-#define qtn_service_inbox_updating_message_received "There are newer service message available, message will be replaced."
-
--- a/pushmtm/loc/PushViewer.loc Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: This is a localisation file.
-*
-*/
-
-
-
-// LOCALISATION STRINGS
-
-// d:Application title
-// l:title_pane_t2/opt9
-//
-#define qtn_wml_push_title_viewer "Service Message"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_inbox_open "Open"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_inbox_fetch "Load service"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_wml_push_cmd_delete "Delete"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_wml_push_cmd_info "Message info"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_wml_push_cmd_exit "Exit"
-
-// d:List item text
-// l:list_double2_large_graphic_pane
-//
-#define qtn_wml_push_w_not_loaded "Content not loaded"
-
-// d:List item text
-// l:list_double_large_graphic_pane_t1_cp2
-//
-#define qtn_wml_push_w_attach "Content"
-
-// d:List item text
-// l:list_double_large_graphic_pane_t1_cp2
-//
-#define qtn_wap_push_w_wml_page "Wml page"
-
-// d:List item text
-// l:list_double2_large_graphic_pane
-//
-#define qtn_mail_lds1_size "Size: %N kB"
-
-// d: Header of the Simple text viewer
-// l: heading_pane_t1
-//
-#define qtn_wml_push_txt_pop_heading "Message:"
-
-// d:Delete confirmation query
-// l:popup_note_image_window
-//
-#define qtn_wml_push_view_query_del "Delete message?"
-
-// d:Shown on the main pane of PushViewer
-// l:msg_body_pane_t1
-//
-#define qtn_service_inbox_push_viewer_view_text "Download service message content by selecting Options - Download."
-
-// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/loc/pushmtmui.loc Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is a localisation file.
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+// d: Command in options list in Mce.
+// d: Opens Message info dialog
+// d: Visible when one message selected.
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_info "Message info"
+
+// d: Command in options list in Mce.
+// d: View a message
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_open_to_brow "View Service"
+
+// d: Command in options list in Mce.
+// d: Load a message
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_fetch "Load Service"
+
+// d: Item in settings list in Mce.
+// l: list_double_pane_t1
+//
+#define qtn_mce_settings_push "Service message"
+
+//=============================================================================
+//
+// Push Settings Dialog related resources
+//
+//=============================================================================
+
+// d:Title
+// l:title_pane_t2/opt9
+//
+#define qtn_mce_title_settings_push "Service Settings"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_change "Change"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_delete "Delete"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_exit "Exit"
+
+// d:Setting item title
+// l:list_setting_pane_t1
+//
+#define qtn_mce_settings_push_recept "Service reception"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_recep_on "On"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_recep_off "Off"
+
+// d:Setting item title
+// l:list_setting_pane_t1
+//
+#define qtn_mce_settings_push_loading "Download messages"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_load_autom "Automatically"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_load_man "Manually"
+
+// d:Setting confirmation query
+// l:popup_note_window
+//
+#define qtn_wml_push_sttng_autom_conf_q "Messages will be downloaded automatically when connection is active. Continue?"
+
+//=============================================================================
+//
+// Push Message Info Dialog related resources
+//
+//=============================================================================
+
+// d:Title of the Message info window
+// l:heading_pane_t1
+//
+#define qtn_wml_push_title_msginfo "Message info"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_from "From"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_url "Address"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_body "Message"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_type "Type"
+
+// d:Message type in Message info.
+// d:Note that Message info dialog will wrap it!
+// d:The string can be whatever long!
+// l:list_single_heading_pane_t1_cp2
+//
+#define qtn_wml_push_msgnfo_type_srv_msg "Service message"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msg_content_type "Content type"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_created "Created"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_expires "Expires"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_size "Size"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_rcvd "Received"
+
+//=============================================================================
+//
+// Push Load Service related resources
+//
+//=============================================================================
+
+// d:Setting confirmation query
+// l:popup_note_image_window
+//
+#define qtn_wml_push_note_msg_expired "The service is no longer available - this message will be deleted."
+
+// d:Automatic fetching is on and not authenticated SL execute-high is opened.
+// l:popup_note_window
+//
+#define qtn_service_inbox_sl_not_trusted "The message came from an untrusted source. Download it anyway?"
+
+// d:SL Cache is not authenticated and is opened.
+// l:popup_note_window
+//
+#define qtn_service_inbox_sl_cache_not_trusted "The message came from an untrusted source and will be downloaded to cache. Download it anyway?"
+
+//=============================================================================
+//
+// Misc
+//
+//=============================================================================
+
+// d:First line of the Inbox list item
+// l:list_double_graphic_pane_t1
+//
+#define qtn_mce_push_inbox_sender_unkw "Unknown"
+
+// d:Second line of the Inbox list item
+// l:list_double_graphic_pane_t2
+//
+#define qtn_mce_push_inbox_message "Service message"
+
+// d:Message type in Messages/Settings
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_type_srv_msg "Service message"
+
+//=============================================================================
+//
+// Service reception
+//
+//=============================================================================
+
+// d:Shown in CAknInformationNote
+// l:popup_note_window
+//
+#define qtn_service_inbox_updating_message_received "There are newer service message available, message will be replaced."
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/loc/pushviewer.loc Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is a localisation file.
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+// d:Application title
+// l:title_pane_t2/opt9
+//
+#define qtn_wml_push_title_viewer "Service Message"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_inbox_open "Open"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_inbox_fetch "Load service"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_delete "Delete"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_info "Message info"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_exit "Exit"
+
+// d:List item text
+// l:list_double2_large_graphic_pane
+//
+#define qtn_wml_push_w_not_loaded "Content not loaded"
+
+// d:List item text
+// l:list_double_large_graphic_pane_t1_cp2
+//
+#define qtn_wml_push_w_attach "Content"
+
+// d:List item text
+// l:list_double_large_graphic_pane_t1_cp2
+//
+#define qtn_wap_push_w_wml_page "Wml page"
+
+// d:List item text
+// l:list_double2_large_graphic_pane
+//
+#define qtn_mail_lds1_size "Size: %N kB"
+
+// d: Header of the Simple text viewer
+// l: heading_pane_t1
+//
+#define qtn_wml_push_txt_pop_heading "Message:"
+
+// d:Delete confirmation query
+// l:popup_note_image_window
+//
+#define qtn_wml_push_view_query_del "Delete message?"
+
+// d:Shown on the main pane of PushViewer
+// l:msg_body_pane_t1
+//
+#define qtn_service_inbox_push_viewer_view_text "Download service message content by selecting Options - Download."
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/Data/10008D3E.rss Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: White List Adapter registration resources.
+*
+*/
+
+
+// INCLUDE FILES
+ // System includes
+#include <ecom/registryinfo.rh>
+
+ // User includes
+#include "WhiteListAdapterUids.h"
+
+// RESOURCE DEFINITIONS
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = KWhiteListAdapterDllUid;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KProvisioningAdapterInterfaceUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = KWhiteListAdapterImplementationUid;
+ version_no = 2;
+ display_name = "";
+ default_data = "";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/101F854C.rss Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Push Content Handlers registration resources.
+*
+*/
+
+
+
+#include <ecom/registryinfo.rh>
+#include "PushContentHandlerDef.hrh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = EUidPushContentHandlerDll;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = EUidPushContentHandlerBase;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushUnknownContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "*";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushSIContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "text/vnd.wap.si||application/vnd.wap.sic";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushSLContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "text/vnd.wap.sl||application/vnd.wap.slc";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushCOContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "text/vnd.wap.co||application/vnd.wap.coc";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushMultiPartMixedContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "application/vnd.wap.multipart.mixed||multipart/mixed";
+ opaque_data = "";
+ },
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = EUidPushMultiPartRelAndAltContentHandler;
+ version_no = 2;
+ display_name = "";
+ default_data = "application/vnd.wap.multipart.related||application/vnd.wap.multipart.alternative||multipart/related||multipart/alternative";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CCOContentHandler.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CCOContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CCOContentHandler.h"
+//#include "PushMtmUtil.h"
+//#include "PushMtmSettings.h"
+//#include <msvids.h>
+//#include <XmlElemt.h>
+
+// CONSTANTS
+
+#if defined(_DEBUG)
+_LIT( KErrPushMsgNull, "NULL CPushMessage" );
+#endif
+
+_LIT( KReserved, "Reserved" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CCOContentHandler::NewL
+// ---------------------------------------------------------
+//
+CCOContentHandler* CCOContentHandler::NewL()
+ {
+ CCOContentHandler* self = new(ELeave) CCOContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::~CCOContentHandler
+// ---------------------------------------------------------
+//
+CCOContentHandler::~CCOContentHandler()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CCOContentHandler
+// ---------------------------------------------------------
+//
+CCOContentHandler::CCOContentHandler()
+: CContentHandlerBase()
+ {
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::ConstructL()
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+
+ iState = EDone;
+ IdleComplete();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+
+ iState = EDone;
+ IdleComplete();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CPushHandlerBase_Reserved1()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CPushHandlerBase_Reserved2()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CCOContentHandler::DoCancel()
+ {
+ Complete( KErrCancel );
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::RunL()
+ {
+ switch( iState )
+ {
+ case EDone:
+ {
+ Complete( KErrNone );
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CCOContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CCOContentHandler::RunError( TInt aError )
+ {
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CCOContentHandler.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CCOContentHandler.
+*
+*/
+
+
+
+#ifndef __CCOCONTENTHANDLER_H__
+#define __CCOCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "PushContentHandlerDef.hrh"
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+
+// CONSTANTS
+
+const TUid KUidPushCOContentHandler = { EUidPushCOContentHandler };
+_LIT( KCOContentHandlerData, "text/vnd.wap.co||application/vnd.wap.coc" );
+
+// FORWARD DECLARATIONS
+
+/*class CMsvSession;
+class CSLPushMsgEntry;
+class CPushMtmUtil;
+class CPushMtmSettings;*/
+
+// CLASS DECLARATION
+
+/**
+* CCOContentHandler Handles Cache Operation Content
+*
+* This handler takes ownership of the CO message and processes it
+* according to the processing rules
+* [WAP Cache Operation version 31-July-2001].
+* Also S60 specific requirements are applied.
+*
+* NB. Currently all CO push messages are discarded!
+*/
+class CCOContentHandler : public CContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CCOContentHandler* NewL();
+
+ /**
+ * D'tor.
+ */
+ virtual ~CCOContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CCOContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg );
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Current implementation does nothing. TODO on 2.1.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Current implementation does nothing. TODO on 2.1.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Current implementation does nothing. TODO on 2.1.
+ * @return Error code to scheduler.
+ */
+ TInt RunError( TInt aError );
+
+ private: // Data
+
+ enum TState
+ {
+ EDone
+ };
+ };
+
+#endif // __CCOCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CMultiPartMixedContentHandler.
+*
+*/
+
+// INCLUDE FILES
+
+#include "CMultiPartMixedContentHandler.h"
+#include <push/pushdispatcher.h>
+#include <push/cmultiparttextiterator.h>
+#include <push/cmultipartbiniterator.h>
+
+// Constants
+
+_LIT(KReserved, "Reserved");
+#if defined(_DEBUG)
+_LIT(KErrPushMsgNull, "NULL CPushMessage");
+#endif
+
+/**
+ * Static Factory Construction
+ *
+ * @param aFs Reference to a file session
+ * @param aLibrary Reference to DLL Library Object
+ * @param aIndex Index number corresponding to the Unknown App Handler Class
+ * 'EMultiPartMixedContentHandler'
+ *
+ * @return fully initialized instance of this class
+ */
+CMultiPartMixedContentHandler* CMultiPartMixedContentHandler::NewL()
+ {
+ CMultiPartMixedContentHandler* self =
+ new (ELeave) CMultiPartMixedContentHandler;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+/**
+ * Destructor
+ */
+CMultiPartMixedContentHandler::~CMultiPartMixedContentHandler()
+ {
+ Cancel();
+ delete iMultiMessage;
+ iContentHandler = NULL; // Not owned.
+ }
+
+/**
+ * Constructor
+ *
+ * @param aFs Reference to a file session
+ * @param aLibrary Reference to DLL Library Object
+ * @param aIndex Index number corresponding to the Unknown App Handler Class
+ * 'EMultiPartMixedContentHandler'
+ */
+CMultiPartMixedContentHandler::CMultiPartMixedContentHandler()
+: CContentHandlerBase()
+ {
+ }
+
+/**
+ * This will complete initialization of the object
+ */
+void CMultiPartMixedContentHandler::ConstructL()
+ {
+ CActiveScheduler::Add(this);
+ }
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+/**
+ * Creates a Multipart Binary Iterator that will be used for splitting apart the binary
+ * mulitpart.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ */
+void CMultiPartMixedContentHandler::LoadMultipartMsgL()
+ {
+ __ASSERT_DEBUG( iMessage!= 0 , User::Panic(KErrPushMsgNull,0));
+
+ TPtrC contentType;
+ iMessage->GetContentType(contentType);
+ if (!contentType.FindF(KMultipartText))
+ iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
+ else if (!contentType.FindF(KMultipartBin))
+ iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
+ else
+ User::Leave(KErrCorrupt);
+
+ iMultiMessage->FirstL();
+ iState = EHandlePart;
+
+ IdleComplete();
+ }
+
+/**
+ * Handles the Message Part returned from the Multipart iterator
+ * by creating a new handler based on the Content-Type, then dispatches it
+ * synchronously.
+ */
+void CMultiPartMixedContentHandler::HandlePartL()
+ {
+ CPushMessage* msgPart = iMultiMessage->PartL();
+ CleanupStack::PushL(msgPart);
+
+ TPtrC contentType;
+ msgPart->GetContentType(contentType);
+ CContentHandlerBase& contentHandler =
+ PushContentTypeDispatcher::GetHandlerL( contentType, *iLog, *iManager );
+ iContentHandler = &contentHandler;
+ CleanupStack::Pop(msgPart);
+
+ // treat as an acknowledged message always to ensure
+ // sequential creation of handlers
+ iContentHandler->HandleMessageL(msgPart, iStatus);
+ iState = ENextPart;
+ SetActive();
+ }
+
+/**
+ * Moves multipart iterator to the next part. If there is none,
+ * State: EDone will be set to complete this handler
+ */
+void CMultiPartMixedContentHandler::NextPartL()
+ {
+ if (iMultiMessage->NextL())
+ iState = EHandlePart;
+ else
+ iState = EDone;
+
+ IdleComplete();
+ }
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+/**
+ * The Asynchronous entry point for this plug-in to handle the CPushMessage.
+ *
+ * Since we really didn't start an async event, make it look as though our
+ * asynchronous request has been completed.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ * @param aStatus The TRequestStatus of the caller indicating that this will
+ * be used aysnchronously
+ */
+void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = ETrue;
+ iMessage = aPushMsg;
+ SetConfirmationStatus(aStatus);
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = ETrue;
+ iMessage = aPushMsg;
+ SetConfirmationStatus(aStatus);
+ // Drop all multipart/mixed messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_MIX_SUPP
+ }
+
+
+/**
+ * The Synchronous entry point for this plug-in to handle the CPushMessage.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ * @param aStatus The TRequestStatus of the caller indicating that this will be
+ * used aysnchronously
+ */
+void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_MIX_SUPP
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+ // Drop all multipart messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_MIX_SUPP
+ }
+
+/**
+ * Cancels Asynronous requests on called handler.
+ */
+void CMultiPartMixedContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved1()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved2()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+/**
+ * Cancels Asynronous requests on caller and completes self.
+ */
+void CMultiPartMixedContentHandler::DoCancel()
+ {
+ if ( iContentHandler )
+ {
+ iContentHandler->CancelHandleMessage();
+ }
+ Complete( KErrCancel );
+ }
+
+/**
+ * State machine to step through the multipart message until it is done
+ *
+ * State EHandlePart: Starts the processing of each part of the multipart
+ * State ENextPart: Moves the interator to point to the next part of the multipart
+ * when there are no more parts, EDone will be the next state
+ * State EDone: Clean up and complete
+ */
+void CMultiPartMixedContentHandler::RunL()
+ {
+ switch(iState)
+ {
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+ case ELoadMsgData:
+ {
+ LoadMultipartMsgL();
+ break;
+ }
+ case EHandlePart:
+ {
+ HandlePartL();
+ break;
+ }
+ case ENextPart:
+ {
+ NextPartL();
+ break;
+ }
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+ case EDone:
+ {
+ Complete(KErrNone);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+/**
+ * Clean up
+ */
+TInt CMultiPartMixedContentHandler::RunError(TInt aError)
+ {
+ iState=EDone;
+ Complete(aError);
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CMultiPartMixedContentHandler.
+*
+*/
+
+#ifndef __CMULTIPARTMIXEDCONTENTHANDLER_H__
+#define __CMULTIPARTMIXEDCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <push/ccontenthandlerbase.h>
+#include <E32Base.h>
+
+// CONSTANTS
+
+const TUid KUidPushMultiPartMixedContentHandler = {
+ EUidPushMultiPartMixedContentHandler };
+_LIT(KMultiPartMixedContentHandlerData,
+ "application/vnd.wap.multipart.mixed||multipart/mixed");
+
+// FORWARD DECLARATIONS
+
+class CMultipartIteratorBase;
+
+// CLASS DECLARATION
+
+/**
+* The MultiPart/Mixed Content Handler
+*
+* Takes apart the mulitpart message, creating a new sub message from each
+* part, then calls on new Push Handlers to process each sub message.
+*
+* All multipart/mixed messages are dropped if __TEST_MULTIPART_MIX_SUPP
+* is not defined.
+*/
+class CMultiPartMixedContentHandler : public CContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ static CMultiPartMixedContentHandler* NewL();
+
+ virtual ~CMultiPartMixedContentHandler();
+
+ private: // Constructors
+
+ CMultiPartMixedContentHandler();
+
+ void ConstructL();
+
+ private: // New functions
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+ void LoadMultipartMsgL();
+
+ void HandlePartL();
+
+ void NextPartL();
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+ private: // Methods from CPushHandlerBase
+
+ void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+ void HandleMessageL(CPushMessage* aPushMsg);
+
+ void CancelHandleMessage();
+
+ void CPushHandlerBase_Reserved1();
+
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ void DoCancel();
+
+ void RunL();
+
+ TInt RunError(TInt aError);
+
+ private: // Attributes
+
+ enum TState
+ {
+ ELoadMsgData,
+ EHandlePart,
+ ENextPart,
+ EDone
+ };
+
+ CMultipartIteratorBase* iMultiMessage;
+
+ CContentHandlerBase* iContentHandler;
+
+ };
+
+
+#endif // __CMULTIPARTMIXEDCONTENTHANDLER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,335 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CMultiPartRelAndAltContentHandler.
+*
+*/
+
+// INCLUDE FILES
+
+#include "CMultiPartRelAndAltContentHandler.h"
+#include <push/cmultipartiteratorbase.h>
+#include <msvids.h>
+
+// Constants
+
+_LIT(KReserved, "Reserved");
+
+/**
+ * Static Factory Construction
+ *
+ * version of NewLC which leaves nothing
+ * on the cleanup stack
+ */
+CMultiPartRelAndAltContentHandler* CMultiPartRelAndAltContentHandler::NewL()
+ {
+ CMultiPartRelAndAltContentHandler* self = new (ELeave) CMultiPartRelAndAltContentHandler;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+/**
+ * Default d'tor
+ */
+CMultiPartRelAndAltContentHandler::~CMultiPartRelAndAltContentHandler()
+ {
+ Cancel();
+ delete iMultiMessage;
+ delete iMsvSession;
+ }
+
+/**
+ * The Multipart Related Content handler
+ * Index number : ESLContentHandlerIndex
+ */
+CMultiPartRelAndAltContentHandler::CMultiPartRelAndAltContentHandler()
+: CContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId )
+ {
+ }
+
+/**
+ * This will complete initialization of the object
+ */
+void CMultiPartRelAndAltContentHandler::ConstructL()
+ {
+ iMsvSession = CMsvSession::OpenSyncL( *this );
+ CActiveScheduler::Add(this);
+ }
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+/**
+* Setup the multipart message.
+*/
+void CMultiPartRelAndAltContentHandler::LoadMultiPartMsgL()
+ {
+#ifdef _DEBUG
+ _LIT(KNullMsg,"NULL CPushMessage");
+ __ASSERT_DEBUG( iMessage != 0 , User::Panic(KNullMsg,0));
+#endif
+ TPtrC contentType;
+ iMessage->GetContentType(contentType);
+ if (!contentType.FindF(KMultipartText))
+ iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
+ else if (!contentType.FindF(KMultipartBin))
+ iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
+ else
+ User::Leave(KErrCorrupt);
+ iMultiMessage->FirstL();
+ IdleComplete();
+ }
+
+/**
+ * Saves message part to messaging server
+ */
+void CMultiPartRelAndAltContentHandler::HandlePartL()
+ {
+ CPushMessage* msgPart = iMultiMessage->PartL();
+ CleanupStack::PushL(msgPart);
+
+ // Create a new Unknown Push Entry to hold the header and body data
+ CUnknownPushMsgEntry* msgEntry=CUnknownPushMsgEntry::NewL();
+ CleanupStack::PushL(msgEntry);
+ // Get the header
+ TPtrC8 header;
+ msgPart->GetHeader(header);
+ //Get the From field
+ TPtrC8 from;
+ if (!msgPart->GetBinaryHeaderField(EHttpFrom,from) &&
+ !msgPart->GetBinaryHeaderField(EHttpXWapInitiatorURI,from) &&
+ !msgPart->GetBinaryHeaderField(EHttpContentLocation,from) )
+ {
+ from.Set(KNullDesC8);
+ }
+ // Get the body
+ TPtrC8 body;
+ msgPart->GetMessageBody(body);
+ TPtrC content;
+ msgPart->GetContentType(content);
+
+ //Set fields of the Unknown Entry
+ msgEntry->SetHeaderL(header);
+ msgEntry->SetMessageDataL(body);
+ msgEntry->SetFromL(from);
+ //Need this next bit so UI knows what to do with the data in the Push Entry
+ msgEntry->SetContentTypeL( content );
+
+ msgEntry->SaveL( *iMsvSession, iSavedMsgId );
+ CleanupStack::PopAndDestroy( 2 ); //msgEntry, msgPart
+
+ iState = ENextPart;
+ IdleComplete();
+
+ }
+
+/**
+ * Move multipart iterator to the next part
+ */
+void CMultiPartRelAndAltContentHandler::NextPartL()
+ {
+ if (iMultiMessage->NextL())
+ {
+ iState = EHandlePart;
+ }
+ else
+ {
+ iState = EDone;
+ }
+ IdleComplete();
+ }
+
+/**
+ *
+ */
+void CMultiPartRelAndAltContentHandler::SaveMsgRootL()
+ {
+ TPtrC8 msgHeaderPtr;
+ iMessage->GetHeader(msgHeaderPtr);
+ CMultiPartPushMsgEntry* msgEntry=CMultiPartPushMsgEntry::NewL();
+ CleanupStack::PushL(msgEntry);
+ msgEntry->SetHeaderL(msgHeaderPtr); //Top level entry
+ TPtrC contentType;
+ iMessage->GetContentType(contentType);
+ msgEntry->SetContentTypeL(contentType);
+
+ iSavedMsgId = msgEntry->SaveL(*iMsvSession,
+ KMsvGlobalInBoxIndexEntryId);
+ CleanupStack::PopAndDestroy();//msgEntry
+ }
+
+/**
+ * Loads multipart data and creates multipart head entry in the message
+ * server index.
+ * @throw KErrCorrupt - message data is corrupt
+ * @throw KErrNoMemory - insufficient free memory to complete operations
+ */
+
+void CMultiPartRelAndAltContentHandler::LoadMsgDataL()
+ {
+ LoadMultiPartMsgL();
+ SaveMsgRootL();
+ iState = EHandlePart;
+ }
+
+void CMultiPartRelAndAltContentHandler::SetMsgCorruptFlagL()
+ {
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( iSavedMsgId );
+ CleanupStack::PushL( msvEntry );
+ TMsvEntry entry = msvEntry->Entry();
+ // get the iMtmData1 value & zero bits 0-3 then add new status
+ TInt32 mtmdata1 = ( entry.iMtmData1 & 0xFFFFFFF0 );
+ mtmdata1 += CPushMsgEntryBase::EPushMsgStatusCorrupt;
+ // Now set values for TMsvEntry and update the server entry
+ entry.iMtmData1 = mtmdata1;
+ msvEntry->ChangeL( entry );
+
+ CleanupStack::PopAndDestroy( msvEntry );
+ }
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+/**
+ * Async. Version
+ */
+void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+#ifdef __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=ETrue;
+ SetConfirmationStatus(aStatus);
+ iMessage = aPushMsg;
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=ETrue;
+ SetConfirmationStatus(aStatus);
+ iMessage = aPushMsg;
+ // Drop all multipart messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_REL_SUPP
+ }
+
+/**
+ * Sync. Version
+ */
+void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+#ifdef __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=EFalse;
+ iMessage = aPushMsg;
+ iState = ELoadMsgData;
+ IdleComplete();
+#else // __TEST_MULTIPART_REL_SUPP
+ iAcknowledge=EFalse;
+ iMessage = aPushMsg;
+ // Drop all multipart messages.
+ iState = EDone;
+ IdleComplete();
+#endif // __TEST_MULTIPART_REL_SUPP
+ }
+
+void CMultiPartRelAndAltContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved1()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved2()
+ {
+ User::Panic(KReserved, KErrNotSupported);
+ }
+
+void CMultiPartRelAndAltContentHandler::DoCancel()
+ {
+ Complete( KErrCancel );
+ }
+
+/**
+*RunL handles each part separately
+*/
+void CMultiPartRelAndAltContentHandler::RunL()
+ {
+ switch(iState)
+ {
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+ case ELoadMsgData:
+ {
+ LoadMsgDataL();
+ break;
+ }
+ case EHandlePart:
+ {
+ HandlePartL();
+ break;
+ }
+ case ENextPart:
+ {
+ NextPartL();
+ break;
+ }
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+ case EDone:
+ {
+ Complete(KErrNone);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+/**
+ * Clean up
+ */
+TInt CMultiPartRelAndAltContentHandler::RunError(TInt aError)
+ {
+ iState=EDone;
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+ if (iSavedMsgId != KMsvNullIndexEntryId)
+ {
+ TRAPD(error, SetMsgCorruptFlagL());
+ }
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+ Complete(aError);
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CMultiPartRelAndAltContentHandler::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CMultiPartRelAndAltContentHandler::HandleSessionEventL(
+ TMsvSessionEvent /*aEvent*/,
+ TAny* /*aArg1*/,
+ TAny* /*aArg2*/,
+ TAny* /*aArg3*/ )
+ {}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CMultiPartRelAndAltContentHandler.
+*
+*/
+
+
+
+#ifndef __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+#define __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+
+// System includes
+//
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+#include <msvstd.h>
+#include <msvapi.h>
+
+// Constants
+//
+const TUid KUidPushMultiPartRelAndAltContentHandler = {
+ EUidPushMultiPartRelAndAltContentHandler };
+
+// Forward class declarations
+//
+class CMsvSession;
+class CMultipartIteratorBase;
+
+/**
+* The MultiPart/Alternative & Multipart/Alternative Content Handler
+*
+* Saves the whole message in the Message Server, each part getting saved as a child
+* entry to the main part.
+*
+* All multipart/rel+alt messages are dropped if __TEST_MULTIPART_REL_SUPP
+* is not defined.
+*/
+class CMultiPartRelAndAltContentHandler : public CContentHandlerBase,
+ public MMsvSessionObserver
+ {
+ public: // Methods
+
+ static CMultiPartRelAndAltContentHandler* NewL();
+
+ virtual ~CMultiPartRelAndAltContentHandler();
+
+ private: // Constructors
+
+ CMultiPartRelAndAltContentHandler();
+
+ void ConstructL();
+
+ private: // New functions
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+ void LoadMultiPartMsgL();
+
+ void HandlePartL();
+
+ void NextPartL();
+
+ void SaveMsgRootL();
+
+ void LoadMsgDataL();
+
+ void SetMsgCorruptFlagL();
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+ private: // Methods from CPushHandlerBase
+
+ void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+ void HandleMessageL(CPushMessage* aPushMsg);
+
+ void CancelHandleMessage();
+
+ void CPushHandlerBase_Reserved1();
+
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ void DoCancel();
+
+ void RunL();
+
+ TInt RunError(TInt aError);
+
+ private: // from MMsvSessionObserver
+
+ void HandleSessionEventL( TMsvSessionEvent aEvent,
+ TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+ private: // Attributes
+
+ enum TState
+ {
+ ELoadMsgData,
+ EHandlePart,
+ EDone,
+ ENextPart
+ };
+
+ CMsvSession* iMsvSession; ///< Has.
+
+ TMsvId iSavedMsgId;
+
+ CMultipartIteratorBase* iMultiMessage;
+ };
+
+#endif // __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushContentHandlerBase.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushInitiatorList.h"
+#include "PushInitiator.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmLog.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "PushContentHandlerPanic.h"
+#include <PushEntry.h>
+#include <push/pushmessage.h>
+#include <msvstd.h>
+#include <mtclreg.h>
+#include <mtclbase.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::CPushContentHandlerBase
+// ---------------------------------------------------------
+//
+CPushContentHandlerBase::CPushContentHandlerBase()
+: CContentHandlerBase()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::ConstructL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::ConstructL()
+ {
+ iMsvSession = CMsvSession::OpenSyncL( *this );
+ PUSHLOG_WRITE("CPushContentHandlerBase iMsvSession OK")
+ iWapPushUtils = CPushMtmUtil::NewL( *iMsvSession );
+ PUSHLOG_WRITE("CPushContentHandlerBase iWapPushUtils OK")
+ iMtmSettings = CPushMtmSettings::NewL();
+ PUSHLOG_WRITE("CPushContentHandlerBase iMtmSettings OK")
+
+ // Add resource file reader.
+ TParse* fileParser = new (ELeave) TParse;
+ CleanupStack::PushL( fileParser );
+ fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
+ iStrRscReader = new (ELeave) CStringResourceReader
+ ( iMsvSession->FileSession(), fileParser->FullName() );
+ CleanupStack::PopAndDestroy( fileParser ); // fileParser
+ fileParser = NULL;
+ PUSHLOG_WRITE("CPushContentHandlerBase iStrRscReader OK")
+
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::~CPushContentHandlerBase
+// ---------------------------------------------------------
+//
+CPushContentHandlerBase::~CPushContentHandlerBase()
+ {
+ PUSHLOG_ENTERFN("CPushContentHandlerBase::~CPushContentHandlerBase")
+
+ // Call Cancel() in derived classes!
+ delete iStrRscReader; // Must be deleted before iMsvSession.
+ delete iMtmSettings; // It has to be deleted before iMsvSession, because
+ // it uses iMsvSession->FileSession().
+ delete iWapPushUtils;
+ delete iMsvSession;
+
+ PUSHLOG_LEAVEFN("CPushContentHandlerBase::~CPushContentHandlerBase")
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::DoCollectGarbageL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::DoCollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CPushContentHandlerBase::DoCollectGarbageL")
+
+ CClientMtmRegistry* clientReg = CClientMtmRegistry::NewL( *iMsvSession );
+ CleanupStack::PushL( clientReg );
+ PUSHLOG_WRITE("CPushContentHandlerBase clientReg OK")
+ CBaseMtm* pushMtm = clientReg->NewMtmL( KUidMtmWapPush );
+ CleanupStack::PushL( pushMtm );
+ PUSHLOG_WRITE("CPushContentHandlerBase pushMtm OK")
+ CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL( dummySel );
+ TBuf8<1> dummyPar;
+
+ pushMtm->InvokeSyncFunctionL( EPushMtmCmdCollectGarbage,
+ *dummySel, dummyPar );
+
+ CleanupStack::PopAndDestroy( 3, clientReg );
+ // dummySel, pushMtm, clientReg
+
+ PUSHLOG_LEAVEFN("CPushContentHandlerBase::DoCollectGarbageL")
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::FilterPushMsgL
+// ---------------------------------------------------------
+//
+TBool CPushContentHandlerBase::FilterPushMsgL()
+ {
+ PUSHLOG_ENTERFN("CPushContentHandlerBase::FilterPushMsgL")
+
+ TBool msgAccepted = ETrue;
+
+ if ( iMtmSettings->ServiceReception() == EFalse )
+ {
+ // Discard message.
+ msgAccepted = EFalse;
+ PUSHLOG_WRITE(" ServiceReception OFF")
+ }
+
+ PUSHLOG_WRITE_FORMAT(" msgAccepted <%d>",msgAccepted)
+ PUSHLOG_LEAVEFN("CPushContentHandlerBase::FilterPushMsgL")
+ return msgAccepted;
+ }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::HandleSessionEventL
+ (
+ TMsvSessionEvent /*aEvent*/,
+ TAny* /*aArg1*/,
+ TAny* /*aArg2*/,
+ TAny* /*aArg3*/
+ )
+ {
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushContentHandlerBase.
+*
+*/
+
+
+
+#ifndef __CPUSHCONTENTHANDLERBASE_H__
+#define __CPUSHCONTENTHANDLERBASE_H__
+
+
+// INCLUDE FILES
+
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+#include <msvstd.h>
+#include <msvapi.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class CPushMtmUtil;
+class CPushMtmSettings;
+class CStringResourceReader;
+
+// CLASS DECLARATION
+
+/**
+* CPushContentHandlerBase class stands as a base class for almost all push
+* content handlers of the Push MTM. It collects the generic functionality of
+* a push content handler, such as garbage collection when receiving new
+* service message, supporting CMsvSession, CPushMtmUtil and CPushMtmSettings
+* objects.
+*/
+class CPushContentHandlerBase : public CContentHandlerBase,
+ public MMsvSessionObserver
+ {
+ protected: // Constructors and destructor
+
+ /**
+ * Constructor.
+ */
+ CPushContentHandlerBase();
+
+ /**
+ * Symbian OS constructor. CActiveScheduler::Add( this ) is called in
+ * this method!!
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushContentHandlerBase();
+
+ protected: // New functions
+
+ /**
+ * Do Garbage Collection synchronously.
+ * @return None.
+ */
+ void DoCollectGarbageL();
+
+ /**
+ * Apply Push MTM settings on the message.
+ * @return ETrue if the message passed the filtering.
+ */
+ TBool FilterPushMsgL();
+
+ protected: // From MMsvSessionObserver
+
+ /**
+ * Msv session events are handled by this method. This implementation
+ * is empty.
+ * @return None.
+ */
+ void HandleSessionEventL( TMsvSessionEvent aEvent,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3);
+
+ protected: // Data
+
+ CMsvSession* iMsvSession; ///< Session to Message Server. Has.
+ CPushMtmUtil* iWapPushUtils; ///< Push Utility. Has.
+ CPushMtmSettings* iMtmSettings; ///< Push Settings. Has.
+ /// Owned. It uses iMsvSession's RFs!
+ CStringResourceReader* iStrRscReader;
+ };
+
+#endif // __CPUSHCONTENTHANDLERBASE_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSIContentHandler.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,1835 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CSIContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CSIContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushMtmLog.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "PushContentHandlerPanic.h"
+#include "si_dict.h"
+#include "PushContentHandlerUtils.h"
+#include <push/CSIPushMsgEntry.h>
+#include <msvids.h>
+#include <PushMtmUi.rsg>
+#include <nw_dom_node.h>
+#include <nw_dom_document.h>
+#include <nw_dom_element.h>
+#include <nw_dom_text.h>
+#include <nw_wbxml_dictionary.h>
+#include <THttpFields.h>
+
+// CONSTANTS
+
+// si attributes / elements
+_LIT8( KSi, "si" );
+_LIT8( KIndication, "indication" );
+_LIT8( KHrefAttrib, "href" );
+_LIT8( KSiIdAttrib, "si-id" );
+_LIT8( KCreatedAttrib, "created" );
+_LIT8( KExpiresAttrib, "si-expires" );
+_LIT8( KActionAttrib, "action" );
+
+// action attribute literals
+_LIT8( KDeleteAction, "delete" );
+_LIT8( KSignalNone, "signal-none" );
+_LIT8( KSignalLow, "signal-low" );
+_LIT8( KSignalMedium, "signal-medium" );
+_LIT8( KSignalHigh, "signal-high" );
+
+_LIT( KSiTextContentType, "text/vnd.wap.si" );
+
+const TInt KValidMaxEncodedDateTimeSize = 7;
+const TInt KValidUTCLength = 20; // YYYY-MM-DDTHH:MM:SSZ
+const TInt KValidUTCNumericals = 14;
+const TInt KValidUTCYearBlockLength = 4;
+const TInt KValidUTCOtherBlockLength = 2;
+const TUint8 KAsciiZeroCharCode = 0x30;
+
+const TInt KValidTTimeMonthStart = 4;
+const TInt KValidTTimeDayStart = 6;
+const TInt KValidTTimeHourStart = 8;
+const TInt KValidTTimeMinuteStart = 10;
+const TInt KValidTTimeSecondStart = 12;
+const TInt KValidTTimeBlockLength = 2;
+
+const TInt KValidTTimeLength = 14; // YYYYMMDDHHMMSS
+
+const TInt KNoOfDictArrays = 1;
+
+_LIT( KCharMinus, "-" );
+_LIT( KCharT, "T" );
+_LIT( KCharColon, ":" );
+_LIT( KCharZ, "Z" );
+
+/// Conversion buffer size.
+LOCAL_D const TInt KPushConversionBufferSize = 256;
+/// Zero width non-breaking space character.
+LOCAL_D const TUint16 KPushZeroWidthNbsp = 0xfeff;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CSIContentHandler::NewL
+// ---------------------------------------------------------
+//
+CSIContentHandler* CSIContentHandler::NewL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::NewL")
+
+ CSIContentHandler* self = new (ELeave) CSIContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::~CSIContentHandler
+// ---------------------------------------------------------
+//
+CSIContentHandler::~CSIContentHandler()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::~CSIContentHandler")
+
+ Cancel();
+ delete iHrefBuf;
+ delete iSiIdBuf;
+ delete iData;
+ delete iCharacterSetConverter;
+ iCharacterSetConverter = NULL;
+ delete iCharacterSetsAvailable;
+ iCharacterSetsAvailable = NULL;
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::~CSIContentHandler")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CSIContentHandler
+// ---------------------------------------------------------
+//
+CSIContentHandler::CSIContentHandler()
+: CPushContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId ),
+ iPushMsgAction( KErrNotFound ),
+ iExpiresTime( Time::NullTTime() ),
+ iCreatedTime( Time::NullTTime() )
+ {
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConstructL")
+
+ CPushContentHandlerBase::ConstructL();
+ // Added to Active Scheduler.
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::CollectGarbageL")
+
+ DoCollectGarbageL();
+
+ //Ready.
+ iState = EFilteringAndParsing;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::CollectGarbageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParsePushMsgL
+// Note that cXML parser dosn't do any validation!
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParsePushMsgL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParsePushMsgL")
+
+ TPtrC8 bodyPtr;
+ iMessage->GetMessageBody( bodyPtr );
+ // If there is no body in the message leave with an error
+ if ( bodyPtr.Size() == 0 )
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: Empty body")
+ User::Leave( KErrCorrupt );
+ }
+
+ // Get content type. It will tell us wheather the msg body is encoded or
+ // textual.
+ TPtrC contentType;
+ iMessage->GetContentType( contentType );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: HTTP header - Content type <%S>",&contentType);
+
+ /*
+ TPtrC8 encodingPtr;
+ TBool encodingFound = iMessage->GetHeaderField
+ ( EHttpContentEncoding, encodingPtr );
+ #ifdef __TEST_LOG__
+ TBuf<64> encodingBuf;
+ encodingBuf.Copy( encodingPtr );
+ PUSHLOG_WRITE_FORMAT(" HTTP header - Content encoding <%S>",&encodingBuf);
+ #endif // __TEST_LOG__
+ */
+
+ // Add SI dictionary.
+ NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
+ { (NW_WBXML_Dictionary_t*)&NW_SI_WBXMLDictionary };
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ RWbxmlDictionary wbxmlDict;
+ wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
+ CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
+
+ NW_TinyDom_Handle_t domHandle;
+ NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
+ NW_Int32 length = (NW_Int32)bodyPtr.Size();
+ // Let's use the content type now.
+ NW_Bool encoded = ( contentType.CompareF( KSiTextContentType ) == 0 ) ?
+ NW_FALSE : NW_TRUE;
+ // SI public identifier.
+ NW_Uint32 publicID = NW_SI_PublicId;
+ NW_Bool extTNotStringTable = NW_FALSE;
+ NW_DOM_NodeType_t type = 0;
+ /**********************************
+ * Root of DOM
+ ***********************************/
+ CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
+ CleanupStack::PushL( docTreeOwner );
+ NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
+ (
+ &domHandle,
+ buffer,
+ length,
+ encoded,
+ publicID,
+ extTNotStringTable
+ );
+ if (!domNode)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is Null")
+ }
+ User::LeaveIfNull( domNode );
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is not Null") // to be deleted
+ // Let domNode be on the Cleanup Stack.
+ docTreeOwner->SetDocTree( domNode );
+
+ // It must be a document node.
+ type = NW_DOM_Node_getNodeType( domNode );
+ if ( type != NW_DOM_DOCUMENT_NODE )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not Document node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ // Get character encoding (NW_Uint32)
+ iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
+
+ /**********************************
+ * ELEMENT si
+ ***********************************/
+ // Get the first element of the document that must be an si.
+ // first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
+ TBool domNodeHasChildNodes = EFalse;
+ domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
+ if (!domNodeHasChildNodes)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No SI element present in the dom tree. Message corrupted.")
+ User::Leave( KErrCorrupt );
+ }
+
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: before calling getDocumentElement")
+ NW_DOM_ElementNode_t* siElement =
+ NW_DOM_DocumentNode_getDocumentElement( domNode );
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: after calling getDocumentElement")
+ if (!siElement)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is Null")
+ }
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, before leaving")
+ User::LeaveIfNull( siElement );
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, after leaving if siElement is null")
+
+ type = NW_DOM_Node_getNodeType( siElement );
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* name = NW_String_new();
+ User::LeaveIfNull( name );
+ // Let name be on the Cleanup Stack.
+ stringOwner->SetString( name );
+ stat = NW_DOM_Node_getNodeName( siElement, name );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* nameBuf = NW_String_getStorage( name );
+ NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
+ TPtrC8 namePtr( nameBuf, nameLen );
+
+ // Now comes the validity check.
+ if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSi ) != 0 )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not si element node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ /**********************************
+ * ELEMENT indication
+ ***********************************/
+ if ( NW_DOM_Node_hasChildNodes( siElement ) )
+ {
+ NW_DOM_Node_t* node = NW_DOM_Node_getFirstChild( siElement );
+ if (!node)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: no si child nodes!")
+ }
+ User::LeaveIfNull( node );
+
+ // Find the indication element.
+ TBool indicationFound = EFalse;
+ do {
+ type = NW_DOM_Node_getNodeType( node );
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* name = NW_String_new();
+ User::LeaveIfNull( name );
+ stringOwner->SetString( name );
+ stat = NW_DOM_Node_getNodeName( node, name );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* nameBuf = NW_String_getStorage( name );
+ NW_Uint16 nameLen = NW_String_getCharCount( name,
+ iCharEncoding );
+ TPtrC8 namePtr( nameBuf, nameLen );
+
+ if ( type == NW_DOM_ELEMENT_NODE &&
+ namePtr.CompareF( KIndication ) == 0 )
+ {
+ // We found the indication element. Parse it.
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: indication under si found.")
+ indicationFound = ETrue;
+ NW_DOM_ElementNode_t* indicationElement =
+ REINTERPRET_CAST( NW_DOM_ElementNode_t*, node );
+ ParseIndicationL( *indicationElement );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ if ( !indicationFound )
+ {
+ // Iterate next.
+ node = NW_DOM_Node_getNextSibling( node );
+ if ( !node )
+ {
+ PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No more sibling.")
+ break;
+ }
+ }
+
+ } while ( !indicationFound );
+ }
+
+ // Cleanup.
+ CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
+
+ if ( !ActionFlag() )
+ {
+ // default if no action explicitly stated
+ iPushMsgAction = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Defaulting to ActionFlag: %d",iPushMsgAction)
+ }
+
+ iState = EProcessing;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParsePushMsgL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseIndicationL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseIndicationL( NW_DOM_ElementNode_t& aIndication )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParseIndicationL")
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ NW_DOM_NodeType_t type = 0;
+
+ if ( NW_DOM_ElementNode_hasAttributes( &aIndication ) )
+ {
+ NW_DOM_AttributeListIterator_t attrIter;
+ stat = NW_DOM_ElementNode_getAttributeListIterator
+ ( &aIndication, &attrIter );
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+ NW_DOM_AttributeHandle_t attrHandle;
+ while ( NW_DOM_AttributeListIterator_getNextAttribute
+ ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
+ {
+ ParseIndAttributeL( attrHandle );
+ }
+ }
+
+ /**********************************
+ * PCDATA of ELEMENT indication
+ ***********************************/
+ if ( NW_DOM_Node_hasChildNodes( &aIndication ) )
+ {
+ NW_DOM_TextNode_t* textNode =
+ NW_DOM_Node_getFirstChild( &aIndication );
+ User::LeaveIfNull( textNode );
+
+ type = NW_DOM_Node_getNodeType( textNode );
+ if ( type != NW_DOM_TEXT_NODE )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: Not text node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ ParseTextL( *textNode );
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndicationL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseIndAttributeL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseIndAttributeL( NW_DOM_AttributeHandle_t&
+ aAttrHandle )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParseIndAttributeL")
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* attrName = NW_String_new();
+ User::LeaveIfNull( attrName );
+ stringOwner->SetString( attrName );
+
+ // Get the name of the attribute.
+ stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* attrNameBuf = NW_String_getStorage( attrName );
+ NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
+ TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
+
+ if ( attrNamePtr.CompareF( KCreatedAttrib ) == 0 )
+ {
+ if ( CreatedFlag() )
+ {
+ PUSHLOG_WRITE(" created redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ TBool gotDate = AttributeToTTimeL( aAttrHandle, iCreatedTime );
+ SetCreatedFlag( gotDate );
+ PUSHLOG_WRITE_FORMAT(" iCreatedTime set %d",gotDate?1:0)
+ }
+ }
+ else if ( attrNamePtr.CompareF( KHrefAttrib ) == 0 )
+ {
+ if ( HrefFlag() )
+ {
+ PUSHLOG_WRITE(" href redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
+ {
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val,
+ iCharEncoding );
+ if ( length == 0 )
+ {
+ // Zero length href attribute is considered as missing.
+ PUSHLOG_WRITE(" Zero length HrefFlag");
+ }
+ else
+ {
+ TPtrC8 hrefPtr( storage, length );
+ HBufC* tempHrefBuf = HBufC::NewMaxL( length );
+ // No leavable after it!!! until...
+ tempHrefBuf->Des().Copy( hrefPtr );
+ iHrefBuf = tempHrefBuf; // ...until here.
+ SetHrefFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
+ }
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+ }
+ }
+ else if ( attrNamePtr.CompareF( KExpiresAttrib ) == 0 )
+ {
+ if ( ExpiresFlag() )
+ {
+ PUSHLOG_WRITE(" expires redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ TBool gotDate = AttributeToTTimeL( aAttrHandle, iExpiresTime );
+ SetExpiresFlag( gotDate );
+ PUSHLOG_WRITE_FORMAT(" iExpiresTime set %d",gotDate?1:0)
+ }
+ }
+ else if ( attrNamePtr.CompareF( KSiIdAttrib ) == 0 )
+ {
+ if ( SiIdFlag() )
+ {
+ PUSHLOG_WRITE(" si-id redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ // It is expected to be String.
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 siidPtr( storage, length );
+
+ iSiIdBuf = HBufC::NewMaxL( siidPtr.Length() );
+ iSiIdBuf->Des().Copy( siidPtr );
+ SetSiIdFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" SiIdFlag set <%S>",iSiIdBuf)
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+ }
+ }
+ else if ( attrNamePtr.CompareF( KActionAttrib ) == 0 )
+ {
+ if ( ActionFlag() )
+ {
+ PUSHLOG_WRITE(" action redefinition")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ // It is expected to be String.
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 actionPtr( storage, length );
+
+ iPushMsgAction = ConvertActionString( actionPtr );
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+ }
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ ContHandPanic( EPushContHandPanUnexpSiToken ) );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndAttributeL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseTextL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseTextL( NW_DOM_TextNode_t& aTextNode )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ParseTextL")
+
+ if ( DataFlag() )
+ {
+ PUSHLOG_WRITE(" Data flag already set.")
+ }
+ else
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* data = NW_String_new();
+ User::LeaveIfNull( data );
+ stringOwner->SetString( data );
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ stat = NW_DOM_TextNode_getData( &aTextNode, data );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+ HBufC16* ucs2buffer = ConvertToUnicodeL( *data, iCharEncoding );
+ // Be careful: ucs2buffer is not on the CleanupStack!
+ __ASSERT_DEBUG( ucs2buffer != 0, ContHandPanic( EPushContHandPanNullUcs2Buf ) );
+
+ TPtrC16 ucs2ptrC( *ucs2buffer );
+ if ( ucs2ptrC.Length() == 0 )
+ {
+ // Zero length data is considered as nothing.
+ PUSHLOG_WRITE(" Zero length Data");
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" Data: <%S>",&ucs2ptrC);
+
+ #ifdef __TEST_LOG__
+ // Write out each unicode character identifier
+ TInt length = ucs2ptrC.Length();
+ for (TInt logI=0;logI<length;logI++)
+ {
+ TBuf16<1> currChar;
+ currChar.Copy( ucs2ptrC.Mid( logI, /*aLength*/1 ) );
+ PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
+ }
+ #endif // __TEST_LOG__
+
+ iData = ucs2buffer; // Ownership transferred.
+ ucs2buffer = NULL;
+ SetDataFlag( ETrue );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner );
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ParseTextL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertToUnicodeL
+// ---------------------------------------------------------
+//
+HBufC16* CSIContentHandler::ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
+
+ __ASSERT_DEBUG( aCharSetId != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
+
+ InitialiseCharacterSetConverterL();
+
+ HBufC16* ucs2buffer = NULL; // The return value.
+ TBool resultOnStack = EFalse;
+
+ #ifdef __TEST_LOG__
+ // Write out the original 8-bit buffer
+ TInt origiLength = aSrc.Length();
+ for (TInt origiLogI=0;origiLogI<origiLength;origiLogI++)
+ {
+ TBuf16<1> currChar; // Only 16-bit buffer can be written out.
+ currChar.Copy( aSrc.Mid( origiLogI, /*aLength*/1 ) );
+ PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
+ }
+ #endif // __TEST_LOG__
+
+ // Result
+ HBufC16* buffer = HBufC16::NewLC( KPushConversionBufferSize );
+ PUSHLOG_WRITE(" buffer allocated");
+ TPtr16 ptr( buffer->Des() );
+
+ // Prepare conversion for the given charset ID.
+ RFs& fs = iMsvSession->FileSession();
+ iCharacterSetConverter->PrepareToConvertToOrFromL
+ ( aCharSetId, *iCharacterSetsAvailable, fs );
+ PUSHLOG_WRITE(" PrepareToConvertToOrFromL OK");
+
+ TInt state = 0;
+ TInt remaining = iCharacterSetConverter->ConvertToUnicode( ptr, aSrc, state );
+ PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
+ while ( remaining >= 0 )
+ {
+ if ( ucs2buffer == NULL )
+ {
+ ucs2buffer = HBufC::NewLC( ptr.Length() );
+ resultOnStack = ETrue;
+ }
+ else
+ {
+ __ASSERT_DEBUG( resultOnStack,
+ ContHandPanic( EPushContHandPanSiResNotOnStack ) );
+ // This may change the address of ucs2buffer so we need to put
+ // it on the cleanup stack again!!
+ ucs2buffer = ucs2buffer->ReAllocL
+ ( ucs2buffer->Length() + ptr.Length() );
+ CleanupStack::Pop(); // old ucs2buffer
+ CleanupStack::PushL( ucs2buffer ); // possibly new copy
+ PUSHLOG_WRITE(" ucs2buffer reallocated");
+ }
+ TPtr16 ucs2ptr( ucs2buffer->Des() );
+ ucs2ptr.Append( ptr );
+ if ( remaining > 0 )
+ {
+ // Try to convert all remaining characters.
+ ptr.Zero();
+ remaining = iCharacterSetConverter->ConvertToUnicode
+ ( ptr, aSrc.Right( remaining ), state );
+ PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
+ }
+ else
+ {
+ PUSHLOG_WRITE(" break");
+ break;
+ }
+ }
+
+ if ( resultOnStack )
+ {
+ CleanupStack::Pop(); // ucs2buffer
+ resultOnStack = EFalse;
+ }
+
+ // ucs2buffer is not on the CleanupStack!
+
+ CleanupStack::PopAndDestroy( buffer ); // buffer
+
+ if ( ucs2buffer == NULL )
+ {
+ PUSHLOG_WRITE(" NULL ucs2buffer - allocating an empty buf");
+ ucs2buffer = KNullDesC().AllocL();
+ }
+ else
+ {
+ // Check if first character is a Zero-width nbsp.
+ TPtrC16 ucs2ptrC( *ucs2buffer );
+ if ( ucs2ptrC.Length() >= 1 && ucs2ptrC[0] == KPushZeroWidthNbsp )
+ {
+ // First character is a Zero-width NBSP. This character is used as
+ // BOM in some encodings and should not be present at this point.
+ // But we are tolerant and remove it.
+ // (Not expecting big-endianness here.)
+ HBufC16* temp = ucs2buffer;
+ CleanupStack::PushL( temp );
+ ucs2buffer = ucs2ptrC.Mid( 1 ).AllocL();
+ CleanupStack::PopAndDestroy( temp ); // temp
+ PUSHLOG_WRITE(" BOM removed");
+ }
+ else
+ {
+ PUSHLOG_WRITE(" No BOM");
+ }
+ }
+
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
+ return ucs2buffer;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertToUnicodeL
+// ---------------------------------------------------------
+//
+HBufC16* CSIContentHandler::ConvertToUnicodeL
+ ( NW_String_t& aString, NW_Uint32 aCharEncoding )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
+
+ /* As cXmlLibrary does, we support only the following charsets:
+ #define HTTP_iso_10646_ucs_2 0x03E8
+ #define HTTP_iso_8859_1 0x04
+ #define HTTP_us_ascii 0x03
+ #define HTTP_utf_8 0x6A
+ #define HTTP_utf_16 1015
+ */
+ TUint id = 0;
+ if ( aCharEncoding == HTTP_iso_10646_ucs_2 )
+ {
+ id = KCharacterSetIdentifierUcs2;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
+ }
+ else if ( aCharEncoding == HTTP_iso_8859_1 )
+ {
+ id = KCharacterSetIdentifierIso88591;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierIso88591")
+ }
+ else if ( aCharEncoding == HTTP_us_ascii )
+ {
+ id = KCharacterSetIdentifierAscii;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierAscii")
+ }
+ else if ( aCharEncoding == HTTP_utf_8 )
+ {
+ id = KCharacterSetIdentifierUtf8;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierUtf8")
+ }
+ else if ( aCharEncoding == HTTP_utf_16 ) // No such in CharConv.h
+ {
+ id = KCharacterSetIdentifierUcs2;
+ PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
+ }
+ else
+ {
+ id = KCharacterSetIdentifierUtf8; // Defaulting to UTF-8
+ PUSHLOG_WRITE(" DEFAULTING to KCharacterSetIdentifierUtf8");
+ }
+
+ PUSHLOG_WRITE_FORMAT(" id: 0x%x",id);
+ __ASSERT_DEBUG( id != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
+
+ // Source
+ PUSHLOG_WRITE_FORMAT(" Storage: 0x%x",NW_String_getStorage(&aString));
+ PUSHLOG_WRITE_FORMAT(" Byte count: %d",NW_String_getByteCount(&aString)-1);
+
+ // We will use NW_String_getByteCount(&aString)-1 as size, because
+ // NW_String_getByteCount(&aString) includes NULL terminator.
+ const TPtrC8 src( NW_String_getStorage(&aString),
+ NW_String_getByteCount(&aString)-1 );
+ HBufC16* ucs2buffer = ConvertToUnicodeL( src, id );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
+ return ucs2buffer;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::InitialiseCharacterSetConverterL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::InitialiseCharacterSetConverterL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::InitialiseCharacterSetConverterL")
+
+ iCharacterSetConverter = CCnvCharacterSetConverter::NewL();
+
+ RFs& fs = iMsvSession->FileSession();
+ iCharacterSetsAvailable =
+ CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL( fs );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::InitialiseCharacterSetConverterL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertActionString
+// ---------------------------------------------------------
+//
+TUint CSIContentHandler::ConvertActionString
+ ( const TDesC8& aActionString ) const
+ {
+ const TInt KMatchFound = 0;
+
+ // set to default signal value (to rid ourselves of build warning)
+ TUint actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+
+ if ( aActionString.Compare( KDeleteAction ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgDelete;
+ }
+ else if ( aActionString.Compare( KSignalNone ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalNone;
+ }
+ else if ( aActionString.Compare( KSignalLow ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalLow;
+ }
+ else if ( aActionString.Compare( KSignalMedium ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+ }
+ else if ( aActionString.Compare( KSignalHigh ) == KMatchFound )
+ {
+ actionValue = CSIPushMsgEntry::ESIPushMsgSignalHigh;
+ }
+
+ return actionValue;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::SetSIPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::SetSIPushMsgEntryFieldsL( CSIPushMsgEntry&
+ aSIPushMsgEntry )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
+
+ if ( SiIdFlag() || HrefFlag() )
+ {
+ if ( SiIdFlag() && ( HrefFlag() == EFalse ) )
+ {
+ // Message has only si-id but no href.
+ aSIPushMsgEntry.SetIdL( *iSiIdBuf );
+ }
+ else if ( HrefFlag() && ( SiIdFlag() == EFalse ) )
+ {
+ // If message has no si-id but does have a href, use href as si-id.
+ aSIPushMsgEntry.SetIdL( *iHrefBuf );
+ aSIPushMsgEntry.SetUrlL( *iHrefBuf );
+ }
+ else
+ {
+ // Use si-id and href as is.
+ aSIPushMsgEntry.SetIdL( *iSiIdBuf );
+ aSIPushMsgEntry.SetUrlL( *iHrefBuf );
+ }
+ }
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSiAction ) );
+ if ( ActionFlag() )
+ {
+ aSIPushMsgEntry.SetAction( iPushMsgAction );
+ }
+ else // default if no action explicitly stated
+ {
+ aSIPushMsgEntry.SetAction( CSIPushMsgEntry::ESIPushMsgSignalMedium );
+ }
+
+ // uses default null time value if no explicit date set in message
+ aSIPushMsgEntry.SetCreated( iCreatedTime );
+ aSIPushMsgEntry.SetExpires( iExpiresTime );
+
+ // PCDATA (text) from message
+ if ( DataFlag() )
+ {
+ aSIPushMsgEntry.SetTextL( *iData );
+ }
+
+ TPtrC8 msgHeaderPtr;
+ iMessage->GetHeader( msgHeaderPtr );
+ aSIPushMsgEntry.SetHeaderL( msgHeaderPtr );
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( iMessage->GetServerAddress( srvAddress ) )
+ {
+ aSIPushMsgEntry.SetFromL( srvAddress );
+ }
+
+ // First line in Inbox: TMsvEntry::iDetails.
+ if ( srvAddress.Length() == 0 )
+ {
+ // Read from resource.
+ HBufC* details =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+ aSIPushMsgEntry.SetMsgDetailsL( *details );
+ CleanupStack::PopAndDestroy( details );
+ }
+ else
+ {
+ // Convert the "From" information to the format required by the UI
+ // spec and then decode it.
+ HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+ CleanupStack::PushL( details );
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+ CleanupStack::PushL( convertedFrom );
+ //
+ aSIPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+ //
+ CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+ }
+
+ // Second line in Inbox: TMsvEntry::iDescription.
+ if ( DataFlag() )
+ {
+ // Display SI message.
+ aSIPushMsgEntry.SetMsgDescriptionL( *iData );
+ }
+ else
+ {
+ // Display URL.
+ __ASSERT_DEBUG( HrefFlag(),
+ ContHandPanic( EPushContHandPanUnspecSiHref ) );
+ const TPtrC url = aSIPushMsgEntry.Url();
+ HBufC* convertedUrl = CPushMtmUtil::ConvertUriToDisplayFormL( url );
+ CleanupStack::PushL( convertedUrl );
+ //
+ aSIPushMsgEntry.SetMsgDescriptionL( *convertedUrl );
+ //
+ CleanupStack::PopAndDestroy( convertedUrl ); // convertedUrl
+ }
+
+ // ******** Push MTM specific processing *********
+
+ /*
+ * Unfortunately in CPushMsgEntryBase there is no such functionality
+ * with which we can reach TMsvEntry as non-const, but we have to
+ * modify the entry's iMtmData2 member somehow. We can do it
+ * with either casting or with modifying and saving the entry
+ * manually after it has been saved by CSIPushMsgEntry. The latter
+ * solution is more expensive so we choose the first.
+ */
+ TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSIPushMsgEntry.Entry() );
+ if ( HrefFlag() )
+ {
+ CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+ else
+ {
+ CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+
+ // *** Set the entry to unread and new state. ***
+
+ tEntry.SetNew( ETrue );
+ tEntry.SetUnread( ETrue );
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ProcessingPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ProcessingPushMsgEntryL")
+
+ TBool deletePushMsg( EFalse );
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSiAction ) );
+
+ // S60 requirement: if both the href and the message is empty then
+ // delete the msg.
+ if ( HrefFlag() == EFalse && DataFlag() == EFalse )
+ {
+ deletePushMsg = ETrue;
+ }
+
+ // Expiration.
+ if ( !deletePushMsg && ExpiresFlag() )
+ {
+ TTime today;
+ today.UniversalTime();
+#ifdef __TEST_LOG__
+ _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+ _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+ TBuf<32> dateHolder;
+ TBuf<32> timeHolder;
+ today.FormatL( dateHolder, KDateFormat );
+ today.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" now date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" now time: <%S>",&timeHolder)
+ iExpiresTime.FormatL( dateHolder, KDateFormat );
+ iExpiresTime.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" exp date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" exp time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+ // check if message has expiry date before today's date
+ if ( iExpiresTime < today )
+ {
+ PUSHLOG_WRITE("CSIContentHandler already expired")
+ deletePushMsg = ETrue;
+ }
+ }
+
+ // An SI with the action attribute set to “delete” MUST have an
+ // explicitly assigned value for si-id.
+ if ( !deletePushMsg && ActionFlag() )
+ {
+ if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
+ {
+ if ( !SiIdFlag() || ( SiIdFlag() && iSiIdBuf->Length() == 0 ) )
+ {
+ deletePushMsg = ETrue;
+ }
+ }
+ }
+
+ // Handling out of order delivery & Replacement.
+ TMsvId matchingEntryId = KMsvNullIndexEntryId;
+
+ if ( !deletePushMsg && ( SiIdFlag() || HrefFlag() ) && CreatedFlag() )
+ {
+ deletePushMsg = HandleMsgOrderReceptionL( matchingEntryId );
+ }
+
+ if ( !deletePushMsg && ActionFlag() )
+ {
+ // SI with action=signal-none must not be presented to the end-user.
+ // Note. In S60 signal-none behaves the same as delete: the
+ // message is discarded after processing it!
+ if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgSignalNone )
+ {
+ deletePushMsg = ETrue;
+ }
+ // SI with action=delete must also be discarded.
+ else if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
+ {
+ deletePushMsg = ETrue;
+ }
+ }
+
+ // Store message if not marked for deletion.
+ if ( !deletePushMsg )
+ {
+ StoreSIMessageL( matchingEntryId );
+ }
+ else
+ {
+ // The new entry must be discarded.
+ // Delete the corresponding matching entry, too.
+ if ( matchingEntryId != KMsvNullIndexEntryId )
+ {
+ iWapPushUtils->DeleteEntryL( matchingEntryId );
+ }
+ }
+
+ iState = EDone;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ProcessingPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::StoreSIMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::StoreSIMessageL( TMsvId aMatchingEntryId )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::StoreSIMessageL")
+
+ CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+ CleanupStack::PushL( siEntry );
+
+ if ( aMatchingEntryId != KMsvNullIndexEntryId )
+ {
+ PUSHLOG_WRITE("Matching SI found");
+ //Delete this old entry
+ iWapPushUtils->DeleteEntryL( aMatchingEntryId );
+ }
+
+ SetSIPushMsgEntryFieldsL( *siEntry );
+ iSavedMsgId = siEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
+
+#ifdef __TEST_LOG__
+ _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+ _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+ TBuf<32> dateHolder;
+ TBuf<32> timeHolder;
+ TTime recDateTime = siEntry->ReceivedDate();
+ recDateTime.FormatL( dateHolder, KDateFormat );
+ recDateTime.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+
+ CleanupStack::PopAndDestroy( siEntry ); // siEntry
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::StoreSIMessageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMsgOrderReceptionL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::HandleMsgOrderReceptionL")
+
+ __ASSERT_DEBUG( ( SiIdFlag() || HrefFlag() ),
+ ContHandPanic( EPushContHandPanNoSiIdOrHrefAttr ) );
+ __ASSERT_DEBUG( CreatedFlag(),
+ ContHandPanic( EPushContHandPanNoCreatedAttr ) );
+
+ CMsvEntrySelection* matchingIdList = NULL;
+ TBool discardPushMsg( EFalse );
+
+ // Get list of matching stored SI messages.
+ if ( SiIdFlag() && iSiIdBuf->Length() != 0 )
+ {
+ matchingIdList = iWapPushUtils->FindSiIdLC( *iSiIdBuf );
+ }
+ else // HrefFlag()
+ {
+ // Use href as si-id.
+ matchingIdList = iWapPushUtils->FindSiIdLC( *iHrefBuf );
+ }
+ const TInt matchingListCount( matchingIdList->Count() );
+ // Note that the count can be greater than 1.
+
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler Count: %d",matchingListCount)
+
+ if ( 0 < matchingListCount && CreatedFlag() )
+ {
+ CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+ CleanupStack::PushL( siEntry );
+
+ // Delete older stored messages and/or mark current message for
+ // deletion if same date or older than stored messages
+ TBool foundOneToBeReplaced = EFalse;
+ for ( TInt count = 0; count < matchingListCount; ++count )
+ {
+ TMsvId matchingSiMsgEntryId( matchingIdList->At(count) );
+
+ siEntry->RetrieveL( *iMsvSession, matchingSiMsgEntryId );
+
+ // Skip date comparisons if creation date not valid -
+ // SI without created attribute never gets replaced.
+ TTime existingSiCreatedTime( siEntry->Created() );
+
+ if ( existingSiCreatedTime == Time::NullTTime() )
+ {
+ // continue;
+ }
+ else
+ {
+ __ASSERT_DEBUG( !foundOneToBeReplaced,
+ ContHandPanic( EPushContHandPanTooManySi ) );
+ if ( foundOneToBeReplaced )
+ {
+ PUSHLOG_WRITE(" Already found one")
+ // Only one SI has to be found.
+ // If the program runs into it, then make a
+ // garbage collection to ensure consistency and
+ // remove other messages found.
+ iWapPushUtils->DeleteEntryL( matchingSiMsgEntryId );
+ // After the 'for' only one SI is allowed that has created
+ // attribute.
+ }
+ else
+ {
+ foundOneToBeReplaced = ETrue; // A match was found.
+ // Check if received SI is newer than existing stored Si
+ // (out of order).
+ if ( iCreatedTime > existingSiCreatedTime )
+ {
+ PUSHLOG_WRITE(" Replacing...")
+ // The new SI replaces the existing.
+ aMatchingEntryId = matchingSiMsgEntryId;
+ discardPushMsg = EFalse;
+ }
+ else if ( iCreatedTime <= existingSiCreatedTime )
+ {
+ PUSHLOG_WRITE(" Discarding...")
+ // Received SI is older than existing stored Si.
+ discardPushMsg = ETrue;
+ }
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy( siEntry ); // siEntry
+ }
+
+ CleanupStack::PopAndDestroy( matchingIdList ); // matchingIdList
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::HandleMsgOrderReceptionL")
+ return discardPushMsg;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertDateTimeL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::ConvertDateTimeL( const TDesC& aDateTime,
+ TTime& aConvertedDate ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertDateTimeL")
+
+ TTime convertedTime = Time::NullTTime();
+ TBool convertedOK = EFalse;
+
+ // check supplied descriptor is the correct length
+ if ( aDateTime.Length() != KValidUTCLength )
+ {
+ PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ TBuf<KValidUTCLength> str = aDateTime;
+ PUSHLOG_WRITE_FORMAT(" datetime str: <%S>",&str)
+ if ( !IsValidUTCTime( str ) )
+ {
+ // The UTC time is invalid.
+ PUSHLOG_WRITE(" invalid UTC time")
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ // Now 'str' is in format YYYYMMDD:HHMMSS
+ // Adjust UTC time to zero offset TTime. Only month and day
+ // is effected.
+ const TInt KFirstMonthChar = KValidTTimeMonthStart;
+ const TInt KSecondMonthChar = KFirstMonthChar + 1;
+ const TInt KFirstDayChar = KValidTTimeDayStart;
+ const TInt KSecondDayChar = KFirstDayChar + 1;
+ // Month.
+ // check for special case of month = 10 which becomes 09
+ if ( str[KFirstMonthChar] == '1' && str[KSecondMonthChar] == '0' )
+ {
+ str[KFirstMonthChar] = '0';
+ str[KSecondMonthChar] = '9';
+ }
+ else
+ {
+ // month value is either 11, 12 or less than 10, ie 1 - 9.
+ // reduce day by one, eg 11 becomes 10, 12 becomes 11, 09 becomes 08
+ str[KSecondMonthChar]--;
+ }
+
+ // Day.
+ // check for special cases 10, 20, 30
+ if ( str[KSecondDayChar] == '0' )
+ {
+ // reduce day by 1, ie 10 becomes 09, 20 becomes 19 ...
+ str[KSecondDayChar] = '9';
+ str[KFirstDayChar]--;
+ }
+ else
+ {
+ // day value is between 1 and 9 so reduce day by one
+ // eg 29 becomes 28, 11 bcomes 10, 31 becomes 30
+ str[KSecondDayChar]--;
+ }
+
+ // string is now syntaxically correct, but Set() will return an
+ // error if it's semantically incorrect.
+ User::LeaveIfError( convertedTime.Set( str ) );
+ convertedOK = ETrue;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertDateTimeL")
+ aConvertedDate = convertedTime;
+ return convertedOK;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertOpaqueToUtcL
+// ---------------------------------------------------------
+//
+HBufC* CSIContentHandler::ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::ConvertOpaqueToUtcL")
+
+ const TInt opaqueSize = aOpaque.Size();
+ if ( KValidMaxEncodedDateTimeSize < opaqueSize )
+ {
+ PUSHLOG_WRITE_FORMAT(" Bad OPAQUE size: <%d>",opaqueSize)
+ User::Leave( KErrCorrupt );
+ }
+
+ HBufC* converted = HBufC::NewMaxLC( KValidUTCLength );
+ TPtr convertedPtr = converted->Des();
+ convertedPtr.SetLength( 0 ); // Reset.
+
+ // Split up each opaque byte to two bytes.
+ TUint8 byte( 0x00 );
+ TUint8 high( 0x00 );
+ TUint8 low( 0x00 );
+ TInt i = 0;
+ for ( i = 0; i < opaqueSize; ++i )
+ {
+ byte = aOpaque[i];
+ high = (TUint8)( (byte & 0xF0) >> 4 );
+ low = (TUint8)( byte & 0x0F );
+ // Check high and low if they are in the range [0-9].
+ if ( 9 < high || 9 < low )
+ {
+ PUSHLOG_WRITE_FORMAT2(" Overflow: <%d, %d>",high,low)
+ User::Leave( KErrOverflow );
+ }
+ convertedPtr.Append( TChar(KAsciiZeroCharCode + high) );
+ convertedPtr.Append( TChar(KAsciiZeroCharCode + low) );
+ }
+
+ // A valid UTC %Datetime contains 14 numerical characters and 6
+ // non-numerical: “1999-04-30T06:40:00Z”.
+ // So fill the remaining bytes with zeros.
+ for ( i = convertedPtr.Length(); i < KValidUTCNumericals; ++i )
+ {
+ convertedPtr.Append( TChar('0') );
+ }
+
+ // Insert the necessary non-numerical boundary characters.
+ i = 0;
+ // Skip year and insert '-'. (Don't forget to increase i with 1 each time!)
+ i += KValidUTCYearBlockLength;
+ convertedPtr.Insert( i++, KCharMinus );
+ // Skip month and insert '-'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharMinus );
+ // Skip day and insert 'T'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharT );
+ // Skip hour and insert ':'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharColon );
+ // Skip minute and insert ':'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharColon );
+ // Skip second and insert 'Z'.
+ i += KValidUTCOtherBlockLength;
+ convertedPtr.Insert( i++, KCharZ );
+
+ CleanupStack::Pop( converted ); // converted
+ PUSHLOG_LEAVEFN("CSIContentHandler::ConvertOpaqueToUtcL")
+ return converted;
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::IsValidUTCTime
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::IsValidUTCTime( TDes& aDateTime ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::IsValidUTCTime")
+
+ TBool isValid( ETrue ); // Return value.
+
+ // Now aDateTime has to be in format YYYY-MM-DDTHH:MM:SSZ
+
+ // check supplied descriptor is the correct length
+ if ( aDateTime.Length() != KValidUTCLength )
+ {
+ PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
+ isValid = EFalse;
+ }
+ else
+ {
+ // strip out formatting characters
+ TInt formatCharPos = 4;
+ aDateTime.Delete( formatCharPos, 1 );
+ // now move through two characters at a time and remove other chars
+ // to just leave digits
+ const TInt KRemainingFormatChars = 5;
+ TInt i( 0 );
+ for ( i = 0; i < KRemainingFormatChars; ++i )
+ {
+ formatCharPos += 2;
+ aDateTime.Delete( formatCharPos, 1 );
+ }
+
+ // Now aDateTime has to be in format YYYYMMDDHHMMSS
+
+ __ASSERT_DEBUG( aDateTime.Length() == KValidTTimeLength,
+ ContHandPanic( EPushContHandPanBadTTimeLength ) );
+
+ // now have UTC string stripped of format characters - check remaining
+ // characters are all digits - YYYYMMDDHHMMSS
+ TChar ch;
+ for ( i = 0; i < KValidTTimeLength; ++i )
+ {
+ ch = aDateTime[i];
+ if ( ch.IsDigit() == EFalse )
+ {
+ PUSHLOG_WRITE_FORMAT(" not digit <%d>",i)
+ isValid = EFalse;
+ }
+ }
+
+ if ( isValid )
+ {
+ /*
+ In YYYYMMDDHHMMSS
+ YYYY = 4 digit year ("0000" ... "9999")
+ MM = 2 digit month ("01"=January, "02"=February ... "12"=December)
+ DD = 2 digit day ("01", "02" ... "31")
+ HH = 2 digit hour, 24-hour timekeeping system ("00" ... "23")
+ MM = 2 digit minute ("00" ... "59")
+ SS = 2 digit second ("00" ... "59")
+ */
+ TInt err;
+ TUint val;
+ // Do not check year. There are no restrictions.
+ // Check month.
+ TLex parser( aDateTime.Mid( KValidTTimeMonthStart,
+ KValidTTimeBlockLength ) );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" month: <%d>",val)
+ if ( val < 1 || 12 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ // Check day.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeDayStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" day: <%d>",val)
+ if ( val < 1 || 31 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+ // Check hour.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeHourStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" hour: <%d>",val)
+ if ( 23 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+ // Check minute.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeMinuteStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" min: <%d>",val)
+ if ( 59 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+ // Check second.
+ if ( isValid )
+ {
+ parser = aDateTime.Mid( KValidTTimeSecondStart,
+ KValidTTimeBlockLength );
+ err = parser.Val( val, EDecimal );
+ if ( err )
+ {
+ isValid = EFalse;
+ PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+ }
+ else
+ {
+ PUSHLOG_WRITE_FORMAT(" sec: <%d>",val)
+ if ( 59 < val )
+ {
+ isValid = EFalse;
+ }
+ }
+ }
+
+ // insert colon seperating date from time
+ const TInt KColonPosition = 8;
+ aDateTime.Insert( KColonPosition, KCharColon );
+
+ // Now aDateTime has to be in format YYYYMMDD:HHMMSS
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::IsValidUTCTime")
+ return isValid; // aDateTime contains a modified buffer.
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::AttributeToTTimeL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::AttributeToTTimeL
+ ( NW_DOM_AttributeHandle_t& aAttrHandle,
+ TTime& aConvertedDate ) const
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::AttributeToTTimeL")
+
+ TBool gotDate = EFalse;
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ NW_DOM_AttrVal_t attrVal;
+
+ // It is expected to be String or Opaque.
+ // It may be Opaque, to which we will need a NW_DOM_AttrVal_t structure.
+ stat = NW_DOM_AttributeHandle_getNextVal( &aAttrHandle, &attrVal );
+
+ if ( stat != NW_STAT_WBXML_ITERATE_MORE )
+ {
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ }
+ else
+ {
+ NW_Uint16 valType = NW_DOM_AttrVal_getType( &attrVal );
+
+ if ( valType == NW_DOM_ATTR_VAL_STRING )
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ //
+ stat = NW_DOM_AttrVal_toString( &attrVal, val, iCharEncoding );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 dataPtr( storage, length );
+ HBufC* dataBuf = HBufC::NewMaxLC( dataPtr.Length() );
+ dataBuf->Des().Copy( dataPtr );
+ gotDate = ConvertDateTimeL( *dataBuf, aConvertedDate );
+
+ CleanupStack::PopAndDestroy( 2, stringOwner ); // dataBuf,
+ // stringOwner
+ }
+ else if ( valType == NW_DOM_ATTR_VAL_OPAQUE )
+ {
+ NW_Uint32 len = 0;
+ NW_Byte* data = NW_DOM_AttrVal_getOpaque( &attrVal, &len );
+ User::LeaveIfNull( data );
+ TPtrC8 dataPtr( data, len );
+
+ HBufC* dateTime = ConvertOpaqueToUtcL( dataPtr );
+ CleanupStack::PushL( dateTime );
+ gotDate = ConvertDateTimeL( *dateTime, aConvertedDate );
+ CleanupStack::PopAndDestroy( dateTime ); // dateTime
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::AttributeToTTimeL")
+ return gotDate; // aConvertedDate contains the result.
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CancelHandleMessage()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::CancelHandleMessage")
+ Cancel();
+ PUSHLOG_LEAVEFN("CSIContentHandler::CancelHandleMessage")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CPushHandlerBase_Reserved1()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CPushHandlerBase_Reserved2
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CPushHandlerBase_Reserved2()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CSIContentHandler::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CSIContentHandler::DoCancel")
+ Complete( KErrCancel );
+ PUSHLOG_LEAVEFN("CSIContentHandler::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::RunL()
+ {
+ // Handle errors in RunError().
+ PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
+ User::LeaveIfError( iStatus.Int() );
+
+ // use active state machine routine to manage activites:
+ switch ( iState )
+ {
+ case EGarbageCollecting:
+ {
+ CollectGarbageL();
+ break;
+ }
+ case EFilteringAndParsing:
+ {
+ if ( !FilterPushMsgL() )
+ {
+ // It did not pass the filter. Done.
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ // Continue.
+ TInt ret = KErrNone;
+ PUSHLOG_WRITE("CSIContentHandler::RunL : before trapping parsing.")
+ TRAP(ret, ParsePushMsgL());
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunL : after trapping parsing. ret = %d", ret)
+ if ( ret != KErrNone)
+ {
+ PUSHLOG_WRITE("CSIContentHandler::RunL : Parsing failed. discarding message.")
+ iState = EDone;
+ IdleComplete();
+ }
+ }
+ break;
+ }
+ case EProcessing:
+ {
+ ProcessingPushMsgEntryL();
+ break;
+ }
+ case EDone:
+ {
+ PUSHLOG_WRITE("CSIContentHandler EDone")
+ Complete( KErrNone );
+ break;
+ }
+ default:
+ {
+ // JIC.
+ PUSHLOG_WRITE("CSIContentHandler default Done")
+ Complete( KErrNone );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CSIContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CSIContentHandler::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunError: %d",aError)
+
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSIContentHandler.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CSIContentHandler.
+*
+*/
+
+
+
+#ifndef __CSICONTENTHANDLER_H__
+#define __CSICONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <msvstd.h>
+#include <nw_dom_attribute.h>
+#include <CharConv.h>
+
+// CONSTANTS
+
+const TUid KUidPushSIContentHandler = { EUidPushSIContentHandler };
+_LIT(KSIContentHandlerData,"text/vnd.wap.si||application/vnd.wap.sic");
+
+// FORWARD DECLARATIONS
+
+class CSIPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* CSIContentHandler handles Service Indication content
+*
+* This handler takes ownership of the SI message and processes it
+* according to the Reception rules
+* [WAP Service Indication version 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* OVERVIEW:
+* The main body of this class and its functionality lies within
+* HandleMessage (asynchonous). This :
+* 1. takes ownership of the push message
+* 2. validates the message and generates a parsed document tree
+* 3. extracts the message attribute values from document tree
+* 4. processes the received message
+* 5. finishes
+*
+* NB: A received message with no creation date will be stored (unless
+* its action is set to delete or the expiry condition is met). This
+* means that the si-id in the message store will not be unique.
+*/
+class CSIContentHandler : public CPushContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CSIContentHandler* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSIContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CSIContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Do Garbage Collection synchronously.
+ * @return None.
+ */
+ void CollectGarbageL();
+
+ /**
+ * Parse the current message. If the SI is wbxml encoded then it is
+ * decoded first to XML format. Then the message details (attributes)
+ * are earned from the XML tree.
+ * @return None.
+ */
+ void ParsePushMsgL();
+
+ /**
+ * Parse the indication element.
+ * @param aIndication The element to be parsed.
+ * @return None.
+ */
+ void ParseIndicationL( NW_DOM_ElementNode_t& aIndication );
+
+ /**
+ * Parse an attribute of the indication element.
+ * @param aAttrHandle The attribute to be parsed.
+ * @return None.
+ */
+ void ParseIndAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+ /**
+ * Parse the text of the indication element.
+ * @param aTextNode The text node to be parsed.
+ * @return None.
+ */
+ void ParseTextL( NW_DOM_TextNode_t& aTextNode );
+
+
+ /**
+ * Converts the given buffer to unicode (UCS-2).
+ * @param aSrc Source text.
+ * @param aCharSetId Character set ID.
+ * @return The UCS-2 unicode buffer.
+ */
+ HBufC16* ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId );
+
+ /**
+ * Converts the given buffer to unicode (UCS-2).
+ * @param aString Source text.
+ * @param aCharEncoding Character encoding.
+ * @return The UCS-2 unicode buffer.
+ */
+ HBufC16* ConvertToUnicodeL( NW_String_t& aString, NW_Uint32 aCharEncoding );
+
+ /**
+ * Initialise the converter.
+ * @return None.
+ */
+ void InitialiseCharacterSetConverterL();
+
+
+ /**
+ * Convert the action string to a representative numeric value to
+ * facilitate storing the message.
+ * @param aActionString The attribute value indicating the action level
+ * eg 'signal-high'
+ * @return TUint: a value representing the action type.
+ */
+ TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+ /**
+ * The entry fields are set to the correct values.
+ * @return None.
+ */
+ void SetSIPushMsgEntryFieldsL( CSIPushMsgEntry& aSIPushMsgEntry );
+
+ /**
+ * Do the final processing of the message according to the OMA and S60
+ * requirements.
+ * @return None.
+ */
+ void ProcessingPushMsgEntryL();
+
+ /**
+ * Store the new message to Messaging.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * @return None.
+ */
+ void StoreSIMessageL( TMsvId aMatchingEntryId );
+
+ /**
+ * Handle message order reception.
+ * NB: A received message with no creation date will be stored (unless
+ * its action is set to delete or the expiry condition is met). This
+ * means that the si-id in the message store will not be unique.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * It is changed only if the function returns EFalse (replace)!
+ * @return ETrue if the entry has to be discarded.
+ */
+ TBool HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId );
+
+ // conversion utilities
+
+ /**
+ * Convert UTC date time into native TTime format. Method can leave.
+ * @param aDateTime The UTC string representing the date and time.
+ * @param aConvertedDate Member date variable passed in to accept
+ * converted UTC date as TTime varaible.
+ * @return TBool indicates if conversion successful (ETrue) or
+ * conversion failed (EFalse)
+ */
+ TBool ConvertDateTimeL( const TDesC& aDateTime,
+ TTime& aConvertedDate ) const;
+
+ /**
+ * Convert OPAQUE data to UTC date time as specified in SI spec.
+ * @param aOpaque OPAQUE data.
+ * @return The UTC time.
+ */
+ HBufC* ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const;
+
+ /**
+ * Check given UTC time string conforms to expected format:
+ * YYYY-MM-DDTHH:MM:SSZ and strip out formatting characters
+ * then validate the remaining characters are all digits.
+ * If validated then add TTime formating character so final
+ * string returned will be of the format YYYYMMDD:HHMMSS.
+ * @param aDateTime UTC string which is validated and returned.
+ * @return boolean: indicates if given date is valid (ETrue)
+ * or not (EFalse)
+ */
+ TBool IsValidUTCTime( TDes& aDateTime ) const;
+
+ /**
+ * Convert OPAQUE or STRING attribute to TTime.
+ * @param aAttrHandle Handle to the attribute.
+ * @param aConvertedDate The resulted TTime.
+ * @return ETrue if the conversion succeeded.
+ */
+ TBool AttributeToTTimeL( NW_DOM_AttributeHandle_t& aAttrHandle,
+ TTime& aConvertedDate ) const;
+
+ // Attribute flags
+
+ /**
+ * Flag whether message has an action attribute
+ * @param aAction boolean to set flag to -
+ * ETrue for action attrib present
+ * EFalse for no action attrib.
+ */
+ inline void SetActionFlag( TBool aAction );
+
+ /**
+ * Check status of action flag to see if message has an action
+ * attribute.
+ * @return TBool ETrue - action attribute present in message
+ * EFalse - no action attribute.
+ */
+ inline TBool ActionFlag() const;
+
+ /**
+ * Flag whether message has a created date attribute.
+ * @param aCreated boolean to set flag to -
+ * ETrue for si-created attrib present
+ * EFalse for no si-created attrib
+ */
+ inline void SetCreatedFlag( TBool aCreated );
+
+ /**
+ * Check status of created flag to see if message has a si-created
+ * attribute.
+ * @return TBool ETrue - si-created attribute present in message
+ * EFalse - no si-created attribute
+ */
+ inline TBool CreatedFlag() const;
+
+ /**
+ * Flag whether message has a Href attribute
+ * @param aHref boolean to set flag to -
+ * ETrue for Href attrib present
+ * EFalse for no href attrib
+ */
+ inline void SetHrefFlag( TBool aHref );
+
+ /**
+ * Check status of href flag to see if message has an href attribute.
+ * @return TBool
+ * ETrue - href attribute present in message
+ * EFalse - no href attribute
+ */
+ inline TBool HrefFlag() const;
+
+ /**
+ * Flag whether message has an expiry date attribute (si-expires).
+ * @param aExpires boolean to set flag to -
+ * ETrue for si-expires present
+ * EFalse for no si-expires date
+ */
+ inline void SetExpiresFlag( TBool aExpires );
+
+ /**
+ * Check status of flag to see if message has an expiry date attribute.
+ * @return TBool
+ * ETrue - si-expires attribute present in message
+ * EFalse - no si-expires attribute
+ */
+ inline TBool ExpiresFlag() const;
+
+ /**
+ * Flag whether message has a si-id attribute
+ * @param aSiId boolean to set flag to -
+ * ETrue for si-id attrib present
+ * EFalse for no si-id attrib
+ */
+ inline void SetSiIdFlag( TBool aSiId );
+
+ /**
+ * Check status of flag to see if message has an si-id attribute.
+ * @return TBool
+ * ETrue - si-id attribute present in message
+ * EFalse - no si-id attribute
+ */
+ inline TBool SiIdFlag() const;
+
+ /**
+ * Flag whether message has a Data attribute (text)
+ * @param aData
+ * boolean to set flag to - ETrue for data attrib present
+ * EFalse for no data attrib
+ */
+ inline void SetDataFlag( TBool aData );
+
+ /**
+ * Check status of data flag to see if message has any data.
+ * @return TBool
+ * ETrue - data attribute present in message
+ * EFalse - no data attribute
+ */
+ inline TBool DataFlag() const;
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg );
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Terminates any activity
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Step through the various representative states for handling a message
+ * States:
+ * EGarbageCollecting - Deleting expired SI msgs from messaging
+ * EFilteringAndParsing - Filter push msg according to Service message
+ * settings and Parses SI push message (retrieving the
+ * attributes)
+ * EProcessing - Processing the current entry. OMA and S60 rules are
+ * applied, then save or update SI msg in the Msg store
+ * EDone - Clean up, complete observer
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * This is invoked when RunL Leaves with an error so clean up and
+ * return.
+ * @return Error code to scheduler.
+ */
+ TInt RunError(TInt aError);
+
+ private: // Data
+
+ enum
+ {
+ EAction = 0x01,
+ ECreated = 0x02,
+ EHref = 0x04,
+ EExpires = 0x08,
+ ESiId = 0x10,
+ EData = 0x20
+ };
+
+ enum TState
+ {
+ EGarbageCollecting,
+ EFilteringAndParsing,
+ EProcessing,
+ EDone
+ };
+
+ TMsvId iSavedMsgId; ///< ID of the message saved.
+ TUint32 iAttributes; ///< Attribute indication (set or not).
+ TInt iPushMsgAction; ///< Action attribute
+ HBufC* iHrefBuf; ///< Href attribute. Has.
+ HBufC* iSiIdBuf; ///< Si-id attribute. Has.
+ TTime iExpiresTime; ///< Expiration attribute.
+ TTime iCreatedTime; ///< Created attribute.
+ HBufC* iData; ///< Message text. Has.
+
+ NW_Uint32 iCharEncoding; ///< Char encoding of the current msg.
+
+ //
+ CCnvCharacterSetConverter* iCharacterSetConverter; ///< Owned.
+ CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* iCharacterSetsAvailable; ///< Owned.
+ };
+
+#include "CSIContentHandler.inl"
+
+#endif // __CSICONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSIContentHandler.inl Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline functions.
+*
+*/
+
+
+
+inline void CSIContentHandler::SetActionFlag(TBool aAction)
+ {
+ if ( aAction )
+ {
+ iAttributes |= EAction;
+ }
+ else
+ {
+ iAttributes &=~ EAction;
+ }
+ }
+
+inline TBool CSIContentHandler::ActionFlag() const
+ {
+ return iAttributes & EAction;
+ }
+
+inline void CSIContentHandler::SetCreatedFlag( TBool aCreated )
+ {
+ if ( aCreated )
+ {
+ iAttributes |= ECreated;
+ }
+ else
+ {
+ iAttributes &=~ ECreated;
+ }
+ }
+
+inline TBool CSIContentHandler::CreatedFlag() const
+ {
+ return iAttributes & ECreated;
+ }
+
+inline void CSIContentHandler::SetHrefFlag( TBool aHref )
+ {
+ if ( aHref )
+ {
+ iAttributes |= EHref;
+ }
+ else
+ {
+ iAttributes &=~ EHref;
+ }
+ }
+
+inline TBool CSIContentHandler::HrefFlag() const
+ {
+ return iAttributes & EHref;
+ }
+
+inline void CSIContentHandler::SetExpiresFlag( TBool aExpires )
+ {
+ if ( aExpires )
+ {
+ iAttributes |= EExpires;
+ }
+ else
+ {
+ iAttributes &=~ EExpires;
+ }
+ }
+
+inline TBool CSIContentHandler::ExpiresFlag() const
+ {
+ return iAttributes & EExpires;
+ }
+
+inline void CSIContentHandler::SetSiIdFlag( TBool aSiId )
+ {
+ if ( aSiId )
+ {
+ iAttributes |= ESiId;
+ }
+ else
+ {
+ iAttributes &=~ ESiId;
+ }
+ }
+
+inline TBool CSIContentHandler::SiIdFlag() const
+ {
+ return iAttributes & ESiId;
+ }
+
+inline void CSIContentHandler::SetDataFlag( TBool aData )
+ {
+ if ( aData )
+ {
+ iAttributes |= EData;
+ }
+ else
+ {
+ iAttributes &=~ EData;
+ }
+ }
+
+inline TBool CSIContentHandler::DataFlag() const
+ {
+ return iAttributes & EData;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSLContentHandler.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,1221 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CSLContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CSLContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushAuthenticationUtilities.h"
+#include "PushMtmLog.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmAutoFetchOperation.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "sl_dict.h"
+#include "PushContentHandlerUtils.h"
+#include <push/cslpushmsgentry.h>
+#include <msvids.h>
+#include <apgtask.h>
+#include <apgcli.h>
+#include <w32std.h>
+#include <PushMtmUi.rsg>
+#include <nw_dom_node.h>
+#include <nw_dom_document.h>
+#include <nw_dom_element.h>
+#include <nw_dom_text.h>
+#include <nw_wbxml_dictionary.h>
+#include <nw_string_char.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+
+// CONSTANTS
+
+// sl attributes / elements
+_LIT8( KSl, "sl" );
+_LIT8( KHref, "href" );
+_LIT8( KAction, "action" );
+
+// action attribute literals
+_LIT8( KExecHigh,"execute-high" );
+_LIT8( KExecLow, "execute-low" );
+_LIT8( KCache, "cache" );
+
+// Text SL MIME type
+_LIT( KSlTextContentType, "text/vnd.wap.sl" );
+
+// Browser command to fetch an URL. See Browser API Specification!
+_LIT( KBrowserCmdFetchUrl, "4 " );
+const TUid KBrowserAppUid = { 0x10008D39 };
+
+const TInt KNoOfDictArrays = 1;
+
+/// Autofetch time delay in seconds.
+const TInt KAutofetchDelayInSec = 5;
+
+// file monitored by browser
+_LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CSLContentHandler::NewL
+// ---------------------------------------------------------
+//
+CSLContentHandler* CSLContentHandler::NewL()
+ {
+ CSLContentHandler* self = new (ELeave) CSLContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::~CSLContentHandler
+// ---------------------------------------------------------
+//
+CSLContentHandler::~CSLContentHandler()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::~CSLContentHandler")
+
+ Cancel();
+ delete iFetchOp;
+ delete iHrefBuf;
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::~CSLContentHandler")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CSLContentHandler
+// ---------------------------------------------------------
+//
+CSLContentHandler::CSLContentHandler()
+: CPushContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId ),
+ iPushMsgAction( KErrNotFound ),
+ iSaveAsRead( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ConstructL")
+
+ CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
+ CleanupStack::PushL( PushSL );
+ User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
+ CleanupStack::PopAndDestroy( PushSL );
+
+ CPushContentHandlerBase::ConstructL();
+ // Added to Active Scheduler.
+ PUSHLOG_LEAVEFN("CSLContentHandler::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::CollectGarbageL")
+
+ DoCollectGarbageL();
+
+ if(iPushSLEnabled)
+ iState = EFilteringAndParsing;
+ else
+ iState = EDone;
+
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::CollectGarbageL")
+ }
+
+
+// ---------------------------------------------------------
+// CSLContentHandler::ParsePushMsgL
+// Note that cXML parser dosn't do any validation!
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ParsePushMsgL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ParsePushMsgL")
+
+ TPtrC8 bodyPtr;
+ iMessage->GetMessageBody( bodyPtr );
+ // If there is no body in the message leave with an error
+ if ( bodyPtr.Size() == 0 )
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: Empty body")
+ User::Leave( KErrCorrupt );
+ }
+
+ TPtrC contentType;
+ iMessage->GetContentType( contentType );
+ PUSHLOG_WRITE_FORMAT(" Content type <%S>",&contentType)
+
+ // Add SL dictionary.
+ NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
+ { (NW_WBXML_Dictionary_t*)&NW_SL_WBXMLDictionary };
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ RWbxmlDictionary wbxmlDict;
+ wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
+ CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
+
+ NW_TinyDom_Handle_t domHandle;
+ NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
+ NW_Int32 length = (NW_Int32)bodyPtr.Size();
+ NW_Bool encoded = ( contentType.CompareF( KSlTextContentType ) == 0 ) ?
+ NW_FALSE : NW_TRUE;
+ NW_Uint32 publicID = NW_SL_PublicId;
+ NW_Bool extTNotStringTable = NW_FALSE; // What is this?
+ NW_DOM_NodeType_t type = 0;
+ /**********************************
+ * Root of DOM
+ ***********************************/
+ CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
+ CleanupStack::PushL( docTreeOwner );
+ NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
+ (
+ &domHandle,
+ buffer,
+ length,
+ encoded,
+ publicID,
+ extTNotStringTable
+ );
+ if (!domNode)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: domNode is Null")
+ }
+ User::LeaveIfNull( domNode );
+ docTreeOwner->SetDocTree( domNode );
+
+ type = NW_DOM_Node_getNodeType( domNode );
+ if ( type != NW_DOM_DOCUMENT_NODE )
+ {
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not Document node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
+
+ /**********************************
+ * ELEMENT sl
+ ***********************************/
+ // first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
+ TBool domNodeHasChildNodes = EFalse;
+ domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
+ if (!domNodeHasChildNodes)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: No SL element present in the dom tree. Message corrupted.")
+ User::Leave( KErrCorrupt );
+ }
+
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: before calling getDocumentElement")
+ NW_DOM_ElementNode_t* slElement =
+ NW_DOM_DocumentNode_getDocumentElement( domNode );
+ if (!slElement)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: slElement is Null")
+ }
+ User::LeaveIfNull( slElement );
+
+ type = NW_DOM_Node_getNodeType( slElement );
+
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* name = NW_String_new();
+ User::LeaveIfNull( name );
+ stringOwner->SetString( name );
+ stat = NW_DOM_Node_getNodeName( slElement, name );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* nameBuf = NW_String_getStorage( name );
+ NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
+ TPtrC8 namePtr( nameBuf, nameLen );
+
+ if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSl ) != 0 )
+ {
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not sl element node <%d>",type)
+ User::Leave( KErrArgument );
+ }
+
+ CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+ /**********************************
+ * Attributes of ELEMENT sl
+ ***********************************/
+ if ( NW_DOM_ElementNode_hasAttributes( slElement ) )
+ {
+ NW_DOM_AttributeListIterator_t attrIter;
+ stat = NW_DOM_ElementNode_getAttributeListIterator
+ ( slElement, &attrIter );
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+ NW_DOM_AttributeHandle_t attrHandle;
+ while( NW_DOM_AttributeListIterator_getNextAttribute
+ ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
+ {
+ ParseSlAttributeL( attrHandle );
+ }
+ }
+
+ // Cleanup.
+ CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
+
+ // if 'action' attribute not specified, the value 'execute-low' is used.
+ if ( !ActionFlag() )
+ {
+ iPushMsgAction = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" Defaulting to ActionFlag: %d",iPushMsgAction)
+ }
+
+ iState = EProcessing;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::ParsePushMsgL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ParseSlAttributeL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ParseSlAttributeL
+ ( NW_DOM_AttributeHandle_t& aAttrHandle )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ParseSlAttributeL")
+
+ NW_Status_t stat = NW_STAT_SUCCESS;
+
+ CStringOwner* attrNameOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( attrNameOwner );
+
+ NW_String_t* attrName = NW_String_new();
+ User::LeaveIfNull( attrName );
+ attrNameOwner->SetString( attrName );
+
+ // Get the name of the attribute.
+ stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* attrNameBuf = NW_String_getStorage( attrName );
+ NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
+ TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
+
+ if ( attrNamePtr.CompareF( KHref ) == 0 )
+ {
+ if ( !HrefFlag() )
+ {
+ HBufC* tempHrefBuf = NULL;
+
+ CStringOwner* valOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( valOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ valOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
+ {
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 prefixPtr( storage, length );
+ tempHrefBuf = HBufC::NewMaxL( length );
+ // No leavable after it!!! until...
+ tempHrefBuf->Des().Copy( prefixPtr );
+ }
+
+ CleanupStack::PopAndDestroy( valOwner ); // valOwner
+
+ if ( tempHrefBuf )
+ {
+ if ( tempHrefBuf->Length() == 0 )
+ {
+ // Zero length Href is considered as nothing.
+ PUSHLOG_WRITE(" Zero length HrefFlag");
+ }
+ else
+ {
+ iHrefBuf = tempHrefBuf; // ...until here.
+ SetHrefFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
+ }
+ }
+ }
+ }
+ else if ( attrNamePtr.CompareF( KAction ) == 0 )
+ {
+ if ( !ActionFlag() )
+ {
+ CStringOwner* stringOwner = new (ELeave) CStringOwner;
+ CleanupStack::PushL( stringOwner );
+
+ NW_String_t* val = NW_String_new();
+ User::LeaveIfNull( val );
+ stringOwner->SetString( val );
+ stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ NW_Byte* storage = NW_String_getStorage( val );
+ NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+ TPtrC8 actionPtr( storage, length );
+
+ iPushMsgAction = ConvertActionString( actionPtr );
+ SetActionFlag( ETrue );
+ PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
+
+ CleanupStack::PopAndDestroy( stringOwner );
+ }
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ ContHandPanic( EPushContHandPanUnexpSlToken ) );
+ }
+
+ CleanupStack::PopAndDestroy( attrNameOwner ); // attrNameOwner
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::ParseSlAttributeL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ConvertActionString
+// ---------------------------------------------------------
+//
+TUint CSLContentHandler::ConvertActionString
+ ( const TDesC8& aActionString ) const
+ {
+ const TInt KMatchFound = 0;
+
+ // if 'action' attribute not specified, the value 'execute-low' is used.
+ TUint actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+
+ if ( aActionString.Compare( KExecHigh ) == KMatchFound )
+ {
+ actionValue = CSLPushMsgEntry::ESLPushMsgExecuteHigh;
+ }
+ else if ( aActionString.Compare( KExecLow ) == KMatchFound )
+ {
+ actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+ }
+ else if ( aActionString.Compare( KCache ) == KMatchFound )
+ {
+ actionValue = CSLPushMsgEntry::ESLPushMsgExecuteCache;
+ }
+
+ return actionValue;
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::SetSlPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::SetSlPushMsgEntryFieldsL( CSLPushMsgEntry&
+ aSlPushMsgEntry ) const
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
+
+ // Set URL and Action fields.
+ if ( HrefFlag() )
+ {
+ aSlPushMsgEntry.SetUrlL( *iHrefBuf );
+ }
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSlAction ) );
+ if ( ActionFlag() )
+ {
+ aSlPushMsgEntry.SetAction( iPushMsgAction );
+ }
+ else // if not specified, the value 'execute-low' is used.
+ {
+ aSlPushMsgEntry.SetAction( CSLPushMsgEntry::ESLPushMsgExecuteLow );
+ }
+
+ // Set all the relevant header fields.
+ TPtrC8 msgHeaderPtr;
+ iMessage->GetHeader( msgHeaderPtr );
+ aSlPushMsgEntry.SetHeaderL( msgHeaderPtr );
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( iMessage->GetServerAddress( srvAddress ) )
+ {
+ aSlPushMsgEntry.SetFromL( srvAddress );
+ }
+
+ // First line in Inbox: TMsvEntry::iDetails.
+ if ( srvAddress.Length() == 0 )
+ {
+ // Read from resource.
+ HBufC* details =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+ aSlPushMsgEntry.SetMsgDetailsL( *details );
+ CleanupStack::PopAndDestroy( details );
+ }
+ else
+ {
+ // Convert the "From" information to the format required by the UI
+ // spec and then decode it.
+ HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+ CleanupStack::PushL( details );
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+ CleanupStack::PushL( convertedFrom );
+ //
+ aSlPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+ //
+ CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+ }
+
+ // Second line in Inbox: TMsvEntry::iDescription.
+ // Read from resource.
+ HBufC* description =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_INBOX_SERV_MSG );
+ aSlPushMsgEntry.SetMsgDescriptionL( *description );
+ CleanupStack::PopAndDestroy( description );
+
+ // ******** Push MTM specific processing *********
+
+ /*
+ * Unfortunately in CPushMsgEntryBase there is no such functionality
+ * with which we can reach TMsvEntry as non-const, but we have to
+ * modify the entry's iMtmData2 member somehow. We can do it
+ * with either casting or with modifying and saving the entry
+ * manually after it has been saved by CSLPushMsgEntry. The latter
+ * solution is more expensive so we choose the first.
+ */
+ TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSlPushMsgEntry.Entry() );
+ if ( HrefFlag() )
+ {
+ CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+ else
+ {
+ CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
+ }
+
+ // Indication is required if the entry is saved as 'read' (delete &
+ // replacement notification). It can happen only in case of SL message.
+ // Otherwise the flag has to be cleared!
+ if ( !iSaveAsRead )
+ {
+ // Saving as unread & new.
+ tEntry.SetNew( ETrue );
+ tEntry.SetUnread( ETrue );
+ CPushMtmUtil::ResetAttrs( tEntry, EPushMtmReadButContentChanged );
+ }
+ else
+ {
+ // Saving as read.
+ tEntry.SetNew( EFalse );
+ tEntry.SetUnread( EFalse );
+ CPushMtmUtil::SetAttrs( tEntry, EPushMtmReadButContentChanged );
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ProcessingPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::ProcessingPushMsgEntryL")
+
+ TBool discardPushMsg( EFalse );
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSlAction ) );
+
+ // S60 requirement: if the href is empty then delete (discard) the msg.
+ if ( HrefFlag() == EFalse )
+ {
+ PUSHLOG_WRITE(" No SL Href.")
+ discardPushMsg = ETrue;
+ }
+ else
+ {
+ __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
+ ContHandPanic( EPushContHandPanUnspecSlHref ) );
+
+ // The message will not be discarded
+ discardPushMsg = EFalse;
+
+ CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
+ ( *iHrefBuf, KUidWapPushMsgSL );
+ TInt matchingListCount = matchingUrlList->Count();
+ PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
+
+ // Only one SL is allowed with the same Url, so leave the first and
+ // delete the others.
+ if ( 1 < matchingListCount )
+ {
+ for ( TInt count = 1; count < matchingListCount; ++count )
+ {
+ iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
+ }
+ matchingListCount = 1; // Only one remains.
+ }
+
+ if ( 0 < matchingListCount )
+ {
+ // Find msg of the same href and discard it if it has a lower or
+ // the same action value.
+ CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
+ CleanupStack::PushL( matchingSl );
+
+ const TMsvId matchingId = matchingUrlList->At(0);
+ matchingSl->RetrieveL( *iMsvSession, matchingId );
+
+ if ( iPushMsgAction <= matchingSl->Action() )
+ {
+ PUSHLOG_WRITE(" SL: not higher action")
+ discardPushMsg = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( matchingSl ); // matchingSl,
+ }
+
+ CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
+ }
+
+ if ( discardPushMsg )
+ {
+ // Nothing to do.
+ PUSHLOG_WRITE(" SL discarded.")
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ iState = HandleServiceInvocationL();
+ IdleComplete();
+ }
+
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanSlMsgIdSet ) );
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::ProcessingPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleServiceInvocationL
+// ---------------------------------------------------------
+//
+TInt CSLContentHandler::HandleServiceInvocationL() const
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::HandleServiceInvocationL")
+
+ TInt nextState = ESavePushMsgEntry;
+
+ if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
+ {
+ PUSHLOG_WRITE(" SL cache");
+ TBool isAuthenticated = TPushAuthenticationUtil::
+ AuthenticateMsgL( *iMtmSettings, *iMessage );
+ if ( !isAuthenticated )
+ {
+ PUSHLOG_WRITE(" Not authenticated");
+ // The message is placed to Inbox.
+ nextState = ESavePushMsgEntry;
+ }
+ else
+ {
+ // Authenticated. Fetch SL-cache.
+ nextState = EFetching;
+ }
+ }
+
+ else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteLow )
+ {
+ PUSHLOG_WRITE(" SL execute-low")
+ // It is independent from Automatic/Manual setting and WL
+ // authentication is not applied. The message is placed to Inbox
+ // for manual downloading.
+ nextState = ESavePushMsgEntry;
+ }
+
+ else // ESLPushMsgExecuteHigh
+ {
+ PUSHLOG_WRITE(" SL execute-high");
+ // If the settings is Manual or it does not pass the WL authentication
+ // then it is placed to Inbox for manual downloading.
+ // If the setting is Automatic and it passes the WL authentication,
+ // the Browser is started standalone to download the URL without any
+ // user interaction.
+ if ( iMtmSettings->ServiceLoadingType() ==
+ CPushMtmSettings::EManual )
+ {
+ PUSHLOG_WRITE(" Manual setting")
+ // The message is placed to Inbox.
+ nextState = ESavePushMsgEntry;
+ }
+ else // Automatic loading
+ {
+ PUSHLOG_WRITE(" Automatic setting");
+ // Authenticate the message.
+ TBool isAuthenticated = TPushAuthenticationUtil::
+ AuthenticateMsgL( *iMtmSettings, *iMessage );
+ if ( !isAuthenticated )
+ {
+ PUSHLOG_WRITE(" Not authenticated");
+ // The message is placed to Inbox.
+ nextState = ESavePushMsgEntry;
+ }
+ else
+ {
+ // Authenticated - start downloading.
+ nextState = EFetching;
+ }
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::HandleServiceInvocationL")
+ return nextState;
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::FetchPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::FetchPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::FetchPushMsgEntryL")
+
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+ __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
+ ContHandPanic( EPushContHandPanUnspecSlHref ) );
+
+ /*
+ * In case of execute-high use the Browser to download the service.
+ * In case of cache use the fetch operation to download the service
+ * silently.
+ */
+
+ if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteHigh )
+ {
+ PUSHLOG_WRITE(" Start Browser")
+ // Launch the Browser with the URI, then save the message.
+ // Trap errors. If Browser's launching fails, then save the
+ // message as 'unread'. In case of an error, it is not forwarded.
+ TRAPD( err, StartBrowserL() );
+ iState = ESavePushMsgEntry;
+ // Mark it 'read' after succesfull Browser startup.
+ iSaveAsRead = err ? EFalse : ETrue;
+ IdleComplete();
+ }
+ else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
+ {
+ // Fetch the service inside the content handler.
+ iStatus = KRequestPending;
+ SetActive();
+ __ASSERT_DEBUG( !iFetchOp,
+ ContHandPanic( EPushContHandPanFetchAlreadyInit ) );
+
+ iFetchOp = CPushMtmAutoFetchOperation::NewL( *iHrefBuf,
+ KAutofetchDelayInSec,
+ iStatus );
+ iFetchOp->StartL();
+ PUSHLOG_WRITE(" Fetch op started")
+ iState = EFetchCompleted; // Next state.
+ // Fetch completes it.
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse,
+ ContHandPanic( EPushContHandPanBadActionValue ) );
+ User::Leave( KErrNotSupported );
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::FetchPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::StartBrowserL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::StartBrowserL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::StartBrowserL")
+
+ // Parameters are separated by space
+ // 1st parameter: type of the further parameters
+ // 2nd parameter: URL
+ //
+ HBufC* param = HBufC::NewLC( KBrowserCmdFetchUrl().Length() +
+ iHrefBuf->Length() );
+ TPtr paramPtr = param->Des();
+ paramPtr.Copy( KBrowserCmdFetchUrl );
+ paramPtr.Append( *iHrefBuf );
+
+ RWsSession wsSession;
+ User::LeaveIfError( wsSession.Connect() );
+ CleanupClosePushL<RWsSession>( wsSession );
+ TApaTaskList taskList( wsSession );
+ TApaTask task = taskList.FindApp( KBrowserAppUid );
+
+ if ( task.Exists() )
+ {
+ PUSHLOG_WRITE("CSLContentHandler Browser::SendMessage")
+
+ RFs rfs;
+ RFile file;
+ TPtrC8 param8Ptr;
+ // 8-bit buffer is required.
+ HBufC8* param8 = HBufC8::NewLC( param->Length() );
+ param8->Des().Copy( *param );
+ param8Ptr.Set(param8->Des());
+
+ // Open the file.
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ // Replace file if exists or Create file if not exist yet
+ User::LeaveIfError( file.Replace( rfs, KPushMtmUrl, EFileWrite | EFileShareExclusive ) );
+ CleanupClosePushL(file);
+
+ // Write to file
+ User::LeaveIfError( file.Write( param8Ptr ) );
+
+ // Clean up.
+ CleanupStack::PopAndDestroy(/*file*/);
+ CleanupStack::PopAndDestroy(/*rfs*/);
+ CleanupStack::PopAndDestroy( /*param8*/ );
+ }
+ else
+ {
+ PUSHLOG_WRITE("CSLContentHandler Browser::StartDocument")
+ RApaLsSession appArcSession;
+ User::LeaveIfError( appArcSession.Connect() );
+ CleanupClosePushL<RApaLsSession>( appArcSession );
+ TThreadId id;
+ User::LeaveIfError
+ (
+ appArcSession.StartDocument( *param, KBrowserAppUid, id )
+ );
+ CleanupStack::PopAndDestroy( &appArcSession );
+ }
+
+ CleanupStack::PopAndDestroy( &wsSession );
+ CleanupStack::PopAndDestroy( param );
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::StartBrowserL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::FetchCompletedL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::FetchCompletedL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::FetchCompletedL")
+
+ __ASSERT_DEBUG( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache,
+ ContHandPanic( EPushContHandPanBadActionValue ) );
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+ __ASSERT_DEBUG( iFetchOp, ContHandPanic( EPushContHandPanNoFetchOp ) );
+
+ const TInt fetchRes = iStatus.Int();
+ PUSHLOG_WRITE_FORMAT(" fetchRes <%d>",fetchRes)
+
+ if ( fetchRes != KErrNone )
+ {
+ // Downloading failed. Save the message.
+ iState = ESavePushMsgEntry;
+ }
+ else
+ {
+ // Silent fetching has completed successfully.
+ // The message should not be saved.
+ iState = EDone;
+ }
+
+ // Next state set. Complete.
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::FetchCompletedL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::SavePushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::SavePushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::SavePushMsgEntryL")
+
+ __ASSERT_DEBUG( ActionFlag(),
+ ContHandPanic( EPushContHandPanUnspecSlAction ) );
+ __ASSERT_DEBUG( HrefFlag() && iHrefBuf,
+ ContHandPanic( EPushContHandPanUnspecSlHref ) );
+ __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+
+ CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
+ ( *iHrefBuf, KUidWapPushMsgSL );
+ TInt matchingListCount = matchingUrlList->Count();
+ PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
+
+ // Only one SL is allowed with the same Url, so leave the first and
+ // delete the others.
+ __ASSERT_DEBUG( matchingListCount <= 1,
+ ContHandPanic( EPushContHandPanTooManySl ) );
+ if ( 1 < matchingListCount )
+ {
+ for ( TInt count = 1; count < matchingListCount; ++count )
+ {
+ iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
+ }
+ matchingListCount = 1; // Only one remains.
+ }
+
+ TBool saveNewMsg = ETrue; // Save by default.
+ TMsvId matchingEntryId = KMsvNullIndexEntryId;
+
+ // Apply reception rules.
+ if ( matchingListCount == 0 )
+ {
+ // Nothing to do.
+ saveNewMsg = ETrue;
+ }
+ else
+ {
+ CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
+ CleanupStack::PushL( matchingSl );
+
+ matchingEntryId = matchingUrlList->At(0);
+ matchingSl->RetrieveL( *iMsvSession, matchingEntryId );
+
+ if ( iPushMsgAction <= matchingSl->Action() )
+ {
+ // Discard the new SL: it does not have higher
+ // action value as the existing.
+ PUSHLOG_WRITE(" SL not higher action - discarded")
+ saveNewMsg = EFalse;
+ }
+ else
+ {
+ // The new has greater action attribute.
+ // Update the old SL with the new data.
+ saveNewMsg = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( matchingSl ); // matchingSl
+ }
+
+ CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
+
+ // Store message if not marked for deletion.
+ if ( saveNewMsg )
+ {
+ StoreSLMessageL( matchingEntryId );
+ }
+
+ iState = EDone;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::SavePushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::StoreSLMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::StoreSLMessageL( TMsvId aMatchingEntryId )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::StoreSLMessageL")
+
+ CSLPushMsgEntry* slEntry = CSLPushMsgEntry::NewL();
+ CleanupStack::PushL( slEntry );
+
+ if ( aMatchingEntryId == KMsvNullIndexEntryId )
+ {
+ PUSHLOG_WRITE(" No matching SL")
+ // Save new to Inbox.
+ SetSlPushMsgEntryFieldsL( *slEntry );
+ iSavedMsgId =
+ slEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
+ // Set the entry to read and *not* new state depending on iSaveAsRead.
+ if ( !iSaveAsRead )
+ {
+ // Do nothing SaveL saves it as unread.
+ }
+ else
+ {
+ // SaveL owerrides the read settings (iEntry.SetUnread(ETrue);)
+ // that we set in SetSlPushMsgEntryFieldsL, thus the read status
+ // has to be reset manually here:
+ iWapPushUtils->MarkServiceUnreadL( iSavedMsgId, EFalse );
+ }
+ }
+ else
+ {
+ PUSHLOG_WRITE(" Matching SL")
+ slEntry->RetrieveL( *iMsvSession, aMatchingEntryId );
+ SetSlPushMsgEntryFieldsL( *slEntry );
+
+ slEntry->UpdateL( *iMsvSession );
+ iSavedMsgId = aMatchingEntryId;
+ // Note that UpdateL does not change the read/unread status.
+
+ // Move the updated msg back to Inbox.
+ TMsvId parentId = slEntry->Entry().Parent();
+ if ( parentId != KMsvGlobalInBoxIndexEntryId )
+ {
+ PUSHLOG_WRITE(" Moving back to Inbox")
+ CMsvEntry* cParent = iMsvSession->GetEntryL( parentId );
+ CleanupStack::PushL( cParent );
+ cParent->MoveL( iSavedMsgId, KMsvGlobalInBoxIndexEntryId );
+ CleanupStack::PopAndDestroy( cParent ); // cParent
+ }
+ }
+
+#ifdef __TEST_LOG__
+ _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+ _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+ TBuf<32> dateHolder;
+ TBuf<32> timeHolder;
+ TTime recDateTime = slEntry->ReceivedDate();
+ recDateTime.FormatL( dateHolder, KDateFormat );
+ recDateTime.FormatL( timeHolder, KTimeFormat );
+ PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
+ PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+
+ CleanupStack::PopAndDestroy( slEntry ); // slEntry
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::StoreSLMessageL")
+ }
+
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 2")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 2")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 1")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+ TPtrC8 bodyPtr;
+ aPushMsg->GetMessageBody( bodyPtr );
+ PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 1")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CancelHandleMessage()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CPushHandlerBase_Reserved1()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CPushHandlerBase_Reserved2()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CSLContentHandler::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::DoCancel")
+ // TODO Cancel outstanding requests!
+ Complete( KErrCancel );
+ PUSHLOG_LEAVEFN("CSLContentHandler::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::RunL()
+ {
+ PUSHLOG_ENTERFN("CSLContentHandler::RunL")
+
+ // Handle errors in RunError().
+ PUSHLOG_WRITE_FORMAT(" iStatus.Int(): %d",iStatus.Int())
+
+ switch ( iState )
+ {
+ case EGarbageCollecting:
+ {
+ CollectGarbageL();
+ break;
+ }
+
+
+ case EFilteringAndParsing:
+ {
+ if(iPushSLEnabled)
+ {
+ if ( !FilterPushMsgL() )
+ {
+ // It did not pass the filter. Done.
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ // Continue.
+ TInt ret = KErrNone;
+ PUSHLOG_WRITE("CSLContentHandler::RunL : before trapping parsing.")
+ TRAP(ret, ParsePushMsgL());
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunL : after trapping parsing. ret = %d", ret)
+ if ( ret != KErrNone)
+ {
+ PUSHLOG_WRITE("CSLContentHandler::RunL : Parsing failed. discarding message.")
+ iState = EDone;
+ IdleComplete();
+ }
+ }
+ }
+ break;
+ }
+
+ case EProcessing:
+ {
+ if(iPushSLEnabled)
+ ProcessingPushMsgEntryL();
+ break;
+ }
+
+ case EFetching:
+ {
+ if(iPushSLEnabled)
+ FetchPushMsgEntryL();
+ break;
+ }
+
+ case EFetchCompleted:
+ {
+ if(iPushSLEnabled)
+ FetchCompletedL();
+ break;
+ }
+
+ case ESavePushMsgEntry:
+ {
+ if(iPushSLEnabled)
+ SavePushMsgEntryL();
+ break;
+ }
+
+
+ case EDone:
+ {
+ PUSHLOG_WRITE("CSLContentHandler EDone")
+ Complete( KErrNone );
+ break;
+ }
+ default:
+ {
+ // JIC.
+ PUSHLOG_WRITE("CSLContentHandler default EDone")
+ Complete( KErrNone );
+ break;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CSLContentHandler::RunL")
+ }
+
+// ---------------------------------------------------------
+// CSLContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CSLContentHandler::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunError: %d",aError)
+
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSLContentHandler.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CSLContentHandler.
+*
+*/
+
+
+
+#ifndef __CSLCONTENTHANDLER_H__
+#define __CSLCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+#include <nw_dom_attribute.h>
+
+// CONSTANTS
+
+const TUid KUidPushSLContentHandler = { EUidPushSLContentHandler };
+_LIT( KSLContentHandlerData, "text/vnd.wap.sl||application/vnd.wap.slc" );
+
+// FORWARD DECLARATIONS
+
+class CSLPushMsgEntry;
+class CPushMtmAutoFetchOperation;
+
+// CLASS DECLARATION
+
+/**
+* CSLContentHandler Handles Service Loading Content
+*
+* This handler takes ownership of the SL message and processes it
+* according to the Reception rules
+* [WAP Service Loading version 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* NB. If __SERIES60_PUSH_SL is not defined, then all SL push messages are
+* discarded!
+*/
+class CSLContentHandler : public CPushContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CSLContentHandler* NewL();
+
+ /**
+ * D'tor.
+ */
+ virtual ~CSLContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CSLContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Do Garbage Collection synchronously when a new message arrives.
+ * @return None.
+ */
+ void CollectGarbageL();
+
+
+ /**
+ * Parse the Push SL message using XML parser.
+ * If Push Message is an SLC then convert it first to text using
+ * CWbxmlConverterUtil class.
+ * @return None.
+ */
+ void ParsePushMsgL();
+
+ /**
+ * Parse an attribute of the sl element.
+ * @param aAttrHandle The attribute to be parsed.
+ * @return None.
+ */
+ void ParseSlAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+ /**
+ * Convert the action string to a representative numeric value to
+ * facilitate storing the message.
+ * @param aActionString The attribute value indicating the action level
+ * eg 'execute-high'
+ * @return TUint: a value representing the action type.
+ */
+ TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+ /**
+ * Set SL entry fields prior to storing message.
+ * @param aSlPushMsgEntry Entry represents message format to use when
+ * storing it.
+ * @return None.
+ */
+ void SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& aSlPushMsgEntry ) const;
+
+ /**
+ * Check if the message has to be discarded due to empty Href or
+ * there is a message with higher acton value.
+ * @return None.
+ */
+ void ProcessingPushMsgEntryL();
+
+ /**
+ * Handle Service invocation: decide what to do next according to
+ * action value and push settings.
+ * @return Next state.
+ */
+ TInt HandleServiceInvocationL() const;
+
+ /**
+ * Download the indicated content.
+ * In case of execute-high use the Browser to download the service.
+ * In case of cache use the fetch operation to download the service
+ * silently.
+ * @return None.
+ */
+ void FetchPushMsgEntryL();
+
+ /**
+ * Start the Browser and instruct it to download the content
+ * indicated by the Sl's URI.
+ * @return None.
+ */
+ void StartBrowserL();
+
+ /**
+ * Check the result of the SL-cache downloading. If it fails, save the
+ * message. If it succeeds, discard the message.
+ * @return None.
+ */
+ void FetchCompletedL();
+
+ /**
+ * Apply reception rules and save the push message.
+ * If a message already exists with the same URL,
+ * it is saved only if it has a higher action value.
+ * @return None.
+ */
+ void SavePushMsgEntryL();
+
+ /**
+ * Store the new message to Messaging.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * @return None.
+ */
+ void StoreSLMessageL( TMsvId aMatchingEntryId );
+
+ // Attribute flags
+
+ /**
+ * Flag whether message has an action attribute
+ * @param aAction boolean to set flag to -
+ * ETrue for action attrib present
+ * EFalse for no action attrib.
+ */
+ inline void SetActionFlag( TBool aAction );
+
+ /**
+ * Check status of action flag to see if message has an action
+ * attribute.
+ * @return TBool ETrue - action attribute present in message
+ * EFalse - no action attribute.
+ */
+ inline TBool ActionFlag() const;
+
+ /**
+ * Flag whether message has a Href attribute
+ * @param aHref boolean to set flag to -
+ * ETrue for Href attrib present
+ * EFalse for no href attrib
+ */
+ inline void SetHrefFlag( TBool aHref );
+
+ /**
+ * Check status of href flag to see if message has an href attribute.
+ * @return TBool
+ * ETrue - href attribute present in message
+ * EFalse - no href attribute
+ */
+ inline TBool HrefFlag() const;
+
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL(CPushMessage* aPushMsg);
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Terminates any activity.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Step through the various representative states for handling a
+ * message.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * This is invoked when RunL Leaves with an error so clean up and
+ * return.
+ * @return Error code to scheduler.
+ */
+ TInt RunError( TInt aError );
+
+ private: // Data
+
+ enum
+ {
+ EAction = 0x01,
+ EHref = 0x02
+ };
+
+ enum TState ///< States of this state machine.
+ {
+ EGarbageCollecting,
+ EFilteringAndParsing,
+ EProcessing,
+ EFetching,
+ EFetchCompleted,
+ ESavePushMsgEntry,
+ EDone
+ };
+
+ TMsvId iSavedMsgId; ///< ID of the saved message.
+ TUint32 iAttributes; ///< Attribute indication (set or not).
+ TInt iPushMsgAction; ///< SL action.
+ HBufC* iHrefBuf; ///< Href attribute. Has.
+
+ /// Asynchronous fetch operation that downloads the SL-cache. Owned.
+ CPushMtmAutoFetchOperation* iFetchOp;
+
+ NW_Uint32 iCharEncoding; ///< Char encoding of the current msg.
+ TBool iSaveAsRead; ///< Mark the message 'read' after saving.
+ TInt iPushSLEnabled;
+ };
+
+#include "CSLContentHandler.inl"
+
+#endif // __CSLCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSLContentHandler.inl Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline functions.
+*
+*/
+
+
+
+
+inline void CSLContentHandler::SetActionFlag( TBool aAction )
+ {
+ if ( aAction )
+ {
+ iAttributes |= EAction;
+ }
+ else
+ {
+ iAttributes &=~ EAction;
+ }
+ }
+
+inline TBool CSLContentHandler::ActionFlag() const
+ {
+ return iAttributes & EAction;
+ }
+
+inline void CSLContentHandler::SetHrefFlag( TBool aHref )
+ {
+ if ( aHref )
+ {
+ iAttributes |= EHref;
+ }
+ else
+ {
+ iAttributes &=~ EHref;
+ }
+ }
+
+inline TBool CSLContentHandler::HrefFlag() const
+ {
+ return iAttributes & EHref;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CUnknownContentHandler.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,694 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CUnknownContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CUnknownContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmLog.h"
+#include "PushContentHandlerPanic.h"
+#include "StringResourceReader.h"
+#include <msvids.h>
+#ifdef __SERIES60_PUSH_SP
+#include <CUnknownPushMsgEntry.h>
+#include <BioDB.h> // BIO Message Database and message query methods
+#include <gsmubuf.h> // CSmsBuffer class
+#include <gsmumsg.h> // CSmsMessage class
+#include <smuthdr.h> // CSmsHeader class
+#include <smut.h> // TSmsUtilities class
+#include <txtrich.h> // CRichText class
+#include <biouids.h> // KUidBioMessageTypeMtm const
+#include <apgcli.h>
+#include <apmrec.h>
+#include <DocumentHandler.h>
+#include <Uri16.h>
+#include <UriUtils.h>
+#include <msvuids.h> // KUidMsvMessageEntry const
+#include <PushMtmUi.rsg>
+
+// SMUT Unbranch
+#include <csmsgetdetdescinterface.h>
+
+#endif // __SERIES60_PUSH_SP
+
+// CONSTANTS
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::NewL
+// ---------------------------------------------------------
+//
+CUnknownContentHandler* CUnknownContentHandler::NewL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::NewL")
+
+ CUnknownContentHandler* self = new (ELeave) CUnknownContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::~CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::~CUnknownContentHandler()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::~CUnknownContentHandler")
+
+ Cancel();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::~CUnknownContentHandler")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::CUnknownContentHandler()
+: CPushContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId )
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::ConstructL")
+
+ CPushContentHandlerBase::ConstructL();
+ // Added to Active Scheduler.
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::ConstructL")
+ }
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::CollectGarbageL")
+
+ DoCollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+ iState = EFilteringAndProcessing;
+#else // __SERIES60_PUSH_SP
+ // Do nothing - message is discarded.
+ iState = EDone;
+#endif // __SERIES60_PUSH_SP
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::CollectGarbageL")
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ProcessingPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+
+ const TBool bioMsg( BioMessageTypeL() );
+ if ( bioMsg )
+ {
+ PUSHLOG_WRITE(" BIO message");
+ // convert to bio format & save
+ SaveBioMessageEntryL();
+ }
+ else
+ {
+ PUSHLOG_WRITE(" Not BIO message");
+
+ // Check if the received content is supported.
+ RApaLsSession apaLs;
+ User::LeaveIfError( apaLs.Connect() );
+ CleanupClosePushL<RApaLsSession>( apaLs );
+
+ // Try to find out the data type.
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+ HBufC8* contentT8 = HBufC8::NewMaxLC( contentTypePtr.Length() );
+ contentT8->Des().Copy( contentTypePtr );
+ TDataRecognitionResult result;
+ User::LeaveIfError( apaLs.RecognizeData( KNullDesC(),
+ *contentT8,
+ result ) );
+ CleanupStack::PopAndDestroy( contentT8 ); // contentT8
+
+ CDocumentHandler* docHandler = CDocumentHandler::NewLC( NULL );
+ TBool supported = docHandler->CanOpenL( result.iDataType );
+
+ CleanupStack::PopAndDestroy( 2, &apaLs ); // docHandler, apaLs
+
+ // Save only supported msg.
+ if ( supported )
+ {
+ // create unknown push message entry and save
+ SaveUnknownPushMsgEntryL();
+ }
+ }
+
+ iState = EDone;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::BioMessageTypeL
+// ---------------------------------------------------------
+//
+TBool CUnknownContentHandler::BioMessageTypeL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::BioMessageTypeL")
+
+ // need to create local RFs for BIO otherwise raises exception
+ RFs localFS;
+ CleanupClosePushL( localFS );
+ User::LeaveIfError( localFS.Connect() );
+ CBIODatabase* bioDB = CBIODatabase::NewLC( localFS );
+
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+
+ iBioMsgUID = KNullUid;
+ TBool isBio = EFalse;
+ // IsBioMessageL returns KErrNone if found or KErrNotFound if not found
+ if ( bioDB->IsBioMessageL( EBioMsgIdIana,
+ contentTypePtr,
+ NULL,
+ iBioMsgUID ) == KErrNone )
+ {
+ isBio = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // bioDB, localFS
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::BioMessageTypeL")
+ return isBio;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveBioMessageEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveBioMessageEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SaveBioMessageEntryL")
+
+ // create sms message from CPushMessage and then save message
+ RFs fileSession;
+ User::LeaveIfError(fileSession.Connect());
+ CleanupClosePushL(fileSession);
+ CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
+ CleanupStack::PushL(smsBuffer);
+
+ CSmsMessage* smsMessage = CSmsMessage::NewL( fileSession,
+ CSmsPDU::ESmsDeliver,
+ smsBuffer );
+ CleanupStack::PushL( smsMessage );
+
+ smsMessage->SmsPDU().SetAlphabet( TSmsDataCodingScheme::ESmsAlphabet8Bit );
+
+ TPtrC8 fieldValue;
+
+ if ( iMessage->GetBinaryHeaderField( EHttpFrom, fieldValue ) ||
+ iMessage->GetBinaryHeaderField( EHttpXWapInitiatorURI, fieldValue ) ||
+ iMessage->GetBinaryHeaderField( EHttpContentLocation, fieldValue ) )
+ {
+ // Convert 8 bit to 16 bit
+ HBufC* tempAddr = HBufC::NewLC( fieldValue.Length() );
+ tempAddr->Des().Copy( fieldValue );
+
+ smsMessage->SmsPDU().SetToFromAddressL( *tempAddr );
+ CleanupStack::PopAndDestroy( tempAddr );
+ }
+
+ if ( iMessage->GetMessageBody( fieldValue ) )
+ {
+ HBufC* tempBody = HBufC::NewLC( fieldValue.Length() );
+ tempBody->Des().Copy( fieldValue );
+
+ smsBuffer->InsertL( 0, *tempBody );
+ CleanupStack::PopAndDestroy( tempBody );
+ }
+
+ CleanupStack::Pop( 2 ); //smsBuffer, smsMessage
+
+ StoreMsgL( smsMessage ); // destroys CSmsMessage (contains smsBuffer)
+ CleanupStack::PopAndDestroy( &fileSession );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveBioMessageEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::StoreMsgL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::StoreMsgL( CSmsMessage* aSmsMsg )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::StoreMsgL")
+
+ CleanupStack::PushL( aSmsMsg );
+
+ // Create a CSmsHeader based on this message. smsHdr takes ownership of aSmsMsg
+ CSmsHeader* smsHdr = CSmsHeader::NewL( aSmsMsg );
+ CleanupStack::Pop( aSmsMsg );
+ CleanupStack::PushL( smsHdr );
+
+ // get root entry
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+ CleanupStack::PushL( msvEntry );
+
+ // create an invisible blank entry
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.SetVisible( EFalse );
+ entry.SetInPreparation( ETrue );
+ entry.SetReadOnly( EFalse );
+ entry.SetUnread( ETrue );
+
+ TMsvId serviceId = SetBioServiceIdL();
+ TBuf<KSmsDescriptionLength> description;
+
+// SMUT Unbranch
+ CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
+ CleanupStack::PushL( smsPlugin );
+
+ if ( iBioMsgUID != KNullUid )
+ {
+ // sets entry with values passed in
+ TSmsUtilities::PopulateMsgEntry( entry,
+ *aSmsMsg,
+ serviceId,
+ KUidBIOMessageTypeMtm );
+ entry.iBioType = iBioMsgUID.iUid;
+
+ // Look up and set the description
+ TInt index;
+ CBIODatabase* bioDB = CBIODatabase::NewLC( msvEntry->Session().FileSession() );
+ bioDB->GetBioIndexWithMsgIDL( iBioMsgUID, index );
+ description.Copy( bioDB->BifReader(index).Description() );
+ entry.iDescription.Set( description );
+ CleanupStack::PopAndDestroy(); // bioDB
+ }
+ else
+ {
+ // sets entry with values passed in
+ TSmsUtilities::PopulateMsgEntry( entry, *aSmsMsg, serviceId );
+
+ // Look up and set the description
+// SMUT Unbranch
+ smsPlugin->GetDescription( *aSmsMsg, description );
+ entry.iDescription.Set( description );
+ }
+
+ // Set the details
+ TBuf<KSmsDetailsLength> details;
+ TInt err = smsPlugin->GetDetails( msvEntry->Session().FileSession(),
+ *aSmsMsg,
+ details );
+ if ( !err )
+ {
+ entry.iDetails.Set( details );
+ }
+
+// SMUT Unbranch
+ CleanupStack::PopAndDestroy( smsPlugin );
+
+ // Store entry in inbox
+ msvEntry->SetEntryL( KMsvGlobalInBoxIndexEntryId );
+ msvEntry->CreateL( entry );
+ msvEntry->Session().CleanupEntryPushL( entry.Id() );
+ msvEntry->SetEntryL( entry.Id() );
+
+ // Save the message
+ CMsvStore* store = msvEntry->EditStoreL();
+ CleanupStack::PushL( store );
+
+ // Save off the CSmsHdr
+ smsHdr->StoreL( *store );
+
+ // Save the body
+
+ // Create and fill a CRichText object to save to store..
+ CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
+ CleanupStack::PushL( paraFormatLayer );
+ CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL( charFormatLayer );
+ CRichText* richText = CRichText::NewL( paraFormatLayer, charFormatLayer );
+ CleanupStack::PushL( richText );
+ HBufC* bufBody=HBufC::NewLC( aSmsMsg->Buffer().Length() );
+ TPtr bufBodyPtr = bufBody->Des();
+ aSmsMsg->Buffer().Extract( bufBodyPtr, 0, aSmsMsg->Buffer().Length() );
+ richText->InsertL( 0, bufBodyPtr );
+ store->StoreBodyTextL( *richText );
+ CleanupStack::PopAndDestroy( 4 ); //bufBody, richText, charFormatLayer, paraFormatLayer
+
+ store->CommitL();
+ entry.SetReadOnly( ETrue );
+ entry.SetVisible( ETrue );
+ entry.SetInPreparation( EFalse );
+ msvEntry->ChangeL( entry );
+
+ CleanupStack::PopAndDestroy(); //store
+ msvEntry->Session().CleanupEntryPop(); //entry
+ CleanupStack::PopAndDestroy( 2 ); //msvEntry, smsHdr
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::StoreMsgL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetBioServiceIdL
+// ---------------------------------------------------------
+//
+TMsvId CUnknownContentHandler::SetBioServiceIdL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SetBioServiceIdL")
+
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+
+ CleanupStack::PushL( msvEntry );
+
+ TMsvId serviceId = KMsvNullIndexEntryId;
+ TRAPD( err, TSmsUtilities::ServiceIdL( *msvEntry,
+ serviceId,
+ KUidBIOMessageTypeMtm ) );
+ if ( err == KErrNotFound )
+ {
+ serviceId = KMsvLocalServiceIndexEntryId;
+ err = KErrNone;
+ }
+
+ CleanupStack::PopAndDestroy(); //msvEntry
+ User::LeaveIfError( err );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SetBioServiceIdL")
+ return serviceId;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveUnknownPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveUnknownPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+
+ CUnknownPushMsgEntry* unknownPushMsgEntry =
+ CUnknownPushMsgEntry::NewL();
+ CleanupStack::PushL( unknownPushMsgEntry );
+
+ SetUnknownPushMsgEntryFieldsL( *unknownPushMsgEntry );
+
+ iSavedMsgId = unknownPushMsgEntry->SaveL( *iMsvSession,
+ KMsvGlobalInBoxIndexEntryId );
+
+ CleanupStack::PopAndDestroy( unknownPushMsgEntry ); // unknownPushMsgEntry
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+ ( CUnknownPushMsgEntry& aUnknownPushMsgEntry )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+
+ // Set all the relevant fields
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( iMessage->GetServerAddress( srvAddress ) )
+ {
+ aUnknownPushMsgEntry.SetFromL( srvAddress );
+ }
+
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+ aUnknownPushMsgEntry.SetContentTypeL( contentTypePtr );
+
+ TPtrC8 msgBodyPtr;
+ iMessage->GetMessageBody( msgBodyPtr );
+ aUnknownPushMsgEntry.SetMessageDataL( msgBodyPtr );
+
+ // First line in Inbox: TMsvEntry::iDetails.
+ if ( srvAddress.Length() == 0 )
+ {
+ // Read from resource.
+ HBufC* details =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+ aUnknownPushMsgEntry.SetMsgDetailsL( *details );
+ CleanupStack::PopAndDestroy( details );
+ }
+ else
+ {
+ // Convert the "From" information to the format required by the UI
+ // spec and then decode it.
+ HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+ CleanupStack::PushL( details );
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+ CleanupStack::PushL( convertedFrom );
+ //
+ aUnknownPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+ //
+ CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+ }
+
+ // Second line in Inbox: TMsvEntry::iDescription.
+ TPtrC8 contentUriPtr;
+ iMessage->GetBinaryHeaderField( EHttpXWapContentURI, contentUriPtr );
+ // Copy the 8-bit descriptor into a unicode one.
+ HBufC* contentUri = HBufC::NewMaxLC( contentUriPtr.Length() );
+ contentUri->Des().Copy( contentUriPtr );
+ // Extract file name from X-wap-content-uri.
+ HBufC* fileName = FileNameFromUriL( *contentUri );
+ CleanupStack::PopAndDestroy( contentUri ); // contentUri
+ CleanupStack::PushL( fileName );
+
+ if ( fileName->Length() == 0 )
+ {
+ // TODO: Read from resource.
+ //"Unknown content type" qtn_wap_push_msg_content_not_supported
+ }
+ else
+ {
+ aUnknownPushMsgEntry.SetMsgDescriptionL( *fileName );
+ }
+
+ CleanupStack::PopAndDestroy( fileName ); // fileName
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::FileNameFromUriL
+// ---------------------------------------------------------
+//
+HBufC* CUnknownContentHandler::FileNameFromUriL( const TDesC& aUri ) const
+ {
+ TUriParser pars;
+ User::LeaveIfError( pars.Parse( aUri ) );
+
+ HBufC* res = NULL;
+ if ( pars.IsPresent( EUriPath ) )
+ {
+ TPtrC path = pars.Extract( EUriPath );
+ // Extract the remaining text after the last slash character.
+ // If the path contains a file name, then it has to contain
+ // a slash also, so if there is no slash then it's sure that there
+ // is no file name in it.
+ TInt index = path.LocateReverse( TChar('/') );
+ if ( index < 0 )
+ {
+ // No file name.
+ }
+ else if ( ++index < path.Length() ) // If not at the end...
+ {
+ // Last slash found. Extract the text after the slash.
+ res = path.Mid( index ).AllocL();
+ }
+ }
+
+ if ( !res )
+ {
+ res = KNullDesC().AllocL();
+ }
+
+ return res;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+ iState = EGarbageCollecting;
+ IdleComplete();
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::HandleMessageL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CancelHandleMessage()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::CancelHandleMessage")
+ Cancel();
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::CancelHandleMessage")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved1()
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved2
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved2()
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::DoCancel")
+ Complete( KErrCancel );
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::RunL()
+ {
+ // Handle errors in RunError().
+ PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
+ User::LeaveIfError( iStatus.Int() );
+
+ // use active state machine routine to manage activites:
+ switch ( iState )
+ {
+ case EGarbageCollecting:
+ {
+ CollectGarbageL();
+ break;
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+ case EFilteringAndProcessing:
+ {
+ if ( !FilterPushMsgL() )
+ {
+ // It did not pass the filter. Done.
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ // Continue.
+ ProcessingPushMsgEntryL();
+ }
+ break;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+ default:
+ {
+ PUSHLOG_WRITE("CUnknownContentHandler default EDone")
+ Complete( KErrNone );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CUnknownContentHandler::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CUnknownContentHandler::RunError: %d",aError)
+
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CUnknownContentHandler.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CUnknownContentHandler.
+*
+*/
+
+
+
+#ifndef __CUNKNOWNCONTENTHANDLER_H__
+#define __CUNKNOWNCONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+
+// CONSTANTS
+
+const TUid KUidPushUnknownContentHandler = { EUidPushUnknownContentHandler };
+_LIT( KUnknownContentHandlerData, "*" );
+
+// FORWARD DECLARATIONS
+
+class CSmsMessage;
+class CUnknownPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* CUnknownContentHandler provides the default plugin when the
+* specific plugin for a data type cannot be matched.
+*
+* If the feature flag __SERIES60_PUSH_SP is defined, then all this
+* kind of messages are discarded on reception.
+*/
+class CUnknownContentHandler : public CPushContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CUnknownContentHandler* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CUnknownContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CUnknownContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Do Garbage Collection synchronously.
+ * @return None.
+ */
+ void CollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+
+ /**
+ * Create/Saving Push Msg Entry in the appropriate message store.
+ * First query the type of push message to check if it is a known BIO
+ * message type:
+ * If it is then
+ * save Push Message as appropriate BIO message
+ * else
+ * save as UnknownPushMsgEntry.
+ * @return None.
+ */
+ void ProcessingPushMsgEntryL();
+
+ /**
+ * Check if the given Push Message, which is now owned by the handler,
+ * is a BIO Messsage (setting the member variable iBioMsgUID if it is)
+ * and returning a boolean to indicate success (ETrue) or EFalse otherwise.
+ * @return TBool
+ * ETrue - push message is a BIO message
+ * EFalse - push message is not BIO message
+ */
+ TBool BioMessageTypeL();
+
+ /**
+ * Save CPushMessage as the relevant BIO message type.
+ * Firstly create SMS message and use CPushMessage as
+ * source to populate SMS. Then save SMS message.
+ * @return None.
+ */
+ void SaveBioMessageEntryL();
+
+ /**
+ * Create CMsvEntry for sms messsage, stores the entry and
+ * then delete entry once done.
+ * @param aMessage CSmsMessage which embodies details of CPushMessage.
+ */
+ void StoreMsgL( CSmsMessage* aSmsMsg );
+
+ /**
+ * Set the service id for Bio messaging
+ * @return TMsvId The service id for the message store.
+ */
+ TMsvId SetBioServiceIdL();
+
+ /**
+ * Save CPushMessage as a CUnknownPushMsgEntry
+ * @return None.
+ */
+ void SaveUnknownPushMsgEntryL();
+
+ /**
+ * Sets the Unknown Push Message Entry Fields from the data in
+ * the received CPushMessage:
+ * @param aUnknownPushMsgEntry CUnknownPushMsgEntry to populate with
+ * CPushMessage details.
+ */
+ void SetUnknownPushMsgEntryFieldsL( CUnknownPushMsgEntry&
+ aUnknownPushMsgEntry );
+
+ /**
+ * Extract the file name from the URI.
+ * @param aUri The URI.
+ * @return The file name part or an empty string.
+ */
+ HBufC* FileNameFromUriL( const TDesC& aUri ) const;
+
+#endif // __SERIES60_PUSH_SP
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg );
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Cancels the handling of the message and revokes the active status
+ * of the handler
+ */
+ void DoCancel();
+
+ /**
+ * Handler States:
+ * EFilteringAndProcessing - Filter new msg according to Service
+ * message settings and Convert CPushMessage to a
+ * format to save and save the message (either as Bio
+ * msg or UnknownPushMsgEntry)
+ * EDone - Clean up, complete observer
+ */
+ void RunL();
+
+ /**
+ * This is invoked when RunL Leaves with an error.
+ * Cleans up and returns.
+ * @param aError Error passed into this function
+ */
+ TInt RunError( TInt aError );
+
+ private: // Data
+
+ enum TState
+ {
+ EGarbageCollecting,
+ EFilteringAndProcessing,
+ EDone
+ };
+
+ TMsvId iSavedMsgId; ///< ID of the saved message.
+ TUid iBioMsgUID; ///< BIO msg UID.
+ };
+
+#endif // __CUNKNOWNCONTENTHANDLER_H__
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerDef.hrh Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Macro definitions and enums for the Push Content Handlers.
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERDEF_HRH
+#define PUSHCONTENTHANDLERDEF_HRH
+
+
+/// PushContentHandler DLL.
+#define EUidPushContentHandlerDll 0x101F854C
+
+/// Implementation UIDs.
+#define EUidPushUnknownContentHandler 0x101F854D
+#define EUidPushSIContentHandler 0x101F854E
+#define EUidPushSLContentHandler 0x101F854F
+#define EUidPushCOContentHandler 0x10008D47
+#define EUidPushMultiPartMixedContentHandler 0x101F8550
+#define EUidPushMultiPartRelAndAltContentHandler 0x101F8551
+
+/** PushContentHandler Interface UID (defined by Symbian).
+* See CContentHandlerBase.h, KUidPushContentHandlerBase. */
+#define EUidPushContentHandlerBase 0x101F3E5E
+
+
+#endif // PUSHCONTENTHANDLERDEF_HRH
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Proxy definition.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerDef.hrh"
+#include "CUnknownContentHandler.h"
+#include "CSIContentHandler.h"
+#include "CSLContentHandler.h"
+#include "CCOContentHandler.h"
+#include "CMultiPartMixedContentHandler.h"
+#include "CMultiPartRelAndAltContentHandler.h"
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushUnknownContentHandler, CUnknownContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushSIContentHandler, CSIContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushSLContentHandler, CSLContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushCOContentHandler, CCOContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartMixedContentHandler, CMultiPartMixedContentHandler::NewL ),
+ IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartRelAndAltContentHandler, CMultiPartRelAndAltContentHandler::NewL )
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+ return ImplementationTable;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerPanic.h"
+
+// LOCAL CONSTANTS AND MACROS
+
+_LIT( KContHandPanicString, "PushContentHandler(MTM)" );
+
+// ---------------------------------------------------------
+// ContHandPanic
+// ---------------------------------------------------------
+//
+GLDEF_C void ContHandPanic( TPushContentHandlerPanic aReason )
+ {
+ User::Panic( KContHandPanicString, aReason );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Panic utility
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERPANIC_H
+#define PUSHCONTENTHANDLERPANIC_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+enum TPushContentHandlerPanic
+ {
+ EPushContHandPanCommandNotSupported = 1, ///< Not supported command.
+ EPushContHandPanBadType, ///< Unsupported message type for an operation.
+ EPushContHandPanFoldersNotSupported, ///< MTM loaded with bad message entry.
+ EPushContHandPanEmptySelection, ///< Entry selection is empty.
+ EPushContHandPanNotInitUrl,
+ EPushContHandPanNoContext,
+ EPushContHandPanAlreadyInitialized,
+ EPushContHandPanBadActionValue,
+ EPushContHandPanBadState,
+ EPushContHandPanNoFetchOp,
+ EPushContHandPanBadTransaction,
+ EPushContHandPanNoSiIdAttr,
+ EPushContHandPanNoCreatedAttr,
+ EPushContHandPanNoActionAttr,
+ EPushContHandPanTooManySi,
+ EPushContHandPanTooManySl,
+ EPushContHandPanMsgNull,
+ EPushContHandPanBadCreatedType,
+ EPushContHandPanExpiresNotOpaque,
+ EPushContHandPanHrefNotString,
+ EPushContHandPanClassTokenReached,
+ EPushContHandPanUnexpHrefAttrVal,
+ EPushContHandPanUnexpSiToken,
+ EPushContHandPanUnexpSlToken,
+ EPushContHandPanUnspecSiAction,
+ EPushContHandPanUnspecSlAction,
+ EPushContHandPanUnexpectedTimeType,
+ EPushContHandPanBadExpiresType,
+ EPushContHandPanBadTTimeLength,
+ EPushContHandPanNoSiIdOrHrefAttr,
+ EPushContHandPanUnspecSiHref,
+ EPushContHandPanUnspecSlHref,
+ EPushContHandPanSlMsgIdSet,
+ EPushContHandPanSlMsgIdNotSet,
+ EPushContHandPanFetchAlreadyInit,
+ EPushContHandPanAutBadState,
+ EPushContHandPanSiResNotOnStack,
+ EPushContHandPanNullCharSetId,
+ EPushContHandPanNullUcs2Buf
+ };
+
+GLREF_C void ContHandPanic( TPushContentHandlerPanic aReason );
+
+#endif // PUSHCONTENTHANDLERPANIC_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Utilities
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerUtils.h"
+#include <e32std.h>
+#include <nw_dom_document.h>
+
+// ---------------------------------------------------------
+// NwxStatusToErrCode
+// ---------------------------------------------------------
+//
+TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode )
+ {
+ TInt ret( KErrGeneral );
+
+ switch ( aNwxErrorCode )
+ {
+ case NW_STAT_SUCCESS:
+ {
+ ret = KErrNone;
+ break;
+ }
+ case NW_STAT_OUT_OF_MEMORY:
+ {
+ ret = KErrNoMemory;
+ break;
+ }
+ case NW_STAT_CANCELLED:
+ case NW_STAT_CONN_CANCELLED:
+ {
+ ret = KErrCancel;
+ break;
+ }
+ default:
+ {
+ ret = KErrGeneral;
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// RWbxmlDictionary::InitializeL
+// ---------------------------------------------------------
+//
+void RWbxmlDictionary::InitializeL( NW_Int32 aCount,
+ NW_WBXML_Dictionary_t* aDictArray[] )
+ {
+ NW_Status_t stat = NW_STAT_SUCCESS;
+ stat = NW_WBXML_Dictionary_initialize( aCount, aDictArray );
+ User::LeaveIfError( NwxStatusToErrCode( stat ) );
+ }
+
+// ---------------------------------------------------------
+// RWbxmlDictionary::Close
+// ---------------------------------------------------------
+//
+void RWbxmlDictionary::Close()
+ {
+ NW_WBXML_Dictionary_destroy();
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::CDocumentTreeOwner()
+: iDocTree( NULL )
+ {
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree )
+: iDocTree( aDocTree )
+ {
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::~CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::~CDocumentTreeOwner()
+ {
+ if ( iDocTree )
+ {
+ NW_DOM_DocumentNode_Delete( iDocTree );
+ }
+ }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::SetDocTree
+// ---------------------------------------------------------
+//
+void CDocumentTreeOwner::SetDocTree( NW_DOM_DocumentNode_t* aDocTree )
+ {
+ iDocTree = aDocTree;
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::CStringOwner()
+: iString( NULL )
+ {
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::CStringOwner( NW_String_t* aString )
+: iString( aString )
+ {
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::~CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::~CStringOwner()
+ {
+ if ( iString )
+ {
+ NW_String_delete( iString );
+ }
+ }
+
+// ---------------------------------------------------------
+// CStringOwner::SetString
+// ---------------------------------------------------------
+//
+void CStringOwner::SetString( NW_String_t* aString )
+ {
+ iString = aString;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Utilities
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERUTILS_H
+#define PUSHCONTENTHANDLERUTILS_H
+
+// INCLUDE FILES
+
+#include <e32def.h>
+#include <e32base.h>
+#include <nwx_status.h>
+#include <nw_wbxml_dictionary.h>
+#include <nw_encoder_stringtable.h>
+#include <nw_string_string.h>
+
+/**
+* Convert cXML status code to Symbian OS error code.
+* @param aNwxErrorCode cXML status.
+* @return Symbian OS error code.
+*/
+TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode );
+
+/*
+* The following tiny classes have been introduced to help putting C-style
+* Browser Engine structures to the Cleanup Stack, so that we can implement
+* a LEAVE-safe code.
+*/
+
+/**
+* Encapsulate WBXML dictionary initialization.
+*/
+class RWbxmlDictionary
+ {
+ public:
+ void InitializeL( NW_Int32 aCount, NW_WBXML_Dictionary_t* aDictArray[] );
+ void Close();
+ };
+
+/**
+* Encapsulate a WBXML document tree.
+*/
+class CDocumentTreeOwner : public CBase
+ {
+ public:
+ CDocumentTreeOwner();
+ CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree );
+ ~CDocumentTreeOwner();
+ public:
+ void SetDocTree( NW_DOM_DocumentNode_t* aDocTree );
+ private:
+ NW_DOM_DocumentNode_t* iDocTree; ///< Owned.
+ };
+
+/**
+* Encapsulate an NW_String_t.
+*/
+class CStringOwner : public CBase
+ {
+ public:
+ CStringOwner();
+ CStringOwner( NW_String_t* aString );
+ ~CStringOwner();
+ public:
+ void SetString( NW_String_t* aString );
+ private:
+ NW_String_t* iString; ///< Owned.
+ };
+
+#endif // PUSHCONTENTHANDLERUTILS_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmAutoFetchOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmAutoFetchOperation.h"
+#include "PushMtmFetchOperation.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmLog.h"
+
+// CONSTANTS
+
+/// Max retry.
+LOCAL_D const TInt KMaxTry = 2;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::NewL
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation* CPushMtmAutoFetchOperation::NewL
+ (
+ const TDesC& aRequestedUrl,
+ TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus
+ )
+ {
+ CPushMtmAutoFetchOperation* op =
+ new (ELeave) CPushMtmAutoFetchOperation
+ ( aTimeDelayInSec, aObserverRequestStatus );
+ CleanupStack::PushL( op );
+ op->ConstructL( aRequestedUrl );
+ CleanupStack::Pop(); // op
+ return op;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation()
+ {
+ Cancel();
+ delete iFetchOp;
+ delete iRequestedUrl;
+ iTimer.Close();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::StartL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::StartL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::StartL")
+
+ Cancel();
+
+ iTry = 0;
+ iState = EFetch;
+
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::StartL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
+
+ (
+ TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus
+ )
+: CActive( EPriorityStandard ),
+ iObserver( aObserverRequestStatus ),
+ iState( EInit ),
+ iTimeDelayInSec( aTimeDelayInSec )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::ConstructL( const TDesC& aRequestedUrl )
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::ConstructL")
+
+ iRequestedUrl = HBufC::NewMaxL( aRequestedUrl.Length() );
+ iRequestedUrl->Des().Copy( aRequestedUrl );
+
+ User::LeaveIfError( iTimer.CreateLocal() );
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::FetchL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::FetchL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::FetchL")
+
+ delete iFetchOp;
+ iFetchOp = NULL;
+ iStatus = KRequestPending;
+ SetActive();
+ iFetchOp = CPushMtmFetchOperation::NewL( *iRequestedUrl, iStatus );
+ PUSHLOG_WRITE(" Fetch op created")
+
+ ++iTry; // Increase indicator.
+ PUSHLOG_WRITE_FORMAT(" Try: %d",iTry)
+ iFetchOp->StartL();
+ iState = ECheck; // Next state.
+ PUSHLOG_WRITE(" Fetch op started")
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::FetchL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::DoCancel()
+ {
+ if ( iFetchOp )
+ {
+ iFetchOp->Cancel();
+ }
+
+ iTimer.Cancel();
+
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, KErrCancel );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::RunL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::RunL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::RunL")
+
+ __ASSERT_DEBUG( iState != EInit && iState != EDone,
+ ContHandPanic( EPushContHandPanAutBadState ) );
+
+ switch ( iState )
+ {
+ case EFetch:
+ {
+ PUSHLOG_WRITE(" EFetch")
+ FetchL();
+ break;
+ }
+
+ case ECheck:
+ {
+ PUSHLOG_WRITE_FORMAT2(" ECheck: %d,%d",iStatus.Int(),iTry)
+ if ( iStatus.Int() != KErrNone && iTry < KMaxTry )
+ {
+ // Wait and Retry.
+ iTimer.Cancel();
+ iStatus = KRequestPending;
+ SetActive();
+ TTimeIntervalMicroSeconds32 delayInMSec =
+ iTimeDelayInSec * 1000000;
+ iTimer.After( iStatus, delayInMSec );
+ iState = EFetch;
+ }
+ else
+ {
+ // No error or no more trial allowed.
+ iState = EDone;
+ PUSHLOG_WRITE_FORMAT(" SignalObs: %d",iStatus.Int());
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, iStatus.Int() );
+ }
+ break;
+ }
+
+ default:
+ {
+ PUSHLOG_WRITE(" default")
+ // JIC.
+ iState = EDone;
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, KErrNone );
+ break;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::RunL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmAutoFetchOperation::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmAutoFetchOperation::RunError <%d>",aError);
+
+ // Signal the observer that a leave has occured.
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, aError );
+
+ return KErrNone;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of PushMtmAutoFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMAUTOFETCHOPERATION_H
+#define PUSHMTMAUTOFETCHOPERATION_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMtmFetchOperation;
+
+// CLASS DECLARATION
+
+/**
+* Asynchronous fetch operation that runs in silent mode and in addition to the
+* services of CPushMtmFetchOperation it retries downloading of the indicated
+* service if the first try fails.
+*/
+class CPushMtmAutoFetchOperation : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aRequestedUrl The requested URL.
+ * @param aTimeDelayInSec Time delay between fetches in seconds.
+ * @param aObserverRequestStatus Completion status.
+ * @return The constructed client.
+ */
+ static CPushMtmAutoFetchOperation* NewL
+ (
+ const TDesC& aRequestedUrl,
+ TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmAutoFetchOperation();
+
+ public: // Functions from base classes
+
+ /**
+ * Start or restart the operation.
+ */
+ void StartL();
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aTimeDelayInSec Time delay between fetches in seconds.
+ * @param aObserverRequestStatus Completion status.
+ */
+ CPushMtmAutoFetchOperation( TInt aTimeDelayInSec,
+ TRequestStatus& aObserverRequestStatus );
+
+ /**
+ * Second phase constructor.
+ * @param aRequestedUrl The requested URL.
+ */
+ void ConstructL( const TDesC& aRequestedUrl );
+
+ protected: // New functions
+
+ /**
+ * Issue fetching.
+ */
+ void FetchL();
+
+ protected: // Functions from base classes
+
+ /**
+ * Cancel fetching.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Start fetching and make an entry into the operation mapper.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // Data
+
+ TRequestStatus& iObserver; ///< Observer's status.
+ HBufC* iRequestedUrl; ///< Request URI or NULL. Owned.
+
+ enum TState ///< State.
+ {
+ EInit, ///< Initial state.
+ EFetch, ///< Fetch.
+ ECheck, ///< Check the result of the fetching.
+ EDone ///< Operation done.
+ };
+
+ TState iState; ///< Current state of the state machine.
+
+ /// The operation that does downloading. Owned.
+ CPushMtmFetchOperation* iFetchOp;
+ RTimer iTimer; ///< Timer for waiting.
+ TInt iTimeDelayInSec; ///< Time delay between downloadings in seconds.
+ TInt iTry; ///< How many times we have tried downloading so far?
+ };
+
+#endif // PUSHMTMAUTOFETCHOPERATION_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* 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 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: Data supplier for responses loaded from cache
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "PushMtmCacheDataSupplier.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier(
+ HBufC8* aBody )
+ : iBody( aBody )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheDataSupplier* CPushMtmCacheDataSupplier::NewL(
+ HBufC8* aBody )
+ {
+ CPushMtmCacheDataSupplier* self = new(ELeave) CPushMtmCacheDataSupplier( aBody );
+ return self;
+ }
+
+// Destructor
+CPushMtmCacheDataSupplier::~CPushMtmCacheDataSupplier()
+ {
+ ReleaseData();
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::GetNextDataPart
+// Return the next chunk of response body from the Cache
+// -----------------------------------------------------------------------------
+//
+TBool CPushMtmCacheDataSupplier::GetNextDataPart(
+ TPtrC8 &aDataChunk )
+ {
+ aDataChunk.Set( *iBody );
+ return ETrue;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 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:
+*
+*/
+/*
+* ==============================================================================
+* Name : PushMtmCacheDataSupplier.h
+* Part of : PushMtm
+* Interface :
+* Description :
+* Version : 3.1
+*/
+
+
+#ifndef CPUSHMTMCACHEDATASUPPLIER_H
+#define CPUSHMTMCACHEDATASUPPLIER_H
+
+// INCLUDES
+#include <http/MHTTPDataSupplier.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+ * Data supplier to supply response body if the url is loaded
+ * from cache
+ *
+ * @lib
+ * @since 3.1
+ */
+class CPushMtmCacheDataSupplier : public CBase, public MHTTPDataSupplier
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CPushMtmCacheDataSupplier* NewL( HBufC8* aBody );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmCacheDataSupplier();
+
+ public: // from MHTTPDataSupplier
+
+ /**
+ * From MHTTPDataSupplier. Free the data chunk that was requested.
+ * @since 2.0
+ */
+ virtual void ReleaseData() { delete iBody; iBody = NULL;}
+
+ /**
+ * From MHTTPDataSupplier. It is not possible to know
+ * the data size, so return KErrNotFound
+ * @since 2.0
+ */
+ virtual TInt OverallDataSize () { return KErrNotFound; }
+
+ /**
+ * From MHTTPDataSupplier. Get the next data part of the response body
+ * @since 2.0
+ */
+ virtual TBool GetNextDataPart( TPtrC8& aDataPart );
+
+ /**
+ * From MHTTPDataSupplier. Not Supported
+ * @since 2.0
+ */
+ virtual TInt Reset() { return KErrNotFound; }
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CPushMtmCacheDataSupplier( HBufC8* aBody );
+
+ private: // Data
+
+ //owned by datasupplier and is destroyed
+ //when the releasedata function is called
+ HBufC8* iBody;
+ };
+
+#endif // CPUSHMTMCACHEDATASUPPLIER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,363 @@
+/*
+* 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 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: Implementation of CPushMtmCacheSupply
+*
+*/
+
+
+// INCLUDE FILES
+#include "PushMtmCacheSupply.h"
+#include "httpcachemanager.h"
+#include "PushMtmCacheDataSupplier.h"
+
+#include <http/RHTTPTransaction.h>
+#include <http/mhttpdatasupplier.h>
+#include <http/rhttpsession.h>
+#include <httperr.h>
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KResponseTimeout = 0;
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::CPushMtmCacheSupply
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheSupply::CPushMtmCacheSupply(MCacheSupplyCallbacks* aCacheSupplyCallbacks ):
+ // closed by default
+ iReponseState( THTTPEvent::EClosed )
+ {
+ iCacheEntry.iCacheHandler = NULL;
+ iCacheEntry.iCacheEntry = NULL;
+ iCacheSupplyCallbacks = aCacheSupplyCallbacks;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::ConstructL(CHttpCacheManager* aCacheMgr)
+ {
+ iCacheManager = aCacheMgr;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheSupply* CPushMtmCacheSupply::NewL(CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks )
+ {
+ CPushMtmCacheSupply* self = new( ELeave ) CPushMtmCacheSupply( aCacheSupplyCallbacks);
+
+ CleanupStack::PushL( self );
+ self->ConstructL(aCacheMgr);
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// Destructor
+CPushMtmCacheSupply::~CPushMtmCacheSupply()
+ {
+ delete iDataSupplier;
+ CloseRequest();
+ if (iResponseTimer)
+ {
+ iResponseTimer->Cancel();
+ }
+ delete iResponseTimer;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::StartRequestL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPushMtmCacheSupply::StartRequestL( )
+ {
+ TInt status;
+
+ status = iCacheManager->RequestL( *(iCacheSupplyCallbacks->Transaction()),
+ TBrCtlDefs::ECacheModeNormal , iCacheEntry );
+ // start a timer that feeds the content to the transaction
+ if( status == KErrNone )
+ {
+ iClosed = EFalse;
+ // set response state. start with the http headers.
+ iReponseState = THTTPEvent::EGotResponseHeaders;
+ //
+ iResponseTimer = CPeriodic::NewL( CActive::EPriorityHigh );
+ iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
+ }
+ return status;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::CloseRequest
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::CloseRequest()
+ {
+ if( !iClosed )
+ {
+ iCacheManager->RequestClosed( (iCacheSupplyCallbacks->Transaction()), iCacheEntry );
+ iClosed = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::HeadersReceived
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::HeadersReceivedL()
+ {
+ // do not cache content we just sent off
+ if( iReponseState == THTTPEvent::EClosed )
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ iCacheManager->ReceivedResponseHeadersL( *(iCacheSupplyCallbacks->Transaction()), iCacheEntry );
+ //
+ iNotModified = trans->Response().StatusCode() == HTTPStatus::ENotModified;
+ if( iNotModified )
+ {
+ // change from 304 to 200 -otherwise trans exits with EFailed
+ trans->Response().SetStatusCode( HTTPStatus::EOk );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::BodyReceivedL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::BodyReceivedL()
+ {
+ // do not cache content we just sent off
+ if( iReponseState == THTTPEvent::EClosed )
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ MHTTPDataSupplier* supplier = trans->Response().Body();
+ //
+ iCacheManager->ReceivedResponseBodyDataL( *trans, *supplier, iCacheEntry );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResponseComplete
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::ResponseCompleteL()
+ {
+ if( iReponseState == THTTPEvent::EClosed )
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ // not modified needs body before response complete
+ if( iNotModified )
+ {
+ // use cache
+ // close response first
+ iCacheManager->ResponseComplete( *trans, iCacheEntry );
+ // request the item from cache
+ if( iCacheManager->RequestL( *trans, TBrCtlDefs::ECacheModeOnlyCache, iCacheEntry ) == KErrNone )
+ {
+ // ser
+ iReponseState = THTTPEvent::EGotResponseBodyData;
+ //
+ SendBodyL();
+ CloseRequest();
+ }
+ }
+ else
+ {
+ // normal response complete
+ iCacheManager->ResponseComplete( *trans, iCacheEntry );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResponseCallbackL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPushMtmCacheSupply::ResponseCallbackL(
+ TAny* aAny )
+ {
+ //
+ CPushMtmCacheSupply* thisObj = (CPushMtmCacheSupply*)aAny;
+ thisObj->SupplyResponseL();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::SupplyResponseL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::SupplyResponseL()
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ //
+ switch( iReponseState )
+ {
+ case THTTPEvent::EGotResponseHeaders:
+ {
+ //
+ iFailed = EFalse;
+ if( iCacheManager->RequestHeadersL( *trans, iCacheEntry ) == KErrNone )
+ {
+ //
+ trans->Response().SetStatusCode( HTTPStatus::EOk );
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseHeaders );
+ // move to the next state
+ iReponseState = THTTPEvent::EGotResponseBodyData;
+ }
+ else
+ {
+ // move to the next state
+ iFailed = ETrue;
+ // move to the next state
+ iReponseState = THTTPEvent::EResponseComplete;
+ }
+ break;
+ }
+ case THTTPEvent::EGotResponseBodyData:
+ {
+ //
+ SendBodyL();
+ // move to the next state
+ iReponseState = THTTPEvent::EResponseComplete;
+ break;
+ }
+ case THTTPEvent::EResponseComplete:
+ {
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EResponseComplete );
+ // move to the next state
+ iReponseState = !iFailed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
+ break;
+ }
+ case THTTPEvent::ESucceeded:
+ {
+ // move to the next state
+ iReponseState = THTTPEvent::EClosed;
+ // cancel timer
+ iResponseTimer->Cancel();
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::ESucceeded );
+ // this obj is destroyed at this point
+ break;
+ }
+ case THTTPEvent::EFailed:
+ {
+ // move to the next state
+ iReponseState = THTTPEvent::EClosed;
+ // cancel timer
+ iResponseTimer->Cancel();
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EFailed );
+ // this obj is destroyed at this point
+ break;
+ }
+ default:
+ {
+ //
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::SendBodyL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::SendBodyL()
+ {
+ RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+ //
+ TBool lastChunk;
+ // currently it is always the last chunk
+ HBufC8* body = iCacheManager->RequestNextChunkL( *trans, lastChunk, iCacheEntry );
+ if( body )
+ {
+ CleanupStack::PushL( body );
+ // create datasupplier and attach it to the transaction
+ if( !iDataSupplier )
+ iDataSupplier = CPushMtmCacheDataSupplier::NewL( body );
+ trans->Response().SetBody( *iDataSupplier );
+ CleanupStack::Pop(); // body
+ //
+ iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseBodyData );
+ }
+ else
+ {
+ // move to the next state
+ iFailed = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::PauseSupply
+// -----------------------------------------------------------------------------
+void CPushMtmCacheSupply::PauseSupply()
+ {
+ if( iResponseTimer && iResponseTimer->IsActive() )
+ iResponseTimer->Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResumeSupply
+// -----------------------------------------------------------------------------
+void CPushMtmCacheSupply::ResumeSupply()
+ {
+ if( iResponseTimer && !iResponseTimer->IsActive() )
+ iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,214 @@
+/*
+* 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 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: Definition of CPushMtmCacheSupply
+*
+*/
+
+
+#ifndef CPUSHMTMCACHESUPPLY_H
+#define CPUSHMTMCACHESUPPLY_H
+
+// INCLUDES
+#include <e32base.h>
+#include <brctldefs.h>
+#include "httpcachemanager.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CHttpTransaction;
+class CPeriodic;
+class CPushMtmCacheDataSupplier;
+
+// CLASS DECLARATION
+
+
+
+class MCacheSupplyCallbacks
+ {
+ public:
+ virtual RHTTPTransaction* Transaction() = 0;
+ virtual void HandleEventL(THTTPEvent aEvent) = 0;
+ };
+
+
+/**
+* This class handles http transactions.
+* @lib PushMtmContentHandler
+* @since 3.1
+*/
+class CPushMtmCacheSupply : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param
+ * @param
+ * @param
+ * @return Http cache object.
+ */
+ static CPushMtmCacheSupply* NewL( CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmCacheSupply();
+
+ public: // new functions
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ TInt StartRequestL( );
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void CloseRequest();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void HeadersReceivedL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void BodyReceivedL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void ResponseCompleteL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ TInt ResponseState() const { return iReponseState;}
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ TBool IsSupplying() { return iResponseTimer!=0; }
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void PauseSupply();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void ResumeSupply();
+
+ private:
+
+ /**
+ * Construct.
+ * @param
+ * @param
+ * @parem
+ * @return
+ */
+ CPushMtmCacheSupply( MCacheSupplyCallbacks* aCacheSupplyCallbacks );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(CHttpCacheManager* aCacheMgr);
+
+ private: //
+
+ /**
+ * Callback for async response
+ * @since 3.1
+ * @param aAny this pinter
+ * @return TInt KErrNone
+ */
+ static TInt ResponseCallbackL( TAny* aAny );
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void SupplyResponseL();
+
+ /**
+ *
+ * @since 3.1
+ * @param
+ * @return
+ */
+ void SendBodyL();
+
+ private: // Data
+
+ //
+ CHttpCacheManager* iCacheManager; // not owned
+ //
+ TInt iReponseState;
+ //
+ CPeriodic* iResponseTimer; // owned
+ //
+ TBool iFailed;
+ //
+ TBool iNotModified;
+ //
+ THttpCacheEntry iCacheEntry;
+ // ETrue if the cache object is closed
+ TBool iClosed;
+
+ CPushMtmCacheDataSupplier* iDataSupplier;
+ MCacheSupplyCallbacks* iCacheSupplyCallbacks;
+ };
+
+#endif // CPUSHMTMCACHESUPPLY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,1043 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of CPushMtmFetchOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmFetchOperation.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmLog.h"
+#include <push/cslpushmsgentry.h>
+#include <Uri8.h>
+#include <SysUtil.h>
+#include <cookiefilterinterface.h>
+#include <uaproffilter_interface.h>
+#include <CommDbConnPref.h>
+#include <cdbcols.h>
+#include <browseruisdkcrkeys.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h>
+#include <commdb.h>
+#include <ApDataHandler.h>
+#include <ApAccessPointItem.h>
+#include <ApUtils.h>
+#include <ApSelect.h>
+#include <httpfilteracceptheaderinterface.h>
+#include <httpfilteriopinterface.h>
+#include <httpfiltercommonstringsext.h>
+#include <deflatefilterinterface.h>
+#include <FeatMgr.h>
+
+// ================= MACROS =======================
+
+#ifdef _DEBUG
+ /// Guard "debug-only" argument name with this (expands to argument).
+ #define DEBUG_ONLY( argName ) argName
+#else /* not defined _DEBUG */
+ /// Guard "debug-only" argument name with this (expands to nothing).
+ #define DEBUG_ONLY( argName )
+#endif /* def _DEBUG */
+
+// ================= LOCAL CONSTANTS =======================
+
+_LIT8( KHttpProtString, "HTTP/TCP" );
+_LIT8( KUserAgent, "Push MTM" );
+
+/// Base HTTP error code. See Extended Error Handling UI Specification!
+LOCAL_C const TInt KPushMtmHttpErrorBase = -25000;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::NewL
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation* CPushMtmFetchOperation::NewL
+ (
+ const TDesC& aRequestedUrl,
+ TRequestStatus& aObserverRequestStatus
+ )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::NewL")
+
+ CPushMtmFetchOperation* op =
+ new (ELeave) CPushMtmFetchOperation( aObserverRequestStatus );
+ CleanupStack::PushL( op );
+ op->ConstructL( aRequestedUrl );
+ CleanupStack::Pop( op ); // op
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::NewL")
+ return op;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::~CPushMtmFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation::~CPushMtmFetchOperation()
+ {
+ Cancel();
+ delete ( iCacheMgr );
+ delete iCacheSupply;
+ iHttpTrans.Close();
+ iHttpSess.Close();
+ iConn.Close();
+ iSockServ.Close();
+ delete iRequestedUrl;
+ delete iSourceUri;
+ delete iBody;
+ FeatureManager::UnInitializeLib();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StartL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::StartL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartL")
+
+ Cancel();
+
+ iResult = KErrNone;
+ iState = EInit;
+
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CPushMtmFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation::CPushMtmFetchOperation
+ ( TRequestStatus& aObserverRequestStatus )
+: CActive( EPriorityStandard ),
+ iObserver( aObserverRequestStatus ),
+ iState( EInit ),
+ iResult( KErrNone )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::ConstructL( const TDesC& aRequestedUrl )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::ConstructL")
+
+ iRequestedUrl = HBufC8::NewMaxL( aRequestedUrl.Length() );
+ iRequestedUrl->Des().Copy( aRequestedUrl );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::ConstructL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetDefaultInetAccessPointL
+// ---------------------------------------------------------
+//
+TBool CPushMtmFetchOperation::GetDefaultInetAccessPointL
+ ( TUint32& aIapId ) const
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
+
+ // Try to find the default AP.
+ // The Browser may stores the default AP in the shared data.
+ CRepository* repository = CRepository::NewL( KCRUidBrowser );
+ CleanupStack::PushL( repository );
+
+ TInt wapApId;
+ User::LeaveIfError
+ ( repository->Get( KBrowserDefaultAccessPoint, wapApId ) );
+ TUint32 wapApId32( wapApId );
+ TUint32 iapId32( 0 );
+
+ CleanupStack::PopAndDestroy( repository );
+ repository = 0;
+
+ CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
+ CleanupStack::PushL( commsDb );
+ CApDataHandler* apDataHandler = CApDataHandler::NewLC( *commsDb );
+ CApAccessPointItem* apItem = CApAccessPointItem::NewLC();
+ TRAPD( err, apDataHandler->AccessPointDataL( wapApId32, *apItem ) );
+ CApUtils* apUtils = CApUtils::NewLC( *commsDb );
+
+ TBool wapApFound( EFalse );
+ TBool iapFound( EFalse );
+
+ PUSHLOG_WRITE_FORMAT(" err: <%d>",err)
+ if ( err == KErrNone )
+ {
+ wapApFound = ETrue;
+ }
+ else // err != KErrNone
+ {
+ // The first valid access point has to be selected if exists
+ CApSelect* apSelect = CApSelect::NewLC
+ (
+ *commsDb,
+ KEApIspTypeAll,
+ EApBearerTypeAll,
+ KEApSortNameAscending
+ );
+ if ( apSelect->MoveToFirst() )
+ {
+ wapApFound = ETrue;
+ wapApId32 = apSelect->Uid();
+ }
+ CleanupStack::PopAndDestroy( apSelect ); // apSelect
+ }
+
+ if ( wapApFound )
+ {
+ // Get the IAP ID from the WAP AP ID.
+#ifndef __SERIES60_WSP
+ iapId32 = 0;
+ TRAPD( errTransl, iapId32 = apUtils->IapIdFromWapIdL( wapApId32 ) );
+ PUSHLOG_WRITE_FORMAT(" IapIdFromWapIdL errTransl: <%d>",errTransl)
+ if ( errTransl == KErrNone )
+ {
+ iapFound = ETrue;
+ }
+#else
+ iapId32 = wapApId32;
+ iapFound = ETrue;
+#endif // __SERIES60_WSP
+ }
+
+ CleanupStack::PopAndDestroy( 4 ); // apUtils, apItem,
+ // apDataHandler, commsDb
+
+ if ( iapFound )
+ {
+ aIapId = iapId32;
+ }
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
+ return iapFound;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::InitializeL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::InitializeL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::InitializeL")
+
+ User::LeaveIfError( iSockServ.Connect() );
+ PUSHLOG_WRITE("CPushMtmFetchOperation iSockServ.Connect() OK")
+ User::LeaveIfError( iConn.Open( iSockServ ) );
+ PUSHLOG_WRITE("CPushMtmFetchOperation iConn.Open() OK")
+
+ // Open the HTTP session.
+ iHttpSess.OpenL( KHttpProtString );
+ PUSHLOG_WRITE("CPushMtmFetchOperation iHttpSess.OpenL OK")
+
+ // Set our Socket Server handle and Connection as session properties.
+ iHttpSess.ConnectionInfo().SetPropertyL
+ (
+ StringF( HTTP::EHttpSocketServ ),
+ THTTPHdrVal( iSockServ.Handle() )
+ );
+ PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketServ set")
+ iHttpSess.ConnectionInfo().SetPropertyL
+ (
+ StringF( HTTP::EHttpSocketConnection ),
+ THTTPHdrVal( REINTERPRET_CAST( TInt, &iConn ) )
+ );
+ PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketConnection set")
+
+ // Open different string tables to the session. These are required
+ // by the Accept Header Filter.
+ iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetTable() );
+ PUSHLOG_WRITE("CPushMtmFetchOperation table 1 opened");
+ iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetLanguageTable() );
+ PUSHLOG_WRITE("CPushMtmFetchOperation table 2 opened");
+
+ // Install the very same set of filters that BrowserEngine installs.
+ // The following filters must not be installed:
+ // - Authentication Filter, because the fetch operation and the push mtm
+ // subsystem does not support credentials.
+ // - Conn Handler Filter, because the fetch operation let it to the HTTP
+ // core framework to create connection - it just sets the acces point.
+
+ // Install UAProf filter.
+ CHttpUAProfFilterInterface::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" UAProf installed")
+
+ // Install cookie filter.
+ CHttpCookieFilter::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" Cookie filter installed")
+
+ // Create cache manager
+ FeatureManager::InitializeLibL();
+ iCacheMgr = CHttpCacheManager::NewL();
+ PUSHLOG_WRITE(" Cache Manager installed")
+
+ // Install Accept Header Filter.
+ CHttpFilterAcceptHeaderInterface::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" Accept Header Filter installed")
+
+ // Install IOP Filter.
+ CHttpFilterIopInterface::InstallFilterL( iHttpSess, iopOptionHostHeader );
+ PUSHLOG_WRITE(" IOP Filter installed")
+
+ // Install Deflate Filter.
+ CHttpDeflateFilter::InstallFilterL( iHttpSess );
+ PUSHLOG_WRITE(" Deflate Filter installed");
+
+ TUint32 defIapId( 0 );
+ TBool defIapIdFound = EFalse;
+ TCommDbConnPref commPrefs;
+#ifndef __WINS__
+ // Use Browser default AP & comms db:
+ defIapIdFound = GetDefaultInetAccessPointL( defIapId );
+ PUSHLOG_WRITE_FORMAT(" defIapIdFound: <%d>",(TInt)defIapIdFound)
+ PUSHLOG_WRITE_FORMAT(" defIapId: <%d>",defIapId)
+ commPrefs.SetDialogPreference( ECommDbDialogPrefDoNotPrompt );
+ if ( defIapIdFound )
+ {
+ commPrefs.SetIapId( defIapId );
+ }
+#else // __WINS__
+ // Prompt the user to select access point
+ commPrefs.SetDialogPreference( ECommDbDialogPrefPrompt );
+#endif // __WINS__
+
+ iState = EStartRequest;
+
+ iStatus = KRequestPending;
+ SetActive();
+ iConn.Start( commPrefs, iStatus );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::InitializeL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StartRequestL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::StartRequestL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartRequestL")
+
+ // Create the transaction.
+ CreateTransactionL();
+
+ CheckCacheL();
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartRequestL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CheckCacheL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::CheckCacheL()
+
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::CheckCacheL")
+ iCacheSupply = CPushMtmCacheSupply::NewL(iCacheMgr, this);
+ TInt ret = iCacheSupply->StartRequestL();
+ iStatus = KRequestPending;
+ SetActive();
+ if (ret != KErrNone) // Not in cache
+ {
+ iState = ERequest;
+ iCachedResponse = ETrue;
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone);
+ }
+ else
+ {
+ iState = EDone;
+ iCachedResponse = EFalse;
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CheckCacheL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RequestL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::RequestL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::RequestL")
+
+ iState = EDone;
+
+ iStatus = KRequestPending;
+ SetActive();
+ SubmitTransactionL();
+ // Do not call InvokeRun(). Let MHFRunL to handle the request.
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::RequestL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::Done
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::Done()
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::Done iResult: <%d>",iResult);
+
+ delete iRequestedUrl;
+ iRequestedUrl = NULL;
+
+ // Notify parent.
+ TRequestStatus* status = &iObserver;
+ User::RequestComplete( status, iResult );
+// iState = EInit;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CreateTransactionL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::CreateTransactionL()
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::CreateTransactionL")
+
+ __ASSERT_DEBUG( iRequestedUrl,
+ ContHandPanic( EPushContHandPanNotInitUrl ) );
+
+ // Create the transaction.
+ TUriParser8 uri;
+ User::LeaveIfError( uri.Parse( *iRequestedUrl ) );
+ iHttpTrans =
+ iHttpSess.OpenTransactionL( uri, *this, StringF( HTTP::EGET ) );
+ PUSHLOG_WRITE("CPushMtmFetchOperation OpenTransactionL OK")
+
+ // Set request headers.
+ RHTTPHeaders hdr = iHttpTrans.Request().GetHeaderCollection();
+ SetHeaderL( hdr, HTTP::EUserAgent, KUserAgent );
+ SetHeaderL( hdr, HTTP::EAccept, HTTP::EAnyAny );
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CreateTransactionL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SubmitTransactionL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SubmitTransactionL()
+ {
+ iHttpTrans.SubmitL();
+ PUSHLOG_WRITE("CPushMtmFetchOperation iHttpTrans.SubmitL OK")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::HandleResponseHeadersL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::HandleResponseHeadersL( RHTTPResponse aResponse )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::HandleResponseHeadersL")
+
+ TInt httpCode = aResponse.StatusCode();
+ PUSHLOG_WRITE_FORMAT(" HttpStatus: %d",httpCode)
+
+#ifdef __TEST_LOG__
+ LogHeadersL( aResponse.GetHeaderCollection() );
+#endif // __TEST_LOG__
+
+ if ( HTTPStatus::IsSuccessful( httpCode ) &&
+ ( httpCode != HTTPStatus::ENoContent ) )
+ {
+ // Successful GET.
+ PUSHLOG_WRITE(" Successful GET")
+ // Get content type.
+ iDataType = TDataType
+ ( GetContentTypeL( aResponse.GetHeaderCollection() ) );
+ // Get source URI.
+ HBufC8* buf = GetSourceUriL( iHttpTrans ).AllocL();
+ PUSHLOG_WRITE(" Source URI got")
+ delete iSourceUri;
+ iSourceUri = buf;
+ // No error:
+ iResult = KErrNone;
+ }
+ else
+ {
+ // See Extended Error Handling UI Specification!
+ iResult = KPushMtmHttpErrorBase - httpCode;
+ PUSHLOG_WRITE_FORMAT(" iResult: <%d>",iResult)
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::HandleResponseHeadersL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::VersionRetryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmFetchOperation::VersionRetryL()
+ {
+ TBool retryDone( EFalse );
+
+ // Check what http version we are using.
+ THTTPHdrVal val;
+ TBool exists = iHttpSess.ConnectionInfo().Property
+ (
+ StringF( HTTP::EHTTPVersion ),
+ val
+ );
+ if ( exists && TInt( val ) == HTTP::EHttp11 )
+ {
+ // Currently using HTTP/1.1. Cancel transaction and resubmit it using
+ // HTTP/1.0.
+ iHttpTrans.Cancel();
+ iHttpSess.ConnectionInfo().SetPropertyL
+ (
+ StringF( HTTP::EHTTPVersion ),
+ THTTPHdrVal( StringF( HTTP::EHttp10 ) )
+ );
+ SubmitTransactionL();
+ retryDone = ETrue;
+ }
+
+ return retryDone;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::AppendResponse
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::AppendResponse( const TDesC8& aDataChunk )
+ {
+ TInt err( KErrNone );
+ HBufC8* newBodyBuf = NULL;
+
+ if ( !iBody )
+ {
+ // iBody does not exist yet; allocate buffer for the first data chunk.
+ newBodyBuf = HBufC8::New( aDataChunk.Length() );
+ }
+ else
+ {
+ const TInt needed( iBody->Des().Length() + aDataChunk.Length() );
+ if ( iBody->Des().MaxLength() < needed )
+ {
+ // iBody exists, but small.
+ newBodyBuf = iBody->ReAlloc( needed );
+ iBody = NULL; // ReAlloc deleted it!
+ }
+ else
+ {
+ // iBody exists and the new chunk fits into it.
+ }
+ }
+
+ if ( newBodyBuf )
+ {
+ __ASSERT_DEBUG( iBody == NULL,
+ ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+ delete iBody; // Not necessary, JIC.
+ iBody = newBodyBuf;
+ }
+ else
+ {
+ if (aDataChunk.Length() > 0)
+ {
+ err = KErrNoMemory;
+ }
+ }
+
+ if ( !err )
+ {
+ iBody->Des().Append( aDataChunk );
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const TDesC8& aHdrValue )
+ {
+ RStringF valStr = iHttpSess.StringPool().OpenFStringL( aHdrValue );
+ CleanupClosePushL<RStringF>( valStr );
+ SetHeaderL( aHeaders, aHdrField, valStr );
+ CleanupStack::PopAndDestroy(); // close valStr
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ HTTP::TStrings aHdrValue )
+ {
+ SetHeaderL( aHeaders, aHdrField, StringF( aHdrValue ) );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const RStringF aHdrValue )
+ {
+ THTTPHdrVal val( aHdrValue );
+ aHeaders.SetFieldL( StringF( aHdrField ), val );
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetContentTypeL
+// ---------------------------------------------------------
+//
+const TDesC8& CPushMtmFetchOperation::GetContentTypeL( RHTTPHeaders aHeaders )
+ {
+ THTTPHdrVal hdrVal;
+ User::LeaveIfError
+ ( aHeaders.GetField( StringF( HTTP::EContentType ), 0, hdrVal ) );
+ if ( hdrVal.Type() != THTTPHdrVal::KStrFVal )
+ {
+ User::Leave( KErrArgument );
+ }
+ return hdrVal.StrF().DesC();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetSourceUriL
+// ---------------------------------------------------------
+//
+const TDesC8& CPushMtmFetchOperation::GetSourceUriL
+ ( RHTTPTransaction aTransaction )
+ {
+ // TODO if redirected URI exists, how do we get it?
+ // For the moment request URI is used.
+ return aTransaction.Request().URI().UriDes();
+ }
+
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::LogHeadersL
+// ---------------------------------------------------------
+//
+#ifndef __TEST_LOG__
+
+void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders /*aHeaders*/ )
+ {
+ }
+
+#else // #ifdef __TEST_LOG__
+
+void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders aHeaders )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::LogHeadersL")
+
+ _LIT( KDateFormat, "%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3" );
+
+ PUSHLOG_WRITE("Headers:");
+
+ RStringPool strP = iHttpTrans.Session().StringPool();
+ THTTPHdrFieldIter it = aHeaders.Fields();
+
+ while ( !it.AtEnd() )
+ {
+ RStringTokenF fieldName = it();
+ RStringF fieldNameStr = strP.StringF( fieldName );
+ THTTPHdrVal fieldVal;
+ if ( aHeaders.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
+ {
+ const TInt KMaxLogStrLen = 64;
+ TPtrC8 fieldName8 = fieldNameStr.DesC();
+ TInt fieldNameLen = fieldName8.Length();
+ fieldNameLen = ( KMaxLogStrLen < fieldNameLen ) ?
+ KMaxLogStrLen : fieldNameLen;
+ fieldName8.Set( fieldName8.Mid( 0, fieldNameLen ) );
+ HBufC* fieldNameHBufC = HBufC::NewMaxLC( fieldName8.Length() );
+ TPtr fieldName = fieldNameHBufC->Des();
+ fieldName.Copy( fieldName8 );
+
+ switch ( fieldVal.Type() )
+ {
+ case THTTPHdrVal::KTIntVal:
+ {
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%d)",&fieldName,fieldVal.Int())
+ break;
+ }
+
+ case THTTPHdrVal::KStrFVal:
+ {
+ RStringF fieldValStr = strP.StringF( fieldVal.StrF() );
+ TPtrC8 fieldVal8 = fieldValStr.DesC();
+ // Truncate if too long.
+ TInt fieldValLen = fieldVal8.Length();
+ fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ?
+ KMaxLogStrLen : fieldValLen;
+ fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
+ // Truncate end.
+ HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
+ TPtr fieldVal = fieldValHBufC->Des();
+ fieldVal.Copy( fieldVal8 );
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%S)",&fieldName,&fieldVal)
+ CleanupStack::PopAndDestroy( fieldValHBufC );
+ // fieldValHBufC
+ break;
+ }
+
+ case THTTPHdrVal::KStrVal:
+ {
+ RString fieldValStr = strP.String( fieldVal.Str() );
+ TPtrC8 fieldVal8 = fieldValStr.DesC();
+ // Truncate if too long.
+ TInt fieldValLen = fieldVal8.Length();
+ fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ?
+ KMaxLogStrLen : fieldValLen;
+ fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
+ // Truncate end.
+ HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
+ TPtr fieldVal = fieldValHBufC->Des();
+ fieldVal.Copy( fieldVal8 );
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%S)",&fieldName,&fieldVal)
+ CleanupStack::PopAndDestroy( fieldValHBufC );
+ // fieldValHBufC
+ break;
+ }
+
+ case THTTPHdrVal::KDateVal:
+ {
+ TDateTime date = fieldVal.DateTime();
+ TBuf<40> dateTimeString;
+ TTime t( date );
+ TRAP_IGNORE( t.FormatL( dateTimeString, KDateFormat ) );
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> (%S)",&fieldName,&dateTimeString)
+ break;
+ }
+
+ default:
+ {
+ PUSHLOG_WRITE_FORMAT2
+ (" <%S> unrecognised value type (%d)",
+ &fieldName,fieldVal.Type())
+ break;
+ }
+ }
+
+ // Display realm for WWW-Authenticate header.
+ RStringF wwwAuth = strP.StringF
+ ( HTTP::EWWWAuthenticate, RHTTPSession::GetTable() );
+ if ( fieldNameStr == wwwAuth )
+ {
+ PUSHLOG_WRITE(" fieldNameStr == wwwAuth")
+ // check the auth scheme is 'basic'
+ RStringF basic = strP.StringF
+ ( HTTP::EBasic, RHTTPSession::GetTable() );
+ RStringF realm = strP.StringF
+ ( HTTP::ERealm, RHTTPSession::GetTable() );
+ THTTPHdrVal realmVal;
+ if ( ( fieldVal.StrF() == basic ) &&
+ ( !aHeaders.GetParam( wwwAuth, realm, realmVal ) ) )
+ {
+ RStringF realmValStr = strP.StringF( realmVal.StrF() );
+ PUSHLOG_WRITE_FORMAT(" Realm <%S>",&realmValStr);
+ }
+ }
+
+ CleanupStack::PopAndDestroy( fieldNameHBufC ); // fieldNameHBufC
+ }
+ ++it;
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::LogHeadersL")
+ }
+
+#endif // __TEST_LOG__
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::DoCancel()
+ {
+ switch ( iState )
+ {
+ /*case EStartConnect:
+ {
+ // Complete ourselves - nothing is outstanding.
+ TRequestStatus* ownStatus = &iStatus;
+ User::RequestComplete( ownStatus, KErrCancel );
+ break;
+ }*/
+
+ /*case EConnect:
+ {
+ //__ASSERT_DEBUG( iConn, ContHandPanic( ECodInternal ) );
+ //iConn->Cancel(); // This will complete our status.
+ break;
+ }*/
+
+ case EStartRequest:
+ case ECheckCache:
+ case ERequest:
+ {
+ delete iCacheSupply;
+ iCacheSupply = NULL;
+
+ iHttpTrans.Close();
+ // Now the transaction has been closed. Closing it does not
+ // complete our status, so we do it manually.
+ TRequestStatus* status = &iStatus;
+ SetActive();
+ User::RequestComplete( status, iResult );
+ break;
+ }
+
+ case EInit:
+ default:
+ {
+ // No requests should be outstanding in these states.
+ //ContHandPanic( ECodInternal );
+ break;
+ }
+ }
+
+ iResult = KErrCancel;
+ Done();
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RunL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::RunL()
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL status = %d", iState);
+ // Handle errors in RunError().
+ User::LeaveIfError( iStatus.Int() );
+
+ switch ( iState )
+ {
+ case EInit:
+ {
+ InitializeL();
+ break;
+ }
+
+ case EStartRequest:
+ {
+ StartRequestL();
+ break;
+ }
+
+ case ERequest:
+ {
+ RequestL();
+ break;
+ }
+
+ case EDone:
+ {
+ Done();
+ break;
+ }
+
+ default:
+ {
+ // JIC.
+ Done();
+ break;
+ }
+ }
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL moving to status = %d", iState);
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunError <%d>",aError)
+
+ iResult = aError;
+ delete iCacheSupply;
+ iCacheSupply = NULL;
+ iHttpTrans.Close();
+ Done();
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::MHFRunL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::MHFRunL
+ (
+ RHTTPTransaction DEBUG_ONLY( aTransaction ),
+ const THTTPEvent& aEvent
+ )
+ {
+ PUSHLOG_ENTERFN("CPushMtmFetchOperation::MHFRunL")
+ __ASSERT_DEBUG( aTransaction == iHttpTrans,
+ ContHandPanic( EPushContHandPanBadTransaction ) );
+ switch ( aEvent.iStatus )
+ {
+ case THTTPEvent::EGotResponseHeaders:
+ {
+ PUSHLOG_WRITE(" EGotResponseHeaders")
+ // pass headers to the cache first
+ TRAP_IGNORE( iCacheSupply->HeadersReceivedL() );
+ // Now we know that the request was processed by the server.
+ HandleResponseHeadersL( iHttpTrans.Response() );
+ break;
+ }
+
+ case THTTPEvent::EGotResponseBodyData:
+ {
+ PUSHLOG_WRITE(" EGotResponseBodyData")
+ // pass chunk to the cache first
+ TRAP_IGNORE( iCacheSupply->BodyReceivedL() );
+ // Get body data and save it.
+ TInt err( KErrNone );
+ MHTTPDataSupplier* body = iHttpTrans.Response().Body();
+ if ( !body )
+ {
+ PUSHLOG_WRITE(" NULL body")
+ }
+ else
+ {
+ TPtrC8 bodyPtr;
+ // Caution: no leaving between body->GetNextDataPart and
+ // body->ReleaseData calls! Data must always be released.
+#ifdef __TEST_LOG__
+ TBool isLast = body->GetNextDataPart( bodyPtr ); // No leave...
+ PUSHLOG_WRITE_FORMAT(" last? (%d)",(isLast?1:0))
+#else // ifndef __TEST_LOG__
+ (void)body->GetNextDataPart( bodyPtr ); // No leave...
+#endif // __TEST_LOG__
+ //if ( iHttpTrans.Request().Method() == StringF( HTTP::EGET ) )
+ err = AppendResponse( bodyPtr );
+ body->ReleaseData(); // ...until here.
+ PUSHLOG_WRITE_FORMAT(" err: (%d)",err)
+ User::LeaveIfError( err );
+ }
+ break;
+ }
+
+ case THTTPEvent::EResponseComplete:
+ {
+ // do not mix it up with the ESucceeded
+ // The transaction's response is complete. An incoming event.
+ TRAP_IGNORE( iCacheSupply->ResponseCompleteL() );
+ break;
+ }
+
+ case THTTPEvent::ERequestComplete:
+ {
+ // request is all set
+ iCacheSupply->CloseRequest();
+ break;
+ }
+
+ case THTTPEvent::EFailed:
+ {
+ PUSHLOG_WRITE(" EFailed")
+ // Safety code: we should already have an error code.
+ if ( iResult == KErrNone )
+ {
+ iResult = KErrGeneral;
+ }
+ // TODO. Fall through.
+ }
+
+ case THTTPEvent::ESucceeded:
+ {
+ PUSHLOG_WRITE(" ESucceeded")
+ delete iCacheSupply;
+ iCacheSupply = NULL;
+ iHttpTrans.Close();
+ // Transaction is finished, invoke RunL now.
+ TRequestStatus* status = &iStatus;
+ if (!IsActive())
+ {
+ SetActive();
+ }
+ User::RequestComplete( status, iResult );
+ break;
+ }
+
+ case THTTPEvent::ERedirectedPermanently:
+ {
+ PUSHLOG_WRITE(" ERedirectedPermanently")
+ // Do nothing just continue.
+ break;
+ }
+
+ default:
+ {
+ PUSHLOG_WRITE(" default case")
+ // Handle errors in MHFRunError.
+ User::LeaveIfError( aEvent.iStatus );
+ break;
+ }
+ }
+
+ PUSHLOG_LEAVEFN("CPushMtmFetchOperation::MHFRunL")
+ }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::MHFRunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::MHFRunError
+ (
+ TInt aError,
+ RHTTPTransaction DEBUG_ONLY( aTransaction ),
+ const THTTPEvent& /*aEvent*/
+ )
+ {
+ __ASSERT_DEBUG( aTransaction == iHttpTrans,
+ ContHandPanic( EPushContHandPanBadTransaction ) );
+ iResult = aError;
+ iCacheSupply->CloseRequest();
+ iHttpTrans.Close();
+
+ // Transaction is finished, invoke RunL now.
+ // iResult contains the (error) code.
+ if ( !IsActive() )
+ {
+ SetActive();
+ }
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ return KErrNone;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declaration of CPushMtmFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMFETCHOPERATION_H
+#define PUSHMTMFETCHOPERATION_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <e32base.h>
+#include <http.h>
+#include <stringpool.h>
+#include <apmstd.h>
+#include <es_sock.h>
+#include "httpcachemanager.h"
+#include "PushMtmCacheSupply.h"
+
+// FORWARD DECLARATIONS
+
+class CMsvEntry;
+
+// CLASS DECLARATION
+
+/**
+* Asynchronous fetch operation that downloads the service indicated by an SL
+* pushed service message.
+*
+* The operation can run in silent mode without requiring any user intervention.
+*/
+class CPushMtmFetchOperation : public CActive,
+ public MHTTPTransactionCallback,
+ public MCacheSupplyCallbacks
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @param aRequestedUrl The requested URL.
+ * @param aObserverRequestStatus Observer's status.
+ * @return The constructed operation.
+ */
+ static CPushMtmFetchOperation* NewL
+ (
+ const TDesC& aRequestedUrl,
+ TRequestStatus& aObserverRequestStatus
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPushMtmFetchOperation();
+
+ public: // Functions from base classes
+
+ /**
+ * Start or restart the operation.
+ */
+ void StartL();
+
+ RHTTPTransaction* Transaction(){ return &iHttpTrans; }
+ void HandleEventL(THTTPEvent aEvent) { MHFRunL(iHttpTrans, aEvent); }
+
+ protected: // Constructors
+
+ /**
+ * Constructor.
+ * @param aObserverRequestStatus Observer's status.
+ */
+ CPushMtmFetchOperation( TRequestStatus& aObserverRequestStatus );
+
+ /**
+ * Second phase constructor.
+ * @param aRequestedUrl The requested URL.
+ * @return None.
+ */
+ void ConstructL( const TDesC& aRequestedUrl );
+
+ protected: // New functions
+
+ /**
+ * Get the ID of the defauld internet access point set in the Browser
+ * Preferences that is used for connection creation.
+ * @param aIapId The ID of the access point, if found. The value of
+ * this variable is not changed if no default ap can be found.
+ * @return Indicate if default ap could be found.
+ */
+ TBool GetDefaultInetAccessPointL( TUint32& aIapId ) const;
+
+ protected: // state machine parts
+
+ /**
+ * Initiate connecting.
+ */
+ void InitializeL();
+
+ /**
+ * StartRequestL
+ */
+ void StartRequestL();
+
+ /**
+ * CheckCacheL
+ */
+ void CheckCacheL();
+
+ /**
+ * Initiate connecting.
+ */
+ void RequestL();
+
+ /**
+ * Clean up and notify parent.
+ */
+ void Done();
+
+ /**
+ * Create transaction, set request headers (and body for POST request).
+ */
+ void CreateTransactionL();
+
+ /**
+ * Submit the transaction (make the HTTP request).
+ */
+ void SubmitTransactionL();
+
+ /**
+ * Handle response from server.
+ * @param aResponse Response from server.
+ */
+ void HandleResponseHeadersL( RHTTPResponse aResponse );
+
+ /**
+ * HTTP Version Not Supported. Resubmit transaction using HTTP/1.0.
+ * @return ETrue if transaction was resubmitted, EFalse if not (i.e
+ * we already use HTTP/1.0).
+ */
+ TBool VersionRetryL();
+
+ /**
+ * Append a new chunk of response data to the reponse buffer.
+ * @return KErrNone or KErrNoMemory.
+ */
+ TInt AppendResponse( const TDesC8& aDataChunk );
+
+ protected: // helpers
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const TDesC8& aHdrValue
+ );
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ HTTP::TStrings aHdrValue
+ );
+
+ /**
+ * Helper function to set a header.
+ * @param aHeaders Set the header to this header set.
+ * @param aHdrField Header field name.
+ * @param aHdrValue Header value.
+ */
+ void SetHeaderL
+ (
+ RHTTPHeaders aHeaders,
+ HTTP::TStrings aHdrField,
+ const RStringF aHdrValue
+ );
+
+ /**
+ * Helper function to get the Content-Type header value.
+ * @param aHeaders HTTP header set.
+ * @return Content-Type header value.
+ */
+ const TDesC8& GetContentTypeL( RHTTPHeaders aHeaders );
+
+ /**
+ * Helper function to get the source URI of a transaction.
+ * @param aTransaction Transaction.
+ * @return Source URI.
+ */
+ const TDesC8& GetSourceUriL( RHTTPTransaction aTransaction );
+
+ /**
+ * Get a shared string from the session stringpool.
+ * @param aId Id of string.
+ * @return Shared string from HTTP string table. No need to close.
+ */
+ inline RStringF StringF( HTTP::TStrings aId );
+
+ protected: // debug utilities
+
+ /**
+ * In debug build, log headers. In release build, do nothing.
+ * @param aHeaders Headers to log.
+ */
+ void LogHeadersL( RHTTPHeaders aHeaders );
+
+ protected: // Functions from base classes
+
+ /**
+ * Cancel fetching.
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Start fetching and make an entry into the operation mapper.
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * Leave handler protocol implementation: it is called when
+ * RunL leaves.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // from MHTTPTransactionCallback
+
+ /**
+ * Handle transaction event.
+ * @param aTransaction The transaction that the event has occurred on.
+ * @param aEvent The event that has occurred.
+ */
+ void MHFRunL( RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+ /**
+ * Handle errors occured in MHFRunL().
+ * @param aError The leave code that RunL left with.
+ * @param aTransaction The transaction that was being processed.
+ * @param aEvent The Event that was being processed.
+ * @return KErrNone.
+ */
+ TInt MHFRunError( TInt aError,
+ RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+ protected: // Data
+
+ TRequestStatus& iObserver; ///< Observer's status.
+ HBufC8* iRequestedUrl; ///< Request URI or NULL. Owned.
+
+ enum TState ///< State.
+ {
+ EInit, ///< Initial state.
+ EStartRequest, ///< Create HTTP session & request
+ ECheckCache, ///< Check if content is in cache
+ ERequest, ///< HTTP request.
+ EDone
+ };
+
+ TState iState; ///< Current state.
+ TInt iResult; ///< Resulting error code.
+
+ RSocketServ iSockServ; ///< Socket Server session handle.
+ RConnection iConn; ///< Connection handle.
+
+ CHttpCacheManager* iCacheMgr;///< Cache Manager. Owned.
+
+ RHTTPSession iHttpSess; ///< HTTP session. Owned.
+ RHTTPTransaction iHttpTrans;///< Transaction. Owned.
+
+ HBufC8* iSourceUri; ///< Source URI. Owned.
+ HBufC8* iBody; ///< Response body. Owned.
+ TDataType iDataType; ///< Data type.
+ THttpCacheEntry iCacheEntry;///< Holds the cache entry
+ CPushMtmCacheSupply* iCacheSupply;
+ TBool iCachedResponse;
+ };
+
+#include "PushMtmFetchOperation.inl"
+
+#endif // PUSHMTMFETCHOPERATION_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.inl Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Inline method definitions of class CPushMtmFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMFETCHOPERATION_INL
+#define PUSHMTMFETCHOPERATION_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StringF
+// ---------------------------------------------------------
+//
+RStringF CPushMtmFetchOperation::StringF( HTTP::TStrings aId )
+ {
+ return iHttpSess.StringPool().StringF( aId, RHTTPSession::GetTable() );
+ }
+
+#endif /* def PUSHMTMFETCHOPERATION_INL */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/StringResourceReader.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of CStringResourceReader
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "StringResourceReader.h"
+#include <f32file.h>
+#include <barsread.h>
+#include <bautils.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CStringResourceReader::CStringResourceReader
+// ---------------------------------------------------------
+//
+CStringResourceReader::CStringResourceReader
+ ( RFs& aFs, const TDesC& aRscFileWithPathAndDrive )
+: CBase(), iFs( aFs ), iInitialized( EFalse )
+ {
+ iRscFileName.Copy( aRscFileWithPathAndDrive );
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::~CStringResourceReader
+// ---------------------------------------------------------
+//
+CStringResourceReader::~CStringResourceReader()
+ {
+ iResourceFile.Close();
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::AllocReadResourceL
+// ---------------------------------------------------------
+//
+HBufC* CStringResourceReader::AllocReadResourceL( TInt aResId )
+ {
+ InitializeL();
+ //
+ HBufC8* buf8 = iResourceFile.AllocReadLC( aResId );
+#ifdef _UNICODE
+ const TPtrC buf( (const TUint16*)buf8->Ptr(), buf8->Size()/2 );
+#else
+ const TPtrC buf( buf8->Ptr(), buf8->Size() );
+#endif
+ HBufC* retBuf = buf.AllocL();
+ CleanupStack::PopAndDestroy( buf8 );
+
+ return retBuf;
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::AllocReadResourceLC
+// ---------------------------------------------------------
+//
+HBufC* CStringResourceReader::AllocReadResourceLC( TInt aResId )
+ {
+ HBufC* temp = AllocReadResourceL( aResId );
+ CleanupStack::PushL( temp );
+ return temp;
+ }
+
+// ---------------------------------------------------------
+// CStringResourceReader::InitializeL
+// ---------------------------------------------------------
+//
+void CStringResourceReader::InitializeL()
+ {
+ if ( !iInitialized )
+ {
+ TFileName resourceFileName( iRscFileName );
+ BaflUtils::NearestLanguageFile( iFs, resourceFileName );
+ iResourceFile.OpenL( iFs, resourceFileName );
+ iResourceFile.ConfirmSignatureL( iResourceFile.SignatureL() );
+ iInitialized = ETrue;
+ }
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/StringResourceReader.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of CStringResourceReader.
+*
+*
+*/
+
+
+#ifndef STRINGRESOURCEREADER_H
+#define STRINGRESOURCEREADER_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <e32std.h>
+#include <barsc.h>
+
+// FORWARD DECLARATIONS
+
+class RFs;
+
+// CLASS DECLARATION
+
+/**
+* Utility class that helps reading string resources without CONE.
+* Not intended for derivation.
+*/
+class CStringResourceReader : public CBase
+ {
+ public: // Constructors and destructor
+
+ CStringResourceReader( RFs& aFs, const TDesC& aRscFileWithPathAndDrive );
+
+ ~CStringResourceReader();
+
+ public: // New functions
+
+ /**
+ * Return a given string from resource.
+ * @param aResId Resource ID.
+ * @return See above.
+ */
+ HBufC* AllocReadResourceL( TInt aResId );
+ HBufC* AllocReadResourceLC( TInt aResId );
+
+ private: // New functions
+
+ void InitializeL();
+
+ private: // Data members
+
+ RFs& iFs; ///< File server session.
+ TBuf<64> iRscFileName;
+ RResourceFile iResourceFile;
+ TBool iInitialized;
+ };
+
+#endif // STRINGRESOURCEREADER_H
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/si_dict.c Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,225 @@
+/*
+* 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 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:
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * Dictionary = SI
+ * Public id = 5
+ * Doc Type = -//WAPFORUM//DTD SI 1.0//EN
+ */
+
+#include "si_dict.h"
+
+
+static const NW_Ucs2 NW_SI_ElementTag_si[] = {'s','i','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_indication[] = {'i','n','d','i','c','a','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_info[] = {'i','n','f','o','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_item[] = {'i','t','e','m','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * tag entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SI_tag_token_0[4] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_si},
+ {0x06, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_indication},
+ {0x07, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_info},
+ {0x08, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_item}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * tag entries - sorted by name
+ */
+static const
+NW_Byte NW_SI_tag_name_0[4] = {
+ 1,
+ 2,
+ 3,
+ 0,
+};
+
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_none[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','n','o','n','e','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_low[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','l','o','w','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_medium[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','m','e','d','i','u','m','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_high[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','h','i','g','h','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_delete[] = {'a','c','t','i','o','n','=','d','e','l','e','t','e','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_created[] = {'c','r','e','a','t','e','d','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href[] = {'h','r','e','f','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_si_expires[] = {'s','i','-','e','x','p','i','r','e','s','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_si_id[] = {'s','i','-','i','d','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_class[] = {'c','l','a','s','s','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * attribute entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SI_attribute_token_0[19] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_none},
+ {0x06, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_low},
+ {0x07, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_medium},
+ {0x08, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_high},
+ {0x09, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_delete},
+ {0x0a, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_created},
+ {0x0b, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href},
+ {0x0c, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___},
+ {0x0d, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___www_},
+ {0x0e, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___},
+ {0x0f, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___www_},
+ {0x10, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_expires},
+ {0x11, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_id},
+ {0x12, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_class},
+ {0x13, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action},
+ {0x85, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__com_},
+ {0x86, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__edu_},
+ {0x87, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__net_},
+ {0x88, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__org_}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * attribute entries - sorted by name
+ */
+static const
+NW_Byte NW_SI_attribute_name_0[19] = {
+ 15,
+ 16,
+ 17,
+ 18,
+ 14,
+ 4,
+ 3,
+ 1,
+ 2,
+ 0,
+ 13,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+};
+
+/*
+ * Tag codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SI_tag_codepages[1] = {
+ {4, (NW_WBXML_DictEntry_t*)&NW_SI_tag_token_0[0], (NW_Byte *)&NW_SI_tag_name_0[0]},
+};
+
+/*
+ * Attribute codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SI_attribute_codepages[1] = {
+ {19, (NW_WBXML_DictEntry_t*)&NW_SI_attribute_token_0[0], (NW_Byte *)&NW_SI_attribute_name_0[0]},
+};
+
+static const NW_Ucs2 NW_SI_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','I',' ','1','.','0','/','/','E','N','\0'};
+
+/*
+ * Dictionary
+ */
+const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary = {
+ NW_SI_PublicId,
+ (NW_Ucs2 *)NW_SI_docType,
+ 1, (NW_WBXML_Codepage_t*)&NW_SI_tag_codepages[0],
+ 1, (NW_WBXML_Codepage_t*)&NW_SI_attribute_codepages[0],
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/si_dict.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* 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 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:
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+#ifndef HEADER_GUARD_si_dict_h
+#define HEADER_GUARD_si_dict_h
+
+
+#include <nw_wbxml_dictionary.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define NW_SI_PublicId 5
+
+typedef enum NW_SI_ElementToken_0_e{
+ NW_SI_ElementToken_si = 0x0005,
+ NW_SI_ElementToken_indication = 0x0006,
+ NW_SI_ElementToken_info = 0x0007,
+ NW_SI_ElementToken_item = 0x0008
+}NW_SI_ElementToken_0_t;
+
+
+typedef enum NW_SI_AttributeToken_0_e{
+ NW_SI_AttributeToken_action_signal_none = 0x0005,
+ NW_SI_AttributeToken_action_signal_low = 0x0006,
+ NW_SI_AttributeToken_action_signal_medium = 0x0007,
+ NW_SI_AttributeToken_action_signal_high = 0x0008,
+ NW_SI_AttributeToken_action_delete = 0x0009,
+ NW_SI_AttributeToken_created = 0x000a,
+ NW_SI_AttributeToken_href = 0x000b,
+ NW_SI_AttributeToken_href_http___ = 0x000c,
+ NW_SI_AttributeToken_href_http___www_ = 0x000d,
+ NW_SI_AttributeToken_href_https___ = 0x000e,
+ NW_SI_AttributeToken_href_https___www_ = 0x000f,
+ NW_SI_AttributeToken_si_expires = 0x0010,
+ NW_SI_AttributeToken_si_id = 0x0011,
+ NW_SI_AttributeToken_class = 0x0012,
+ NW_SI_AttributeToken_action = 0x0013,
+ NW_SI_AttributeToken__com_ = 0x0085,
+ NW_SI_AttributeToken__edu_ = 0x0086,
+ NW_SI_AttributeToken__net_ = 0x0087,
+ NW_SI_AttributeToken__org_ = 0x0088
+}NW_SI_AttributeToken_0_t;
+
+extern const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary;
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/sl_dict.c Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,198 @@
+/*
+* 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 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:
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * Dictionary = SL
+ * Public id = 6
+ * Doc Type = -//WAPFORUM//DTD SL 1.0//EN
+ */
+
+#include "sl_dict.h"
+
+
+static const NW_Ucs2 NW_SL_ElementTag_sl[] = {'s','l','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * tag entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SL_tag_token_0[1] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SL_ElementTag_sl}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * tag entries - sorted by name
+ */
+static const
+NW_Byte NW_SL_tag_name_0[1] = {
+ 0,
+};
+
+static const NW_Ucs2 NW_SL_AttributeTag_action_execute_low[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','l','o','w','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action_execute_high[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','h','i','g','h','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action_cache[] = {'a','c','t','i','o','n','=','c','a','c','h','e','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href[] = {'h','r','e','f','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * attribute entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SL_attribute_token_0[13] = {
+ {0x05, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_low},
+ {0x06, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_high},
+ {0x07, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_cache},
+ {0x08, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href},
+ {0x09, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___},
+ {0x0a, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___www_},
+ {0x0b, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___},
+ {0x0c, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___www_},
+ {0x0d, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action},
+ {0x85, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__com_},
+ {0x86, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__edu_},
+ {0x87, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__net_},
+ {0x88, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__org_}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * attribute entries - sorted by name
+ */
+static const
+NW_Byte NW_SL_attribute_name_0[13] = {
+ 9,
+ 10,
+ 11,
+ 12,
+ 8,
+ 2,
+ 1,
+ 0,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+};
+
+/*
+ * Tag codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SL_tag_codepages[1] = {
+ {1, (NW_WBXML_DictEntry_t*)&NW_SL_tag_token_0[0], (NW_Byte *)&NW_SL_tag_name_0[0]},
+};
+
+/*
+ * Attribute codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SL_attribute_codepages[1] = {
+ {13, (NW_WBXML_DictEntry_t*)&NW_SL_attribute_token_0[0], (NW_Byte *)&NW_SL_attribute_name_0[0]},
+};
+
+static const NW_Ucs2 NW_SL_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','L',' ','1','.','0','/','/','E','N','\0'};
+
+/*
+ * Dictionary
+ */
+const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary = {
+ NW_SL_PublicId,
+ (NW_Ucs2 *)NW_SL_docType,
+ 1, (NW_WBXML_Codepage_t*)&NW_SL_tag_codepages[0],
+ 1, (NW_WBXML_Codepage_t*)&NW_SL_attribute_codepages[0],
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/sl_dict.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* 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 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:
+*
+*/
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+#ifndef HEADER_GUARD_sl_dict_h
+#define HEADER_GUARD_sl_dict_h
+
+#include <nw_wbxml_dictionary.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define NW_SL_PublicId 6
+
+typedef enum NW_SL_ElementToken_0_e{
+ NW_SL_ElementToken_sl = 0x0005
+}NW_SL_ElementToken_0_t;
+
+
+typedef enum NW_SL_AttributeToken_0_e{
+ NW_SL_AttributeToken_action_execute_low = 0x0005,
+ NW_SL_AttributeToken_action_execute_high = 0x0006,
+ NW_SL_AttributeToken_action_cache = 0x0007,
+ NW_SL_AttributeToken_href = 0x0008,
+ NW_SL_AttributeToken_href_http___ = 0x0009,
+ NW_SL_AttributeToken_href_http___www_ = 0x000a,
+ NW_SL_AttributeToken_href_https___ = 0x000b,
+ NW_SL_AttributeToken_href_https___www_ = 0x000c,
+ NW_SL_AttributeToken_action = 0x000d,
+ NW_SL_AttributeToken__com_ = 0x0085,
+ NW_SL_AttributeToken__edu_ = 0x0086,
+ NW_SL_AttributeToken__net_ = 0x0087,
+ NW_SL_AttributeToken__org_ = 0x0088
+}NW_SL_AttributeToken_0_t;
+
+extern const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary;
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+** FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+** (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapter.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Handles white list settings in provisioning.
+*
+*/
+
+
+#ifndef WHITELISTADAPTER_H
+#define WHITELISTADAPTER_H
+
+// INCLUDE FILES
+ // User includes
+#include "WhiteListAdapterDef.h"
+ // System includes
+#include <CWPAdapter.h>
+#include <msvapi.h>
+#include <MWPContextExtension.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMtmSettings;
+class CWPCharacteristic;
+class CWPParameter;
+class MWPPairVisitor;
+class TWhiteListAdapterItem;
+
+// CLASS DECLARATION
+
+/**
+* An ECOM adapter plug-in. It is responsible for maintaining data in a
+* WAP Provisioning pushed message : we get appropriate physical proxy
+* addresses from the message and store them in Push MTM settings. It is the
+* Push Content Handler that will use these addresses to filter out
+* unauthorized pushed SL messages.
+* Note : although an adapter should always be prepared for displaying the
+* processed and stored settings in the appropriate format, the stored items
+* in this specific adapter will _never_ be displayed. Thus, ItemCount,
+* SummaryTitle and SummaryText methods have been written considering this
+* approach.
+*/
+class CWhiteListAdapter : public CWPAdapter,
+ public MMsvSessionObserver,
+ public MWPContextExtension
+ {
+ public : // construction, destruction
+ /**
+ * Two-phased constructor.
+ */
+ static CWhiteListAdapter* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CWhiteListAdapter();
+
+ public : // from CWPAdapter
+
+ /**
+ * Check the number of settings items.
+ * @see CWPAdapter
+ */
+ /*virtual*/ TInt ItemCount() const;
+
+ /**
+ * Returns the title of the nth summary line.
+ * @see CWPAdapter
+ */
+ /*virtual*/ const TDesC16& SummaryTitle( TInt aIndex ) const;
+
+ /**
+ * Returns the text of the nth summary line.
+ * @see CWPAdapter
+ */
+ /*virtual*/ const TDesC16& SummaryText( TInt aIndex ) const;
+
+ /**
+ * Saves one setting handled by the adapter.
+ * @see CWPAdapter
+ */
+ /*virtual*/ void SaveL( TInt aItem );
+
+ /**
+ * Returns ETrue if the adapter can set the settings as default.
+ * @see CWPAdapter
+ */
+ /*virtual*/ TBool CanSetAsDefault( TInt aItem ) const;
+
+ /**
+ * Adapter sets the settings as default.
+ * @see CWPAdapter
+ */
+ /*virtual*/ void SetAsDefaultL( TInt aItem );
+
+ /**
+ * Calls the pair visitor for each detail line of an item.
+ * @see CWPAdapter
+ */
+ /*virtual*/ TInt DetailsL( TInt aItem, MWPPairVisitor& aVisitor );
+
+ /**
+ * Returns a pointer to a context extension.
+ * @param aExtension
+ * Contains a pointer to MWPContextExtension if supported.
+ * @return KErrNotSupported if not supported, KErrNone otherwise
+ */
+ /*virtual*/ TInt ContextExtension( MWPContextExtension*& aExtension );
+
+ public: // From MWPVisitor (inheritance is through CWPAdapter)
+
+ /**
+ * Called for each characteristic found.
+ * @see MWPVisitor
+ */
+ /*virtual*/ void VisitL( CWPCharacteristic& aCharacteristic );
+
+ /**
+ * Called for each parameter found.
+ * @see MWPVisitor
+ */
+ /*virtual*/ void VisitL( CWPParameter& aParameter );
+
+ /**
+ * Called for each link to a logical proxy or access point.
+ * @see MWPVisitor
+ */
+ /*virtual*/ void VisitLinkL( CWPCharacteristic& aCharacteristic );
+
+ public : // from MMsvSessionObserver
+ /**
+ * Indicates an event has occurred.
+ * @see MMsvSessionObserver
+ */
+ /*virtual*/ void HandleSessionEventL( TMsvSessionEvent aEvent,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3 );
+
+ private : // construction
+ /**
+ * Constructor.
+ */
+ CWhiteListAdapter();
+
+ /**
+ * Second-phase constructor.
+ */
+ void ConstructL();
+
+ private : // internal new methods
+ /**
+ * This method is for interpreting a string as push support.
+ * If the value of the string is '1', then push is enabled,
+ * if it's equal to '0', then push is disabled, otherwise the proxy
+ * does not care of push.
+ * @param aPushSupport String to be processed.
+ * @return TPushSupport enumeration value.
+ */
+ TPushSupport ResolvePushSupport( const TDesC& aPushSupport );
+
+ private: // From MWPContextExtension
+
+ /**
+ * Returns the data used for saving.
+ * @param aIndex The index of the data
+ * @return The data. Ownership is transferred.
+ */
+ const TDesC8& SaveDataL( TInt aIndex ) const;
+
+ /**
+ * Deletes a saved item.
+ * @param aSaveData The data used for saving
+ */
+ void DeleteL( const TDesC8& aSaveData );
+
+ /**
+ * Returns the UID of the adapter.
+ * @return UID
+ */
+ TUint32 Uid() const;
+
+ private : // data members
+
+ RPointerArray<TWhiteListAdapterItem> iItems; ///< Physical proxies
+
+ /**
+ * These items are parts of the current logical proxy and have not
+ * been added to the final item array (i.e. iItems array), because
+ * further processing is needed.
+ */
+ RPointerArray<TWhiteListAdapterItem> iItemsToBeAdded;
+
+ TPushSupport iLogicalProxyPushSupport;
+
+ TBool iPhysicalProxyIsVisited; ///< In order to differentiate
+ ///< if we are visiting a
+ ///< ph. or a log. proxy
+
+ TWhiteListAdapterItem* iCurrentItem; ///< Current physical proxy.
+ ///< Has.
+
+ CMsvSession* iMsvSession; ///< Session to the Message
+ ///< Server. Has.
+ CPushMtmSettings* iPushMtmSettings; ///< Push MTM Settings object.
+ ///< Has.
+ };
+
+#endif // WHITELISTADAPTER_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterDef.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Common constants for the White List Adapter plug-in.
+*
+*/
+
+
+
+#ifndef WHITELISTADAPTERDEF_H
+#define WHITELISTADAPTERDEF_H
+
+// DATA TYPES
+
+enum TPushSupport
+ {
+ EPushEnabled, ///< Explicitly set to enabled
+ EPushDisabled, ///< Explicitly set to disabled
+ EPushDontCare ///< Has not been set
+ };
+
+#endif // WHITELISTADAPTERDEF_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterItem.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Class the represents a physical proxy (in context of WAP Provisioning).
+*
+*/
+
+
+#ifndef WHITELISTADAPTERITEM_H
+#define WHITELISTADAPTERITEM_H
+
+// INCLUDE FILES
+
+ // User includes
+#include "PushInitiator.h"
+#include "WhiteListAdapterDef.h"
+ // System includes
+#include <e32std.h>
+
+// CLASS DECLARATION
+
+/**
+* This class encapsulates a proxy item found in a WAP Provisioning document.
+* It is designed for describing a particular White List address.
+*/
+class TWhiteListAdapterItem
+ {
+ public : // construction, destruction
+ /**
+ * Default constructor.
+ */
+ TWhiteListAdapterItem();
+
+ public : // getter/setter methods
+ /**
+ * Use this method to get the address.
+ * @return The stored proxy address.
+ */
+ const TDesC& Address() const;
+
+ /**
+ * Use this method to get the address type.
+ * @return The type of the stored proxy address.
+ */
+ CPushInitiator::TAddrType AddressType() const;
+
+ /**
+ * Tells the ID of the item.
+ * @return Item ID.
+ */
+ TUint32 Id() const;
+
+ /**
+ * Tells the ID of the item in a buffer.
+ * @return Item ID in a buffer.
+ */
+ const TDesC8& IdBuf() const;
+
+ /**
+ * Tells the push support.
+ * @return Push support.
+ */
+ TPushSupport PushSupport() const;
+
+ /**
+ * Sets the address.
+ * @param aAddress The proxy address to be set.
+ */
+ void SetAddress( const TDesC& aAddress );
+
+ /**
+ * Sets the address type.
+ * @param aAddressType The proxy address type to be set.
+ */
+ void SetAddressType( const TDesC& aAddressType );
+
+ /**
+ * Sets the ID of the item.
+ * @param aID The ID.
+ */
+ void SetId( TUint32 aId );
+
+ /**
+ * Sets the physical proxy ID.
+ * @param aProxyId The physical proxy identifier to be set.
+ */
+ void SetProxyId( const TDesC& aProxyId );
+
+ /**
+ * Sets whether or not the proxy address is push enabled.
+ * @param aPushEnabled If the value is 1, then push is enabled,
+ * otherwise (i.e. when the value is 0) the push is disabled.
+ */
+ void SetPushSupport( TPushSupport aPushSupport );
+
+ public : // other public methods
+
+ /**
+ * Tells whether the freshly initialized adapter item contains
+ * information about a valid proxy address. The proxy address is
+ * invalid if either it is not type of the correct address type
+ * or the proxy server is not push enabled.
+ * @return ETrue if the proxy address is valid, EFalse otherwise.
+ */
+ TBool Valid() const;
+
+ private : // data members
+
+ TPtrC iAddress; ///< Physical proxy gateway address
+
+ CPushInitiator::TAddrType iAddressType;
+
+ /// ID of the item after it has been added to MTM Settings.
+ TUint32 iId;
+ /// ID of the item packaged into a buffer pointer.
+ TPckgC<TUint32> iIdBufPtr;
+
+ TPtrC iProxyId; ///< Proxy identifier (or name)
+
+ TPushSupport iPushSupport;
+ };
+
+#endif // WHITELISTADAPTERITEM_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Logging macros for White List Adapter.
+*
+*
+*/
+
+
+#ifndef WHITELISTADAPTER_LOGGER_H
+#define WHITELISTADAPTER_LOGGER_H
+
+// INCLUDES
+
+#include <e32std.h>
+#include <e32def.h>
+#include <flogger.h>
+
+// TYPES
+
+enum TWhiteListAdapterLogMask ///< Log mask bits.
+ {
+ ELogOff = 0x00000000, ///< Don't log.
+ ELogBasic = 0x00000001, ///< Log only basic activities.
+ ELogDetailed = 0x00000002, ///< Detailed activities use this mask.
+ ELogAll = 0xFFFFFFFF ///< Log all.
+ };
+
+// MACROS
+
+// Determines what to log. Construct this from TWhiteListAdapterLogMask values.
+#define WHITELISTADAPTER_LOG_MASK ELogAll
+/// Determines log detail (0==basic level).
+#define WHITELISTADAPTER_LOG_LEVEL 5
+
+// CLASS DECLARATION
+
+/**
+* Logger class.
+*/
+class WhiteListAdapterLogger
+ {
+ 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<const TDesC16> 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<const TDesC16> 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<const TDesC8> 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<const TDesC8> 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
+ );
+ };
+
+#ifdef __TEST_WHITELISTADAPTER_LOG__
+
+ /// Write formatted to log.
+ #define CLOG( body ) WhiteListAdapterLogger::Write body
+ /// Write hex dump.
+ #define CDUMP( body ) WhiteListAdapterLogger::HexDump body
+ /// Guard "log-only" argument name with this (expands to argument).
+ #define LOG_ONLY( argName ) argName
+
+#else /* not defined __TEST_WHITELISTADAPTER_LOG__ */
+
+ /// Do nothing (log disabled).
+ #define CLOG( body )
+ /// Do nothing (log disabled).
+ #define CDUMP( body )
+ /// Guard "log-only" argument name with this (expands to nothing).
+ #define LOG_ONLY( argName )
+
+
+#endif /* def __TEST_WHITELISTADAPTER_LOG__ */
+
+#endif /* def WHITELISTADAPTER_LOGGER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterPanic.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Panic handling for white list management.
+*
+*/
+
+
+#ifndef WHITELISTADAPTERPANIC_H
+#define WHITELISTADAPTERPANIC_H
+
+// INCLUDE FILES
+ // System includes
+#include <e32def.h>
+
+// DATA TYPES
+
+enum TWhiteListAdapterPanics
+ {
+ ENoItemsToBeDisplayed, ///< A UI control tries to display items
+ EArrayIndexOutOfBounds, ///< Self-explanatory
+ ENullProxy ///< Physicial proxy cannot be found
+ };
+
+// FUNCTION PROTOTYPES
+
+/**
+* Panic handling in White List Adapter module. It's role is centralizing
+* panics.
+* @param aPanic Panic code, defined in THermesProtocolPanic.
+*/
+void Panic( TInt aPanic );
+
+
+#endif // WHITELISTADAPTERPANIC_H
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterUids.h Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: UID definitions for the White List Adapter plug-in.
+*
+*/
+
+
+
+#ifndef WHITELISTADAPTERUIDS_H
+#define WHITELISTADAPTERUIDS_H
+
+// ================= UIDs ======================
+
+/// DLL UID
+#define KWhiteListAdapterDllUid 0x10008D3E
+
+// ECOM DLL implementation UID - White List Adapter
+#define KWhiteListAdapterImplementationUid 0x101F85EF
+
+// ECOM DLL interface UID
+#define KProvisioningAdapterInterfaceUid 0x101F84D5
+
+#endif // WHITELISTADAPTERUIDS_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,522 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Handles white list settings in provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+
+ // User includes
+#include "PushInitiator.h"
+#include "PushInitiatorList.h"
+#include "PushMtmSettings.h"
+#include "WhiteListAdapter.h"
+#include "WhiteListAdapterDef.h"
+#include "WhiteListAdapterItem.h"
+#include "WhiteListAdapterLogger.h"
+#include "WhiteListAdapterPanic.h"
+#include "WhiteListAdapterUids.h"
+ // System includes
+#include <CWPCharacteristic.h>
+#include <CWPParameter.h>
+
+// CONSTANTS
+
+// 'Push enabled' flag settings
+const TInt KPushEnabledFlagLength = 1;
+const TUint16 KPushEnabledFlagTrue = '1';
+const TUint16 KPushEnabledFlagFalse = '0';
+
+// Granularity value for dynamic arrays
+const TInt KDynamicArrayGranularity = 3;
+
+// ================= MEMBER FUNCTIONS ======================
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::CWhiteListAdapter
+// ---------------------------------------------------------
+//
+CWhiteListAdapter::CWhiteListAdapter() : CWPAdapter(),
+iItems( KDynamicArrayGranularity ),
+iItemsToBeAdded( KDynamicArrayGranularity ),
+iLogicalProxyPushSupport( EPushDontCare ), iPhysicalProxyIsVisited( EFalse )
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter c'tor" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ConstructL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::ConstructL()
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::ConstructL" ) ) );
+
+ iMsvSession = CMsvSession::OpenSyncL( *this );
+ iPushMtmSettings = CPushMtmSettings::NewL();
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::ConstructL" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::NewL
+// ---------------------------------------------------------
+//
+CWhiteListAdapter* CWhiteListAdapter::NewL()
+ {
+ CWhiteListAdapter* self = new (ELeave) CWhiteListAdapter;
+
+ CleanupStack::PushL( self );
+
+ self->ConstructL();
+
+ CleanupStack::Pop(); // self
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::~CWhiteListAdapter
+// ---------------------------------------------------------
+//
+CWhiteListAdapter::~CWhiteListAdapter()
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter d'tor" ) ) );
+
+ delete iCurrentItem;
+
+ delete iPushMtmSettings; // It has to be deleted before iMsvSession,
+ // because it uses iMsvSession->FileSession().
+ delete iMsvSession;
+
+ CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter d'tor, iItemsToBeAdded.Count:%d" ),
+ iItemsToBeAdded.Count() ) );
+ iItemsToBeAdded.ResetAndDestroy();
+ iItemsToBeAdded.Close();
+
+ CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter d'tor, iItems.Count:%d" ), iItems.Count() ) );
+ iItems.ResetAndDestroy();
+ iItems.Close();
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter d'tor" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ItemCount
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::ItemCount() const
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::ItemCount %d" ), iItems.Count() ) );
+
+ return iItems.Count();
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SummaryTitle
+// ---------------------------------------------------------
+//
+const TDesC16& CWhiteListAdapter::SummaryTitle( TInt /*aIndex*/ ) const
+ {
+ // As WL text will never be shown, we simply return an empty string here.
+ return KNullDesC16();
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SummaryText
+// ---------------------------------------------------------
+//
+const TDesC16& CWhiteListAdapter::SummaryText( TInt /*aIndex*/ ) const
+ {
+ // As WL text will never be shown, we simply return an empty string here.
+ return KNullDesC16();
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SaveL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::SaveL( TInt aItem )
+ {
+ __ASSERT_DEBUG( 0 <= aItem && aItem < iItems.Count(),
+ Panic( EArrayIndexOutOfBounds ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::SaveL %d" ), aItem ) );
+
+ CPushInitiator* pi = new (ELeave) CPushInitiator;
+ CleanupStack::PushL( pi );
+ pi->SetAddressL( iItems[aItem]->Address(),
+ iItems[aItem]->AddressType() );
+
+ TUint32 entryId = iPushMtmSettings->PushInitiatorList().AddL( pi );
+ CleanupStack::Pop( pi ); // pi, ownership taken over
+ // Save the ID of the added entry:
+ iItems[aItem]->SetId( entryId );
+
+ iPushMtmSettings->SaveL();
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::SaveL" ) ) );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::CanSetAsDefault
+// ---------------------------------------------------------
+//
+TBool CWhiteListAdapter::CanSetAsDefault( TInt /*aItem*/ ) const
+ {
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SetAsDefaultL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::SetAsDefaultL( TInt /*aItem*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::DetailsL
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::DetailsL( TInt /*aItem*/,
+ MWPPairVisitor& /*aVisitor*/ )
+ {
+ return KErrNotSupported;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ContextExtension
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::ContextExtension( MWPContextExtension*& aExtension )
+ {
+ aExtension = this;
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitL( CWPCharacteristic& aCharacteristic )
+ {
+ if ( aCharacteristic.Type() == KWPPxLogical )
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::VisitL PXLOGICAL" ) ) );
+
+ aCharacteristic.AcceptL( *this );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PXLOGICAL visited, push support is %d" ),
+ iLogicalProxyPushSupport ) );
+
+ // iItemsToBeAdded contains physical proxies whose push support
+ // is either PushEnabled or PushDontCare (i.e. PushDisabled proxies
+ // are not present in this array).
+ if ( iLogicalProxyPushSupport == EPushEnabled )
+ {
+ // Knowing that the logical proxy's push support is PushEnabled,
+ // we have to add each element of the above-mentioned array.
+ for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
+ {
+ // If addition fails, then we delete the item. Otherwise,
+ // the ownership has been taken over by iItems array.
+ if ( iItems.Append( iItemsToBeAdded[i] ) != KErrNone )
+ {
+ delete iItemsToBeAdded[i];
+ }
+ }
+ }
+ else
+ {
+ // We're here : logical proxy's push support is either PushDontCare
+ // or PushDisabled. In this case we have to add only those elements
+ // in the array whose push support is PushEnabled. This is because
+ // physical proxy's push support definition is stronger than the
+ // logical proxy's definition.
+ for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
+ {
+ TWhiteListAdapterItem* item = iItemsToBeAdded[i];
+ if ( item->PushSupport() == EPushEnabled )
+ {
+ // If addition fails, then we delete the item. Otherwise,
+ // the ownership has been taken over by iItems array.
+ if ( iItems.Append( item ) != KErrNone )
+ {
+ delete item;
+ }
+ }
+ else
+ {
+ delete item;
+ }
+ }
+ }
+
+ // There is only one thing we need to do here : reset the array.
+ // At this point, each element in the array is invalid : if the
+ // element happened to be valid, then the other array (iItems)
+ // took over the ownership. Otherwise (i.e. the element was
+ // invalid), the element got deleted manually.
+ // Thus, we can safely reset the array.
+ iItemsToBeAdded.Reset();
+
+ iLogicalProxyPushSupport = EPushDontCare;
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::VisitL PXLOGICAL" ) ) );
+ }
+ else if ( aCharacteristic.Type() == KWPPxPhysical )
+ {
+ // This deletion is for safety's sake : if one of the leaving methods
+ // in this section (below) has left, then it may happen that this
+ // method is called again and iCurrentItem is not NULL. If it is the
+ // case, we can avoid having an orphaned memory area by deleting the
+ // current item before allocating a new one.
+ // However, in most cases iCurrentItem will be NULL.
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "-> WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
+
+ delete iCurrentItem;
+ iCurrentItem = NULL;
+ iCurrentItem = new (ELeave) TWhiteListAdapterItem();
+
+ iPhysicalProxyIsVisited = ETrue;
+
+ aCharacteristic.AcceptL( *this );
+
+ iPhysicalProxyIsVisited = EFalse;
+
+ if ( iCurrentItem->Valid() )
+ {
+ User::LeaveIfError( iItemsToBeAdded.Append( iCurrentItem ) );
+ iCurrentItem = NULL; // Ownership transferred.
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PXPHYSICAL valid & added" ) ) );
+ }
+ else
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PXPHYSICAL invalid" ) ) );
+ // invalid physical proxy (at least from our point of view)
+ delete iCurrentItem;
+ iCurrentItem = NULL;
+ }
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "<- WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
+ }
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitL( CWPParameter& aParameter )
+ {
+ switch ( aParameter.ID() )
+ {
+ case EWPParameterPhysicalProxyID :
+ {
+ __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PhysicalProxyID" ) ) );
+
+ if ( iCurrentItem )
+ {
+ iCurrentItem->SetProxyId( aParameter.Value() );
+ }
+
+ break;
+ }
+ case EWPParameterPxAddr :
+ {
+ __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PxAddr" ) ) );
+
+ if ( iCurrentItem )
+ {
+ iCurrentItem->SetAddress( aParameter.Value() );
+ }
+
+ break;
+ }
+ case EWPParameterPxAddrType :
+ {
+ __ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL PxAddrType" ) ) );
+
+ if ( iCurrentItem )
+ {
+ iCurrentItem->SetAddressType( aParameter.Value() );
+ }
+
+ break;
+ }
+ case EWPParameterPushEnabled :
+ {
+ if ( iCurrentItem )
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL Physical PushEnabled" ) ) );
+
+ // it is a physical proxy
+ iCurrentItem->SetPushSupport
+ ( ResolvePushSupport( aParameter.Value() ) );
+ }
+ else
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::VisitL Logical PushEnabled" ) ) );
+
+ // it is a logical proxy
+ iLogicalProxyPushSupport =
+ ResolvePushSupport( aParameter.Value() );
+ }
+
+ break;
+ }
+ default :
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitLinkL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitLinkL( CWPCharacteristic& /*aCharacteristic*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::HandleSessionEventL( TMsvSessionEvent /*aEvent*/,
+ TAny* /*aArg1*/,
+ TAny* /*aArg2*/,
+ TAny* /*aArg3*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ResolvePushSupport
+// ---------------------------------------------------------
+//
+TPushSupport CWhiteListAdapter::ResolvePushSupport( const TDesC& aPushSupport )
+ {
+ TPushSupport support = EPushDontCare;
+
+ if ( aPushSupport.Length() == KPushEnabledFlagLength )
+ {
+ if ( aPushSupport[0] == KPushEnabledFlagTrue )
+ {
+ support = EPushEnabled;
+ }
+ else if ( aPushSupport[0] == KPushEnabledFlagFalse )
+ {
+ support = EPushDisabled;
+ }
+ }
+
+ return support;
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SaveDataL
+// ---------------------------------------------------------
+//
+const TDesC8& CWhiteListAdapter::SaveDataL( TInt aIndex ) const
+ {
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::SaveDataL %d %d %d" ),
+ iItems.Count(), aIndex, iItems[aIndex]->Id() ) );
+ return ( iItems[aIndex]->IdBuf() );
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::DeleteL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::DeleteL( const TDesC8& aSaveData )
+ {
+ // Copy source into a package buffer:
+ TPckgBuf<TUint32> entryIdBuf;
+ entryIdBuf.Copy( aSaveData );
+ // Extract the entry ID:
+ TUint32 entryId( entryIdBuf() );
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::DeleteL ID %d" ), entryId ) );
+
+ // Now entryId holds the ID - we can remove it from WL:
+ CPushInitiatorList& whiteList = iPushMtmSettings->PushInitiatorList();
+ // Find the index of the Initiator with the given ID.
+ TInt index( KErrNotFound );
+ // As the entries are unique in WL by the ID, it's enough
+ // to continue the loop until first hit.
+ const TInt count( whiteList.Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ const CPushInitiator& initiator = whiteList.At(i);
+ if ( initiator.EntryID() == entryId )
+ {
+ index = i;
+ // Found:
+ break;
+ }
+ }
+
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::DeleteL index %d" ), index ) );
+ if ( index != KErrNotFound )
+ {
+ whiteList.Delete( index );
+ // Commit changes.
+ iPushMtmSettings->SaveL();
+ CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+ _L( "WhiteListAdapter::DeleteL Saved..." ) ) );
+ }
+ }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::Uid
+// ---------------------------------------------------------
+//
+TUint32 CWhiteListAdapter::Uid() const
+ {
+ return (TUint32)KWhiteListAdapterImplementationUid;
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Table of plugins for ECom
+*
+*/
+
+
+
+// INCLUDE FILES
+ // System includes
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+ // User includes
+#include "WhiteListAdapter.h"
+#include "WhiteListAdapterUids.h"
+
+// CONSTANTS
+
+const TImplementationProxy KImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( KWhiteListAdapterImplementationUid, CWhiteListAdapter::NewL )
+ };
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
+
+ return KImplementationTable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Handles white list settings in provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+ // User includes
+#include "WhiteListAdapterItem.h"
+
+// CONSTANTS
+
+_LIT( KIPv4AddressType, "IPV4" );
+_LIT( KIPv6AddressType, "IPV6" );
+_LIT( KE164AddressType, "E164" );
+_LIT( KAlphanumericAddressType, "ALPHA" );
+
+// ================= MEMBER FUNCTIONS ======================
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::TWhiteListAdapterItem
+// ---------------------------------------------------------
+//
+TWhiteListAdapterItem::TWhiteListAdapterItem()
+: iAddress( KNullDesC ),
+ iAddressType( CPushInitiator::ETypeE164 ),
+ iId( 0 ),
+ iIdBufPtr( iId ),
+ iProxyId( KNullDesC ),
+ iPushSupport( EPushDontCare )
+ {
+ iAddressType = CPushInitiator::ETypeIpv4;
+ iPushSupport = EPushDontCare;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Address
+// ---------------------------------------------------------
+//
+const TDesC& TWhiteListAdapterItem::Address() const
+ {
+ return iAddress;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::AddressType
+// ---------------------------------------------------------
+//
+CPushInitiator::TAddrType TWhiteListAdapterItem::AddressType() const
+ {
+ return iAddressType;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Id
+// ---------------------------------------------------------
+//
+TUint32 TWhiteListAdapterItem::Id() const
+ {
+ return iId;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::IdBuf
+// ---------------------------------------------------------
+//
+const TDesC8& TWhiteListAdapterItem::IdBuf() const
+ {
+ return iIdBufPtr;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::PushSupport
+// ---------------------------------------------------------
+//
+TPushSupport TWhiteListAdapterItem::PushSupport() const
+ {
+ return iPushSupport;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetAddress
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetAddress( const TDesC& aAddress )
+ {
+ iAddress.Set( aAddress );
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetAddressType
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetAddressType( const TDesC& aAddressType )
+ {
+ if ( !aAddressType.Compare( KIPv4AddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeIpv4;
+ }
+ else if ( !aAddressType.Compare( KIPv6AddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeIpv6;
+ }
+ else if ( !aAddressType.Compare( KE164AddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeE164;
+ }
+ else if ( !aAddressType.Compare( KAlphanumericAddressType ) )
+ {
+ iAddressType = CPushInitiator::ETypeAlpha;
+ }
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetId
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetId( TUint32 aId )
+ {
+ iId = aId;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetProxyId
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetProxyId( const TDesC& aProxyId )
+ {
+ iProxyId.Set( aProxyId );
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetPushSupport
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetPushSupport( TPushSupport aPushSupport )
+ {
+ iPushSupport = aPushSupport;
+ }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Valid
+// ---------------------------------------------------------
+//
+TBool TWhiteListAdapterItem::Valid() const
+ {
+ TBool valid = EFalse;
+
+ // TODO : checking IP address/phone number validity (MsgBioUtils?)
+
+ if ( ( iPushSupport == EPushEnabled || iPushSupport == EPushDontCare ) &&
+ ( iAddressType == CPushInitiator::ETypeE164 ) &&
+ ( 0 < iAddress.Length() ) )
+ {
+ valid = ETrue;
+ }
+
+ return valid;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implementation of class WhiteListAdapterLogger.
+*
+*
+*/
+
+
+#ifdef __TEST_WHITELISTADAPTER_LOG__
+
+// INCLUDE FILES
+ // System includes
+#include <flogger.h>
+
+ // User includes
+#include "WhiteListAdapterLogger.h"
+
+// ================= CONSTANTS =======================
+
+/// White List Adapter logging directory.
+_LIT( KWhiteListAdapterLogDir, "WLA" );
+/// White List Adapter log file name.
+_LIT( KWhiteListAdapterLogFile, "Log.txt" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ list
+ );
+ VA_END( list );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, VA_LIST& aList )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ aList
+ );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ list
+ );
+ VA_END( list );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, VA_LIST& aList )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ RFileLogger::WriteFormat
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ aList
+ );
+ }
+ }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::HexDump()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::HexDump
+ (
+ TInt32 aMask,
+ TInt aLevel,
+ const TText* aHeader,
+ const TText* aMargin,
+ const TUint8* aPtr,
+ TInt aLen
+ )
+ {
+ if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+ ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+ {
+ RFileLogger::HexDump
+ (
+ KWhiteListAdapterLogDir,
+ KWhiteListAdapterLogFile,
+ EFileLoggingModeAppend,
+ aHeader,
+ aMargin,
+ aPtr,
+ aLen
+ );
+ }
+ }
+
+#endif // __TEST_WHITELISTADAPTER_LOG__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Panic handling for white list management.
+*
+*/
+
+
+// INCLUDE FILES
+ // System includes
+#include <e32std.h>
+
+ // User includes
+#include "WhiteListAdapterPanic.h"
+
+// CONSTANTS
+
+_LIT( KWhiteListAdapterPanicString, "WhiteListAdapter" );
+
+// External function(s)
+
+void Panic( TInt aPanic )
+ {
+ User::Panic( KWhiteListAdapterPanicString, aPanic );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/PushContentHandlerClean.mk Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,102 @@
+#
+# Copyright (c) 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:
+#
+#
+# Remove Symbian Push Content Handler DLL and registry resource files.
+# These push content handlers are replaced by the content handlers delivered
+# in the Push MTM.
+#
+
+LANGUAGE=sc
+
+#
+# Files to be removed: ECOM DLLs and registry files.
+#
+
+# The old-named push content handler DLL left by PushMtm or Symbian:
+TARGETDLL1=pushcontenthandler.dll
+# ECOM resource left by Symbian
+TARGETRESOURCE1=pushcontenthandler.r$(LANGUAGE)
+# SI & SL content handlers left by Symbian
+TARGETDLL2=sislcontenthandlers.dll
+# ECOM resource left by Symbian (for SI & SL content handlers)
+TARGETRESOURCE2=sislcontenthandlers.r$(LANGUAGE)
+# Just in case: remove the ECOM registry - the system will create a new
+ECOMREGISTRY=$(EPOCROOT)epoc32\$(PLATFORM)\c\system\data\plugins\ecom.rom.dat
+# Remove Symbian push mtm
+TARGETMTMDLL=wappushmtmclientserver.dll
+
+#
+# Target directories
+#
+
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ TARGETDIRRESOURCE=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\resource\plugins
+else
+endif
+TARGETDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
+GENERICTARGETDIRRESOURCE=$(EPOCROOT)epoc32\data\z\resource\plugins
+TARGETMTMDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
+
+#
+# Remove the files
+#
+
+do_tidy:
+ if exist "$(TARGETDIRDLL)\$(TARGETDLL1)" del "$(TARGETDIRDLL)\$(TARGETDLL1)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
+ del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
+endif
+ if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
+ del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
+ if exist "$(TARGETDIRDLL)\$(TARGETDLL2)" del "$(TARGETDIRDLL)\$(TARGETDLL2)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
+ del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
+endif
+ if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
+ del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+ if exist "$(ECOMREGISTRY)" del "$(ECOMREGISTRY)"
+endif
+ if exist "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)" del "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)"
+
+do_nothing:
+
+#
+# The targets invoked by abld
+#
+
+MAKMAKE : do_tidy
+
+RESOURCE : do_nothing
+
+SAVESPACE : do_nothing
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN : do_tidy
+
+RELEASABLES : do_nothing
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/PushMtmPushContentHandler.mmp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file
+*
+*/
+
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET PushMtmPushContentHandler.dll
+TARGETTYPE PLUGIN
+
+// UIDs - 2nd UID specifies an ECom dll,
+// 3rd UID is unique identifier
+// (EUidPushContentHandlerDll in PushContentHandlerDef.hrh).
+UID 0x10009D8D 0x101F854C
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../PushContentHandler
+START RESOURCE 101F854C.rss
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGET PushMtmPushContentHandler.rsc
+END // RESOURCE
+
+USERINCLUDE ../PushContentHandler
+USERINCLUDE ../../Inc
+USERINCLUDE ../../MtmUtilInc
+USERINCLUDE ../../MtmUiInc
+
+/* todo: to be removed once push header are updated */
+USERINCLUDE /epoc32/include/push
+
+APP_LAYER_SYSTEMINCLUDE
+OS_LAYER_ESTLIB_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(push)
+SYSTEMINCLUDE APP_LAYER_PUBLIC_EXPORT_PATH(ecom)
+#endif
+
+SOURCEPATH ../PushContentHandler
+SOURCE CCOContentHandler.cpp
+SOURCE CMultiPartMixedContentHandler.cpp
+SOURCE CMultiPartRelAndAltContentHandler.cpp
+SOURCE CPushContentHandlerBase.cpp
+SOURCE CUnknownContentHandler.cpp
+SOURCE CSIContentHandler.cpp
+SOURCE CSLContentHandler.cpp
+SOURCE PushContentHandlerGroupProxy.cpp
+SOURCE PushContentHandlerPanic.cpp
+SOURCE PushContentHandlerUtils.cpp
+SOURCE PushMtmAutoFetchOperation.cpp
+SOURCE PushMtmFetchOperation.cpp
+SOURCE PushMtmCacheSupply.cpp
+SOURCE PushMtmCacheDataSupplier.cpp
+SOURCE si_dict.c
+SOURCE sl_dict.c
+SOURCE StringResourceReader.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO __TEST_LOG__
+#endif
+
+LIBRARY apengine.lib
+
+LIBRARY apgrfx.lib
+LIBRARY apmime.lib
+
+LIBRARY bafl.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY Bifu.lib
+LIBRARY BioDB.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY CharConv.lib
+
+LIBRARY commdb.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY commonui.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY ECom.lib
+LIBRARY efsrv.lib
+
+LIBRARY esock.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY etext.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY euser.lib
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY flogger.lib
+#endif
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY gsmu.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY http.lib
+LIBRARY BrowserCache.lib
+LIBRARY HttpFilterCommon.lib
+LIBRARY inetprotutil.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY MiscPushMsgUtils.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY msgs.lib
+LIBRARY PushMsgEntry.lib
+LIBRARY PushMtmUtil.lib
+LIBRARY SISLPushMsgUtils.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY smcm.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY WapPushUtils.lib
+
+LIBRARY ws32.lib
+
+LIBRARY cXmlParser.lib
+LIBRARY CENTRALREPOSITORY.lib
+LIBRARY featmgr.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/PushMtmWhiteListAdapter.mmp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Specification file of White List Adapter plug-in
+*
+*/
+
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+#include <defaultcaps.hrh>
+#include "../WhiteListAdapterInc/WhiteListAdapterUids.h"
+
+TARGET PushMtmWhiteListAdapter.dll
+TARGETTYPE PLUGIN
+
+// UIDs - 2nd UID specifies an ECom dll,
+// 3rd UID is a unique identifier from WhiteListAdapterDef.h
+UID 0x10009D8D KWhiteListAdapterDllUid
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+// RESOURCES
+
+START RESOURCE ../Data/10008D3E.rss
+#ifdef __S60_32__
+LANG sc
+#else
+LANGUAGE_IDS
+#endif
+TARGET PushMtmWhiteListAdapter.rsc
+END // RESOURCE
+
+// INCLUDE DIRECTORIES
+
+USERINCLUDE ../WhiteListAdapterInc
+USERINCLUDE ../../MtmUtilInc
+
+APP_LAYER_SYSTEMINCLUDE
+
+// SOURCE FILES
+
+SOURCEPATH ../WhiteListAdapterSrc
+SOURCE WhiteListAdapter.cpp
+SOURCE WhiteListAdapterGroupProxy.cpp
+SOURCE WhiteListAdapterItem.cpp
+SOURCE WhiteListAdapterLogger.cpp
+SOURCE WhiteListAdapterPanic.cpp
+
+// LIBRARIES
+
+LIBRARY Euser.lib
+LIBRARY msgs.lib // for MMsvSessionObserver
+LIBRARY ProvisioningEngine.lib // for CWPAdapter & Co.
+LIBRARY PushMtmUtil.lib // for Push MTM Settings
+
+// Define this macro is you wish to enable logging
+//#define __TEST_WHITELISTADAPTER_LOG_ENABLED
+
+#ifdef __TEST_WHITELISTADAPTER_LOG_ENABLED
+ MACRO __TEST_WHITELISTADAPTER_LOG__
+ DEBUGLIBRARY flogger.lib
+#endif // __TEST_WHITELISTADAPTER_LOG_ENABLED
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/bld.inf Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Build specification file
+*
+*/
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+#if defined( __S60_32__) || defined( __PLATFORM_VERSION_S60_50__) || defined( __PLATFORM_VERSION_5250__)
+// Remove Symbian Push Content Handler
+gnumakefile PushContentHandlerClean.mk
+#endif
+// Build our Push Content Handler
+PushMtmPushContentHandler.mmp
+
+#ifdef __PUSH_WHITELIST
+
+// Build our White List Adapter plug-in
+PushMtmWhiteListAdapter.mmp
+
+#endif // __PUSH_WHITELIST
+
+
+PRJ_TESTMMPFILES
+
+
+PRJ_TESTEXPORTS
+