# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284394433 -3600 # Node ID 4455192101e4d906a32b4e53f465411227b10f5b # Parent 8e6fa171934010095659e2b81477a57c6312b351 Nokia wk34 delivery diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browseraudiovideoplugin/group/BLD.INF --- 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 -#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 - - diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browseraudiovideoplugin/group/bld.inf --- /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 +#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 + + diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browseraudiovideoplugin/loc/BrowserAudioVideoPlugin.loc --- 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 diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browseraudiovideoplugin/loc/browseraudiovideoplugin.loc --- /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 diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browsergpsplugin/group/BLD.INF --- 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 - -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 diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browsergpsplugin/group/bld.inf --- /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 + +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 diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browsersysteminfoplugin/group/BLD.INF --- 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 - -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 - - diff -r 8e6fa1719340 -r 4455192101e4 browserplugins/browsersysteminfoplugin/group/bld.inf --- /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 + +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 + + diff -r 8e6fa1719340 -r 4455192101e4 browserui/browser/loc/BrowserHp.loc --- 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" - diff -r 8e6fa1719340 -r 4455192101e4 browserui/browser/loc/Feeds.loc --- 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" - - diff -r 8e6fa1719340 -r 4455192101e4 browserui/browser/loc/WmlBrowser.loc --- 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>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 diff -r 8e6fa1719340 -r 4455192101e4 browserui/browser/loc/browserhp.loc --- /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" + diff -r 8e6fa1719340 -r 4455192101e4 browserui/browser/loc/feeds.loc --- /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" + + diff -r 8e6fa1719340 -r 4455192101e4 browserui/browser/loc/wmlbrowser.loc --- /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>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 diff -r 8e6fa1719340 -r 4455192101e4 browserui/videoservices/loc/VideoServices.loc --- 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 diff -r 8e6fa1719340 -r 4455192101e4 browserui/videoservices/loc/videoservices.loc --- /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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Group/Bld.inf --- 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 -#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 - - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Group/PushMtmCliSrv.mmp --- 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 -#include -#include -#include - -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 - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Group/PushMtmIcons.mk --- 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Group/PushMtmUi.mmp --- 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 -#include -#include -#include - -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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Group/PushMtmUtil.mmp --- 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 -#include -#include -#include -#include - -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 - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Group/PushViewer.mmp --- 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 -#include -#include -#include - -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 - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/Data/10008D3E.rss --- 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 - - // 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 = ""; - } - }; - } - }; - } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/Group/Bld.inf --- 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 -#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 - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/Group/PushContentHandlerClean.mk --- 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 - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/Group/PushMtmPushContentHandler.mmp --- 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 -#include - -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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/Group/PushMtmWhiteListAdapter.mmp --- 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 -#include -#include -#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/101F854C.rss --- 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 -#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 = ""; - } - }; - } - }; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CCOContentHandler.cpp --- 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 -//#include - -// 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; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CCOContentHandler.h --- 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 -#include - -// 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__ - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp --- 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 -#include -#include - -// 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; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.h --- 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 -#include - -// 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__ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp --- 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 -#include - -// 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*/ ) - {} - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h --- 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 -#include -#include -#include - -// 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__ - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.cpp --- 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 -#include -#include -#include -#include -#include -#include - -// ================= 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*/ - ) - { - } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.h --- 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 -#include -#include -#include - -// 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__ - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CSIContentHandler.cpp --- 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 -#include -#include -#include -#include -#include -#include -#include -#include - -// 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( 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 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 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 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 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; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CSIContentHandler.h --- 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 -#include -#include -#include - -// 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* iCharacterSetsAvailable; ///< Owned. - }; - -#include "CSIContentHandler.inl" - -#endif // __CSICONTENTHANDLER_H__ - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CSIContentHandler.inl --- 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; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CSLContentHandler.cpp --- 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "PushMtmPrivateCRKeys.h" -#include - -// 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( 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 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( 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( 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; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CSLContentHandler.h --- 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 -#include -#include - -// 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__ - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CSLContentHandler.inl --- 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; - } - - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.cpp --- 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 -#ifdef __SERIES60_PUSH_SP -#include -#include // BIO Message Database and message query methods -#include // CSmsBuffer class -#include // CSmsMessage class -#include // CSmsHeader class -#include // TSmsUtilities class -#include // CRichText class -#include // KUidBioMessageTypeMtm const -#include -#include -#include -#include -#include -#include // KUidMsvMessageEntry const -#include - -// SMUT Unbranch -#include - -#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( 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 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 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; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.h --- 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 -#include - -// 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__ - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushContentHandlerDef.hrh --- 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 - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp --- 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 -#include - - -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; - } - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.cpp --- 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 ); - } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.h --- 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 - -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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.cpp --- 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 -#include - -// --------------------------------------------------------- -// 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; - } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.h --- 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 -#include -#include -#include -#include -#include - -/** -* 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 - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp --- 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.h --- 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 - -// 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp --- 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.h --- 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 - -// 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.cpp --- 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 -#include -#include -#include - - -// 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.h --- 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 -#include -#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.cpp --- 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 -#include -#include -#include -#include -#include -#include -#include -#include "PushMtmPrivateCRKeys.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// ================= 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( 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.h --- 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 -#include -#include -#include -#include -#include -#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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.inl --- 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 */ - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/StringResourceReader.cpp --- 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 -#include -#include - -// ================= 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/StringResourceReader.h --- 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 -#include -#include - -// 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/si_dict.c --- 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 -*/ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/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 - - -#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/sl_dict.c --- 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 -*/ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/PushContentHandler/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 - -#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapter.h --- 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 -#include -#include - -// 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 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 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterDef.h --- 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterItem.h --- 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 - -// 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 iIdBufPtr; - - TPtrC iProxyId; ///< Proxy identifier (or name) - - TPushSupport iPushSupport; - }; - -#endif // WHITELISTADAPTERITEM_H - -// End of file \ No newline at end of file diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h --- 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 -#include -#include - -// 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 aFmt, ... ); - - /** - * Write formatted log. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aFmt Format string. - * @param aList Variable argument list. - */ - static void Write - ( - TInt32 aMask, - TInt aLevel, - TRefByValue aFmt, - VA_LIST& aList - ); - - /** - * Write formatted log. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aFmt Format string. - */ - static void Write - ( TInt32 aMask, TInt aLevel, TRefByValue aFmt, ... ); - - /** - * Write formatted log. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aFmt Format string. - * @param aList Variable argument list. - */ - static void Write - ( - TInt32 aMask, - TInt aLevel, - TRefByValue aFmt, - VA_LIST& aList - ); - - /** - * Write hex dump. - * @param aMask Log mask. - * @param aLevel Log level. - * @param aHeader Header string. - * @param aMargin Margin. - * @param aPtr Data. - * @param aLen Data length. - */ - static void HexDump - ( - TInt32 aMask, - TInt aLevel, - const TText* aHeader, - const TText* aMargin, - const TUint8* aPtr, - TInt aLen - ); - }; - -#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 */ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterPanic.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 - -// 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterUids.h --- 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp --- 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 -#include - -// 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 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp --- 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 -#include - - // 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp --- 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; - } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp --- 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 - - // 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 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 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 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 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__ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp --- 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 - - // User includes -#include "WhiteListAdapterPanic.h" - -// CONSTANTS - -_LIT( KWhiteListAdapterPanicString, "WhiteListAdapter" ); - -// External function(s) - -void Panic( TInt aPanic ) - { - User::Panic( KWhiteListAdapterPanicString, aPanic ); - } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/group/PushMtmCliSrv.mmp --- /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 +#include +#include +#include + +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 + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/group/PushMtmIcons.mk --- /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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/group/PushMtmUi.mmp --- /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 +#include +#include +#include + +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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/group/PushMtmUtil.mmp --- /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 +#include +#include +#include +#include + +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 + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/group/PushViewer.mmp --- /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 +#include +#include +#include + +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 + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/group/bld.inf --- /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 +#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 + + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/loc/PushMtmUi.loc --- 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." - diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/loc/PushViewer.loc --- 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/loc/pushmtmui.loc --- /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." + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/loc/pushviewer.loc --- /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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/Data/10008D3E.rss --- /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 + + // 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 = ""; + } + }; + } + }; + } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/101F854C.rss --- /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 +#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 = ""; + } + }; + } + }; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CCOContentHandler.cpp --- /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 +//#include + +// 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; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CCOContentHandler.h --- /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 +#include + +// 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__ + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp --- /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 +#include +#include + +// 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; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.h --- /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 +#include + +// 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__ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp --- /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 +#include + +// 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*/ ) + {} + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h --- /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 +#include +#include +#include + +// 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__ + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.cpp --- /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 +#include +#include +#include +#include +#include +#include + +// ================= 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*/ + ) + { + } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.h --- /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 +#include +#include +#include + +// 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__ + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CSIContentHandler.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include + +// 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( 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 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 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 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 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; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CSIContentHandler.h --- /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 +#include +#include +#include + +// 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* iCharacterSetsAvailable; ///< Owned. + }; + +#include "CSIContentHandler.inl" + +#endif // __CSICONTENTHANDLER_H__ + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CSIContentHandler.inl --- /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; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CSLContentHandler.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "PushMtmPrivateCRKeys.h" +#include + +// 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( 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 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( 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( 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; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CSLContentHandler.h --- /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 +#include +#include + +// 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__ + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CSLContentHandler.inl --- /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; + } + + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CUnknownContentHandler.cpp --- /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 +#ifdef __SERIES60_PUSH_SP +#include +#include // BIO Message Database and message query methods +#include // CSmsBuffer class +#include // CSmsMessage class +#include // CSmsHeader class +#include // TSmsUtilities class +#include // CRichText class +#include // KUidBioMessageTypeMtm const +#include +#include +#include +#include +#include +#include // KUidMsvMessageEntry const +#include + +// SMUT Unbranch +#include + +#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( 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 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 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; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CUnknownContentHandler.h --- /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 +#include + +// 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__ + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushContentHandlerDef.hrh --- /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 + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp --- /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 +#include + + +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; + } + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.cpp --- /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 ); + } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.h --- /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 + +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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.cpp --- /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 +#include + +// --------------------------------------------------------- +// 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; + } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.h --- /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 +#include +#include +#include +#include +#include + +/** +* 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 + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp --- /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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.h --- /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 + +// 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp --- /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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.h --- /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 + +// 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.cpp --- /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 +#include +#include +#include + + +// 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.h --- /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 +#include +#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include "PushMtmPrivateCRKeys.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ================= 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( 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.h --- /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 +#include +#include +#include +#include +#include +#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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.inl --- /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 */ + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/StringResourceReader.cpp --- /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 +#include +#include + +// ================= 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/StringResourceReader.h --- /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 +#include +#include + +// 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. diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/si_dict.c --- /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 +*/ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/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 + + +#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/sl_dict.c --- /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 +*/ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/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 + +#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapter.h --- /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 +#include +#include + +// 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 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 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterDef.h --- /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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterItem.h --- /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 + +// 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 iIdBufPtr; + + TPtrC iProxyId; ///< Proxy identifier (or name) + + TPushSupport iPushSupport; + }; + +#endif // WHITELISTADAPTERITEM_H + +// End of file \ No newline at end of file diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h --- /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 +#include +#include + +// 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 aFmt, ... ); + + /** + * Write formatted log. + * @param aMask Log mask. + * @param aLevel Log level. + * @param aFmt Format string. + * @param aList Variable argument list. + */ + static void Write + ( + TInt32 aMask, + TInt aLevel, + TRefByValue aFmt, + VA_LIST& aList + ); + + /** + * Write formatted log. + * @param aMask Log mask. + * @param aLevel Log level. + * @param aFmt Format string. + */ + static void Write + ( TInt32 aMask, TInt aLevel, TRefByValue aFmt, ... ); + + /** + * Write formatted log. + * @param aMask Log mask. + * @param aLevel Log level. + * @param aFmt Format string. + * @param aList Variable argument list. + */ + static void Write + ( + TInt32 aMask, + TInt aLevel, + TRefByValue aFmt, + VA_LIST& aList + ); + + /** + * Write hex dump. + * @param aMask Log mask. + * @param aLevel Log level. + * @param aHeader Header string. + * @param aMargin Margin. + * @param aPtr Data. + * @param aLen Data length. + */ + static void HexDump + ( + TInt32 aMask, + TInt aLevel, + const TText* aHeader, + const TText* aMargin, + const TUint8* aPtr, + TInt aLen + ); + }; + +#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 */ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterPanic.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 + +// 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterUids.h --- /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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp --- /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 +#include + +// 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 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp --- /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 +#include + + // 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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp --- /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; + } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp --- /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 + + // 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 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 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 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 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__ diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp --- /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 + + // User includes +#include "WhiteListAdapterPanic.h" + +// CONSTANTS + +_LIT( KWhiteListAdapterPanicString, "WhiteListAdapter" ); + +// External function(s) + +void Panic( TInt aPanic ) + { + User::Panic( KWhiteListAdapterPanicString, aPanic ); + } diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/group/PushContentHandlerClean.mk --- /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 + diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/group/PushMtmPushContentHandler.mmp --- /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 +#include + +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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/group/PushMtmWhiteListAdapter.mmp --- /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 +#include +#include +#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 diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/group/bld.inf --- /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 +#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 +